Copy disabled (too large)
Download .txt
Showing preview only (34,406K chars total). Download the full file to get everything.
Repository: axa-group/nlp.js
Branch: master
Commit: 62731109b5dc
Files: 1601
Total size: 32.5 MB
Directory structure:
gitextract_o01b_1hw/
├── .eslintignore
├── .eslintrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ └── node.js.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── docs/
│ ├── v3/
│ │ ├── NLU_evaluation.xlsx
│ │ ├── README.md
│ │ ├── bayes-nlu.md
│ │ ├── benchmarking.md
│ │ ├── binary-relevance-nlu.md
│ │ ├── brain-nlu.md
│ │ ├── builtin-duckling.md
│ │ ├── builtin-entity-extraction.md
│ │ ├── example-of-use.md
│ │ ├── example-with-languages.md
│ │ ├── installation.md
│ │ ├── language-guesser.md
│ │ ├── language-support.md
│ │ ├── loading-from-excel.md
│ │ ├── logistic-regression-nlu.md
│ │ ├── microsoft-bot-framework.md
│ │ ├── ner-manager.md
│ │ ├── nlp-manager.md
│ │ ├── nlu-manager.md
│ │ ├── sentiment-analysis.md
│ │ ├── similar-search.md
│ │ ├── slot-filling.md
│ │ └── static/
│ │ ├── BinaryNeuralNetworkClassifier.html
│ │ ├── Classifier.html
│ │ ├── ConversationContext.html
│ │ ├── DutchStemmer.html
│ │ ├── EnglishStemmer.html
│ │ ├── EnumNamedEntity.html
│ │ ├── Evaluator.html
│ │ ├── HungarianStemmer.html
│ │ ├── ItalianStemmer.html
│ │ ├── Language.html
│ │ ├── LogisticRegressionClassifier.html
│ │ ├── Matrix.html
│ │ ├── MemoryConversationContext.html
│ │ ├── NamedEntity.html
│ │ ├── NerManager.html
│ │ ├── NlgManager.html
│ │ ├── NlpClassifier.html
│ │ ├── NlpManager.html
│ │ ├── NorwegianStemmer.html
│ │ ├── PortugueseStemmer.html
│ │ ├── Recognizer.html
│ │ ├── RegexNamedEntity.html
│ │ ├── RomanianStemmer.html
│ │ ├── RussianStemmer.html
│ │ ├── SentimentAnalyzer.html
│ │ ├── SentimentManager.html
│ │ ├── SimilarSearch.html
│ │ ├── SlotManager.html
│ │ ├── StemmerJa.html
│ │ ├── SwedishStemmer.html
│ │ ├── Tokenizer.html
│ │ ├── TrimNamedEntity.html
│ │ ├── TurkishStemmer.html
│ │ ├── Vector.html
│ │ ├── XTable.html
│ │ ├── classifiers_binary-neural-network-classifier.js.html
│ │ ├── classifiers_classifier.js.html
│ │ ├── classifiers_logistic-regression-classifier.js.html
│ │ ├── global.html
│ │ ├── index.html
│ │ ├── language_language.js.html
│ │ ├── math_mathops.js.html
│ │ ├── math_matrix.js.html
│ │ ├── math_vector.js.html
│ │ ├── ner_enum-named-entity.js.html
│ │ ├── ner_named-entity.js.html
│ │ ├── ner_ner-manager.js.html
│ │ ├── ner_regex-named-entity.js.html
│ │ ├── ner_trim-named-entity.js.html
│ │ ├── nlg_nlg-manager.js.html
│ │ ├── nlp_nlp-classifier.js.html
│ │ ├── nlp_nlp-manager.js.html
│ │ ├── nlp_nlp-util.js.html
│ │ ├── nlp_stemmers_dutch-stemmer.js.html
│ │ ├── nlp_stemmers_english-stemmer.js.html
│ │ ├── nlp_stemmers_hungarian-stemmer.js.html
│ │ ├── nlp_stemmers_italian-stemmer.js.html
│ │ ├── nlp_stemmers_natural_porter-stemmer-fr.js.html
│ │ ├── nlp_stemmers_natural_porter-stemmer-pt.js.html
│ │ ├── nlp_stemmers_natural_stemmer-ja.js.html
│ │ ├── nlp_stemmers_natural_token.js.html
│ │ ├── nlp_stemmers_norwegian-stemmer.js.html
│ │ ├── nlp_stemmers_portuguese-stemmer.js.html
│ │ ├── nlp_stemmers_romanian-stemmer.js.html
│ │ ├── nlp_stemmers_russian-stemmer.js.html
│ │ ├── nlp_stemmers_swedish-stemmer.js.html
│ │ ├── nlp_stemmers_turkish-stemmer.js.html
│ │ ├── nlp_tokenizers_tokenizer.js.html
│ │ ├── recognizer_conversation-context.js.html
│ │ ├── recognizer_memory-conversation-context.js.html
│ │ ├── recognizer_recognizer.js.html
│ │ ├── scripts/
│ │ │ ├── linenumber.js
│ │ │ └── prettify/
│ │ │ ├── Apache-License-2.0.txt
│ │ │ ├── lang-css.js
│ │ │ └── prettify.js
│ │ ├── sentiment_sentiment-analyzer.js.html
│ │ ├── sentiment_sentiment-manager.js.html
│ │ ├── slot_slot-manager.js.html
│ │ ├── styles/
│ │ │ ├── jsdoc-default.css
│ │ │ ├── prettify-jsdoc.css
│ │ │ └── prettify-tomorrow.css
│ │ ├── util_evaluator.js.html
│ │ ├── util_similar-search.js.html
│ │ ├── xtables_xtable-utils.js.html
│ │ └── xtables_xtable.js.html
│ └── v4/
│ ├── console-connector.md
│ ├── core/
│ │ ├── arr-to-obj.md
│ │ ├── file-system.md
│ │ ├── logger.md
│ │ ├── normalizer.md
│ │ ├── obj-to-arr.md
│ │ ├── stopwords.md
│ │ ├── timer.md
│ │ └── uuid.md
│ ├── emoji.md
│ ├── language-support.md
│ ├── logger.md
│ ├── mini-faq.md
│ ├── ner-manager.md
│ ├── ner-quickstart.md
│ ├── neural.md
│ ├── nlp-intent-logics.md
│ ├── nlp-manager.md
│ ├── nlu.md
│ ├── qna.md
│ ├── quickstart.md
│ ├── similarity.md
│ ├── slot-filling.md
│ └── webandreact.md
├── examples/
│ ├── 01-container/
│ │ ├── README.md
│ │ ├── index.js
│ │ ├── pipelines.md
│ │ └── plugins/
│ │ ├── join.js
│ │ ├── lower.js
│ │ ├── reverse.js
│ │ ├── split.js
│ │ └── upperFirst.js
│ ├── 02-qna-classic/
│ │ ├── index.js
│ │ └── train-nlp.js
│ ├── 03-qna-pipelines/
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 04-qna-web/
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 05-qna-dual/
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 06-huge-ner/
│ │ ├── airports.json
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 07-nlpjs-on-aws-lambda/
│ │ ├── README.md
│ │ ├── nlpjs-lambda/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── events/
│ │ │ │ └── event.json
│ │ │ ├── hello-world/
│ │ │ │ ├── .npmignore
│ │ │ │ ├── app.js
│ │ │ │ ├── package.json
│ │ │ │ └── tests/
│ │ │ │ └── unit/
│ │ │ │ └── test-handler.js
│ │ │ ├── nlpjs/
│ │ │ │ ├── .npmignore
│ │ │ │ ├── app.js
│ │ │ │ ├── engine.js
│ │ │ │ └── package.json
│ │ │ └── template.yaml
│ │ └── nlpjs-lambda-with-DynamoDB/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── nlpjs/
│ │ │ ├── .npmignore
│ │ │ ├── app.js
│ │ │ ├── engine.js
│ │ │ └── package.json
│ │ ├── schema.json
│ │ └── template.yaml
│ ├── 08-neural-network/
│ │ ├── 01-basic-usage.js
│ │ ├── 02-export-import.js
│ │ ├── 03-activate-log.js
│ │ ├── 04-custom-log.js
│ │ ├── 05-change-parameters.js
│ │ ├── README.md
│ │ └── data/
│ │ └── corpus.json
│ ├── 09-logger/
│ │ ├── 01-core-logger.js
│ │ ├── 02-register-logger.js
│ │ ├── 03-logger-plugin.js
│ │ └── README.md
│ ├── 10-remove-emojis/
│ │ ├── 01-remove-emojis.js
│ │ └── README.md
│ ├── 11-console-connector/
│ │ ├── 01-console-connector.js
│ │ ├── 02-console-connector-nlp.js
│ │ ├── README.md
│ │ └── corpus.json
│ ├── 12-similarity/
│ │ ├── 01-levenshtein.js
│ │ ├── 02-similarity.js
│ │ ├── 03-spell-check.js
│ │ ├── 04-spell-check-training.js
│ │ ├── 05-levenshtein-wa.js
│ │ ├── 06-similarity-wa.js
│ │ ├── 07-spell-check-wa.js
│ │ ├── 08-spell-check-training-wa.js
│ │ ├── 09-similarity-benchmark.js
│ │ ├── README.md
│ │ └── data/
│ │ └── book.txt
│ ├── 13-languages/
│ │ ├── corpora/
│ │ │ ├── corpus-en.json
│ │ │ ├── corpus-es.json
│ │ │ ├── corpus-fr.json
│ │ │ ├── corpus-he.json
│ │ │ ├── corpus-id.json
│ │ │ └── corpus-it.json
│ │ ├── english/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ ├── 12-benchmark.js
│ │ │ └── README.md
│ │ ├── french/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ ├── 12-benchmark.js
│ │ │ └── README.md
│ │ ├── hebrew/
│ │ │ └── 12-benchmark.js
│ │ ├── indonesian/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ └── 12-benchmark.js
│ │ ├── italian/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ ├── 12-benchmark.js
│ │ │ └── README.md
│ │ ├── measure-corpus.js
│ │ └── spanish/
│ │ ├── 01-normalization.js
│ │ ├── 02-tokenization.js
│ │ ├── 03-tokenization-normalized.js
│ │ ├── 04-stopword-identify.js
│ │ ├── 05-stopword-remove.js
│ │ ├── 06-stopword-dictionary.js
│ │ ├── 07-stem-word.js
│ │ ├── 08-stem-array.js
│ │ ├── 09-tokenize-and-stem.js
│ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ ├── 11-sentiment-analysis.js
│ │ ├── 12-benchmark.js
│ │ └── README.md
│ ├── 14-ner-corpus/
│ │ ├── README.md
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── heros.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 15-nlu/
│ │ ├── 01-neural-nlu.js
│ │ ├── 02-brain-nlu.js
│ │ ├── 03-domain-manager.js
│ │ ├── 04-domain-manager-by-domain.js
│ │ ├── 05-nlu-manager.js
│ │ ├── 06-nlu-manager-by-domain.js
│ │ ├── README.md
│ │ └── corpus50.json
│ ├── 16-fb-connector/
│ │ ├── .gitignore
│ │ ├── Procfile
│ │ ├── README.md
│ │ ├── conf.json
│ │ ├── corpus-en.json
│ │ ├── flows/
│ │ │ └── script.dlg
│ │ ├── index.js
│ │ ├── nlpjs-custom/
│ │ │ └── express-api-server/
│ │ │ ├── express-api-app.js
│ │ │ ├── express-api-server.js
│ │ │ └── index.js
│ │ ├── package.json
│ │ └── pipelines.md
│ ├── 17-ner-nlg/
│ │ ├── index.js
│ │ └── package.json
│ ├── 18-ner-builtin-ms/
│ │ ├── index.js
│ │ └── package.json
│ ├── 19-ner-trim-entities/
│ │ ├── index.js
│ │ └── package.json
│ ├── 80-bert-server/
│ │ ├── README.md
│ │ ├── app.py
│ │ ├── corpus-en.json
│ │ ├── corpus-es.json
│ │ ├── index.js
│ │ ├── requirements.txt
│ │ ├── vocab-en.txt
│ │ └── vocab-multi.txt
│ ├── 81-bert-qna/
│ │ ├── README.md
│ │ ├── app.py
│ │ ├── conf.json
│ │ ├── index.js
│ │ ├── pipelines.md
│ │ └── requirements.txt
│ └── 90-benchmark/
│ ├── corpus-en.json
│ ├── corpus-es.json
│ └── index.js
├── greenkeeper.json
├── lerna.json
├── package.json
└── packages/
├── api-auth-jwt/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── api-auth-jwt.js
│ │ ├── configure-passport.js
│ │ ├── default-settings.js
│ │ ├── ensure-authenticated.js
│ │ ├── index.js
│ │ └── user.router.js
│ └── test/
│ ├── api-auth-jwt.test.js
│ ├── api-server-mock.js
│ ├── default-settings.test.js
│ ├── res-mock.js
│ └── router-mock.js
├── basic/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ └── index.js
│ └── test/
│ └── basic.test.js
├── bert-open-question/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── bert-open-question.js
│ └── index.js
├── bert-tokenizer/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── dicts/
│ │ ├── vocab-en.txt
│ │ └── vocab-multi.txt
│ ├── package.json
│ ├── src/
│ │ ├── bert-word-piece-tokenizer.js
│ │ ├── index.js
│ │ └── multi-bert-word-piece-tokenizer.js
│ └── test/
│ ├── bert-word-piece-tokenizer.test.js
│ └── multi-bert-word-piece-tokenizer.test.js
├── bot/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── bot-localization.js
│ │ ├── bot.js
│ │ ├── dialog-manager.js
│ │ ├── dialog-parse.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── test-connector.js
│ │ └── validators.js
│ └── test/
│ ├── bot.test.js
│ ├── dialog-parse.test.js
│ ├── helper.test.js
│ ├── mock-template.js
│ ├── scenario01.dlt
│ ├── scenario02.dlt
│ ├── scenario05-01.dlt
│ ├── scenario05-02.dlt
│ ├── script1.dlg
│ ├── script2.dlg
│ ├── script3.dlg
│ ├── script4.dlg
│ ├── script5.dlg
│ └── validators.test.js
├── builtin-compromise/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-compromise.js
│ │ └── index.js
│ └── test/
│ └── compromise.test.js
├── builtin-default/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-default.js
│ │ ├── common-regex.js
│ │ ├── index.js
│ │ └── recognizers.js
│ └── test/
│ └── builtin-default.test.js
├── builtin-duckling/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-duckling.js
│ │ └── index.js
│ └── test/
│ └── duckling.test.js
├── builtin-microsoft/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-dictionary.json
│ │ ├── builtin-inverse.json
│ │ ├── builtin-microsoft.js
│ │ └── index.js
│ └── test/
│ ├── builtin-microsoft.test.js
│ ├── date.json
│ ├── number-age.json
│ ├── number-currency.json
│ ├── number-dimension.json
│ ├── number-ordinal.json
│ ├── number-percent.json
│ ├── number.json
│ └── sequence.json
├── connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── connector.js
│ │ ├── index.js
│ │ └── session.js
│ └── test/
│ └── connector.test.js
├── console-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── console-connector.js
│ │ └── index.js
│ └── test/
│ └── console-connector.test.js
├── core/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── among.js
│ │ ├── arr-to-obj.js
│ │ ├── base-stemmer.js
│ │ ├── clonable.js
│ │ ├── container-bootstrap.js
│ │ ├── container.js
│ │ ├── context.js
│ │ ├── default-compiler.js
│ │ ├── dock.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── logger.js
│ │ ├── memory-storage.js
│ │ ├── mock-fs.js
│ │ ├── normalizer.js
│ │ ├── obj-to-arr.js
│ │ ├── stemmer.js
│ │ ├── stopwords.js
│ │ ├── timer.js
│ │ ├── tokenizer.js
│ │ └── uuid.js
│ └── test/
│ ├── arr-to-obj.test.js
│ ├── assets/
│ │ ├── char.js
│ │ ├── cloned.js
│ │ └── lower.js
│ ├── clonable.test.js
│ ├── container.test.js
│ ├── logger.test.js
│ ├── mock-fs.test.js
│ ├── normalizer.test.js
│ ├── obj-to-arr.test.js
│ ├── stopwords.test.js
│ ├── timer.test.js
│ └── uuid.test.js
├── core-loader/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── container-bootstrap.js
│ │ ├── dock.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ └── plugin-information.json
│ └── test/
│ ├── assets/
│ │ ├── char.js
│ │ ├── cloned.js
│ │ └── lower.js
│ ├── clonable.test.js
│ └── container.test.js
├── database/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── collection.js
│ │ ├── database.js
│ │ ├── index.js
│ │ └── memory-adapter.js
│ └── test/
│ ├── collection.test.js
│ ├── database.test.js
│ ├── fs.js
│ └── memory-adapter.test.js
├── dialogflow-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── dialogflow-connector.js
│ └── index.js
├── directline-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── directline-connector.js
│ ├── directline-controller.js
│ └── index.js
├── emoji/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── emoji.js
│ │ ├── emoji.json
│ │ └── index.js
│ └── test/
│ └── emoji.test.js
├── evaluator/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── compile.js
│ │ ├── evaluator.js
│ │ ├── index.js
│ │ ├── javascript-compiler.js
│ │ └── template.js
│ └── test/
│ ├── compile.test.js
│ ├── evaluator.test.js
│ └── javascript-compiler.test.js
├── express-api-server/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── express-api-app.js
│ │ ├── express-api-server.js
│ │ ├── index.js
│ │ └── public/
│ │ ├── botchat.css
│ │ ├── botchat.js
│ │ ├── index.html
│ │ └── main.js
│ └── test/
│ ├── express-api-app.test.js
│ └── express-api-server.test.js
├── express-api-serverless/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── express-api-serverless.js
│ └── index.js
├── fb-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── fb-connector.js
│ ├── index.js
│ └── settings.js
├── fullbot/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── fullbot.js
│ │ ├── index.js
│ │ └── utils.js
│ └── test/
│ ├── fullbot.test.js
│ └── script.dlg
├── lang-all/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-all.js
│ │ └── lang-functions.js
│ └── test/
│ └── lang-all.test.js
├── lang-ar/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ar.js
│ │ ├── normalizer-ar.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ar.json
│ │ │ ├── negations_ar.json
│ │ │ └── sentiment_ar.js
│ │ ├── stemmer-ar.js
│ │ ├── stopwords-ar.js
│ │ ├── tokenizer-ar.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ar.test.js
├── lang-bert/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-bert.js
│ │ ├── normalizer-bert.js
│ │ ├── sentiment/
│ │ │ ├── negations_bert.json
│ │ │ └── sentiment_bert.js
│ │ ├── stemmer-bert.js
│ │ ├── stopwords-bert.js
│ │ └── tokenizer-bert.js
│ └── test/
│ ├── normalizer-bert.test.js
│ ├── request-mock.js
│ ├── stemmer-bert.test.js
│ ├── stopwords-bert.test.js
│ └── tokenizer-bert.test.js
├── lang-bn/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-bn.js
│ │ ├── normalizer-bn.js
│ │ ├── sentiment/
│ │ │ ├── afinn_bn.json
│ │ │ ├── negations_bn.json
│ │ │ └── sentiment_bn.js
│ │ ├── stemmer-bn.js
│ │ ├── stopwords-bn.js
│ │ └── tokenizer-bn.js
│ └── test/
│ ├── lang-bn.test.js
│ └── tokenizer-bn.test.js
├── lang-ca/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ca.js
│ │ ├── normalizer-ca.js
│ │ ├── sentiment/
│ │ │ ├── negations_ca.json
│ │ │ ├── senticon_ca.json
│ │ │ └── sentiment_ca.js
│ │ ├── stemmer-ca.js
│ │ ├── stopwords-ca.js
│ │ ├── tokenizer-ca.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ca.test.js
├── lang-cs/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-cs.js
│ │ ├── normalizer-cs.js
│ │ ├── sentiment/
│ │ │ ├── afinn_cs.json
│ │ │ ├── negations_cs.json
│ │ │ └── sentiment_cs.js
│ │ ├── stemmer-cs.js
│ │ ├── stopwords-cs.js
│ │ ├── tokenizer-cs.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-cs.test.js
├── lang-da/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-da.js
│ │ ├── normalizer-da.js
│ │ ├── sentiment/
│ │ │ ├── afinn_da.json
│ │ │ ├── negations_da.json
│ │ │ └── sentiment_da.js
│ │ ├── stemmer-da.js
│ │ ├── stopwords-da.js
│ │ ├── tokenizer-da.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ca.test.js
├── lang-de/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-de.js
│ │ ├── normalizer-de.js
│ │ ├── sentiment/
│ │ │ ├── negations_de.json
│ │ │ ├── senticon_de.json
│ │ │ └── sentiment_de.js
│ │ ├── stemmer-de.js
│ │ ├── stopwords-de.js
│ │ ├── tokenizer-de.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-de.test.js
├── lang-el/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-el.js
│ │ ├── normalizer-el.js
│ │ ├── sentiment/
│ │ │ ├── afinn_el.json
│ │ │ ├── negations_el.json
│ │ │ └── sentiment_el.js
│ │ ├── stemmer-el.js
│ │ ├── stopwords-el.js
│ │ └── tokenizer-el.js
│ └── test/
│ └── lang-el.test.js
├── lang-en/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-en.js
│ │ └── sentiment/
│ │ ├── negations_en.json
│ │ ├── senticon_en.json
│ │ └── sentiment_en.js
│ └── test/
│ ├── lang-en.test.js
│ └── stemmer-en.test.js
├── lang-en-min/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-en.js
│ │ ├── normalizer-en.js
│ │ ├── sentiment/
│ │ │ └── sentiment_en.js
│ │ ├── stemmer-en.js
│ │ ├── stopwords-en.js
│ │ ├── tokenizer-en.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-en.test.js
│ ├── stemmer-en.test.js
│ └── tokenizer-en.test.js
├── lang-es/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── dictionary-es.json
│ │ ├── index.js
│ │ ├── lang-es.js
│ │ ├── normalizer-es.js
│ │ ├── sentiment/
│ │ │ ├── afinn_es.json
│ │ │ ├── negations_es.json
│ │ │ ├── senticon_es.json
│ │ │ └── sentiment_es.js
│ │ ├── stemmer-es.js
│ │ ├── stopwords-es.js
│ │ ├── tokenizer-es.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-es.test.js
│ └── stemmer-es.test.js
├── lang-eu/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-eu.js
│ │ ├── normalizer-eu.js
│ │ ├── sentiment/
│ │ │ ├── negations_eu.json
│ │ │ ├── senticon_eu.json
│ │ │ └── sentiment_eu.js
│ │ ├── stemmer-eu.js
│ │ ├── stopwords-eu.js
│ │ └── tokenizer-eu.js
│ └── test/
│ └── lang-eu.test.js
├── lang-fa/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-fa.js
│ │ ├── normalizer-fa.js
│ │ ├── sentiment/
│ │ │ ├── afinn_fa.json
│ │ │ ├── negations_fa.json
│ │ │ └── sentiment_fa.js
│ │ ├── stemmer-fa.js
│ │ ├── stopwords-fa.js
│ │ ├── tokenizer-fa.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-fa.test.js
├── lang-fi/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-fi.js
│ │ ├── normalizer-fi.js
│ │ ├── sentiment/
│ │ │ ├── afinn_fi.json
│ │ │ ├── negations_fi.json
│ │ │ └── sentiment_fi.js
│ │ ├── stemmer-fi.js
│ │ ├── stopwords-fi.js
│ │ ├── tokenizer-fi.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-fi.test.js
├── lang-fr/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-fr.js
│ │ ├── normalizer-fr.js
│ │ ├── sentiment/
│ │ │ ├── negations_fr.json
│ │ │ ├── pattern_fr.json
│ │ │ └── sentiment_fr.js
│ │ ├── stemmer-fr.js
│ │ ├── stopwords-fr.js
│ │ ├── tokenizer-fr.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-fr.test.js
│ └── tokenizer-fr.test.js
├── lang-ga/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ga.js
│ │ ├── normalizer-ga.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ga.json
│ │ │ ├── negations_ga.json
│ │ │ └── sentiment_ga.js
│ │ ├── stemmer-ga.js
│ │ ├── stopwords-ga.js
│ │ └── tokenizer-ga.js
│ └── test/
│ └── lang-ga.test.js
├── lang-gl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-gl.js
│ │ ├── normalizer-gl.js
│ │ ├── sentiment/
│ │ │ ├── negations_gl.json
│ │ │ ├── senticon_gl.json
│ │ │ └── sentiment_gl.js
│ │ ├── stemmer-gl.js
│ │ ├── stopwords-gl.js
│ │ ├── tokenizer-gl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-gl.test.js
├── lang-hi/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-hi.js
│ │ ├── normalizer-hi.js
│ │ ├── sentiment/
│ │ │ ├── afinn_hi.json
│ │ │ ├── negations_hi.json
│ │ │ └── sentiment_hi.js
│ │ ├── stemmer-hi.js
│ │ ├── stopwords-hi.js
│ │ ├── tokenizer-hi.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-hi.test.js
├── lang-hu/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-hu.js
│ │ ├── normalizer-hu.js
│ │ ├── sentiment/
│ │ │ ├── afinn_hu.json
│ │ │ ├── negations_hu.json
│ │ │ └── sentiment_hu.js
│ │ ├── stemmer-hu.js
│ │ ├── stopwords-hu.js
│ │ ├── tokenizer-hu.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-hu.test.js
├── lang-hy/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-hy.js
│ │ ├── normalizer-hy.js
│ │ ├── sentiment/
│ │ │ ├── afinn_hy.json
│ │ │ ├── negations_hy.json
│ │ │ └── sentiment_hy.js
│ │ ├── stemmer-hy.js
│ │ ├── stopwords-hy.js
│ │ └── tokenizer-hy.js
│ └── test/
│ └── lang-hy.test.js
├── lang-id/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── indonesian-stemmer.js
│ │ ├── lang-id.js
│ │ ├── normalizer-id.js
│ │ ├── sentiment/
│ │ │ ├── afinn_id.json
│ │ │ ├── negations_id.json
│ │ │ └── sentiment_id.js
│ │ ├── stemmer-id.js
│ │ ├── stopwords-id.js
│ │ ├── tokenizer-id.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-id.test.js
│ └── stemmer-id.test.js
├── lang-it/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-it.js
│ │ ├── normalizer-it.js
│ │ ├── sentiment/
│ │ │ ├── negations_it.json
│ │ │ ├── pattern_it.json
│ │ │ └── sentiment_it.js
│ │ ├── stemmer-it.js
│ │ ├── stopwords-it.js
│ │ ├── tokenizer-it.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-it.test.js
├── lang-ja/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── helper.js
│ │ ├── hepburn.json
│ │ ├── index.js
│ │ ├── japanese-rules.json
│ │ ├── keigo.json
│ │ ├── lang-ja.js
│ │ ├── normalizer-ja.js
│ │ ├── sentiment/
│ │ │ ├── negations_ja.json
│ │ │ └── sentiment_ja.js
│ │ ├── stemmer-ja.js
│ │ ├── stopwords-ja.js
│ │ └── tokenizer-ja.js
│ └── test/
│ ├── lang-ja.test.js
│ └── tokenizer-ja.test.js
├── lang-ko/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── chunk-match.js
│ │ ├── dict.json
│ │ ├── hangul.js
│ │ ├── index.js
│ │ ├── korean-chunker.js
│ │ ├── korean-conjugation.js
│ │ ├── korean-dictionary.js
│ │ ├── korean-pos.js
│ │ ├── korean-substantive.js
│ │ ├── korean-token.js
│ │ ├── korean-tokenizer.js
│ │ ├── lang-ko.js
│ │ ├── names-dict.json
│ │ ├── normalizer-ko.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ko.json
│ │ │ ├── negations_ko.json
│ │ │ └── sentiment_ko.js
│ │ ├── stemmer-ko.js
│ │ ├── stopwords-ko.js
│ │ └── tokenizer-ko.js
│ └── test/
│ ├── lang-ko.test.js
│ └── stemmer-ko.test.js
├── lang-lt/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-lt.js
│ │ ├── normalizer-lt.js
│ │ ├── sentiment/
│ │ │ ├── afinn_lt.json
│ │ │ ├── negations_lt.json
│ │ │ └── sentiment_lt.js
│ │ ├── stemmer-lt.js
│ │ ├── stopwords-lt.js
│ │ └── tokenizer-lt.js
│ └── test/
│ └── lang-lt.test.js
├── lang-ms/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ms.js
│ │ ├── normalizer-ms.js
│ │ ├── sentiment/
│ │ │ └── sentiment_ms.js
│ │ ├── stemmer-ms.js
│ │ ├── stopwords-ms.js
│ │ └── tokenizer-ms.js
│ └── test/
│ ├── lang-ms.test.js
│ └── stemmer-ms.test.js
├── lang-ne/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ne.js
│ │ ├── normalizer-ne.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ne.json
│ │ │ ├── negations_ne.json
│ │ │ └── sentiment_ne.js
│ │ ├── stemmer-ne.js
│ │ ├── stopwords-ne.js
│ │ └── tokenizer-ne.js
│ └── test/
│ └── lang-lt.test.js
├── lang-nl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-nl.js
│ │ ├── normalizer-nl.js
│ │ ├── sentiment/
│ │ │ ├── negations_nl.json
│ │ │ ├── pattern_nl.json
│ │ │ └── sentiment_nl.js
│ │ ├── stemmer-nl.js
│ │ ├── stopwords-nl.js
│ │ ├── tokenizer-nl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-nl.test.js
├── lang-no/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-no.js
│ │ ├── normalizer-no.js
│ │ ├── sentiment/
│ │ │ ├── afinn_no.json
│ │ │ ├── negations_no.json
│ │ │ └── sentiment_no.js
│ │ ├── stemmer-no.js
│ │ ├── stopwords-no.js
│ │ └── tokenizer-no.js
│ └── test/
│ └── lang-no.test.js
├── lang-pl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-pl.js
│ │ ├── normalizer-pl.js
│ │ ├── sentiment/
│ │ │ ├── afinn_pl.json
│ │ │ ├── negations_pl.json
│ │ │ └── sentiment_pl.js
│ │ ├── stemmer-pl.js
│ │ ├── stopwords-pl.js
│ │ ├── tokenizer-pl.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-pl.test.js
│ └── stemmer-pl.test.js
├── lang-pt/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-pt.js
│ │ ├── normalizer-pt.js
│ │ ├── sentiment/
│ │ │ ├── afinn_pt.json
│ │ │ ├── negations_pt.json
│ │ │ └── sentiment_pt.js
│ │ ├── stemmer-pt.js
│ │ ├── stopwords-pt.js
│ │ ├── tokenizer-pt.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-pt.test.js
│ ├── stemmer-pt.test.js
│ └── tokenizer-pt.test.js
├── lang-ro/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ro.js
│ │ ├── normalizer-ro.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ro.json
│ │ │ ├── negations_ro.json
│ │ │ └── sentiment_ro.js
│ │ ├── stemmer-ro.js
│ │ ├── stopwords-ro.js
│ │ └── tokenizer-ro.js
│ └── test/
│ └── lang-ro.test.js
├── lang-ru/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ru.js
│ │ ├── normalizer-ru.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ru.json
│ │ │ ├── negations_ru.json
│ │ │ └── sentiment_ru.js
│ │ ├── stemmer-ru.js
│ │ ├── stopwords-ru.js
│ │ ├── tokenizer-ru.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ru.test.js
├── lang-sl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-sl.js
│ │ ├── normalizer-sl.js
│ │ ├── sentiment/
│ │ │ ├── afinn_sl.json
│ │ │ ├── negations_sl.json
│ │ │ └── sentiment_sl.js
│ │ ├── stemmer-sl.js
│ │ ├── stopwords-sl.js
│ │ ├── tokenizer-sl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-sl.test.js
├── lang-sr/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-sr.js
│ │ ├── normalizer-sr.js
│ │ ├── sentiment/
│ │ │ ├── afinn_sr.json
│ │ │ ├── negations_sr.json
│ │ │ └── sentiment_sr.js
│ │ ├── stemmer-sr.js
│ │ ├── stopwords-sr.js
│ │ └── tokenizer-sr.js
│ └── test/
│ └── lang-sr.test.js
├── lang-sv/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-sv.js
│ │ ├── normalizer-sv.js
│ │ ├── sentiment/
│ │ │ ├── afinn_sv.json
│ │ │ ├── negations_sv.json
│ │ │ └── sentiment_sv.js
│ │ ├── stemmer-sv.js
│ │ ├── stopwords-sv.js
│ │ ├── tokenizer-sv.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-sv.test.js
├── lang-ta/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ta.js
│ │ ├── normalizer-ta.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ta.json
│ │ │ ├── negations_ta.json
│ │ │ └── sentiment_ta.js
│ │ ├── stemmer-ta.js
│ │ ├── stopwords-ta.js
│ │ └── tokenizer-ta.js
│ └── test/
│ └── lang-ta.test.js
├── lang-th/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-th.js
│ │ ├── normalizer-th.js
│ │ ├── sentiment/
│ │ │ ├── afinn_th.json
│ │ │ ├── negations_th.json
│ │ │ └── sentiment_th.js
│ │ ├── stemmer-th.js
│ │ ├── stopwords-th.js
│ │ ├── thai-aspects.json
│ │ └── tokenizer-th.js
│ └── test/
│ └── lang-th.test.js
├── lang-tl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-tl.js
│ │ ├── normalizer-tl.js
│ │ ├── sentiment/
│ │ │ ├── afinn_tl.json
│ │ │ ├── negations_tl.json
│ │ │ └── sentiment_tl.js
│ │ ├── stemmer-tl.js
│ │ ├── stopwords-tl.js
│ │ ├── tokenizer-tl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-tl.test.js
├── lang-tr/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-tr.js
│ │ ├── normalizer-tr.js
│ │ ├── sentiment/
│ │ │ ├── afinn_tr.json
│ │ │ ├── negations_tr.json
│ │ │ └── sentiment_tr.js
│ │ ├── stemmer-tr.js
│ │ ├── stopwords-tr.js
│ │ ├── tokenizer-tr.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-tr.test.js
│ └── stemmer-tr.test.js
├── lang-uk/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-uk.js
│ │ ├── normalizer-uk.js
│ │ ├── sentiment/
│ │ │ ├── afinn_uk.json
│ │ │ ├── negations_uk.json
│ │ │ └── sentiment_uk.js
│ │ ├── stemmer-uk.js
│ │ ├── stopwords-uk.js
│ │ ├── tokenizer-uk.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-uk.test.js
│ └── stemmer-uk.test.js
├── lang-zh/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── cedict_ts.u8.js
│ │ ├── dictionary.js
│ │ ├── dictionary.json
│ │ ├── index.js
│ │ ├── lang-zh.js
│ │ ├── normalizer-zh.js
│ │ ├── sentiment/
│ │ │ ├── negations_zh.json
│ │ │ └── sentiment_zh.js
│ │ ├── stemmer-zh.js
│ │ ├── stopwords-zh.js
│ │ ├── tokenizer-zh.js
│ │ └── translate-zh.js
│ └── test/
│ ├── lang-zh.test.js
│ └── translate-zh.test.js
├── language/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── data.json
│ │ ├── index.js
│ │ ├── language.js
│ │ └── languages.json
│ └── test/
│ ├── fixtures.json
│ └── language.test.js
├── language-min/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── data.json
│ │ ├── index.js
│ │ ├── language.js
│ │ └── languages.json
│ └── test/
│ ├── fixtures.json
│ ├── language.test.js
│ └── testdata.json
├── lexer/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lexer.js
│ │ └── token.js
│ └── test/
│ └── lexer.test.js
├── logger/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── logger.js
│ └── test/
│ └── logger.test.js
├── mongodb-adapter/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── mongodb-adapter.js
│ └── test/
│ ├── collection-mock.js
│ ├── mongodb-adapter.test.js
│ └── mongodb-mock.js
├── msbf-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── get-msbf-token.js
│ ├── index.js
│ └── msbf-connector.js
├── ner/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── extractor-builtin.js
│ │ ├── extractor-enum.js
│ │ ├── extractor-regex.js
│ │ ├── extractor-trim.js
│ │ ├── index.js
│ │ ├── ner.js
│ │ ├── reduce-edges.js
│ │ └── trim-types.js
│ └── test/
│ ├── extractor-enum.test.js
│ ├── extractor-regex.test.js
│ ├── extractor-trim.test.js
│ ├── ner.test.js
│ └── reduce-edges.test.js
├── neural/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── corpus-lookup.js
│ │ ├── index.js
│ │ ├── lookup.js
│ │ └── neural-network.js
│ └── test/
│ ├── corpus.json
│ └── neural-network.test.js
├── neural-worker/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── default-settings.json
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── neural-network.js
│ │ └── worker.js
│ └── test/
│ ├── corpus.json
│ └── neural-network.test.js
├── nlg/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── action-manager.js
│ │ ├── index.js
│ │ └── nlg-manager.js
│ └── test/
│ ├── action-manager.test.js
│ ├── bootstrap.js
│ └── nlg-manager.test.js
├── nlp/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── context-manager.js
│ │ ├── index.js
│ │ └── nlp.js
│ └── test/
│ ├── context-manager.test.js
│ ├── nlp.test.js
│ └── template-mock.js
├── nlu/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── domain-manager.js
│ │ ├── index.js
│ │ ├── nlu-manager.js
│ │ ├── nlu-neural.js
│ │ ├── nlu.js
│ │ └── none-languages.js
│ └── test/
│ ├── bootstrap.js
│ ├── corpus50.json
│ ├── domain-manager.test.js
│ ├── domains.js
│ ├── nlu-manager.test.js
│ ├── nlu-neural.test.js
│ └── nlu.test.js
├── nlu-luis/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── index.js
│ └── nlu-luis.js
├── node-nlp/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── classifiers/
│ │ │ └── index.js
│ │ ├── index.js
│ │ ├── language/
│ │ │ └── index.js
│ │ ├── nlg/
│ │ │ ├── index.js
│ │ │ └── nlg-manager.js
│ │ ├── nlp/
│ │ │ ├── index.js
│ │ │ ├── nlp-excel-reader.js
│ │ │ ├── nlp-manager.js
│ │ │ └── nlp-util.js
│ │ ├── nlu/
│ │ │ ├── brain-nlu.js
│ │ │ └── index.js
│ │ ├── recognizer/
│ │ │ ├── conversation-context.js
│ │ │ ├── index.js
│ │ │ ├── memory-conversation-context.js
│ │ │ └── recognizer.js
│ │ ├── sentiment/
│ │ │ ├── index.js
│ │ │ ├── sentiment-analyzer.js
│ │ │ └── sentiment-manager.js
│ │ ├── util/
│ │ │ ├── handlebars.js
│ │ │ ├── index.js
│ │ │ └── spell-check.js
│ │ └── xtables/
│ │ └── index.js
│ └── test/
│ ├── classifiers/
│ │ └── neural-network.test.js
│ ├── language/
│ │ └── language.test.js
│ ├── nlg/
│ │ ├── action-manager.test.js
│ │ └── nlg-manager.test.js
│ ├── nlp/
│ │ ├── corpus-en.json
│ │ ├── nlp-excel-reader.test.js
│ │ ├── nlp-manager.test.js
│ │ ├── nlp-util.test.js
│ │ ├── rules.xls
│ │ ├── rulesnoregex.xls
│ │ ├── stemmers/
│ │ │ ├── bengali-stemmer.test.js
│ │ │ ├── galician-stemmer.test.js
│ │ │ ├── greek-stemmer.test.js
│ │ │ ├── spanish-stemmer.test.js
│ │ │ ├── tagalog-stemmer.test.js
│ │ │ └── ukrainian-stemmer.test.js
│ │ └── tokenizers/
│ │ ├── aggresive-tokenizer-bn.test.js
│ │ ├── aggressive-tokenizer-en.test.js
│ │ ├── aggressive-tokenizer-es.test.js
│ │ ├── aggressive-tokenizer-fa.test.js
│ │ ├── aggressive-tokenizer-fr.test.js
│ │ ├── aggressive-tokenizer-id.test.js
│ │ ├── aggressive-tokenizer-it.test.js
│ │ ├── aggressive-tokenizer-nl.test.js
│ │ ├── aggressive-tokenizer-no.test.js
│ │ ├── aggressive-tokenizer-pl.test.js
│ │ ├── aggressive-tokenizer-pt.test.js
│ │ ├── aggressive-tokenizer-ru.test.js
│ │ ├── aggressive-tokenizer-sv.test.js
│ │ └── tokenizer-ja.test.js
│ ├── nlu/
│ │ └── brain-nlu.test.js
│ ├── recognizer/
│ │ ├── conversation-context.test.js
│ │ └── memory-conversation-context.test.js
│ ├── sentiment/
│ │ ├── sentiment-analyzer.test.js
│ │ └── sentiment-manager.test.js
│ ├── util/
│ │ ├── emoji.test.js
│ │ ├── evaluator.test.js
│ │ ├── handlebars.test.js
│ │ ├── similar_search.test.js.no
│ │ └── spell-check.test.js
│ └── xtables/
│ ├── book1.json
│ ├── book1.xlsx
│ ├── matrix1.json
│ ├── xdoc.test.js
│ ├── xtable-utils.test.js
│ └── xtable.test.js
├── open-question/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── bert-tokenizer.js
│ │ ├── constants.js
│ │ ├── index.js
│ │ ├── model-downloader.js
│ │ ├── model.js
│ │ ├── qa-client.js
│ │ ├── runtime-thread.js
│ │ ├── runtime-worker.js
│ │ └── runtime.js
│ └── test/
│ ├── .models/
│ │ └── henryk/
│ │ └── bert-base-multilingual-cased-finetuned-dutch-squad2/
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ └── vocab.txt
│ ├── bert-tokenizer.test.js
│ ├── model-downloader.test.js
│ ├── model.test.js
│ ├── qa-client.test.js
│ └── runtime.test.js
├── python-compiler/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── expressions/
│ │ │ ├── assert-command.js
│ │ │ ├── assignment-command.js
│ │ │ ├── binary-expression.js
│ │ │ ├── break-command.js
│ │ │ ├── call-expression.js
│ │ │ ├── class-command.js
│ │ │ ├── composite-command.js
│ │ │ ├── constant-expression.js
│ │ │ ├── continue-command.js
│ │ │ ├── def-command.js
│ │ │ ├── dictionary-expression.js
│ │ │ ├── dotted-expression.js
│ │ │ ├── expression-command.js
│ │ │ ├── expression.js
│ │ │ ├── for-in-command.js
│ │ │ ├── global-variable-command.js
│ │ │ ├── group-expression.js
│ │ │ ├── if-command.js
│ │ │ ├── import-command.js
│ │ │ ├── index-expression.js
│ │ │ ├── index.js
│ │ │ ├── list-expression.js
│ │ │ ├── minus-expression.js
│ │ │ ├── new-expression.js
│ │ │ ├── pass-command.js
│ │ │ ├── raise-command.js
│ │ │ ├── return-command.js
│ │ │ ├── string-expression.js
│ │ │ ├── variable-expression.js
│ │ │ └── while-command.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── python-compiler.js
│ │ ├── python-executer.js
│ │ └── python-parser.js
│ └── test/
│ ├── python-compiler.test.js
│ └── python-parser.test.js
├── qna-importer/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── qna-importer.js
│ └── test/
│ ├── qna-importer.test.js
│ └── qna.tsv
├── request/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── fs.js
│ │ ├── index.js
│ │ └── request.js
│ └── test/
│ ├── file.txt
│ └── fs.test.js
├── request-rn/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── fs.js
│ ├── index.js
│ └── request.js
├── rest-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── index.js
│ └── rest-connector.js
├── sentiment/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── sentiment-analyzer.js
│ └── test/
│ ├── bootstrap.js
│ └── sentiment-analyzer.test.js
├── similarity/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── cosine-similarity.js
│ │ ├── index.js
│ │ ├── leven.js
│ │ ├── similarity.js
│ │ └── spell-check.js
│ └── test/
│ ├── cosine-similarity.test.js
│ ├── leven.test.js
│ ├── similarity.test.js
│ └── spell-check.test.js
├── similarity-wa/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── cosine-similarity.js
│ │ ├── index.js
│ │ ├── leven.js
│ │ ├── similarity.js
│ │ └── spell-check.js
│ ├── test/
│ │ ├── cosine-similarity.test.js
│ │ ├── leven.test.js
│ │ ├── similarity.test.js
│ │ └── spell-check.test.js
│ └── wa/
│ ├── cosine-similarity.wasm
│ ├── cosine-similarity.wat
│ ├── leven.wasm
│ └── leven.wat
├── slot/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── slot-manager.js
│ └── test/
│ └── slot-manager.test.js
├── utils/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── base-fn.js
│ │ ├── bench.js
│ │ ├── corpus-lookup.js
│ │ ├── downloader.js
│ │ ├── fs-extra.js
│ │ ├── index.js
│ │ ├── is-gibberish.js
│ │ ├── lookup.js
│ │ ├── markov.js
│ │ ├── ngrams.js
│ │ ├── nlp-analyzer.js
│ │ ├── pattern.js
│ │ ├── progress-bar.js
│ │ ├── softmax.js
│ │ └── tfidf.js
│ └── test/
│ ├── bench.test.js
│ ├── corpus-composed.json
│ ├── corpus-lookup.test.js
│ ├── corpus-pattern.json
│ ├── downloader.test.js
│ ├── fs-extra.test.js
│ ├── gibberish.test.js
│ ├── lookup.test.js
│ ├── markov.test.js
│ ├── ngrams.test.js
│ ├── nlp-analyzer.test.js
│ ├── pattern.test.js
│ ├── progress-bar.test.js
│ ├── softmax.test.js
│ └── tfidf.test.js
└── xtables/
├── .npmignore
├── LICENSE.md
├── package.json
├── src/
│ ├── index.js
│ ├── xdoc.js
│ ├── xtable-utils.js
│ └── xtable.js
└── test/
├── book1.json
├── book1.xlsx
├── matrix1.json
├── xdoc.test.js
├── xtable-utils.test.js
└── xtable.test.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .eslintignore
================================================
lib/**/*.json
lib/nlp/stemmers/**/*.js
coverage/**
toto.js
node_modules
dist
docs/v3/static/scripts
packages/python-compiler/src/python-executer.js
packages/express-api-server/src/public/**/*.*
examples/16-fb-connector/**/*.*
================================================
FILE: .eslintrc
================================================
{
"extends": ["airbnb-base", "plugin:jest/recommended", "prettier"],
"plugins": ["import", "jest", "prettier"],
"rules": {
"no-param-reassign": 0,
"class-methods-use-this": 0,
"no-misleading-character-class": 0,
"prettier/prettier": [
"error",
{
"singleQuote": true,
"trailingComma": "es5"
}
],
"no-restricted-syntax": 0,
"no-await-in-loop": "off"
},
"overrides": [
{
"files": ["examples/**/*.js"],
"rules": {
"no-console": "off"
}
}
],
"env": {
"node": true,
"jest/globals": true
}
}
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. macOS, ubuntu, windows]
- Browser [e.g. chrome, safari]
- Package version [e.g. 22]
- Node version [e.g. 12]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
# Issue Template
<!---
BEFORE YOU SUBMIT please search open/closed issues before submitting,
since someone might have asked the same thing before.
-->
## Summary
<!--- Provide a general summary of the issue in the title above -->
## Simplest Example to Reproduce
<!--- If describing a bug, tell us what request options we can use to reproduce the same bug/behavior -->
## Expected Behavior
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
<!--- If request is handling requests/responses incorrectly, please include a link to the spec or documentation that supports that your expected behavior is correct. -->
## Current Behavior
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change -->
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in -->
| Software | Version |
|----------------------|---------|
| `nlp.js` | |
| `node` | |
| `npm` | |
| Operating System | |
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
# Pull Request Template
## PR Checklist
- [ ] I have run `npm test` locally and all tests are passing.
- [ ] I have added/updated tests for any new behavior.
- [ ] If this is a significant change, an issue has already been created where the problem / solution was discussed: [N/A, or add link to issue here]
## PR Description
<!-- Describe Your PR Here! -->
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
================================================
FILE: .github/workflows/node.js.yml
================================================
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Node.js CI
on:
push:
branches: [ 'master' ]
pull_request:
branches: [ 'master' ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.21, 16.x, 18.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm test
================================================
FILE: .gitignore
================================================
/coverage
node_modules
.vscode
.idea
*BAK*
model.nlp
================================================
FILE: .npmignore
================================================
screenshots
model.nlp
docs
examples
.github
.vscode
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to release of this project will be documented in this file.
For detailed change-info on the commit level please [see our GitHub commit history](https://github.com/axa-group/nlp.js/commits/master).
## [3.10.0] - 2019-10-07
### Added
- Traverse for handlebars, so answers now can be arrays or objects
- Automatic stemmer: is able to learn rules from languages without stemmer when the languages are inflected.
- Tests of the automatic stemmer in polish
- Spell checking: now users can write with small typos
- Changelog
- Portuguese sentiment analysis
- Contributor pictures to the readme
- Bengali sentiment analysis
### Changed
- Faster Levenshtein implementation
- Now the browser version is generated with terser
### Fixed
- Extended NER to support datetimerange
- Sort classifications in the NER manager
- Use performance.now instead of process.hrtime for browser compatibility
## [3.9.0] - 2019-09-15
### Added
- Support for Ukrainian language
- Duckling support
### Changed
- General code cleanup removing dead & unused code from the project
- Dependencies have been updated
- README.md has been updated
### Fixed
- now using url.parse instead of new URL due to support of node version 8
## [3.8.0] - 2019-09-12
### Added
- Support for Bengali language
- Support for Greek language
## [3.7.2] - 2019-09-07
### Added
- Support for Thai language
## [3.7.1] - 2019-09-07
### Added
- Added examples for huge training (10k intents) and benchmark (Corpus50)
## [3.7.0] - 2019-09-05
### Added
- Improved false-positive avoidance
- Training of huge datasets is now feasible
## [3.5.2] - 2019-08-20
### Added
- English tokenizer has been improved
### Changed
- Dependencies have been updated
- Package lockfile (JS) has been updated
- README.md has been updated
### Fixed
- Various typos in the documentation
- Bugs regarding contraction
## [3.5.1] - 2019-08-09
### Added
- Model sizes has been significantly reduced
## [3.5.0] - 2019-08-09
### Added
- Emoji support 🥳
- Sentiment analysis for the following languages: Finish, Danish, Russian
- Added a "default" sentiment analysis
### Changed
- Documentation has been updated
## [3.4.0] - 2019-07-24
### Added
- Added a default intent and score when score is less than threshold
- Now uses decay learning rate
### Changed
- Updated license in documentation
- Removed handlebars dependency
- Dependencies have been updated
- Adjustments to tests
## [3.2.1] - 2019-07-16
### Fixed
- Fixed an error that occured when retrieving entites from whitelist
## [3.1.1] - 2019-05-06
### Changed
- General performance update. Increaed performance over 3.1.0
## [3.1.0] - 2019-05-05
### Added
- Actions
- Japanase language stemmer
### Changed
- Now builds in node v12
- Dependencies have been updated
- Tweaked hyperparameters for best performance
### Fixed
- Issues with NLP Util tests have been fixed
## [3.0.2] - 2019-04-19
### Fixed
- "is Alphanumeric" should now work with all most commonly used charsets
## [3.0.1] - 2019-04-17
### Added
- The language guesser is now trained with the trigrams from the utterances used to train. That means that it has a best guess, and also that fictional languages can be guessed (example, klingon).
- Added Tagalog and Galician languages.
### Changed
-NlpClassifier no longer exists, in favor of NluManager as the manager of several NLU classes, and is able to manage several languages and several domains inside each language.
- Now by default, each domain of a language has it's own neural network classifier. When a language has more than 1 domain, a master neural network is trained that instead of classifying into the intent, classify into de domain. That way the models are faster to train and have a better score.
- The console-bot example training time in version 2.x in my laptop was 108 seconds, in the version 3.x the training time went down to 3 seconds, so the improvement in performance is notable.
- Size of the model.nlp files is decreased, the console-bot example went from 1614KB down to 928KB.
- The browser version has decreased from 5.08MB down to 2.3MB
## [2.5.2] - 2019-03-26
### Added
- Added multiple different score calculation methods when combining LRC and Neural
### Changed:
- Default threshold (ner-manager) is now 0.8
## [2.5.1] - 2019-03-07
### Added
- Reduced the filesizes of our sentiment resorces
### Changes
- Updated dependencies
- Fixed issues with getter
## [2.4.1] - 2019-01-30
### Changed
- Moved to brain.js version 1.6.0
- Minimized the browser bundle
## [2.4.0] - 2019-01-25
### Added
- Support for "any" language
- Better documentation regarding language support
## Fixed
- NLU benchmark run
## [2.3.2] - 2019-01-22
### Fixed
- Fixed a bug in the load/export and classification behaviour
## [2.3.1] - 2019-01-10
### Changed
- Moved to using a non-blocking trainAsync, preventing the event loop from being blocked
- Updted dependencies
- LRC has been removed from the list of supported classifiers
- Updated the classifier, manager & recognizer tests
### Fixed
- Fixed a bug where an error would be thrown when attempting to read the content's length in several stemmers
- Fixed various prettifier bugs
## [2.3.0] - 2018-11-26
### Added
- Test cases for the English aggresive tokenizer
- Smoth tests for the bayes classifier
- Now includes normalization tests for the following tokenizers: fr, it, nl, no, pl
### Changed
- Recognizer now recognizes microsoft bot framework v4 contexts
### Fixed
- Fixed bug prventing tests with istanbul frontend parts from running
- English stemmer is now always the default alternative stemmer
- English natural stemmer now always uses english aggresive tokenizer
- Fixed contractions in the English tokenizer
## [2.1.2] - 2018-10-28
### Added
- Naive Bayes Classifier
### Fixed
- Minor bugfixes in slot manager
- Fixed fails in the language guesser for the chinese language
## [2.1.0] - 2018-10-12
### Added
- Documentation for context, import and export
- Added new Binary Relevance Neural Network Classifier
## [2.0.4] - 2018-10-06
### Added
- Basic benchmarking support
- Codebase now has precommit hooks
- Created stemmers and tokenizers from Natural
### Changed
- NLP Classifier Train interface is now async
- Removed Natural
## [2.0.3] - 2018-10-03
### Added
- Built-in exctraction for Chinese
- Built-in exctraction for Japanese
- Documentation for Tamil language support
- npmignore no longer uploads docs or testing model.nlp
- Documentation for built-in entity extraction
- Method for entity extraction without intent recognition in NLP Manger
### Changed
- Upgraded Microsoft recognizer to version 1.1.3
- Tests changed from French to English
## [2.0.2] - 2018-09-22
### Added
- Tamil & Armenian language support
## [2.0.1] - 2018-09-21
### Added
- Catalan language
- Arabic stemmer & documentation
### Fixed
- Errors affecting certain German stems
## [2.0.0] - 2018-09-18
### Added
- Load and Save Trim Entities
- Adding coveralls to the repo
- Slot Filling
- Microsoft Bot Framework Recognizer with Slot Filling
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
opensource@axa.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# How to Contribute
## Reporting Issues
Should you run into issues with the project, please don't hesitate to let us know by
[filing an issue](https://github.com/axa-group/nlp.js/issues/new).
Pull requests containing only failing tests demonstrating an issue are also welcomed. Having these tests will help avoiding future regressions of this specific issue once it's fixed.
## Pull Requests
We accept [pull requests](https://github.com/axa-group/nlp.js/pull/new/master)!
Generally we like to see pull requests that:
- Maintain the existing code style
- Are focused on a single change (i.e. avoid large refactoring or style adjustments in untouched code if not the primary goal of the pull request)
- Have [conventional commits](https://conventionalcommits.org/)
- Have tests
- Don't decrease the current code coverage
## Running tests
To run tests locally, first install all dependencies.
```shell
npm install
```
From the root directory, run the tests.
```shell
npm test
```
================================================
FILE: LICENSE.md
================================================
# MIT License
Copyright (c) AXA Group Operations Spain S.A.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================

# NLP.js
[](https://github.com/axa-group/nlp.js/actions/workflows/node.js.yml)
[](https://coveralls.io/github/axa-group/nlp.js?branch=master)
[](https://www.npmjs.com/package/node-nlp)
[](https://www.npmjs.com/package/node-nlp)
[](https://sonarcloud.io/dashboard?id=axa-group_nlp.js)
[](https://sonarcloud.io/dashboard?id=axa-group_nlp.js)
[](https://sonarcloud.io/dashboard?id=axa-group_nlp.js)
[](https://sonarcloud.io/dashboard?id=axa-group_nlp.js)
*If you're looking for the version 3 docs, you can find them here* [Version 3](docs/v3/README.md)
"NLP.js" is a general natural language utility for nodejs. Currently supporting:
- Guess the language of a phrase
- Fast _Levenshtein_ distance of two strings
- Search the best substring of a string with less _Levenshtein_ distance to a given pattern.
- Get stemmers and tokenizers for several languages.
- Sentiment Analysis for phrases (with negation support).
- Named Entity Recognition and management, multi-language support, and acceptance of similar strings, so the introduced text does not need to be exact.
- Natural Language Processing Classifier, to classify an utterance into intents.
- NLP Manager: a tool able to manage several languages, the Named Entities for each language, the utterances, and intents for the training of the classifier, and for a given utterance return the entity extraction, the intent classification and the sentiment analysis. Also, it is able to maintain a Natural Language Generation Manager for the answers.
- 40 languages natively supported, 104 languages supported with BERT integration
- Any other language is supported through tokenization, even fantasy languages

## New in version 4`!`
Version 4 is very different from previous versions. Before this version, NLP.js was a monolithic library. The big changes:
- Now the library is split into small independent packages.
- So every language has its own package
- It provides a plugin system, so you can provide your own plugins or replace the existing ones.
- It provides a container system for the plugins, settings for the plugins and also pipelines
- A pipeline is code defining how the plugins interact. Usually it is linear: there is an input into the plugin, and this generates the input for the next one. As an example, the preparation of a utterance (the process to convert the utterance to a hashmap of stemmed features) is now a pipeline like this: `normalize -> tokenize -> removeStopwords -> stem -> arrToObj`
- There is a simple compiler for the pipelines, but they can also be built using a modified version of javascript and python (compilers are also included as plugins, so other languages can be added as a plugin).
- NLP.js now includes connectors, a connector is understood to be something that has at least 2 methods: `hear` and `say`. Examples of connectors included: Console Connector, Microsoft Bot Framework Connector and a Direct Line Offline Connector (this one allows you to build a web chatbot using the Microsoft Webchat, but without having to deploy anything in Azure).
- Some plugins can be registered by language, so for different languages different plugins will be used. Also some plugins, like NLU, can be registered not only by language but also by domain (a functional set of intents that can be trained separately)
- As an example of per-language/domain plugins, a Microsoft LUIS NLU plugin is provided. You can configure your chatbot to use the NLU from NLP.js for some languages/domains, and LUIS for other languages/domains.
- Having plugins and pipelines makes it possible to write chatbots by only modifying the configuration and the pipelines file, without modifying the code.
### TABLE OF CONTENTS
<!--ts-->
- [Installation](#installation)
- [QuickStart](docs/v4/quickstart.md)
- [Install the library](docs/v4/quickstart.md#install-the-library)
- [Create the code](docs/v4/quickstart.md#create-the-code)
- [Extracting the corpus into a file](docs/v4/quickstart.md#extracting-the-corpus-into-a-file)
- [Extracting the configuration into a file](docs/v4/quickstart.md#extracting-the-configuration-into-a-file)
- [Creating your first pipeline](docs/v4/quickstart.md#creating-your-first-pipeline)
- [Console Connector](docs/v4/quickstart.md#adding-your-first-connector)
- [Extending your bot with the pipeline](docs/v4/quickstart.md#extending-your-bot-with-the-pipeline)
- [Adding multiple languages](docs/v4/quickstart.md#adding-multilanguage)
- [Adding API and WebChat](docs/v4/quickstart.md#adding-api-and-webchat)
- [Using Microsoft Bot Framework](docs/v4/quickstart.md#using-microsoft-bot-framework)
- [Recognizing the bot name and the channel](docs/v4/quickstart.md#recognizing-the-bot-name-and-the-channel)
- [One bot per connector](docs/v4/quickstart.md#one-bot-per-connector)
- [Different port for Microsoft Bot Framework and Webchat](docs/v4/quickstart.md#different-port-for-microsoft-bot-framework-and-webchat)
- [Adding logic to an intent](docs/v4/quickstart.md#adding-logic-to-an-intent)
- [Mini FAQ](docs/v4/mini-faq.md)
- [Web and React Native](docs/v4/webandreact.md)
- [Preparing to generate a bundle](docs/v4/webandreact.md#preparing-to-generate-a-bundle)
- [Your first web NLP](docs/v4/webandreact.md#your-first-web-nlp)
- [Creating a distributable version](docs/v4/webandreact.md#creating-a-distributable-version)
- [Load corpus from URL](docs/v4/webandreact.md#load-corpus-from-url)
- [QnA](docs/v4/qna.md)
- [Install the library and the qna plugin](docs/v4/qna.md#install-the-library-and-the-qna-plugin)
- [Train and test a QnA file](docs/v4/qna.md#train-and-test-a-qna-file)
- [Extracting the configuration into a file](docs/v4/qna.md#extracting-the-configuration-into-a-file)
- [Exposing the bot with a Web and API](docs/v4/qna.md#exposing-the-bot-with-a-web-and-api)
- [NER Quickstart](docs/v4/ner-quickstart.md)
- [Install the needed packages](docs/v4/ner-quickstart.md#install-the-needed-packages)
- [Create the conf.json](docs/v4/ner-quickstart.md#create-the-confjson)
- [Create the corpus.json](docs/v4/ner-quickstart.md#create-the-corpusjson)
- [Create the heros.json](docs/v4/ner-quickstart.md#create-the-herosjson)
- [Create the index.js](docs/v4/ner-quickstart.md#create-the-indexjs)
- [Start the application](docs/v4/ner-quickstart.md#start-the-application)
- [Stored context](docs/v4/ner-quickstart.md#stored-context)
- [NeuralNetwork](docs/v4/neural.md)
- [Introduction](docs/v4/neural.md#introduction)
- [Installing](docs/v4/neural.md#installing)
- [Corpus Format](docs/v4/neural.md#corpus-format)
- [Example of use](docs/v4/neural.md#example-of-use)
- [Exporting trained model to JSON and importing](docs/v4/neural.md#exporting-trained-model-to-json-and-importing)
- [Options](docs/v4/neural.md#options)
- [Logger](docs/v4/logger.md)
- [Introduction](docs/v4/logger.md#introduction)
- [Default logger in @nlpjs/core](docs/v4/logger.md#default-logger-in-nlpjscore)
- [Default logger in @nlpjs/basic](docs/v4/logger.md#default-logger-in-nlpjsbasic)
- [Adding your own logger to the container](docs/v4/logger.md#adding-your-own-logger-to-the-container)
- [@nlpjs/emoji](docs/v4/emoji.md)
- [Introduction](docs/v4/emoji.md#introduction)
- [Installing](docs/v4/emoji.md#installing)
- [Example of use](docs/v4/emoji.md#example-of-use)
- [@nlpjs/console-connector](docs/v4/console-connector.md)
- [Installation](docs/v4/console-connector.md#installation)
- [Example of use inside NLP.js](docs/v4/console-connector.md#example-of-use-inside-nlpjs)
- [Example of use of the package](docs/v4/console-connector.md#example-of-use-of-the-package)
- [Example of use with @nlpjs/basic](docs/v4/console-connector.md#example-of-use-with-nlpjsbasic)
- [@nlpjs/similarity](docs/v4/similarity.md)
- [Installation](docs/v4/similarity.md#installation)
- [leven](docs/v4/similarity.md#leven)
- [similarity](docs/v4/similarity.md#similarity)
- [SpellCheck](docs/v4/similarity.md#spellcheck)
- [SpellCheck trained with words trained from a text](docs/v4/similarity.md#spellcheck-trained-with-words-trained-from-a-text)
- [@nlpjs/nlu](docs/v4/nlu.md)
- [Installation](docs/v4/nlu.md#installation)
- [NluNeural](docs/v4/nlu.md#nluneural)
- [DomainManager](docs/v4/nlu.md#domainmanager)
- [NluManager](docs/v4/nlu.md#nlumanager)
- [React Native](#react-native)
- [Example of use](#example-of-use)
- [False Positives](#false-positives)
- [Log Training Progress](#log-training-progress)
- [Benchmarking](docs/v3/benchmarking.md)
- [Language Support](docs/v4/language-support.md)
- [Supported languages](docs/v4/language-support.md#supported-languages)
- [Sentiment Analysis](docs/v4/language-support.md#sentiment-analysis)
- [Comparision with other NLP products](docs/v4/language-support.md#comparision-with-other-nlp-products)
- [Example with several languages](docs/v4/language-support.md#example-with-several-languages)
- [Language Guesser](docs/v3/language-guesser.md)
- [Similar Search](docs/v3/similar-search.md)
- [NLU](docs/v3/nlu-manager.md)
- [NLU Manager](docs/v3/nlu-manager.md)
- [Brain NLU](docs/v3/brain-nlu.md)
- [Bayes NLU](docs/v3/bayes-nlu.md)
- [Binary Relevance NLU](docs/v3/binary-relevance-nlu.md)
- [Logistic Regression NLU](docs/v3/logistic-regression-nlu.md)
- [NER Manager](docs/v4/ner-manager.md)
- [Enum Named Entities](docs/v4/ner-manager.md#enum-entities)
- [Regular Expression Named Entities](docs/v4/ner-manager.md#regex-entities)
- [Trim Named Entities](docs/v4/ner-manager.md#trim-entities)
- [Utterances with duplicated Entities](docs/v4/ner-manager.md#enum-entities)
- [Integration with Duckling](docs/v3/builtin-duckling.md)
- [Language support](docs/v3/builtin-duckling.md#language-support)
- [How to integrate with duckling](docs/v3/builtin-duckling.md#how-to-integrate-with-duckling)
- [Email Extraction](docs/v3/builtin-duckling.md#email-extraction)
- [Phone Number Extraction](docs/v3/builtin-duckling.md#phone-number-extraction)
- [URL Extraction](docs/v3/builtin-duckling.md#url-extraction)
- [Number Extraction](docs/v3/builtin-duckling.md#number-extraction)
- [Ordinal Extraction](docs/v3/builtin-duckling.md#ordinal-extraction)
- [Dimension Extraction](docs/v3/builtin-duckling.md#dimension-extraction)
- [Quantity Extraction](docs/v3/builtin-duckling.md#quantity-extraction)
- [Amount of Money Extraction](docs/v3/builtin-duckling.md#amount-of-money-extraction)
- [Date Extraction](docs/v3/builtin-duckling.md#date-extraction)
- [Builtin Entity Extraction](docs/v3/builtin-entity-extraction.md)
- [Email Extraction](docs/v3/builtin-entity-extraction.md#email-extraction)
- [IP Extraction](docs/v3/builtin-entity-extraction.md#ip-extraction)
- [Hashtag Extraction](docs/v3/builtin-entity-extraction.md#hashtag-extraction)
- [Phone Number Extraction](docs/v3/builtin-entity-extraction.md#phone-number-extraction)
- [URL Extraction](docs/v3/builtin-entity-extraction.md#url-extraction)
- [Number Extraction](docs/v3/builtin-entity-extraction.md#number-extraction)
- [Ordinal Extraction](docs/v3/builtin-entity-extraction.md#ordinal-extraction)
- [Percentage Extraction](docs/v3/builtin-entity-extraction.md#percentage-extraction)
- [Age Extraction](docs/v3/builtin-entity-extraction.md#age-extraction)
- [Currency Extraction](docs/v3/builtin-entity-extraction.md#currency-extraction)
- [Date Extraction](docs/v3/builtin-entity-extraction.md#date-extraction)
- [Duration Extraction](docs/v3/builtin-entity-extraction.md#duration-extraction)
- [Sentiment Analysis](docs/v3/sentiment-analysis.md)
- [NLP Manager](docs/v4/nlp-manager.md)
- [Load/Save](docs/v4/nlp-manager.md#loadsave)
- [Import/Export](docs/v4/nlp-manager.md#importexport)
- [Context](docs/v4/nlp-manager.md#context)
- [Intent Logic (Actions, Pipelines)](docs/v4/nlp-intent-logics.md)
- [Slot Filling](docs/v4/slot-filling.md)
- [Loading from Excel](docs/v3/loading-from-excel.md)
- [Microsoft Bot Framework](docs/v3/microsoft-bot-framework.md)
- [Introduction](docs/v3/microsoft-bot-framework.md#introduction)
- [Example of use](docs/v3/microsoft-bot-framework.md#example-of-use)
- [Recognizer and Slot filling](docs/v3/microsoft-bot-framework.md#recognizer-and-slot-filling)
- Languages
- [English](https://github.com/axa-group/nlp.js/blob/master/packages/lang-en/README.md)
- [Indonesian](https://github.com/axa-group/nlp.js/blob/master/packages/lang-id/README.md)
- [Italian](https://github.com/axa-group/nlp.js/blob/master/packages/lang-it/README.md)
- [Spanish](https://github.com/axa-group/nlp.js/blob/master/packages/lang-es/README.md)
- [Contributing](#contributing)
- [Contributors](#contributors)
- [Code of Conduct](#code-of-conduct)
- [Who is behind it](#who-is-behind-it)
- [License](#license)
<!--te-->
## Installation
If you're looking to use NLP.js in your Node application, you can install via NPM like so:
```bash
npm install node-nlp
```
## React Native
There is a version of NLP.js that works in React Native, so you can build chatbots that can be trained and executed on the mobile even without the internet. You can install it via NPM:
```bash
npm install node-nlp-rn
```
Some limitations:
- No Chinese
- The Japanese stemmer is not the complete one
- No Excel import
- No loading from a file, or saving to a file, but it can still import from JSON and export to JSON.
## Example of use
You can see a great example of use in the folder [`/examples/02-qna-classic`](https://github.com/axa-group/nlp.js/tree/master/examples/02-qna-classic). This example is able to train the bot and save the model to a file, so when the bot is started again, the model is loaded instead of being trained again.
You can start to build your NLP from scratch with a few lines:
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'], forceNER: true });
// Adds the utterances and intents for the NLP
manager.addDocument('en', 'goodbye for now', 'greetings.bye');
manager.addDocument('en', 'bye bye take care', 'greetings.bye');
manager.addDocument('en', 'okay see you later', 'greetings.bye');
manager.addDocument('en', 'bye for now', 'greetings.bye');
manager.addDocument('en', 'i must go', 'greetings.bye');
manager.addDocument('en', 'hello', 'greetings.hello');
manager.addDocument('en', 'hi', 'greetings.hello');
manager.addDocument('en', 'howdy', 'greetings.hello');
// Train also the NLG
manager.addAnswer('en', 'greetings.bye', 'Till next time');
manager.addAnswer('en', 'greetings.bye', 'see you soon!');
manager.addAnswer('en', 'greetings.hello', 'Hey there!');
manager.addAnswer('en', 'greetings.hello', 'Greetings!');
// Train and save the model.
(async() => {
await manager.train();
manager.save();
const response = await manager.process('en', 'I should go now');
console.log(response);
})();
```
This produces the following result in a console:
```bash
{ utterance: 'I should go now',
locale: 'en',
languageGuessed: false,
localeIso2: 'en',
language: 'English',
domain: 'default',
classifications:
[ { label: 'greetings.bye', value: 0.698219120207268 },
{ label: 'None', value: 0.30178087979273216 },
{ label: 'greetings.hello', value: 0 } ],
intent: 'greetings.bye',
score: 0.698219120207268,
entities:
[ { start: 12,
end: 14,
len: 3,
accuracy: 0.95,
sourceText: 'now',
utteranceText: 'now',
entity: 'datetime',
resolution: [Object] } ],
sentiment:
{ score: 1,
comparative: 0.25,
vote: 'positive',
numWords: 4,
numHits: 2,
type: 'senticon',
language: 'en' },
actions: [],
srcAnswer: 'Till next time',
answer: 'Till next time' }
```
## False Positives
By default, the neural network tries to avoid false positives. To achieve that, one of the internal processes is that words never seen by the network are represented as a feature that gives some weight to the `None` intent. So, if you try the previous example with "_I have to go_" it will return the `None` intent because 2 of the 4 words have never been seen while training.
If you don't want to avoid those false positives, and you feel more comfortable with classifications into the intents that you declare, then you can disable this behavior by setting the `useNoneFeature` to false:
```javascript
const manager = new NlpManager({ languages: ['en'], nlu: { useNoneFeature: false } });
```
## Log Training Progress
You can also add a log progress, so you can trace what is happening during the training.
You can log the progress to the console:
```javascript
const nlpManager = new NlpManager({ languages: ['en'], nlu: { log: true } });
```
Or you can provide your own log function:
```javascript
const logfn = (status, time) => console.log(status, time);
const nlpManager = new NlpManager({ languages: ['en'], nlu: { log: logfn } });
```
## Contributing
You can read the guide for how to contribute at [Contributing](CONTRIBUTING.md).
## Contributors
[](https://github.com/axa-group/nlp.js/graphs/contributors)
Made with [contributors-img](https://contributors-img.firebaseapp.com).
## Code of Conduct
You can read the Code of Conduct at [Code of Conduct](CODE_OF_CONDUCT.md).
## Who is behind it`?`
This project is developed by AXA Group Operations Spain S.A.
If you need to contact us, you can do it at the email opensource@axa.com
## License
Copyright (c) AXA Group Operations Spain S.A.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: docs/v3/README.md
================================================

# NLP.js
[](https://github.com/axa-group/nlp.js/actions/workflows/node.js.yml)
[](https://coveralls.io/github/axa-group/nlp.js?branch=master)
[](https://www.npmjs.com/package/node-nlp)
[](https://www.npmjs.com/package/node-nlp)
"NLP.js" is a general natural language utility for nodejs. Currently supporting:
- Guess the language of a phrase
- Fast levenshtein distance of two strings
- Search the best substring of a string with less levenshtein distance to a given pattern.
- Get stemmers and tokenizers for several languages.
- Sentiment Analysis for phrases (with negation support).
- Named Entity Recognition and management, multilanguage, and accepting similar strings, so the introduced text does not need to be exact.
- Natural Language Processing Classifier, to classify utterance into intents.
- Natural Language Generation Manager, so from intents and conditions it can generate an answer.
- NLP Manager: a tool able to manage several languages, the Named Entities for each language, the utterance, and intents for the training of the classifier, and for a given utterance return the entity extraction, the intent classification and the sentiment analysis. Also, it is able to maintain a Natural Language Generation Manager for the answers.
- 40 languages with stemmers supported: Arabic (ar), Armenian (hy), Bengali (bn), Basque (eu), Catala (ca), Chinese (zh), Czech (cs), Danish (da), Dutch (nl), English (en), Farsi (fa), Finnish (fi), French (fr), Galician (gl), German (de), Greek (el), Hindi (hi), Hungarian (hu), Indonesian (id), Irish (ga), Italian (it), Japanese (ja), Korean (ko), Lithuanian (lt), Malay (ms), Nepali (ne), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Serbian (sr), Slovene (sl), Spanish (es), Swedish (sv), Tagalog (tl), Tamil (ta), Thai (th), Turkish (tr), Ukrainian (uk)
- Any other language is supported through tokenization, even fantasy languages
<div align="center">
<img src="https://github.com/axa-group/nlp.js/raw/master/screenshots/hybridbot.gif" width="auto" height="auto"/>
</div>
## New in version 3!
The version 3 comes with some important changes, mainly focused on improving performance:
- NlpClassifier no longer exists, in favor of NluManager as the manager of several NLU classes, and is able to manage several languages and several domains inside each language.
- Now by default, each domain of a language has it's own neural network classifier. When a language has more than 1 domain, a master neural network is trained that instead of classifying into the intent, classify into de domain. That way the models are faster to train and have a better score.
- The language guesser is now trained with the trigrams from the utterances used to train. That means that has the best guessing, and also that non-existing languages are guessed (example, klingon).
- Added Tagalog and Galician languages.
- The console-bot example training time in version 2.x in my laptop was 108 seconds, in the version 3.x the training time went down to 3 seconds, so the improvement in performance is notable.
- Also the size of the model.nlp files are decreased, the console-bot example went from 1614KB down to 928KB.
- The browser version has decreased from 5.08MB down to 2.3MB
### TABLE OF CONTENTS
<!--ts-->
- [Installation](#installation)
- [React Native](#react-native)
- [Example of use](#example-of-use)
- [False Positives](#false-positives)
- [Log Training Progress](#log-training-progress)
- [Benchmarking](benchmarking.md)
- [Language Support](language-support.md)
- [Classification](language-support.md#classification)
- [Sentiment Analysis](language-support.md#sentiment-analysis)
- [Builtin Entity Extraction](language-support.md#builtin-entity-extraction)
- [Example with languages](example-with-languages.md)
- [Auto Stemmer](language-support.md#auto-stemmer)
- [Language Guesser](language-guesser.md)
- [Similar Search](similar-search.md)
- [NLU](nlu-manager.md)
- [NLU Manager](nlu-manager.md)
- [Brain NLU](brain-nlu.md)
- [Bayes NLU](bayes-nlu.md)
- [Binary Relevance NLU](binary-relevance-nlu.md)
- [Logistic Regression NLU](logistic-regression-nlu.md)
- [NER Manager](ner-manager.md)
- [Enum Named Entities](ner-manager.md#enum-named-entities)
- [Regular Expression Named Entities](ner-manager.md#regular-expression-named-entities)
- [Trim Named Entities](ner-manager.md#trim-named-entities)
- [Utterances with duplicated Entities](ner-manager.md#utterances-with-duplicated-entities)
- [Integration with Duckling](builtin-duckling.md)
- [Language support](builtin-duckling.md#language-support)
- [How to integrate with duckling](builtin-duckling.md#how-to-integrate-with-duckling)
- [Email Extraction](builtin-duckling.md#email-extraction)
- [Phone Number Extraction](builtin-duckling.md#phone-number-extraction)
- [URL Extraction](builtin-duckling.md#url-extraction)
- [Number Extraction](builtin-duckling.md#number-extraction)
- [Ordinal Extraction](builtin-duckling.md#ordinal-extraction)
- [Dimension Extraction](builtin-duckling.md#dimension-extraction)
- [Quantity Extraction](builtin-duckling.md#quantity-extraction)
- [Amount of Money Extraction](builtin-duckling.md#amount-of-money-extraction)
- [Date Extraction](builtin-duckling.md#date-extraction)
- [Builtin Entity Extraction](builtin-entity-extraction.md)
- [Email Extraction](builtin-entity-extraction.md#email-extraction)
- [IP Extraction](builtin-entity-extraction.md#ip-extraction)
- [Hashtag Extraction](builtin-entity-extraction.md#hashtag-extraction)
- [Phone Number Extraction](builtin-entity-extraction.md#phone-number-extraction)
- [URL Extraction](builtin-entity-extraction.md#url-extraction)
- [Number Extraction](builtin-entity-extraction.md#number-extraction)
- [Ordinal Extraction](builtin-entity-extraction.md#ordinal-extraction)
- [Percentage Extraction](builtin-entity-extraction.md#percentage-extraction)
- [Age Extraction](builtin-entity-extraction.md#age-extraction)
- [Currency Extraction](builtin-entity-extraction.md#currency-extraction)
- [Date Extraction](builtin-entity-extraction.md#date-extraction)
- [Duration Extraction](builtin-entity-extraction.md#duration-extraction)
- [Sentiment Analysis](sentiment-analysis.md)
- [NLP Manager](nlp-manager.md)
- [Load/Save](nlp-manager.md#loadsave)
- [Import/Export](nlp-manager.md#importexport)
- [Context](nlp-manager.md#context)
- [Slot Filling](slot-filling.md)
- [Loading from Excel](loading-from-excel.md)
- [Microsoft Bot Framework](microsoft-bot-framework.md)
- [Introduction](microsoft-bot-framework.md#introduction)
- [Example of use](microsoft-bot-framework.md#example-of-use)
- [Recognizer and Slot filling](microsoft-bot-framework.md#recognizer-and-slot-filling)
- [Contributing](#contributing)
- [Contributors](#contributors)
- [Code of Conduct](#code-of-conduct)
- [Who is behind it](#who-is-behind-it)
- [License](#license.md)
<!--te-->
## Installation
If you're looking to use NLP.js in your node application, you can install via NPM like so:
```bash
npm i node-nlp@3.10.2
```
## React Native
There is a version of NLP.js that works in React Native, so you can build chatbots that can be trained and executed on the mobile even without internet. You can install it via NPM:
```bash
npm install node-nlp-rn
```
Some Limitations:
- No Chinese
- Japanese stemmer is not the complete one
- No excel import
- No load from file neither save to file, but it still has import form json and export to json.
## Example of use
You can see a great example of use at the folder [`/examples/console-bot`](https://github.com/axa-group/nlp.js/tree/v3.x/examples/console-bot). This example is able to train the bot and save the model to a file, so when the bot is started again, the model is loaded instead of trained again.
You can start to build your NLP from scratch with few lines:
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'] });
// Adds the utterances and intents for the NLP
manager.addDocument('en', 'goodbye for now', 'greetings.bye');
manager.addDocument('en', 'bye bye take care', 'greetings.bye');
manager.addDocument('en', 'okay see you later', 'greetings.bye');
manager.addDocument('en', 'bye for now', 'greetings.bye');
manager.addDocument('en', 'i must go', 'greetings.bye');
manager.addDocument('en', 'hello', 'greetings.hello');
manager.addDocument('en', 'hi', 'greetings.hello');
manager.addDocument('en', 'howdy', 'greetings.hello');
// Train also the NLG
manager.addAnswer('en', 'greetings.bye', 'Till next time');
manager.addAnswer('en', 'greetings.bye', 'see you soon!');
manager.addAnswer('en', 'greetings.hello', 'Hey there!');
manager.addAnswer('en', 'greetings.hello', 'Greetings!');
// Train and save the model.
(async() => {
await manager.train();
manager.save();
const response = await manager.process('en', 'I should go now');
console.log(response);
})();
```
This will show this result in console:
```bash
{ utterance: 'I should go now',
locale: 'en',
languageGuessed: false,
localeIso2: 'en',
language: 'English',
domain: 'default',
classifications:
[ { label: 'greetings.bye', value: 0.698219120207268 },
{ label: 'None', value: 0.30178087979273216 },
{ label: 'greetings.hello', value: 0 } ],
intent: 'greetings.bye',
score: 0.698219120207268,
entities:
[ { start: 12,
end: 14,
len: 3,
accuracy: 0.95,
sourceText: 'now',
utteranceText: 'now',
entity: 'datetime',
resolution: [Object] } ],
sentiment:
{ score: 1,
comparative: 0.25,
vote: 'positive',
numWords: 4,
numHits: 2,
type: 'senticon',
language: 'en' },
actions: [],
srcAnswer: 'Till next time',
answer: 'Till next time' }
```
## False Positives
By default, the neural network tries to avoid false positives. To achieve that, one of the internal processes is that words never seen by the network, are represented as a feature that gives some weight into the None intent. So if you try the previous example with "I have to go" it will return the None intent because 2 of the 4 words have been never seen while training.
If you don't want to avoid those false positives, and you feel more comfortable with classifications into the intents that you declare, then you can disable this behavior with the useNoneFeature setting to false:
```javascript
const manager = new NlpManager({ languages: ['en'], nlu: { useNoneFeature: false } });
```
## Log Training Progress
You can also add a log progress, so you can trace what is happening during the training.
You can log the progress into console:
```javascript
const nlpManager = new NlpManager({ languages: ['en'], nlu: { log: true } });
```
Or you can provide your own log function:
```javascript
const logfn = (status, time) => console.log(status, time);
const nlpManager = new NlpManager({ languages: ['en'], nlu: { log: logfn } });
```
## Contributing
You can read the guide of how to contribute at [Contributing](../../CONTRIBUTING.md).
## Contributors
<a href="https://github.com/axa-group/nlp.js/graphs/contributors">
<img src="https://contributors-img.firebaseapp.com/image?repo=axa-group/nlp.js" />
</a>
Made with [contributors-img](https://contributors-img.firebaseapp.com).
## Code of Conduct
You can read the Code of Conduct at [Code of Conduct](../../CODE_OF_CONDUCT.md).
## Who is behind it`?`
This project is developed by AXA Group Operations Spain S.A.
If you need to contact us, you can do it at the email opensource@axa.com
## License
Copyright (c) AXA Group Operations Spain S.A.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: docs/v3/bayes-nlu.md
================================================
# Bayes NLU
You can train a Bayes NLU classifier (indicating language) with utterances and their intents.
Then you can give a different utterance, and get the classifications for each intent, sorted descending by the score value.
```javascript
const { BayesNLU } = require('node-nlp');
async function main() {
const classifier = new BayesNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getClassifications('où sont mes clés');
console.log(classifications);
// [ { label: 'keys', value: 0.9878048780487805 },
// { label: 'greet', value: 0.01219512195121951 } ]
}
main();
```
Or you can get only the best classification
```javascript
const { BayesNLU } = require('node-nlp');
async function main() {
const classifier = new BayesNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getBestClassification('où sont mes clés');
console.log(classifications);
// { label: 'keys', value: 0.9878048780487805 }
}
main();
```
Currently 40 languages are supported:
- Arabic (ar)
- Armenian (hy)
- Basque (eu)
- Bengali (bn)
- Catala (ca)
- Chinese (zh)
- Czech (cs)
- Danish (da)
- Dutch (nl)
- English (en)
- Farsi (fa)
- Finnish (fi)
- French (fr)
- Galician (gl)
- German (de)
- Greek (el)
- Hindi (hi)
- Hungarian (hu)
- Indonesian (id)
- Irish (ga)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Lithuanian (lt)
- Malay (ms)
- Nepali (ne)
- Norwegian (no)
- Polish (pl)
- Portuguese (pt)
- Romanian (ro)
- Russian (ru)
- Serbian (sr)
- Slovene (sl)
- Spanish (es)
- Swedish (sv)
- Tagalog (tl)
- Tamil (ta)
- Thai (th)
- Turkish (tr)
- Ukrainian (uk)
================================================
FILE: docs/v3/benchmarking.md
================================================
# Benchmarking
## Introduction
This benchmark is done following the instructions at https://github.com/Botfuel/benchmark-nlp-2018/blob/master/README.md
3 corpus called `Chatbot`, `Ask Ubuntu` and `Web Applications` as described in the paper http://workshop.colips.org/wochat/@sigdial2017/documents/SIGDIAL22.pdf
The corpus can be found at json files at https://github.com/sebischair/NLU-Evaluation-Corpora
| corpus | num of intents | train | test |
| ---------------- | -------------- | ----- | ---- |
| Chatbot | 2 | 100 | 106 |
| Ask Ubuntu | 5 | 53 | 109 |
| Web Applications | 8 | 30 | 59 |
For `Ask Ubuntu` and `Web Application` corpus, there is a specific `None` intent for sentences that should not be matched with the other intents.
The code using for the benchmark of NLP.js can be found at [`/examples/nlu-benchmark`](https://github.com/axa-group/nlp.js/tree/master/examples/nlu-benchmark)
## Intent classification results
We compute the `f1` score for each corpus and the overall `f1`:
| Platform\Corpus | Chatbot | Ask Ubuntu | Web Applications | Overall |
| ---------------- | ------- | ---------- | ---------------- | ------- |
| NLP.js | 0.99 | 0.94 | 0.80 | 0.93 |
| Watson | 0.97 | 0.92 | 0.83 | 0.92 |
| Botfuel | 0.98 | 0.90 | 0.80 | 0.91 |
| Luis | 0.98 | 0.90 | 0.81 | 0.91 |
| NLP.js (no stem) | 1.00 | 0.92 | 0.73 | 0.91 |
| Snips | 0.96 | 0.83 | 0.78 | 0.89 |
| Recast | 0.99 | 0.86 | 0.75 | 0.89 |
| RASA | 0.98 | 0.86 | 0.74 | 0.88 |
| API (DialogFlow) | 0.93 | 0.85 | 0.80 | 0.87 |
You can se two entries for NLP.js, the best one is using stemmer the other one is only by using the tokenizer and the artificial intelligence. This is added because there are 27 languages supported with stemmers, but any other language is supported using only the tokenizer, but the result is good enough, in fact in english is at the middle of the table, being better than other systems that use more advanced methods than tokenization.
<div align="center">
<img src="https://github.com/axa-group/nlp.js/raw/master/screenshots/benchmark.png" width="auto" height="auto"/>
</div>
## Full data by system
### NLP.js
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
| chatbot | FindConnection | 70 | 0 | 1 | 0,986 | 1 | 0,993 |
| chatbot | DepartureTime | 35 | 1 | 0 | 1 | 0,972 | 0,986 |
| askUbuntu | Software Recommendation | 35 | 1 | 4 | 0,897 | 0,972 | 0,933 |
| askUbuntu | None | 3 | 1 | 2 | 0,6 | 0,75 | 0,667 |
| askUbuntu | Shutdown Computer | 14 | 2 | 0 | 1 | 0,875 | 0,933 |
| askUbuntu | Make Update | 37 | 2 | 0 | 1 | 0,949 | 0,974 |
| askUbuntu | Setup Printer | 13 | 0 | 0 | 1 | 1 | 1 |
| webApp | Find Alternative | 16 | 3 | 0 | 1 | 0,842 | 0,914 |
| webApp | Delete Account | 9 | 4 | 1 | 0,9 | 0,692 | 0,783 |
| webApp | Export Data | 2 | 3 | 1 | 0,667 | 0,4 | 0,5 |
| webApp|Sync Accounts|4|0|2|0,667|1|0,8|
|webApp|None|0|0|4|0|
|webApp|Change Password|3|0|3|0,5|1|0,667|
|webApp|Filter Spam|13|1|1|0,929|0,929|0,929|
|webApp|Download Video||0|1|0|0|
|**Total Chatbot**||105|1|1|0,991|0,991|0,991|
|**Total askUbuntu**||102|6|6|0,944|0,944|0,944|
|**Total webApp**||47|12|12|0,797|0,797|0,797|
|**Total**||254|19|19|0,930|0,930|0,930|
### Watson
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
|chatbot|FindConnection|70|1|2|0,972|0,986|0,979|
|chatbot|DepartureTime|33|2|1|0,971|0,943|0,957|
|askUbuntu|Software Recommendation|35|5|3|0,921|0,875|0,897|
|askUbuntu|None|1|4|1|0,5|0,2|0,286|
|askUbuntu|Shutdown Computer|14|0|0|1|1|1|
|askUbuntu|Make Update|37|0|4|0,902|1|0,949|
|askUbuntu|Setup Printer|13|0|1|0,929|1|0,963|
|webApp|Find Alternative|15|1|1|0,938|0,938|0,938|
|webApp|Delete Account|9|1|3|0,75|0,9|0,818|
|webApp|Export Data|2|1|2|0,5|0,667|0,571|
|webApp|Sync Accounts|5|1|0|1|0,833|0,909|
|webApp|None|0|4|1|0|0|
|webApp|Change Password|5|1|0|1|0,833|0,909|
|webApp|Filter Spam|13|1|2|0,867|0,929|0,897|
|webApp|Download Video|0|0|1|0|
|Total Chatbot||103|3|3|0,972|0,972|0,972|
|Total askUbuntu||100|9|9|0,917|0,917|0,917|
|Total webApp||49|10|10|0,831|0,831|0,831|
|Total||252|22|22|0,920|0,920|0,920|
### LUIS
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
|chatbot|FindConnection|70|1|1|0,986|0,986|0,986|
|chatbot|DepartureTime|34|1|1|0,971|0,971|0,971|
|askUbuntu|Software Recommendation|36|4|5|0,878|0,9|0,889|
|askUbuntu|None|0|5|0||0|
|askUbuntu|Shutdown Computer|14|0|0|1|1|1|
|askUbuntu|Make Update|36|1|4|0,9|0,973|0,935|
|askUbuntu|Setup Printer|12|1|2|0,857|0,923|0,889|
|webApp|Find Alternative|14|2|2|0,875|0,875|0,875|
|webApp|Delete Account|8|2|0|1|0,8|0,889|
|webApp|Export Data|3|0|1|0,75|1|0,857|
|webApp|Sync Accounts|5|1|0|1|0,833|0,909|
|webApp|None|3|1|8|0,272|0,75|0,4|
|webApp|Change Password|3|3|0|1|0,5|0,667|
|webApp|Filter Spam|12|2|0|1|0,857|0,923|
|webApp|Download Video|0|0|0|
|Total Chatbot||104|2|2|0,981|0,981|0,981|
|Total askUbuntu||98|11|11|0,900|0,900|0,900|
|Total webApp||48|11|11|0,814|0,814|0,814|
|Total||250|24|24|0,912|0,912|0,9124|
### Botfuel
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
|chatbot|FindConnection|69|2|0|1|0,972|0,986|
|chatbot|DepartureTime|35|0|2|0,946|1|0,972|
|askUbuntu|Software Recommendation|33|7|1|0,971|0,825|0,892|
|askUbuntu|None|1|4|0|1|0,2|0,333|
|askUbuntu|Shutdown Computer|14|0|2|0,875|1|0,933|
|askUbuntu|Make Update|37|0|6|0,860|1|0,925|
|askUbuntu|Setup Printer|12|1|2|0,857|0,923|0,889|
|webApp|Find Alternative|16|0|4|0,8|1|0,889|
|webApp|Delete Account|9|1|3|0,75|0,9|0,818|
|webApp|Export Data|2|1|2|0,5|0,667|0,571|
|webApp|Sync Accounts|4|2|0|1|0,667|0,8|
|webApp|None|0|4|0||0|
|webApp|Change Password|4|2|1|0,8|0,667|0,727|
|webApp|Filter Spam|12|2|1|0,923|0,857|0,889|
|webApp|Download Video|0|0|1|0|
|Total Chatbot||104|2|2|0,981|0,981|0,981|
|Total askUbuntu||97|12|11|0,898|0,890|0,894|
|Total webApp||47|12|12|0,797|0,797|0,797|
|Total||248|26|25|0,908|0,905|0,907|
### Recast
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
|chatbot|FindConnection|70|1|0|1|0,986|0,993|
|chatbot|DepartureTime|35|0|1|0,972|1|0,986|
|askUbuntu|Software Recommendation|29|11|1|0,967|0,725|0,829|
|askUbuntu|None|1|4|0|1|0,2|0,333|
|askUbuntu|Shutdown Computer|14|0|6|0,7|1|0,824|
|askUbuntu|Make Update|37|0|7|0,841|1|0,914|
|askUbuntu|Setup Printer|13|0|1|0,929|1|0,963|
|webApp|Find Alternative|15|1|3|0,833|0,938|0,882|
|webApp|Delete Account|9|1|5|0,643|0,9|0,75|
|webApp|Export Data|2|1|4|0,333|0,667|0,444|
|webApp|Sync Accounts|3|3|0|1|0,5|0,667|
|webApp|None|1|3|1||0,25|
|webApp|Change Password|4|2|1|0,8|0,667|0,727|
|webApp|Filter Spam|10|4|1|0,909|0,714|0,8|
|webApp|Download Video|0|0|0|
|Total Chatbot||105|1|1|0,991|0,991|0,991|
|Total askUbuntu||94|15|15|0,862|0,862|0,862|
|Total webApp||44|15|15|0,746|0,746|0,746|
|Total||243|31|31|0,887|0,887|0,887|
### RASA
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
|chatbot|FindConnection|70|1|1|0,986|0,986|0,986|
|chatbot|DepartureTime|34|1|1|0,971|0,971|0,971|
|askUbuntu|Software Recommendation|33|7|4|0,892|0,825|0,857|
|askUbuntu|None|0|5|1|0|0|
|askUbuntu|Shutdown Computer|14|0|6|0,7|1|0,824|
|askUbuntu|Make Update|34|3|2|0,944|0,919|0,932|
|askUbuntu|Setup Printer|13|0|2|0,867|1|0,929|
|webApp|Find Alternative|15|1|8|0,652|0,9375|0,769|
|webApp|Delete Account|9|1|5|0,643|0,9|0,75|
|webApp|Export Data|0|3|0||0|
|webApp|Sync Accounts|3|3|0|1|0,5|0,667|
|webApp|None|0|4|1|0|0|
|webApp|Change Password|4|2|0|1|0,667|0,8|
|webApp|Filter Spam|13|1|0|1|0,929|0,963|
|webApp|Download Video|0|0|1|0|
|Total Chatbot||104|2|2|0,981|0,981|0,981|
|Total askUbuntu||94|15|15|0,862|0,862|0,862|
|Total webApp||44|15|15|0,746|0,746|0,746|
|Total||242|32|32|0,883|0,883|0,883|
### DialogFlow
| Corpus | intent | true + | false - | false + | precision | recall | f1 |
| ------- | ------ | ------ | ------- | ------- | --------- | ------ | -- |
|chatbot|FindConnection|60|11|0|1|0,845|0,916|
|chatbot|DepartureTime|35|0|4|0,897|1|0,946|
|askUbuntu|Software Recommendation|28|12|2|0,933|0,7|0,8|
|askUbuntu|None|2|3|8|0,2|0,4|0,267|
|askUbuntu|Shutdown Computer|14|0|2|0,875|1|0,933|
|askUbuntu|Make Update|36|1|3|0,923|0,973|0,947|
|askUbuntu|Setup Printer|13|0|1|0,929|1|0,963|
|webApp|Find Alternative|16|0|2|0,889|1|0,941|
|webApp|Delete Account|10|0|2|0,833|1|0,909|
|webApp|Export Data|1|2|2|0,333|0,333|0,333|
|webApp|Sync Accounts|4|2|0|1|0,667|0,8|
|webApp|None|2|2|1|0,667|0,5|0,571|
|webApp|Change Password|4|2|1|0,8|0,667|0,727|
|webApp|Filter Spam|10|4|3|0,769|0,714|0,741|
|webApp|Download Video|0|0|0|
|Total Chatbot||95|11|4|0,960|0,896|0,927|
|Total askUbuntu||93|16|16|0,853|0,853|0,853|
|Total webApp||47|12|11|0,810|0,797|0,803|
|Total||235|39|31|0,883|0,858|0,870|
================================================
FILE: docs/v3/binary-relevance-nlu.md
================================================
# Binary Relevance NLU
You can train a Binary Relevance Neural Network NLU classifier (indicating language) with utterances and their intents.
Then you can give a different utterance, and get the classifications for each intent, sorted descending by the score value.
```javascript
const { BinaryNeuralNetworkNLU } = require('node-nlp');
async function main() {
const classifier = new BinaryNeuralNetworkNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getClassifications('où sont mes clés');
console.log(classifications);
// [ { label: 'keys', value: 0.8785389760083662 },
// { label: 'greet', value: 0.12146102399163379 } ]
}
main();
```
Or you can get only the best classification
```javascript
const { BinaryNeuralNetworkNLU } = require('node-nlp');
async function main() {
const classifier = new BinaryNeuralNetworkNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getBestClassification('où sont mes clés');
console.log(classifications);
// { label: 'keys', value: 0.8785389760083662 }
}
main();
```
Currently 40 languages are supported:
- Arabic (ar)
- Armenian (hy)
- Basque (eu)
- Bengali (bn)
- Catala (ca)
- Chinese (zh)
- Czech (cs)
- Danish (da)
- Dutch (nl)
- English (en)
- Farsi (fa)
- Finnish (fi)
- French (fr)
- Galician (gl)
- German (de)
- Greek (el)
- Hindi (hi)
- Hungarian (hu)
- Indonesian (id)
- Irish (ga)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Lithuanian (lt)
- Malay (ms)
- Nepali (ne)
- Norwegian (no)
- Polish (pl)
- Portuguese (pt)
- Romanian (ro)
- Russian (ru)
- Serbian (sr)
- Slovene (sl)
- Spanish (es)
- Swedish (sv)
- Tagalog (tl)
- Tamil (ta)
- Thai (th)
- Turkish (tr)
- Ukrainian (uk)
================================================
FILE: docs/v3/brain-nlu.md
================================================
# Brain NLU
You can train a multilabel (Brain) NLU classifier (indicating language) with utterances and their intents.
Then you can give a different utterance, and get the classifications for each intent, sorted descending by the score value.
```javascript
const { BrainNLU } = require('node-nlp');
async function main() {
const classifier = new BrainNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getClassifications('où sont mes clés');
console.log(classifications);
// [ { label: 'keys', value: 0.9076581467793369 },
// { label: 'greet', value: 0.09234185322066314 } ]
}
main();
```
Or you can get only the best classification
```javascript
const { BrainNLU } = require('node-nlp');
async function main() {
const classifier = new BrainNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getBestClassification('où sont mes clés');
console.log(classifications);
// { label: 'keys', value: 0.9076581467793369 }
}
main();```
Currently 40 languages are supported:
- Arabic (ar)
- Armenian (hy)
- Basque (eu)
- Bengali (bn)
- Catala (ca)
- Chinese (zh)
- Czech (cs)
- Danish (da)
- Dutch (nl)
- English (en)
- Farsi (fa)
- Finnish (fi)
- French (fr)
- Galician (gl)
- German (de)
- Greek (el)
- Hindi (hi)
- Hungarian (hu)
- Indonesian (id)
- Irish (ga)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Lithuanian (lt)
- Malay (ms)
- Nepali (ne)
- Norwegian (no)
- Polish (pl)
- Portuguese (pt)
- Romanian (ro)
- Russian (ru)
- Serbian (sr)
- Slovene (sl)
- Spanish (es)
- Swedish (sv)
- Tagalog (tl)
- Tamil (ta)
- Thai (th)
- Turkish (tr)
- Ukrainian (uk)
================================================
FILE: docs/v3/builtin-duckling.md
================================================
# Integration with Duckling
Instead of using the existing builtin entity extraction, you can integrate with duckling.
* [Language support](#language-support)
* [How to integrate with duckling](#how-to-integrate-with-duckling)
* [Email Extraction](#email-extraction)
* [Phone Number Extraction](#phone-number-extraction)
* [URL Extraction](#url-extraction)
* [Number Extraction](#number-extraction)
* [Ordinal Extraction](#ordinal-extraction)
* [Dimension Extraction](#dimension-extraction)
* [Quantity Extraction](#quantity-extraction)
* [Amount of Money Extraction](#amount-of-money-extraction)
* [Date Extraction](#date-extraction)
## Language support
Those are the languages supported using Duckling or not using it:
| Language | Locale | Without Duckling | With Duckling |
| :------------ | :----: | :--------------: | :-----------: |
| Arabic | ar | | X |
| Armenian | hy | | |
| Basque | eu | | |
| Bengali | bn | | X |
| Catala | ca | | |
| Chinese | zh | X | X |
| Czech | cs | | X |
| Danish | da | | X |
| Dutch | nl | | X |
| English | en | X | X |
| Farsi | fa | | |
| Finnish | fi | | X |
| French | fr | X | X |
| Galician | gl | | |
| German | de | | X |
| Greek | el | | X |
| Hindi | hi | | X |
| Hungarian | hu | | X |
| Indonesian | id | | X |
| Italian | it | | X |
| Irish | ga | | X |
| Japanese | ja | X | X |
| Korean | ko | | X |
| Lithuanian | lt | | |
| Malay | ms | | X |
| Nepali | ne | | X |
| Norwegian | no | | X |
| Polish | pl | | X |
| Portuguese | pt | X | X |
| Romanian | ro | | X |
| Russian | ru | | X |
| Serbian | sr | | |
| Spanish | es | X | X |
| Swedish | sv | | X |
| Tamil | ta | | X |
| Thai | th | | *1 |
| Tagalog | tl | | |
| Turkish | tr | | X |
| Ukrainian | uk | | X |
*1: Thai is not supported by duckling, but there exists a repo in github with an implementation of the thai rules of duckling: https://github.com/pantuwong/thai_duckling
## How to integrate with duckling
For this you'll need to have an instance of duckling up and running, and the integration is through the REST API.
You can go to the official Duckling page for instructions on how to run it: https://github.com/facebook/duckling
You can use duckling by setting the property ducklingUrl parameter of the NER settings:
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ ner: { ducklingUrl: 'https://ducklinghost/parse' } });
manager.addLanguage(['en']);
const result = await manager.process(
'twenty five euros'
);
console.log(JSON.stringify(result, null, 2));
})();
```
Also you can set the environment variable DUCKLING_URL with the URL and set the property useDuckling of the NER to true:
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ forceNER: true, ner: { useDuckling: true } });
manager.addLanguage(['en']);
const result = await manager.process(
'twenty five euros'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will include a property "sourceEntities" with the original response from duckling, and a property "entities" with the processed entities.
## Email Extraction
It can identify and extract valid emails accounts, this works for any language.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'My email is something@somehost.com please write me'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "My email is something@somehost.com please write me",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 12,
"end": 33,
"len": 22,
"accuracy": 0.95,
"sourceText": "something@somehost.com",
"utteranceText": "something@somehost.com",
"entity": "email",
"resolution": {
"value": "something@somehost.com"
}
}
],
"sourceEntities": [
{
"body": "something@somehost.com",
"start": 12,
"value": {
"value": "something@somehost.com"
},
"end": 34,
"dim": "email",
"latent": false
}
],
"sentiment": {
"score": 0.75,
"comparative": 0.08333333333333333,
"vote": "positive",
"numWords": 9,
"numHits": 2,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Phone Number Extraction
It can identify and extract phone numbers from the utterances, this works for any language.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'So here is my number +1 541-754-3010 callme maybe'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "So here is my number +1 541-754-3010 callme maybe",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 21,
"end": 35,
"len": 15,
"accuracy": 0.95,
"sourceText": "+1 541-754-3010",
"utteranceText": "+1 541-754-3010",
"entity": "phonenumber",
"resolution": {
"value": "(+1) 5417543010"
}
}
],
"sourceEntities": [
{
"body": "+1 541-754-3010",
"start": 21,
"value": {
"value": "(+1) 5417543010"
},
"end": 36,
"dim": "phone-number",
"latent": false
}
],
"sentiment": {
"score": 0.125,
"comparative": 0.011363636363636364,
"vote": "positive",
"numWords": 11,
"numHits": 3,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## URL Extraction
It can identify and extract URLs from the utterances, this works for any language.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'The url is https://something.com'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "The url is https://something.com",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 11,
"end": 31,
"len": 21,
"accuracy": 0.95,
"sourceText": "https://something.com",
"utteranceText": "https://something.com",
"entity": "url",
"resolution": {
"value": "https://something.com",
"domain": "something.com"
}
}
],
"sourceEntities": [
{
"body": "https://something.com",
"start": 11,
"value": {
"domain": "something.com",
"value": "https://something.com"
},
"end": 32,
"dim": "url",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 6,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Number Extraction
It can identify and extract numbers. This works for any language, and the numbers can be integer or floats.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'This is 12'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "This is 12",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 8,
"end": 9,
"len": 2,
"accuracy": 0.95,
"sourceText": "12",
"utteranceText": "12",
"entity": "number",
"resolution": {
"strValue": "12",
"value": 12,
"subtype": "integer"
}
}
],
"sourceEntities": [
{
"body": "12",
"start": 8,
"value": {
"value": 12,
"type": "value"
},
"end": 10,
"dim": "number",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 3,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
The numbers can be also be text written, but this only works for the supported languages.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'This is twelve'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "This is twelve",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 8,
"end": 13,
"len": 6,
"accuracy": 0.95,
"sourceText": "twelve",
"utteranceText": "twelve",
"entity": "number",
"resolution": {
"strValue": "12",
"value": 12,
"subtype": "integer"
}
}
],
"sourceEntities": [
{
"body": "twelve",
"start": 8,
"value": {
"value": 12,
"type": "value"
},
"end": 14,
"dim": "number",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 3,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Ordinal Extraction
It can identify and extract ordinal numbers. This works only for the supported languages.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'He was 2nd'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "He was 2nd",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 7,
"end": 9,
"len": 3,
"accuracy": 0.95,
"sourceText": "2nd",
"utteranceText": "2nd",
"entity": "ordinal",
"resolution": {
"strValue": "2",
"value": 2,
"subtype": "integer"
}
}
],
"sourceEntities": [
{
"body": "2nd",
"start": 7,
"value": {
"value": 2,
"type": "value"
},
"end": 10,
"dim": "ordinal",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 3,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Dimension Extraction
It can identify and extract different dimensions, like distance or temperature.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'120km'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "120km",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 0,
"end": 4,
"len": 5,
"accuracy": 0.95,
"sourceText": "120km",
"utteranceText": "120km",
"entity": "dimension",
"resolution": {
"strValue": "120",
"value": 120,
"unit": "kilometre",
"subtype": "distance"
}
}
],
"sourceEntities": [
{
"body": "120km",
"start": 0,
"value": {
"value": 120,
"type": "value",
"unit": "kilometre"
},
"end": 5,
"dim": "distance",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 1,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Quantity Extraction
It can identify and extract quantities of producs, example "three cups of sugar". It identifies the amount (3), the unit (cup) and the product (sugar).
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'three cups of sugar'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "three cups of sugar",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 0,
"end": 18,
"len": 19,
"accuracy": 0.95,
"sourceText": "three cups of sugar",
"utteranceText": "three cups of sugar",
"entity": "quantity",
"resolution": {
"strValue": "3",
"value": 3,
"unit": "cup",
"product": "sugar"
}
}
],
"sourceEntities": [
{
"body": "three cups of sugar",
"start": 0,
"value": {
"value": 3,
"type": "value",
"product": "sugar",
"unit": "cup"
},
"end": 19,
"dim": "quantity",
"latent": false
}
],
"sentiment": {
"score": 0.25,
"comparative": 0.0625,
"vote": "positive",
"numWords": 4,
"numHits": 1,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Amount of Money Extraction
It can extract amounts of money with the currenty.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'It was 42.5€'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "It was 42.5€",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 7,
"end": 11,
"len": 5,
"accuracy": 0.95,
"sourceText": "42.5€",
"utteranceText": "42.5€",
"entity": "currency",
"resolution": {
"strValue": "42.5",
"value": 42.5,
"unit": "EUR"
}
}
],
"sourceEntities": [
{
"body": "42.5€",
"start": 7,
"value": {
"value": 42.5,
"type": "value",
"unit": "EUR"
},
"end": 12,
"dim": "amount-of-money",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 4,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
## Date Extraction
It can identify and extract dates and times.
```javascript
const { NlpManager } = require('node-nlp');
(async () => {
let manager = new NlpManager({ languages: ['en'], forceNER: true, ner: { useDuckling: true } });
const result = await manager.process(
'12/12/2019 at 9am'
);
console.log(JSON.stringify(result, null, 2));
})();
```
The answer will be:
```json
{
"utterance": "12/12/2019 at 9am",
"locale": "en",
"languageGuessed": false,
"localeIso2": "en",
"language": "English",
"classifications": [
{
"label": "None",
"value": 1
}
],
"intent": "None",
"score": 1,
"entities": [
{
"start": 0,
"end": 16,
"len": 17,
"accuracy": 0.95,
"sourceText": "12/12/2019 at 9am",
"utteranceText": "12/12/2019 at 9am",
"entity": "date",
"resolution": {
"value": "2019-12-12T09:00:00.000+00:00",
"grain": "hour",
"values": [
{
"value": "2019-12-12T09:00:00.000+00:00",
"grain": "hour",
"type": "value"
}
]
}
}
],
"sourceEntities": [
{
"body": "12/12/2019 at 9am",
"start": 0,
"value": {
"values": [
{
"value": "2019-12-12T09:00:00.000+00:00",
"grain": "hour",
"type": "value"
}
],
"value": "2019-12-12T09:00:00.000+00:00",
"grain": "hour",
"type": "value"
},
"end": 17,
"dim": "time",
"latent": false
}
],
"sentiment": {
"score": 0,
"comparative": 0,
"vote": "neutral",
"numWords": 5,
"numHits": 0,
"type": "senticon",
"language": "en"
},
"actions": []
}
```
================================================
FILE: docs/v3/builtin-entity-extraction.md
================================================
# Builtin Entity Extraction
For integration with duckling please visit [Builtin Duckling](builtin-duckling.md). Duckling support more languages, but you will need to have an instance of duckling up and running.
Those are the languages supported using Duckling or not using it:
| Language | Locale | Without Duckling | With Duckling |
| :------------ | :----: | :--------------: | :-----------: |
| Arabic | ar | | X |
| Armenian | hy | | |
| Basque | eu | | |
| Bengali | bn | | X |
| Catala | ca | | |
| Chinese | zh | X | X |
| Czech | cs | | X |
| Danish | da | | X |
| Dutch | nl | | X |
| English | en | X | X |
| Farsi | fa | | |
| Finnish | fi | | X |
| French | fr | X | X |
| Galician | gl | | |
| German | de | | X |
| Greek | el | | X |
| Hindi | hi | | X |
| Hungarian | hu | | X |
| Indonesian | id | | X |
| Italian | it | | X |
| Irish | ga | | X |
| Japanese | ja | X | X |
| Korean | ko | | X |
| Lithuanian | lt | | |
| Malay | ms | | X |
| Nepali | ne | | X |
| Norwegian | no | | X |
| Polish | pl | | X |
| Portuguese | pt | X | X |
| Romanian | ro | | X |
| Russian | ru | | X |
| Serbian | sr | | |
| Spanish | es | X | X |
| Swedish | sv | | X |
| Tamil | ta | | X |
| Thai | th | | *1 |
| Tagalog | tl | | |
| Turkish | tr | | X |
| Ukrainian | uk | | X |
*1: Thai is not supported by duckling, but there exists a repo in github with an implementation of the thai rules of duckling: https://github.com/pantuwong/thai_duckling
The NER Manager includes by default a builtin entity extraction with different bundles available for different languages.
The entity extraction is done even if the utterance is not matched to an intent.
| Builtin | English | French | Spanish | Portuguese | Chinese | Japanese | Other |
| :----------- | :-----: | :----: | :-----: | :--------: | :-----: | :------: | :---: |
| Email | X | X | X | X | X | X | X |
| Ip | X | X | X | X | X | X | X |
| Hashtag | X | X | X | X | X | X | X |
| Phone Number | X | X | X | X | X | X | X |
| URL | X | X | X | X | X | X | X |
| Number | X | X | X | X | X | X | see 1 |
| Ordinal | X | X | X | X | X | X | |
| Percentage | X | X | X | X | X | X | see 2 |
| Dimension | X | X | X | X | X | X | see 3 |
| Age | X | X | X | X | X | X | |
| Currency | X | X | X | X | X | X | |
| Date | X | X | X | X | see 4 | see 4 | see 4 |
| Duration | X | | | | | | |
- 1: Only for non text numbers
- 2: Only for % symbol non text numbers
- 3: Only for dimension acronyms (km, s, km/h...) non text numbers
- 4: Only dd/MM/yyyy formats or similars, non text
* [Email Extraction](#email-extraction)
* [IP Extraction](#ip-extraction)
* [Hashtag Extraction](#hashtag-extraction)
* [Phone Number Extraction](#phone-number-extraction)
* [URL Extraction](#url-extraction)
* [Number Extraction](#number-extraction)
* [Ordinal Extraction](#ordinal-extraction)
* [Percentage Extraction](#percentage-extraction)
* [Age Extraction](#age-extraction)
* [Currency Extraction](#currency-extraction)
* [Date Extraction](#date-extraction)
* [Duration Extraction](#duration-extraction)
## Email Extraction
It can identify and extract valid emails accounts, this works for any language.
```javascript
"utterance": "My email is something@somehost.com please write me",
"entities": [
{
"start": 12,
"end": 33,
"len": 22,
"accuracy": 0.95,
"sourceText": "something@somehost.com",
"utteranceText": "something@somehost.com",
"entity": "email",
"resolution": {
"value": "something@somehost.com"
}
}
]
```
## IP Extraction
It can identify and extract valid IPv4 and IPv6 addresses, this works for any language.
```javascript
"utterance": "My ip is 8.8.8.8",
"entities": [
{
"start": 9,
"end": 15,
"len": 7,
"accuracy": 0.95,
"sourceText": "8.8.8.8",
"utteranceText": "8.8.8.8",
"entity": "ip",
"resolution": {
"value": "8.8.8.8",
"type": "ipv4"
}
}
]
"utterance": "My ip is ABEF:452::FE10",
"entities": [
{
"start": 9,
"end": 22,
"len": 14,
"accuracy": 0.95,
"sourceText": "ABEF:452::FE10",
"utteranceText": "ABEF:452::FE10",
"entity": "ip",
"resolution": {
"value": "ABEF:452::FE10",
"type": "ipv6"
}
}
]
```
## Hashtag Extraction
It can identify and extract hashtags from the utterances, this works for any language.
```javascript
"utterance": "Open source is great! #proudtobeaxa",
"entities": [
{
"start": 22,
"end": 34,
"len": 13,
"accuracy": 0.95,
"sourceText": "#proudtobeaxa",
"utteranceText": "#proudtobeaxa",
"entity": "hashtag",
"resolution": {
"value": "#proudtobeaxa"
}
}
]
```
## Phone Number Extraction
It can identify and extract phone numbers from the utterances, this works for any language.
```javascript
"utterance": "So here is my number +1 541-754-3010 callme maybe",
"entities": [
{
"start": 21,
"end": 35,
"len": 15,
"accuracy": 0.95,
"sourceText": "+1 541-754-3010",
"utteranceText": "+1 541-754-3010",
"entity": "phonenumber",
"resolution": {
"value": "+1 541-754-3010"
}
}
]
```
## URL Extraction
It can identify and extract URLs from the utterances, this works for any language.
```javascript
"utterance": "The url is https://something.com",
"entities": [
{
"start": 11,
"end": 31,
"len": 21,
"accuracy": 0.95,
"sourceText": "https://something.com",
"utteranceText": "https://something.com",
"entity": "url",
"resolution": {
"value": "https://something.com"
}
}
]
```
## Number Extraction
It can identify and extract numbers. This works for any language, and the numbers can be integer or floats.
```javascript
"utterance": "This is 12",
"entities": [
{
"start": 8,
"end": 9,
"len": 2,
"accuracy": 0.95,
"sourceText": "12",
"utteranceText": "12",
"entity": "number",
"resolution": {
"strValue": "12",
"value": 12,
"subtype": "integer"
}
}
]
```
The numbers can be also be text written, but this only works for: English, French, Spanish and Portuguese.
```javascript
"utterance": "This is twelve",
"entities": [
{
"start": 8,
"end": 13,
"len": 6,
"accuracy": 0.95,
"sourceText": "twelve",
"utteranceText": "twelve",
"entity": "number",
"resolution": {
"strValue": "12",
"value": 12,
"subtype": "integer"
}
}
]
```
The text feature also works for fractions.
```javascript
"utterance": "one over 3",
"entities": [
{
"start": 0,
"end": 9,
"len": 10,
"accuracy": 0.95,
"sourceText": "one over 3",
"utteranceText": "one over 3",
"entity": "number",
"resolution": {
"strValue": "0.333333333333333",
"value": 0.333333333333333,
"subtype": "float"
}
}
]
```
## Ordinal Extraction
It can identify and extract ordinal numbers. This works only for English, Spanish, French and Portuguese.
```javascript
"utterance": "He was 2nd",
"entities": [
{
"start": 7,
"end": 9,
"len": 3,
"accuracy": 0.95,
"sourceText": "2nd",
"utteranceText": "2nd",
"entity": "ordinal",
"resolution": {
"strValue": "2",
"value": 2,
"subtype": "integer"
}
}
]
```
The numbers can be written by text.
```javascript
"utterance": "one hundred twenty fifth",
"entities": [
{
"start": 0,
"end": 23,
"len": 24,
"accuracy": 0.95,
"sourceText": "one hundred twenty fifth",
"utteranceText": "one hundred twenty fifth",
"entity": "ordinal",
"resolution": {
"strValue": "125",
"value": 125,
"subtype": "integer"
}
}
]
```
## Percentage Extraction
It can identify and extract percentages. If the percentage is indicated with the symbol % it works for any language.
```javascript
"utterance": "68.2%",
"entities": [
{
"start": 0,
"end": 4,
"len": 5,
"accuracy": 0.95,
"sourceText": "68.2%",
"utteranceText": "68.2%",
"entity": "percentage",
"resolution": {
"strValue": "68.2%",
"value": 68.2,
"subtype": "float"
}
}
]
```
The percentage can be indicated by text, but it only works for English, French, Spanish and Portuguese.
```javascript
"utterance": "68.2 percent",
"entities": [
{
"start": 0,
"end": 11,
"len": 12,
"accuracy": 0.95,
"sourceText": "68.2 percent",
"utteranceText": "68.2 percent",
"entity": "percentage",
"resolution": {
"strValue": "68.2%",
"value": 68.2,
"subtype": "float"
}
}
]
```
It can understand text numbers but only works for English, French, Spanish and Portuguese.
```javascript
"utterance": "thirty five percentage",
"entities": [
{
"start": 0,
"end": 21,
"len": 22,
"accuracy": 0.95,
"sourceText": "thirty five percentage",
"utteranceText": "thirty five percentage",
"entity": "percentage",
"resolution": {
"strValue": "35%",
"value": 35,
"subtype": "integer"
}
}
]
```
## Dimension Extraction
It can identify and extract different dimensions, like length, distance, speed, volume, area,... If the international acronym of the dimension is used then it works in any language.
```javascript
"utterance": "120km",
"entities": [
{
"start": 0,
"end": 4,
"len": 5,
"accuracy": 0.95,
"sourceText": "120km",
"utteranceText": "120km",
"entity": "dimension",
"resolution": {
"strValue": "120",
"value": 120,
"unit": "Kilometer",
"localeUnit": "Kilometer"
}
}
]
```
In instead of the acronym, the text of the dimension is used in a language, then it works in English, French, Spanish and Portuguese.
```javascript
"utterance": "Está a 325 kilómetros de Bucarest",
"entities": [
{
"start": 7,
"end": 20,
"len": 14,
"accuracy": 0.95,
"sourceText": "325 kilómetros",
"utteranceText": "325 kilómetros",
"entity": "dimension",
"resolution": {
"strValue": "325",
"value": 325,
"unit": "Kilometer",
"localeUnit": "Kilómetro"
}
}
]
```
## Age Extraction
It can identify and extract ages. It works in English, French, Spanish and Portuguese.
Take into account that several ways to say an age can be also confused with a duraction ("It will be 10 years" can be an age or a duration), so two overlaped entities, one age and one duration, can be returned.
```javascript
"utterance": "This saga is ten years old",
"entities": [
{
"start": 13,
"end": 25,
"len": 13,
"accuracy": 0.95,
"sourceText": "ten years old",
"utteranceText": "ten years old",
"entity": "age",
"resolution": {
"strValue": "10",
"value": 10,
"unit": "Year",
"localeUnit": "Year"
}
},
{
"start": 13,
"end": 21,
"len": 9,
"accuracy": 0.95,
"sourceText": "ten years",
"utteranceText": "ten years",
"entity": "duration",
"resolution": {
"values": [
{
"timex": "P10Y",
"type": "duration",
"value": "315360000"
}
]
}
}
]
```
## Currency Extraction
It can identify and extract currency values. It works in English, French, Spanish and Portuguese.
```javascript
"utterance": "420 million finnish markka",
"entities": [
{
"start": 0,
"end": 25,
"len": 26,
"accuracy": 0.95,
"sourceText": "420 million finnish markka",
"utteranceText": "420 million finnish markka",
"entity": "currency",
"resolution": {
"strValue": "420000000",
"value": 420000000,
"unit": "Finnish markka",
"localeUnit": "Finnish markka"
}
}
]
```
It the used language is not english, the localeUnit contains the locale name of the currency.
```javascript
"utterance": "420 millones de marcos finlandeses",
"entities": [
{
"start": 0,
"end": 33,
"len": 34,
"accuracy": 0.95,
"sourceText": "420 millones de marcos finlandeses",
"utteranceText": "420 millones de marcos finlandeses",
"entity": "currency",
"resolution": {
"strValue": "420000000",
"value": 420000000,
"unit": "Finnish markka",
"localeUnit": "Marco finlandés"
}
}
]
```
## Date Extraction
It can identify and extract dates, if provided in numeric format can work in any language, but take into account that the localization also affect to the date format.
```javascript
"utterance": "28/10/2018",
"entities": [
{
"start": 0,
"end": 9,
"len": 10,
"accuracy": 0.95,
"sourceText": "28/10/2018",
"utteranceText": "28/10/2018",
"entity": "date",
"resolution": {
"type": "date",
"timex": "2018-10-28",
"strValue": "2018-10-28",
"date": "2018-10-28T00:00:00.000Z"
}
}
]
```
It can understand written date formats in English, French, Spanish and Portuguese.
```javascript
"utterance": "Volveré el 12 de enero del 2019",
"entities": [
{
"start": 11,
"end": 30,
"len": 20,
"accuracy": 0.95,
"sourceText": "12 de enero del 2019",
"utteranceText": "12 de enero del 2019",
"entity": "date",
"resolution": {
"type": "date",
"timex": "2019-01-12",
"strValue": "2019-01-12",
"date": "2019-01-12T00:00:00.000Z"
}
}
]
```
It can understand partial dates. Then the timex contains the resolution, example, if I provide the day but not the month neither the year, then both year and month will be filled with X. Also, in this case, two possible dates will be returned: the past and the future. Also take into account that in cases like that, the resolution can also include a number, like in this example:
```javascript
"utterance": "I'll go back on 15",
"entities": [
{
"start": 16,
"end": 17,
"len": 2,
"accuracy": 0.95,
"sourceText": "15",
"utteranceText": "15",
"entity": "number",
"resolution": {
"strValue": "15",
"value": 15,
"subtype": "integer"
}
},
{
"start": 16,
"end": 17,
"len": 2,
"accuracy": 0.95,
"sourceText": "15",
"utteranceText": "15",
"entity": "date",
"resolution": {
"type": "interval",
"timex": "XXXX-XX-15",
"strPastValue": "2018-08-15",
"pastDate": "2018-08-15T00:00:00.000Z",
"strFutureValue": "2018-09-15",
"futureDate": "2018-09-15T00:00:00.000Z"
}
}
]
```
When the grain resolution is not a day, it can be resolved not only with a past and future date, but also each date is an interval. Example: if we are resolving a date that is a month, like January, it will return the past and future januaries, but also each january is an interval from the day 1 of January until the day 1 of February, like in this example:
```javascript
"utterance": "I'll be out in Jan",
"entities": [
{
"start": 15,
"end": 17,
"len": 3,
"accuracy": 0.95,
"sourceText": "Jan",
"utteranceText": "Jan",
"entity": "daterange",
"resolution": {
"type": "interval",
"timex": "XXXX-01",
"strPastStartValue": "2018-01-01",
"pastStartDate": "2018-01-01T00:00:00.000Z",
"strPastEndValue": "2018-02-01",
"pastEndDate": "2018-02-01T00:00:00.000Z",
"strFutureStartValue": "2019-01-01",
"futureStartDate": "2019-01-01T00:00:00.000Z",
"strFutureEndValue": "2019-02-01",
"futureEndDate": "2019-02-01T00:00:00.000Z"
}
}
]
```
It also identifies expecial dates, like Christmas:
```javascript
"utterance": "I will return in Christmas",
"entities": [
{
"start": 17,
"end": 25,
"len": 9,
"accuracy": 0.95,
"sourceText": "Christmas",
"utteranceText": "Christmas",
"entity": "date",
"resolution": {
"type": "interval",
"timex": "XXXX-12-25",
"strPastValue": "2017-12-25",
"pastDate": "2017-12-25T00:00:00.000Z",
"strFutureValue": "2018-12-25",
"futureDate": "2018-12-25T00:00:00.000Z"
}
}
]
```
## Duration Extraction
It can identify and extract duration intervals. It works currently in English only. The resolution is done in seconds, with a timex indicator. Example: "It will take me 5 minutes" the timex is "PT5M" meaning "Present Time 5 Minutes".
```javascript
"utterance": "It will take me 5 minutes",
"entities": [
{
"start": 13,
"end": 21,
"len": 9,
"accuracy": 0.95,
"sourceText": "5 minutes",
"utteranceText": "5 minutes",
"entity": "duration",
"resolution": {
"values": [
{
"timex": "PT5M",
"type": "duration",
"value": "300"
}
]
}
}
]
```
================================================
FILE: docs/v3/example-of-use.md
================================================
# Example of use
You can see a great example of use at the folder \examples\console-bot. This example is able to train the bot and save the model to a file, so when the bot is started again, the model is loaded instead of trained again.
You can start to build your NLP from scratch with few lines:
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'] });
// Adds the utterances and intents for the NLP
manager.addDocument('en', 'goodbye for now', 'greetings.bye');
manager.addDocument('en', 'bye bye take care', 'greetings.bye');
manager.addDocument('en', 'okay see you later', 'greetings.bye');
manager.addDocument('en', 'bye for now', 'greetings.bye');
manager.addDocument('en', 'i must go', 'greetings.bye');
manager.addDocument('en', 'hello', 'greetings.hello');
manager.addDocument('en', 'hi', 'greetings.hello');
manager.addDocument('en', 'howdy', 'greetings.hello');
// Train also the NLG
manager.addAnswer('en', 'greetings.bye', 'Till next time');
manager.addAnswer('en', 'greetings.bye', 'see you soon!');
manager.addAnswer('en', 'greetings.hello', 'Hey there!');
manager.addAnswer('en', 'greetings.hello', 'Greetings!');
async function train() {
await manager.train();
}
// Train and save the model
train();
manager.save();
manager.process('en', 'I have to go').then(console.log);
```
This will show this result in console:
```bash
{ locale: 'en',
localeIso2: 'en',
language: 'English',
utterance: 'I have to go',
classification:
[ { label: 'greetings.bye', value: 0.9791293407583773 },
{ label: 'greetings.hello', value: 0.020870659241622735 } ],
intent: 'greetings.bye',
score: 0.9791293407583773,
entities: [],
sentiment:
{ score: 0.5,
comparative: 0.125,
vote: 'positive',
numWords: 4,
numHits: 1,
type: 'senticon',
language: 'en' },
answer: 'Till next time' }
```
================================================
FILE: docs/v3/example-with-languages.md
================================================
# Example with languages
This example show how to handle the three kind of different scenarios with languages:
1. The language has stemmer
2. The language exists but has no stemmer
3. The language does not exists (fantasy language)
This example uses english, korean and klingon.
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en', 'ko', 'kl'] });
// Gives a name for the fantasy language
manager.describeLanguage('kl', 'Klingon');
// Train Klingon
manager.addDocument('kl', 'nuqneH', 'hello');
manager.addDocument('kl', 'maj po', 'hello');
manager.addDocument('kl', 'maj choS', 'hello');
manager.addDocument('kl', 'maj ram', 'hello');
manager.addDocument('kl', `nuqDaq ghaH ngaQHa'moHwI'mey?`, 'keys');
manager.addDocument('kl', `ngaQHa'moHwI'mey lujta' jIH`, 'keys');
// Train Korean
manager.addDocument('ko', '여보세요', 'greetings.hello');
manager.addDocument('ko', '안녕하세요!', 'greetings.hello');
manager.addDocument('ko', '여보!', 'greetings.hello');
manager.addDocument('ko', '어이!', 'greetings.hello');
manager.addDocument('ko', '좋은 아침', 'greetings.hello');
manager.addDocument('ko', '안녕히 주무세요', 'greetings.hello');
manager.addDocument('ko', '안녕', 'greetings.bye');
manager.addDocument('ko', '친 공이 타자', 'greetings.bye');
manager.addDocument('ko', '상대가 없어 남는 사람', 'greetings.bye');
manager.addDocument('ko', '지엽적인 것', 'greetings.bye');
manager.addDocument('en', 'goodbye for now', 'greetings.bye');
manager.addDocument('en', 'bye bye take care', 'greetings.bye');
manager.addDocument('en', 'okay see you later', 'greetings.bye');
manager.addDocument('en', 'bye for now', 'greetings.bye');
manager.addDocument('en', 'i must go', 'greetings.bye');
manager.addDocument('en', 'hello', 'greetings.hello');
manager.addDocument('en', 'hi', 'greetings.hello');
manager.addDocument('en', 'howdy', 'greetings.hello');
// Train also the NLG
manager.addAnswer('en', 'greetings.bye', 'Till next time');
manager.addAnswer('en', 'greetings.bye', 'see you soon!');
manager.addAnswer('en', 'greetings.hello', 'Hey there!');
manager.addAnswer('en', 'greetings.hello', 'Greetings!');
// Train and save the model.
await manager.train();
manager.save();
// English and Korean can be automatically detected
manager.process('I have to go').then(console.log);
manager.process('상대가 없어 남는 편').then(console.log);
// For Klingon, as it cannot be automatically detected,
// you must provide the locale
manager.process('kl', `ngaQHa'moHwI'mey nIH vay'`).then(console.log);
```
================================================
FILE: docs/v3/installation.md
================================================
# Installation
If you're looking to use NLP.js in your node application, you can install via NPM like so:
```bash
npm install node-nlp
```
================================================
FILE: docs/v3/language-guesser.md
================================================
# Language Guesser
The language object gives your code the skill to guess the language of a text. The method guess do that returning to you an array of all the languages ordered descending by the score.
```javascript
const { Language } = require('node-nlp');
const language = new Language();
const guess = language.guess(
'When the night has come And the land is dark And the moon is the only light we see',
);
console.log(guess[0]);
```
This piece of code should write in console:
```bash
{ alpha3: 'eng', alpha2: 'en', language: 'English', score: 1 }
```
You can limit the amount of results with the third parameter of the method:
```javascript
const { Language } = require('node-nlp');
const language = new Language();
let guess = language.guess(
"Quan arriba la nit i la terra és fosca i la lluna és l'única llum que podem veure",
null,
3,
);
console.log(guess.length);
console.log(guess[0]);
```
In console you'll see:
```bash
3
{ alpha3: 'cat', alpha2: 'ca', language: 'Catalan', score: 1 }
```
You can also provide an allow list of accepted language to find the one that fits better
```javascript
const { Language } = require('node-nlp');
const language = new Language();
let guess = language.guess(
'When the night has come And the land is dark And the moon is the only light we see',
['de', 'es'],
);
console.log(guess[0]);
```
In console you'll see:
```bash
{ alpha3: 'deu', alpha2: 'de', language: 'German', score: 1 }
```
You can also use the method guessBest that returns only the best result.
```javascript
const { Language } = require('node-nlp');
const language = new Language();
let guess = language.guessBest(
'When the night has come And the land is dark And the moon is the only light we see',
);
console.log(guess[0]);
let guess = language.guessBest(
'When the night has come And the land is dark And the moon is the only light we see',
['de', 'es'],
);
console.log(guess[0]);
```
That will show this in console:
```bash
{ alpha3: 'eng', alpha2: 'en', language: 'English', score: 1 }
{ alpha3: 'deu', alpha2: 'de', language: 'German', score: 1 }
```
================================================
FILE: docs/v3/language-support.md
================================================
# Language Support
Any language is supported, even fantasy languages, but there are 30 languages with stemmer support. The difference between using an stemmer or only tokenization exists, but with a good training is not so big. You can take a look into [Benchmarking](docs/benchmarking.md). For english, using the SIGDIAL22 to compare, with stemmer the success is 94%, only with tokenization is 91%, so is good enough.
Inside Stemmers there are three type of stemmers: Natural, Snowball and Custom. Natural stemmers are these supported by the Natural library, while Snowball stemmers are the ported version from the Snowball ones from Java. Custom stemmers are those with custom development out of the scope of Natural or Snowball.
Inside Sentiment Analysis, there are three possible algoritms: AFINN, Senticon and Pattern.
## Classification
| Language | Natural | Snowball | Custom |
| :-------------- | :-----: | :------: | :----: |
| Arabic (ar) | | X | |
| Armenian (hy) | | X | |
| Basque (eu) | | X | |
| Bengali (bn) | | | X
| Catalan (ca) | | X | |
| Chinese (zh) | | | X |
| Czech (cx) | | X | |
| Danish (da) | | X | |
| Dutch (nl) | X | X | |
| English (en) | X | X | |
| Farsi (fa) | X | | |
| Finnish (fi) | | X | |
| French (fr) | X | X | |
| Galician (gl) | | | X |
| German (de) | | X | |
| Greek (el) | | | X |
| Hindi (hi) | | | X |
| Hungarian (hu) | | X | |
| Indonesian (id) | X | | |
| Irish (ga) | | X | |
| Italian (it) | X | X | |
| Japanese (ja) | X | | |
| Korean (ko) | | | X |
| Lithuanian (lt) | | X | |
| Malay (ms) | X | | |
| Nepali (ne) | | X | |
| Norwegian (no) | X | X | |
| Polish (pl) | | | X |
| Portuguese (pt) | X | X | |
| Romanian (ro) | | X | |
| Russian (ru) | X | X | |
| Serbian (sr) | | X | |
| Slovene (sl) | | X | |
| Spanish (es) | X | X | |
| Swedish (sv) | X | X | |
| Tagalog (tl) | | | X |
| Tamil (ta) | | X | |
| Thai (th) | | | X |
| Turkish (tr) | | X | |
| Ukrainian (uk) | | | X |
## Sentiment Analysis
| Language | AFINN | Senticon | Pattern |
| :-------------- | :---: | :------: | :-----: |
| Arabic (ar) | | | |
| Armenian (hy) | | | |
| Basque (eu) | | X | |
| Bengali (bn) | X | | |
| Catalan (ca) | | X | |
| Chinese (zh) | | | |
| Czech (cs) | | | |
| Danish (da) | X | | |
| Dutch (nl) | | | X |
| English (en) | X | X | X |
| Farsi (fa) | | | |
| Finnish (fi) | X | | |
| French (fr) | | | X |
| Galician (gl) | | X | |
| German (de) | | X | |
| Greek (el) | | | |
| Hindi (hi) | | | |
| Hungarian (hu) | | | |
| Indonesian (id) | | | |
| Irish (ga) | | | |
| Italian (it) | | | X |
| Japanese (ja) | | | |
| Korean (ko) | | | |
| Lithuanian (lt) | | | |
| Malay (ms) | | | |
| Nepali (ne) | | | |
| Norwegian (no) | | | |
| Portuguese (pt) | X | | |
| Polish (pl) | | | |
| Romanian (ro) | | | |
| Russian (ru) | X | | |
| Serbian (sr) | | | |
| Slovene (sl) | | | |
| Spanish (es) | X | X | |
| Swedish (sv) | | | |
| Tagalog (tl) | | | |
| Tamil (ta) | | | |
| Thai (th) | | | |
| Turkish (tr) | | | |
| Ukrainian (uk) | | | |
## Builtin Entity Extraction
| Builtin | English | French | Spanish | Portuguese | Chinese | Japanese | Other |
| :----------- | :-----: | :----: | :-----: | :--------: | :-----: | :------: | :---: |
| Email | X | X | X | X | X | X | X |
| Ip | X | X | X | X | X | X | X |
| Hashtag | X | X | X | X | X | X | X |
| Phone Number | X | X | X | X | X | X | X |
| URL | X | X | X | X | X | X | X |
| Number | X | X | X | X | X | X | see 1 |
| Ordinal | X | X | X | X | X | X | |
| Percentage | X | X | X | X | X | X | see 2 |
| Dimension | X | X | X | X | X | X | see 3 |
| Age | X | X | X | X | X | X | |
| Currency | X | X | X | X | X | X | |
| Date | X | X | X | X | see 4 | see 4 | see 4 |
| Duration | X | | | | | | |
- 1: Only for non text numbers
- 2: Only for % symbol non text numbers
- 3: Only for dimension acronyms (km, s, km/h...) non text numbers
- 4: Only dd/MM/yyyy formats or similars, non text
## Auto Stemmer
Previously, if we wanted to score a corpus in a language which stemmer is not yet implemented (you can see the list of current stemmers [here](https://github.com/axa-group/nlp.js/tree/master/lib/nlp/stemmers)), we had to use a `Token Stemmer`. For instance, Polish:
```javascript
const stemmer = new TokenStemmer(NlpUtil.getTokenizer("pl"));
const managerTokenizer = new NlpManager({
languages: ["pl"],
nlu: { useStemDict: false, log: false, useNoneFeature: true, stemmer },
ner: { builtins: [] }
});
scoreCorpus(corpus, managerTokenizer);
// 0.59765625
```
But how to stem word without knowing the rules of a language? Sometimes reducing a word to its stem can be very complex, because of the morphology of the language. In languages with very little inflection like English, the stem is usually not distinct from the "normal" form of the word, so the process of stemming is quite trivial.
But it's not the case of highly inflected languages (most of the Indo-European languages), because their words can be composed with one or more morphemes to assign grammatical properties, making the stems very different from the root word.
The goal of the Auto Stemmer is to automatically learn how to stem that highly inflected languages. For this, the Auto Stemmer will try to learn which are the potential suffixes of a language according to the training corpus, and then find out the part of each word that never changes whoch will be considered as the stem of the word.
### Example: Polish Auto-Stemmer
As told before, we can take advantage of the Auto-Stemmer to learn automatically the rules of Polish from the training corpus:
```javascript
/*
If no stemmer is provided to NlpManager, an AutoStemmer instance according to the locale provided is created internally in NlpUtil.autoStemmers object.
NlpUtil.autoStemmers['pl'] = new AutoStemmer(NlpUtil.getTokenizer('pl'));
*/
const managerTokenizer = new NlpManager({
languages: ["pl"],
nlu: { useStemDict: false, log: false, useNoneFeature: true },
ner: { builtins: [] }
});
scoreCorpus(corpus, managerTokenizer);
// 0.81640625,
```
That's how you can build a stemmer from an unknown language. Still not the perfect stemmer for the specific language, but you can obtain better results.
You can run the test [here](https://github.com/axa-group/nlp.js/blob/master/test/nlp/stemmers/auto-stemmer.test.js).
================================================
FILE: docs/v3/loading-from-excel.md
================================================
# Loading from Excel
The NLP manager can load all the information from an excel file.
You can find an example excel file at https://github.com/axa-group/nlp.js/blob/master/test/nlp/rules.xls
Inside the excel there must exists 4 tables: Languages, Named Entities, Intents and Responses. It's very important to keep the existing format of the tables: first row is the name of the table, second row are the column names, next rows are the data.


================================================
FILE: docs/v3/logistic-regression-nlu.md
================================================
# Logistic Regression NLU
You can train a Logistic Regression NLU classifier (indicating language) with utterances and their intents.
Then you can give a different utterance, and get the classifications for each intent, sorted descending by the score value.
```javascript
const { LogisticRegressionNLU } = require('node-nlp');
async function main() {
const classifier = new LogisticRegressionNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getClassifications('où sont mes clés');
console.log(classifications);
// [ { label: 'keys', value: 0.9949973422308985 },
// { label: 'greet', value: 0.005002657769101338 } ]
}
main();
```
Or you can get only the best classification
```javascript
const { LogisticRegressionNLU } = require('node-nlp');
async function main() {
const classifier = new LogisticRegressionNLU({ language: 'fr' });
classifier.add('Bonjour', 'greet');
classifier.add('bonne nuit', 'greet');
classifier.add('Bonsoir', 'greet');
classifier.add("J'ai perdu mes clés", 'keys');
classifier.add('Je ne trouve pas mes clés', 'keys');
classifier.add('Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getBestClassification('où sont mes clés');
console.log(classifications);
// { label: 'keys', value: 0.9949973422308985 }
}
main();
```
Currently 40 languages are supported:
- Arabic (ar)
- Armenian (hy)
- Basque (eu)
- Bengali (bn)
- Catala (ca)
- Chinese (zh)
- Czech (cs)
- Danish (da)
- Dutch (nl)
- English (en)
- Farsi (fa)
- Finnish (fi)
- French (fr)
- Galician (gl)
- German (de)
- Greek (el)
- Hindi (hi)
- Hungarian (hu)
- Indonesian (id)
- Irish (ga)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Lithuanian (lt)
- Malay (ms)
- Nepali (ne)
- Norwegian (no)
- Polish (pl)
- Portuguese (pt)
- Romanian (ro)
- Russian (ru)
- Serbian (sr)
- Slovene (sl)
- Spanish (es)
- Swedish (sv)
- Tagalog (tl)
- Tamil (ta)
- Thai (th)
- Turkish (tr)
- Ukrainian (uk)
================================================
FILE: docs/v3/microsoft-bot-framework.md
================================================
# Microsoft Bot Framwork
## Introduction
You can integrate it with Microsoft Bot Framework chatbots by importing the _Recognizer_ class from _node-nlp_ and using it as always. This will be enough to work as the LUIS Recognizer, using `bot.recognizer(recognizer);` but as LUIS does not have NLG you'll have to develop how to integrate the answers and not only the intents.
If you want that the chatbot is automatically using the NLG, instead of calling `bot.recognizer(recognizer);` that tells Microsoft Bot Framework to use the recognizer, use `recognizer.setBot(bot, true, 0.7);` that is telling the recognizer what bot must be used, the second parameter (optional) is true to override the usual behaviour of Microsoft Bot Framework with the improved behaviour of the recognizer, and the last parameter (optional) is the threshold that indicates that the intent response must be used instead of triggering the next step of the dialogs.
Another feature that comes with the improved behaviour, is that when the answer starts with _/_ then is not a phrase to return to the user, and is a _session.beginDialog()_, so the dialog of the given name is raised and pushed into the dialog stack.

## Example of use
Example of a bot using Microsoft Bot Framework and NLP.js.
To create the bot create a folder and start a new node project with npm init. Then install the dependencies:
```sh
npm i botbuilder express node-nlp
```
Put the code in the index.js, and in the same folder put an excel file with the NLP information.
Execute it and the magic will happen. The bot will be trained the first time you start the app, so first time will take some time to train, but next times will load the already trained model.
```javascript
const builder = require('botbuilder');
const express = require('express');
const fs = require('fs');
const { Recognizer } = require('node-nlp');
const modelName = './model.nlp';
const excelName = './model.xls';
// Creates a connector for the chatbot
const connector = new builder.ChatConnector({
appId: process.env.BOT_APP_ID,
appPassword: process.env.BOT_APP_PASSWORD,
});
// Creates a node-nlp recognizer for the bot
const recognizer = new Recognizer();
if (fs.existsSync(modelName)) {
recognizer.load(modelName);
} else {
recognizer.loadExcel(excelName);
recognizer.save(modelName);
}
// Creates the bot using a memory storage, with a main dialog that
// use the node-nlp recognizer to calculate the answer.
const bot = new builder.UniversalBot(connector, session => {
session.send(
`You reached the default message handler. You said '${
session.message.text
}'.`,
);
}).set('storage', new builder.MemoryBotStorage());
recognizer.setBot(bot, true);
// Creates the express application
const app = express();
const port = process.env.PORT || 3000;
app.post('/api/messages', connector.listen());
app.listen(port);
console.log(`Chatbot listening on port ${port}`);
```
## Recognizer and Slot filling
Slot filling is done automatically when using the recognizer for microsoft bot framework when the behaviour overrided to be the one of NLP.js.
Example code for slot filling:
```javascript
const recognizer = new Recognizer();
recognizer.nlpManager.addLanguage('en');
const fromEntity = recognizer.nlpManager.addTrimEntity('fromCity');
fromEntity.addBetweenCondition('en', 'from', 'to', { skip: ['travel'] });
fromEntity.addAfterLastCondition('en', 'from', { skip: ['travel'] });
const toEntity = recognizer.nlpManager.addTrimEntity('toCity');
toEntity.addBetweenCondition('en', 'to', 'from', { skip: ['travel'] });
toEntity.addAfterLastCondition('en', 'to', { skip: ['travel'] });
recognizer.nlpManager.slotManager.addSlot('travel', 'toCity', true, {
en: 'Where do you want to go?',
});
recognizer.nlpManager.slotManager.addSlot('travel', 'fromCity', true, {
en: 'From where you are traveling?',
});
recognizer.nlpManager.slotManager.addSlot('travel', 'date', true, {
en: 'When do you want to travel?',
});
recognizer.nlpManager.addDocument(
'en',
'I want to travel from %fromCity% to %toCity% %date%',
'travel',
);
recognizer.nlpManager.addAnswer(
'en',
'travel',
'You want to travel from {{ fromCity }} to {{ toCity }} {{ date }}',
);
await recognizer.nlpManager.train();
```
With this example what we achieve is that the user can use the intent providing partial information, and the bot automatically ask the information not provided. So we can have conversations like:
```
user> I want to travel
bot> Where do you want to go?
user> London
bot> From where you are traveling?
user> Barcelona
bot> When do you want to travel?
user> tomorrow
bot> You want to travel from Barcelona to London tomorrow
```
But also can provide some information or all at the first utterance of the intent:
```
user> I want to travel tomorrow to London
bot> From where you are traveling?
user> Barcelona
bot> You want to travel from Barcelona to London tomorrow
```
You have an example of a Microsoft Bot Framework bot with an intent with slot filling at [`/examples/microsoft-bot`](https://github.com/axa-group/nlp.js/tree/master/examples/microsoft-bot)
================================================
FILE: docs/v3/ner-manager.md
================================================
# NER Manager
The Named Entity Recognition manager is able to store an structure of entities and options of the entity for each language.
Then, given an utterance and the language, is able to search the options of the entity inside the utterance, and return a list
of the bests substrings. This is done using a threshold for the accuracy, by default the accuracy is 0.8 but you can provide it in the options when creating the instance.
## Enum Named Entities
It support Enum Named Entities: Named entities where you define options, and the possible text for each option.
```javascript
const { NerManager } = require('node-nlp');
const manager = new NerManager({ threshold: 0.8 });
manager.addNamedEntityText(
'hero',
'spiderman',
['en'],
['Spiderman', 'Spider-man'],
);
manager.addNamedEntityText(
'hero',
'iron man',
['en'],
['iron man', 'iron-man'],
);
manager.addNamedEntityText('hero', 'thor', ['en'], ['Thor']);
manager.addNamedEntityText(
'food',
'burguer',
['en'],
['Burguer', 'Hamburguer'],
);
manager.addNamedEntityText('food', 'pizza', ['en'], ['pizza']);
manager.addNamedEntityText('food', 'pasta', ['en'], ['Pasta', 'spaghetti']);
manager.findEntities(
'I saw spederman eating speghetti in the city',
'en',
).then(entities => {
// ...
})
// value is [ { start: 6, end: 15, levenshtein: 1, accuracy: 0.8888888888888888, option: 'spiderman',
// sourceText: 'Spiderman', entity: 'hero', utteranceText: 'spederman' },
// { start: 23, end: 32, levenshtein: 1, accuracy: 0.8888888888888888, option: 'pasta',
// sourceText: 'spaghetti', entity: 'food', utteranceText: 'speghetti' } ]
```
## Regular Expression Named Entities
It also support Regular Expression entities
```javascript
const { NerManager } = require('node-nlp');
const manager = new NerManager({ threshold: 0.8 });
manager.addNamedEntityText(
'hero',
'spiderman',
['en'],
['Spiderman', 'Spider-man'],
);
manager.addNamedEntityText(
'hero',
'iron man',
['en'],
['iron man', 'iron-man'],
);
manager.addNamedEntityText('hero', 'thor', ['en'], ['Thor']);
manager.addNamedEntityText(
'food',
'burguer',
['en'],
['Burguer', 'Hamburguer'],
);
manager.addNamedEntityText('food', 'pizza', ['en'], ['pizza']);
manager.addNamedEntityText('food', 'pasta', ['en'], ['Pasta', 'spaghetti']);
const entity = manager.addNamedEntity('email', 'regex');
entity.addRegex('en', /\b(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})\b/gi);
manager.findEntities(
'I saw spiderman eating speghetti in the city and his mail is spiderman@gmial.com',
'en',
).then(entities => console.log(entities));
// [ { start: 6,
// end: 15,
// levenshtein: 0,
// accuracy: 1,
// option: 'spiderman',
// sourceText: 'Spiderman',
// entity: 'hero',
// utteranceText: 'spiderman' },
// { start: 23,
// end: 32,
// levenshtein: 1,
// accuracy: 0.8888888888888888,
// option: 'pasta',
// sourceText: 'spaghetti',
// entity: 'food',
// utteranceText: 'speghetti' },
// { start: 61,
// end: 80,
// accuracy: 1,
// sourceText: 'spiderman@gmial.com',
// utteranceText: 'spiderman@gmial.com',
// entity: 'email' } ]
```
## Trim Named Entities
It supports entities that works trimming text conditions, like text between two words.
It supports 7 different conditions:
- Between
- After
- After First
- After Last
- Before
- Before First
- Before Last
```javascript
const { NerManager } = require('node-nlp');
const manager = new NerManager({ threshold: 0.8 });
const fromEntity = manager.addNamedEntity('fromEntity', 'trim');
fromEntity.addBetweenCondition('en', 'from', 'to');
fromEntity.addAfterLastCondition('en', 'to');
const toEntity = manager.addNamedEntity('toEntity', 'trim');
fromEntity.addBetweenCondition('en', 'to', 'from');
fromEntity.addAfterLastCondition('en', 'from');
manager.findEntities(
'I want to travel from Barcelona to Madrid',
'en',
).then(entities => console.log(entities));
// [ { type: 'between',
// start: 22,
// end: 31,
// accuracy: 1,
// sourceText: 'Barcelona',
// utteranceText: 'Barcelona',
// entity: 'fromEntity' },
// { type: 'afterLast',
// start: 35,
// end: 41,
// accuracy: 0.99,
// sourceText: 'Madrid',
// utteranceText: 'Madrid',
// entity: 'fromEntity' },
// { type: 'between',
// start: 10,
// end: 16,
// accuracy: 1,
// sourceText: 'travel',
// utteranceText: 'travel',
// entity: 'fromEntity' } ]
```
## Utterances with duplicated Entities
Utterances with more than one entity with the same name are supported, providing an "allow list" with numbered entity names.
The "numbered entity" format must be in the form `${entityName}_${integer}`. E.g. "hero\_1", "food\_2", etc.
```javascript
const { NerManager } = require('node-nlp');
const manager = new NerManager();
manager.addNamedEntityText('hero', 'spiderman', ['en'], ['Spider-man']);
manager.addNamedEntityText('hero', 'iron man', ['en'], ['ironman']);
manager.addNamedEntityText('food', 'pizza', ['en'], ['pizza']);
manager.addNamedEntityText('food', 'pasta', ['en'], ['spaghetti']);
const entities = manager.findEntities(
'I saw spiderman eating spaghetti and ironman eating pizza',
'en',
['hero_1', 'hero_2', 'food_1', 'food_2'],
);
// entities = [
// {
// entity: "hero_1",
// option: "spiderman",
// utteranceText: "spiderman",
// ...
// },
// {
// entity: "food_1",
// option: "pasta",
// utteranceText: "spaghetti",
// ...
// },
// {
// entity: "hero_2",
// option: "iron man",
// utteranceText: "ironman",
// ...
// },
// {
// entity: "food_2",
// option: "pizza",
// utteranceText: "pizza",
// ...
// }
// ]
```
================================================
FILE: docs/v3/nlp-manager.md
================================================
# NLP Manager
The `NlpManager` is able to manage several languages. It manages the named entities, and trains the NLP classifier for each language. Once trained, `NlpManager` is ready to process utterances. It will try to guess the language, if one isn't provided when processing an utterance. During processing, the `NlpManager` will:
- Identify the language
- Classify the utterance, using Machine Learning (ML)
- Find named, and/or default entities in the utterance
- Limit entities to those described with variables in the highest scoring intent, _if present_ (variable syntax for intents uses wildcard operators `%entity_name%`)
- Replace variables in the best answer with matched entities (variable syntax for answers uses handlebars: `{{entity_name}}`)
- Analyze sentiment
- Return the intent, entities, classifications, associated score(s), answer, and sentiment
> Note that periods are not supported in the entity names when using them as variables. Don't use `{{entity.name}}`. Use `{{entity_name}}` instead. The intent variable names must match the answer variable names.
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'] });
manager.addNamedEntityText(
'hero',
'spiderman',
['en'],
['Spiderman', 'Spider-man'],
);
manager.addNamedEntityText(
'hero',
'iron man',
['en'],
['iron man', 'iron-man'],
);
manager.addNamedEntityText('hero', 'thor', ['en'], ['Thor']);
manager.addNamedEntityText(
'food',
'burguer',
['en'],
['Burguer', 'Hamburguer'],
);
manager.addNamedEntityText('food', 'pizza', ['en'], ['pizza']);
manager.addNamedEntityText('food', 'pasta', ['en'], ['Pasta', 'spaghetti']);
manager.addDocument('en', 'I saw %hero% eating %food%', 'sawhero');
manager.addDocument(
'en',
'I have seen %hero%, he was eating %food%',
'sawhero',
);
manager.addDocument('en', 'I want to eat %food%', 'wanteat');
await manager.train();
manager
.process('I saw spiderman eating spaghetti today in the city!')
.then(result => console.log(result));
// { locale: 'en',
// localeIso2: 'en',
// language: 'English',
// utterance: 'I saw spiderman eating spaghetti today in the city!',
// classification:
// [ { label: 'sawhero', value: 0.9920519933583061 },
// { label: 'wanteat', value: 0.00794800664169383 } ],
// intent: 'sawhero',
// score: 0.9920519933583061,
// entities:
// [ { start: 6,
// end: 15,
// levenshtein: 0,
// accuracy: 1,
// option: 'spiderman',
// sourceText: 'Spiderman',
// entity: 'hero',
// utteranceText: 'spiderman' },
// { start: 23,
// end: 32,
// levenshtein: 0,
// accuracy: 1,
// option: 'pasta',
// sourceText: 'spaghetti',
// entity: 'food',
// utteranceText: 'spaghetti' } ],
// sentiment:
// { score: 0.708,
// comparative: 0.07866666666666666,
// vote: 'positive',
// numWords: 9,
// numHits: 2,
// type: 'senticon',
// language: 'en' } }
```
## Saving and Loading Models
`NlpManager` has support for saving, and loading the models of trained managers. These models include the thetas that are produced by the ML algorithms, so they can be loaded into instances of `NlpManager` without having to train them again.
In addition to reducing startup time, this can be useful when a system doesn't have write permissions to local disk, or in cases where we benefit from deterministic results, such as A/B testing (or testing in general).
There are two approaches to saving and loading models: [using files](#saveload-using-files), and [using JSON](#importexport-using-json).
### Save/Load Using Files
`NlpManager.save` writes a model file to disk, and `NlpManager.load` reads a model file from disk.
By default, models are saved into `modelFileName` after training:
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'], modelFileName: filename });
await manager.train();
```
Saving can also be done manually with `manager.save()`:
```javascript
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'], autoSave: false });
await manager.train();
manager.save(filename);
```
Loading a model file:
```javascript
const { NlpManager } = require('node-nlp');
manager = new NlpManager();
manager.load(filename);
```
> Note that if no filename is provided, './model.nlp' will be used by default.
### Import/Export Using JSON
`NlpManager.export` returns a model in JSON format, and `NlpManager.import` reads a model in JSON format. When exporting a model, you can choose whether or not to minify it.
Exporting a model:
```javascript
const { NlpManager } = require('node-nlp');
const minified = true;
const manager = new NlpManager();
// ...
await manager.train();
const data = manager.export(minified);
```
Importing a model:
```javascript
const fs = require('fs');
const { NlpManager } = require('node-nlp');
const data = fs.readFileSync('model.nlp', 'utf8');
const manager = new NlpManager();
manager.import(data);
// ...
```
## Context
You can also provide a context to `NlpManger.process` so the NLG changes its behaviour based on the context.
In this example, the manager chooses, "Till next time, {{name}}!" as the answer, and is able to use the `%name%` in the answer because context from the greeting is provided. The final result is, "Till next time, John!".
```javascript
const { NlpManager, ConversationContext } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'] });
const context = new ConversationContext();
manager.addDocument('en', 'Hello my name is %name%', 'greeting.hello');
manager.addDocument('en', 'I have to go', 'greeting.bye');
manager.addAnswer('en', 'greeting.hello', 'Hey there!');
manager.addAnswer('en', 'greeting.bye', 'Till next time, {{name}}!');
manager.train()
.then(result => manager.process('en', 'Hello my name is John', context))
.then(result => manager.process('en', 'I have to go', context))
.then(result => console.log(result.answer));
```
## Transformers
The NLPManager constructor accepts a `processTransformer` function, which can be used to intercept, and modify the output of the manager's `process` function. When present, it will run after `process` completes, and the result of this function is what will be returned by `process`.
```javascript
const manager = new NlpManager({
processTransformer: async (originalProcessOutput) => {
return {
...originalProcessOutput,
...{
anything: 'you want'
}
}
}
});
```
or with Promises:
```javascript
const manager = new NlpManager({
processTransformer: (originalProcessOutput) => new Promise((resolve, reject) => {
originalProcessOutput.context = 'modify or add properties'
resolve(originalProcessOutput)
})
});
```
it can be synchronous, too:
```javascript
const manager = new NlpManager({
processTransformer: function (originalProcessOutput) {
return Object.assign(originalProcessOutput, { anything: 'you want' })
}
});
```
================================================
FILE: docs/v3/nlu-manager.md
================================================
# NLU Manager
The NLU Manager is the main classifier class for Natural Language Understanding.
Is able to manage several languages at the same time, and also to train by domains.
## Training only one language
When training only one language, the domain is 'default'.
```javascript
const { NluManager } = require('./lib');
async function main() {
const classifier = new NluManager({ languages: ['fr'] });
classifier.addDocument('fr', 'Bonjour', 'greet');
classifier.addDocument('fr', 'bonne nuit', 'greet');
classifier.addDocument('fr', 'Bonsoir', 'greet');
classifier.addDocument('fr', "J'ai perdu mes clés", 'keys');
classifier.addDocument('fr', 'Je ne trouve pas mes clés', 'keys');
classifier.addDocument('fr', 'Je ne me souviens pas où sont mes clés', 'keys');
await classifier.train();
const classifications = classifier.getClassifications('où sont mes clés');
console.log(classifications);
// { utterance: 'où sont mes clés',
// locale: 'fr',
// languageGuessed: true,
// localeIso2: 'fr',
// language: 'French',
// domain: 'default',
// classifications:
// [ { label: 'keys', value: 0.9076581467793369 },
// { label: 'greet', value: 0.09234185322066314 } ],
// intent: 'keys',
// score: 0.9076581467793369 }}
}
main();
```
## Training several languages and domains
When there are more than one domain, then by default the domains are trained separately, and
a master neural network is trained with the utterances to map into the domains. That way, when
a utterance is received to be classified, the first step is to identify the domain, and then
the intent in the neural network of the domain. This has also the effect that in the answer,
only the intents from the domain are added instead of all the intents of the agent.
When working with domains, before adding any intent to the domain, the domain must be
assigned using assignDomain as in the example:
```javascript
const { NluManager } = require('./lib');
async function main() {
const classifier = new NluManager({ languages: ['en', 'es'] });
classifier.assignDomain('en', 'order.check', 'food');
classifier.addDocument('en', 'what do I have in my basket', 'order.check');
classifier.addDocument('en', 'check my cart', 'order.check');
classifier.addDocument('en', "show me what I've ordered", 'order.check');
classifier.addDocument('en', "what's in my basket", 'order.check');
classifier.addDocument('en', 'check my order', 'order.check');
classifier.addDocument('en', 'check what I have ordered', 'order.check');
classifier.addDocument('en', 'show my order', 'order.check');
classifier.addDocument('en', 'check my basket', 'order.check');
classifier.assignDomain('en', 'order.check_status', 'food');
classifier.addDocument('en', 'how soon will it be delivered', 'order.check_status');
classifier.addDocument('en', 'check the status of my delivery', 'order.check_status');
classifier.addDocument('en', 'when should I expect delivery', 'order.check_status');
classifier.addDocument('en', 'check my order status', 'order.check_status');
classifier.addDocument('en', 'where is my order', 'order.check_status');
classifier.addDocument('en', 'where is my delivery', 'order.check_status');
classifier.addDocument('en', 'status of my order', 'order.check_status');
classifier.assignDomain('en', 'agent.acquaintance', 'personality');
classifier.addDocument('en', 'say about you', 'agent.acquaintance');
classifier.addDocument('en', 'why are you here', 'agent.acquaintance');
classifier.addDocument('en', 'what is your personality', 'agent.acquaintance');
classifier.addDocument('en', 'describe yourself', 'agent.acquaintance');
classifier.addDocument('en', 'tell me about yourself', 'agent.acquaintance');
classifier.addDocument('en', 'tell me about you', 'agent.acquaintance');
classifier.addDocument('en', 'what are you', 'agent.acquaintance');
classifier.addDocument('en', 'who are you', 'agent.acquaintance');
classifier.addDocument('en', 'talk about yourself', 'agent.acquaintance');
classifier.assignDomain('en', 'agent.age', 'personality');
classifier.addDocument('en', 'your age', 'agent.age');
classifier.addDocument('en', 'how old is your platform', 'agent.age');
classifier.addDocument('en', 'how old are you', 'agent.age');
classifier.addDocument('en', "what's your age", 'agent.age');
classifier.addDocument('en', "I'd like to know your age", 'agent.age');
classifier.addDocument('en', 'tell me your age', 'agent.age');
classifier.assignDomain('es', 'order.check', 'food');
classifier.addDocument('es', 'qué tengo en mi cesta', 'order.check');
classifier.addDocument('es', 'comprueba mi carrito', 'order.check');
classifier.addDocument('es', 'enséñame qué he pedido', 'order.check');
classifier.addDocument('es', 'qué hay en mi carrito?', 'order.check');
classifier.addDocument('es', 'comprueba mi compra', 'order.check');
classifier.addDocument('es', 'comprueba qué he comprado', 'order.check');
classifier.addDocument('es', 'muéstrame mi compra', 'order.check');
classifier.assignDomain('es', 'order.check_status', 'food');
classifier.addDocument('es', 'cuándo me lo van a traer?', 'order.check_status');
classifier.addDocument('es', 'cómo va la entrega?', 'order.check_status');
classifier.addDocument('es', 'cuándo me traerán mi pedido?', 'order.check_status');
classifier.addDocument('es', 'en qué estado está mi pedido?', 'order.check_status');
classifier.addDocument('es', 'dónde está mi compra?', 'order.check_status');
classifier.addDocument('es', 'dónde está mi pedido?', 'order.check_status');
classifier.addDocument('es', 'estado de mi compra', 'order.check_status');
classifier.assignDomain('es', 'agent.acquaintance', 'personality');
classifier.addDocument('es', 'cuéntame sobre ti', 'agent.acquaintance');
classifier.addDocument('es', 'qué haces aquí?', 'agent.acquaintance');
classifier.addDocument('es', 'cómo es tu personalidad?', 'agent.acquaintance');
classifier.addDocument('es', 'descríbete', 'agent.acquaintance');
classifier.addDocument('es', 'quién eres?', 'agent.acquaintance');
classifier.addDocument('es', 'qué eres?', 'agent.acquaintance');
classifier.addDocument('es', 'háblame de ti', 'agent.acquaintance');
classifier.assignDomain('es', 'agent.age', 'personality');
classifier.addDocument('es', 'qué edad tienes?', 'agent.age');
classifier.addDocument('es', 'cuántos años tienes?', 'agent.age');
classifier.addDocument('es', 'cuál es tu edad?', 'agent.age');
classifier.addDocument('es', 'quiero saber tu edad', 'agent.age');
classifier.addDocument('es', 'dime tu edad', 'agent.age');
await classifier.train();
const classifications = classifier.getClassifications('Cuéntame algo sobre ti');
console.log(classifications);
// { utterance: 'Cuéntame algo sobre ti',
// locale: 'es',
// languageGuessed: true,
// localeIso2: 'es',
// language: 'Spanish',
// domain: 'personality',
// classifications:
// [ { label: 'agent.acquaintance', value: 1 },
// { label: 'agent.age', value: 0 } ],
// intent: 'agent.acquaintance',
// score: 1 }
}
main();
```
Currently 40 languages are supported:
- Arabic (ar)
- Armenian (hy)
- Basque (eu)
- Bengali (bn)
- Catala (ca)
- Chinese (zh)
- Czech (cs)
- Danish (da)
- Dutch (nl)
- English (en)
- Farsi (fa)
- Finnish (fi)
- French (fr)
- Galician (gl)
- German (de)
- Greek (el)
- Hindi (hi)
- Hungarian (hu)
- Indonesian (id)
- Irish (ga)
- Italian (it)
- Japanese (ja)
- Korean (ko)
- Lithuanian (lt)
- Malay (ms)
- Nepali (ne)
- Norwegian (no)
- Polish (pl)
- Portuguese (pt)
- Romanian (ro)
- Russian (ru)
- Serbian (sr)
- Slovene (sl)
- Spanish (es)
- Swedish (sv)
- Tagalog (tl)
- Tamil (ta)
- Thai (th)
- Turkish (tr)
- Ukrainian (uk)
================================================
FILE: docs/v3/sentiment-analysis.md
================================================
# Sentiment Analysis
The Sentiment Analysis module is able to calculate the sentiment based on the AFINN.
Languages accepted:
- eu: Basque
- bn: Bengali
- ca: Catalan
- en: English
- es: Spanish
- nl: Dutch
- fr: French
- it: Italian
- de: German
- gl: Galician
- da: Danish
- fi: Finnish
- ru: Russian
- pt: Portuguese
| Language | AFINN | Senticon | Pattern | Negations |
| -------- | :---: | :------: | :-----: | :-------: |
| Basque | | X | | |
| Bengali | X | | | |
| Catalan | | X | | |
| Danish | X | | | |
| Dutch | | | X | X |
| English | X | X | X | X |
| French | | | X | |
| Galician | | X | | |
| Italian | | | X | |
| Spanish | X | X | | X |
| German | | X | | X |
| Finnish | X | | | |
| Russian | X | | | |
| Portuguese | X | | | X |
By default Senticon is used if possible, otherwise AFINN, and last one Pattern:
| Language | AFINN | Senticon | Pattern |
| -------- | :---: | :------: | :-----: |
| Bengali | X | | |
| Basque | | X | |
| Catalan | | X | |
| Dutch | | | X |
| English | | X | |
| French | | | X |
| Galician | | X | |
| Italian | | | X |
| Spanish | | X | |
| German | | X | |
You can use a SentimentAnalyzer if you want to manage only one language:
```javascript
const { SentimentAnalyzer } = require('node-nlp');
const sentiment = new SentimentAnalyzer({ language: 'en' });
sentiment
.getSentiment('I like cats')
.then(result => console.log(result));
// { score: 0.313,
// numWords: 3,
// numHits: 1,
// comparative: 0.10433333333333333,
// type: 'senticon',
// language: 'en' }
sentiment
.getSentiment('cats are stupid')
.then(result => console.log(result));
// { score: -0.458,
// numWords: 3,
// numHits: 1,
// comparative: -0.15266666666666667,
// type: 'senticon',
// language: 'en' }
```
Or you can use the SentimentManager if you want to manage several languages:
```javascript
const { SentimentManager } = require('node-nlp');
const sentiment = new SentimentManager();
sentiment
.process('en', 'I like cats')
.then(result => console.log(result));
// { score: 0.313,
// numWords: 3,
// numHits: 1,
// comparative: 0.10433333333333333,
// type: 'senticon',
// language: 'en' }
sentiment
.process('es', 'Los gatitos son amor')
.then(result => console.log(result));
// { score: 0.278,
// comparative: 0.0695,
// vote: 'positive',
// numWords: 4,
// numHits: 1,
// type: 'senticon',
// language: 'es' }
```
================================================
FILE: docs/v3/similar-search.md
================================================
# Similar Search
Similar Search is used to calculate the levenshtein distance between two strings and also is able to search the best substring inside a string, i.e., the substring of a string which levenshtein distance is the smaller to another string.
You can calculate the levenshtein distance:
```javascript
const { SimilarSearch } = require('node-nlp');
const similar = new SimilarSearch();
similar.getSimilarity('mikailovitch', 'Mikhaïlovitch');
// returns 3
```
Also you can use collation so case and special characters are compared using collation:
```javascript
const { SimilarSearch } = require('node-nlp');
const similar = new SimilarSearch({ useCollation: true });
similar.getSimilarity('mikailovitch', 'Mikhaïlovitch');
// returns 1
```
Unfortunately, collation is very slow, but you can use normalization. Normalization preprocess strings converting to lowercase and converting accented characters to their unaccented equivalent, and this is pretty much faster than collation:
```javascript
const { SimilarSearch } = require('node-nlp');
const similar = new SimilarSearch({ normalize: true });
similar.getSimilarity('mikailovitch', 'Mikhaïlovitch');
// returns 1
```
You can search the best substring of string with the lower levenshtein distance. The accuracy is calculated as _(length - distance) / length_:
```javascript
const { SimilarSearch } = require('node-nlp');
const similar = new SimilarSearch();
const text1 =
'Morbi interdum ultricies neque varius condimentum. Donec volutpat turpis interdum metus ultricies vulputate.';
const text2 = 'interdumaultriciesbneque';
const result = similar.getBestSubstring(text1, text2);
// result is { start: 6, end: 30, levenshtein: 2, accuracy: 0.9166666666666666 }
```
================================================
FILE: docs/v3/slot-filling.md
================================================
# Slot filling
One great feature that NLP systems can have is slot filling. When you define an intent, you can define what entities are mandatory and how to ask the data if not provided, so the intent is not considered complete until all the entities are provided. Example: If you have a travel intent that needs the city of departure, city of arrival and date of travel, and all three are mandatory, you can have a conversation like that one:
```
user> I want to travel
bot> Where do you want to go?
user> London
bot> From where you are traveling?
user> Barcelona
bot> When do you want to travel?
user> tomorrow
bot> You want to travel from Barcelona to London tomorrow
```
To achieve slot filling, when an utterance is processed and are still slots not filled, the answer provided is replaced by the question of the first slot to fill in the provided language, and the result contains an object *slotFill* with the information needed to understand what is the intent being filled, the current entities filled, the language, and the current slot being filled.
```javascript
const { NlpManager } = require('./lib');
async function main() {
const manager = new NlpManager({ languages: ['en'] });
const fromEntity = manager.addTrimEntity('fromCity');
fromEntity.addBetweenCondition('en', 'from', 'to');
fromEntity.addAfterLastCondition('en', 'from');
const toEntity = manager.addTrimEntity('toCity');
toEntity.addBetweenCondition('en', 'to', 'from', { skip: ['travel'] });
toEntity.addAfterLastCondition('en', 'to');
manager.slotManager.addSlot('travel', 'fromCity', true, { en: 'From where you are traveling?' });
manager.slotManager.addSlot('travel', 'toCity', true, { en: 'Where do you want to go?' });
manager.slotManager.addSlot('travel', 'date', true, { en: 'When do you want to travel?' });
manager.addDocument('en', 'I want to travel from %fromCity% to %toCity% %date%', 'travel');
await manager.train();
const result = await manager.process('en', 'I want to travel to Madrid tomorrow', {});
console.log(JSON.stringify(result, null, 2));
}
main();
// console:
// {
// "locale": "en",
// "localeIso2": "en",
// "language": "English",
// "utterance": "I want to travel to Madrid tomorrow",
// "classification": [
// {
// "label": "travel",
// "value": 0.999876611513072
// }
// ],
// "intent": "travel",
// "domain": "default",
// "score": 0.999876611513072,
// "entities": [
// {
// "start": 27,
// "end": 34,
// "len": 8,
// "accuracy": 0.95,
// "sourceText": "tomorrow",
// "utteranceText": "tomorrow",
// "entity": "date",
// "resolution": {
// "type": "date",
// "timex": "2018-09-19",
// "strValue": "2018-09-19",
// "date": "2018-09-19T00:00:00.000Z"
// }
// },
// {
// "type": "afterLast",
// "start": 20,
// "end": 25,
// "len": 6,
// "accuracy": 0.99,
// "sourceText": "Madrid",
// "utteranceText": "Madrid",
// "entity": "toCity"
// }
// ],
// "sentiment": {
// "score": -0.275,
// "comparative": -0.03928571428571429,
// "vote": "negative",
// "numWords": 7,
// "numHits": 1,
// "type": "senticon",
// "language": "en"
// },
// "slotFill": {
// "localeIso2": "en",
// "intent": "travel",
// "entities": [
// {
// "start": 27,
// "end": 34,
// "len": 8,
// "accuracy": 0.95,
// "sourceText": "tomorrow",
// "utteranceText": "tomorrow",
// "entity": "date",
// "resolution": {
// "type": "date",
// "timex": "2018-09-19",
// "strValue": "2018-09-19",
// "date": "2018-09-19T00:00:00.000Z"
// }
// },
// {
// "type": "afterLast",
// "start": 20,
// "end": 25,
// "len": 6,
// "accuracy": 0.99,
// "sourceText": "Madrid",
// "utteranceText": "Madrid",
// "entity": "toCity"
// }
// ],
// "currentSlot": "fromCity"
// },
// "srcAnswer": "Where do you want to go?",
// "answer": "Where do you want to go?"
// }
```
## Entities with the same name
Utterances with more than one entity with the same name are supported by providing "numbered entities".
The "numbered entity" format must be in the form `${entityName}_${integer}`. E.g. "hero\_1", "food\_2", etc.
```javascript
const { NlpManager } = require('node-nlp');
async function main() {
const manager = new NlpManager({ languages: ['en'] });
manager.addDocument(
'en',
'I saw %hero_1% together with %hero_2%, they where eating %food%',
'saw_heroes_eating'
);
await manager.train();
manager.addNamedEntityText('hero', 'spiderman', ['en'], ['Spider-man']);
manager.addNamedEntityText('hero', 'iron man', ['en'], ['iron man']);
manager.addNamedEntityText('hero', 'thor', ['en'], ['Thor']);
manager.addNamedEntityText('food', 'burguer', ['en'], ['Burguer']);
manager.addNamedEntityText('food', 'pizza', ['en'], ['pizza']);
manager.addNamedEntityText('food', 'pasta', ['en'], ['Pasta', 'spaghetti']);
manager.slotManager.addSlot('saw_heroes_eating', 'hero_1', true, { en: 'Who did you see?' });
manager.slotManager.addSlot('saw_heroes_eating', 'hero_2', true, { en: 'With whom did you see {{ hero_1 }}?' });
manager.slotManager.addSlot('saw_heroes_eating', 'food', true, { en: 'What where they eating?' });
manager.addAnswer('en', 'saw_heroes_eating', 'Wow! You saw {{ hero_1 }} and {{ hero_2 }} eating {{ food }}!');
const result1 = await manager.process('I saw spiderman together with ironman, they where eating spaghetti');
console.log(result1.answer);
const result2 = await manager.process('I saw iron-man and the other hero, they where eating a burger');
console.log(result2.answer);
const result3 = await manager.process('I saw him together with thor, they where eating pizza');
console.log(result3.answer);
const result4 = await manager.process('I saw iron-man together with thor, they where eating');
console.log(result4.answer);
const result5 = await manager.process('I saw them together, they where eating');
console.log(result5.answer);
// Console output:
// Wow! You saw spiderman and iron man eating pasta!
// With whom did you see iron man?
// With whom did you see thor?
// What where they eating?
// Who did you see?
}
main();
```
================================================
FILE: docs/v3/static/BinaryNeuralNetworkClassifier.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: BinaryNeuralNetworkClassifier</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Class: BinaryNeuralNetworkClassifier</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>BinaryNeuralNetworkClassifier<span class="signature">(settings)</span><span class="type-signature"></span></h2>
<div class="class-description">Classifier using Brain.js Neural Network</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="BinaryNeuralNetworkClassifier"><span class="type-signature"></span>new BinaryNeuralNetworkClassifier<span class="signature">(settings)</span><span class="type-signature"></span></h4>
<div class="description">
Constructor of the class.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>settings</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Settings for the instance.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_binary-neural-network-classifier.js.html">classifiers/binary-neural-network-classifier.js</a>, <a href="classifiers_binary-neural-network-classifier.js.html#line29">line 29</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addTrainer"><span class="type-signature"></span>addTrainer<span class="signature">(label)</span><span class="type-signature"></span></h4>
<div class="description">
If a trainer does not exists for a label, create it.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>label</code></td>
<td class="type">
<span class="param-type">*</span>
</td>
<td class="description last"></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_binary-neural-network-classifier.js.html">classifiers/binary-neural-network-classifier.js</a>, <a href="classifiers_binary-neural-network-classifier.js.html#line52">line 52</a>
</li></ul></dd>
</dl>
<h4 class="name" id="classify"><span class="type-signature"></span>classify<span class="signature">(sample)</span><span class="type-signature"> → {Object}</span></h4>
<div class="description">
Given a sample, return the classification.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>sample</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Input sample.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_binary-neural-network-classifier.js.html">classifiers/binary-neural-network-classifier.js</a>, <a href="classifiers_binary-neural-network-classifier.js.html#line87">line 87</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Classification output.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Object</span>
</dd>
</dl>
<h4 class="name" id="trainBatch"><span class="type-signature"></span>trainBatch<span class="signature">(dataset)</span><span class="type-signature"></span></h4>
<div class="description">
Train the classifier given a dataset.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>dataset</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Dataset with features and outputs.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_binary-neural-network-classifier.js.html">classifiers/binary-neural-network-classifier.js</a>, <a href="classifiers_binary-neural-network-classifier.js.html#line63">line 63</a>
</li></ul></dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="BinaryNeuralNetworkClassifier.html">BinaryNeuralNetworkClassifier</a></li><li><a href="Classifier.html">Classifier</a></li><li><a href="ConversationContext.html">ConversationContext</a></li><li><a href="DutchStemmer.html">DutchStemmer</a></li><li><a href="EnglishStemmer.html">EnglishStemmer</a></li><li><a href="EnumNamedEntity.html">EnumNamedEntity</a></li><li><a href="Evaluator.html">Evaluator</a></li><li><a href="HungarianStemmer.html">HungarianStemmer</a></li><li><a href="ItalianStemmer.html">ItalianStemmer</a></li><li><a href="Language.html">Language</a></li><li><a href="LogisticRegressionClassifier.html">LogisticRegressionClassifier</a></li><li><a href="Matrix.html">Matrix</a></li><li><a href="MemoryConversationContext.html">MemoryConversationContext</a></li><li><a href="NamedEntity.html">NamedEntity</a></li><li><a href="NerManager.html">NerManager</a></li><li><a href="NlgManager.html">NlgManager</a></li><li><a href="NlpClassifier.html">NlpClassifier</a></li><li><a href="NlpManager.html">NlpManager</a></li><li><a href="NorwegianStemmer.html">NorwegianStemmer</a></li><li><a href="PortugueseStemmer.html">PortugueseStemmer</a></li><li><a href="Recognizer.html">Recognizer</a></li><li><a href="RegexNamedEntity.html">RegexNamedEntity</a></li><li><a href="RomanianStemmer.html">RomanianStemmer</a></li><li><a href="RussianStemmer.html">RussianStemmer</a></li><li><a href="SentimentAnalyzer.html">SentimentAnalyzer</a></li><li><a href="SentimentManager.html">SentimentManager</a></li><li><a href="SimilarSearch.html">SimilarSearch</a></li><li><a href="SlotManager.html">SlotManager</a></li><li><a href="StemmerJa.html">StemmerJa</a></li><li><a href="SwedishStemmer.html">SwedishStemmer</a></li><li><a href="Tokenizer.html">Tokenizer</a></li><li><a href="TrimNamedEntity.html">TrimNamedEntity</a></li><li><a href="TurkishStemmer.html">TurkishStemmer</a></li><li><a href="Vector.html">Vector</a></li><li><a href="XTable.html">XTable</a></li></ul><h3>Global</h3><ul><li><a href="global.html#endsinArr">endsinArr</a></li><li><a href="global.html#prelude">prelude</a></li><li><a href="global.html#regions">regions</a></li><li><a href="global.html#stem">stem</a></li><li><a href="global.html#stopwords">stopwords</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Sat Oct 13 2018 19:14:51 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
================================================
FILE: docs/v3/static/Classifier.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: Classifier</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Class: Classifier</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>Classifier<span class="signature">(settings)</span><span class="type-signature"></span></h2>
<div class="class-description">Class for a generic classifier.
This is an abstract class that must be implemented by subclasses that
contains the real classifier algorithm.</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="Classifier"><span class="type-signature"></span>new Classifier<span class="signature">(settings)</span><span class="type-signature"></span></h4>
<div class="description">
Constructor of the class.
Initialize the basic properties and structure of any classifier.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>settings</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Settings for initializing the instance.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line29">line 29</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addLabel"><span class="type-signature"></span>addLabel<span class="signature">(label)</span><span class="type-signature"> → {Array.<String>}</span></h4>
<div class="description">
Adds a new label to the observation tree. If the label already exists,
return the existing one without creating it again.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>label</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Label to be created or getted.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line57">line 57</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
List of observations assigned to this label.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Array.<String></span>
</dd>
</dl>
<h4 class="name" id="addObservation"><span class="type-signature"></span>addObservation<span class="signature">(observation, label)</span><span class="type-signature"></span></h4>
<div class="description">
Adds a new observation to the classifier.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>observation</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Observation to be added.</td>
</tr>
<tr>
<td class="name"><code>label</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Label of the observation.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line70">line 70</a>
</li></ul></dd>
</dl>
<h4 class="name" id="classifyObservation"><span class="type-signature"></span>classifyObservation<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
Classify one observation.
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line130">line 130</a>
</li></ul></dd>
</dl>
<h4 class="name" id="clear"><span class="type-signature"></span>clear<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
Clears the content of the instance.
This is done by initializing the observations object, the labels array
and the observation count.
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
<h4 class="name" id="createClassificationMatrix"><span class="type-signature"></span>createClassificationMatrix<span class="signature">()</span><span class="type-signature"> → {Array.<Array.<Number>>}</span></h4>
<div class="description">
Creates a matrix filled with zeros, that relate every single observation
with every single label.
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line166">line 166</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
A bidimensional array where x is the observation
and y is the label, filled to zeros.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Array.<Array.<Number>></span>
</dd>
</dl>
<h4 class="name" id="getBestClassification"><span class="type-signature"></span>getBestClassification<span class="signature">(observation)</span><span class="type-signature"> → {Object}</span></h4>
<div class="description">
Given an observation, get the label and score of the best classification.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>observation</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Observation to be classified.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line152">line 152</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Best classification of the observation.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Object</span>
</dd>
</dl>
<h4 class="name" id="getClassifications"><span class="type-signature"></span>getClassifications<span class="signature">(observation)</span><span class="type-signature"> → {Array.<Object>}</span></h4>
<div class="description">
Get all the labels and score for each label from one observation.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>observation</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Observation to be classified.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line141">line 141</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Sorted array of classifications, that means label and the score.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Array.<Object></span>
</dd>
</dl>
<h4 class="name" id="recalculateObservationCount"><span class="type-signature"></span>recalculateObservationCount<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
Iterate all the observations to calculate the total observation count.
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line117">line 117</a>
</li></ul></dd>
</dl>
<h4 class="name" id="removeObservation"><span class="type-signature"></span>removeObservation<span class="signature">(observation, label)</span><span class="type-signature"></span></h4>
<div class="description">
Removes an observation. The label of the observation can be passed or
can be omitted. When omitted, it loops over all labels tryin to remove
the given observation.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>observation</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Observation to be removed.</td>
</tr>
<tr>
<td class="name"><code>label</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Label of the observation, or undefined to iterate over
all labels.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line104">line 104</a>
</li></ul></dd>
</dl>
<h4 class="name" id="removeObservationByLabel"><span class="type-signature"></span>removeObservationByLabel<span class="signature">(observation, label)</span><span class="type-signature"></span></h4>
<div class="description">
Removes an observation from the observation list of a label.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>observation</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Observation to be removed.</td>
</tr>
<tr>
<td class="name"><code>label</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">Label where we want the observation to be removed.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="classifiers_classifier.js.html">classifiers/classifier.js</a>, <a href="classifiers_classifier.js.html#line81">line 81</a>
</li></ul></dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="BinaryNeuralNetworkClassifier.html">BinaryNeuralNetworkClassifier</a></li><li><a href="Classifier.html">Classifier</a></li><li><a href="ConversationContext.html">ConversationContext</a></li><li><a href="DutchStemmer.html">DutchStemmer</a></li><li><a href="EnglishStemmer.html">EnglishStemmer</a></li><li><a href="EnumNamedEntity.html">EnumNamedEntity</a></li><li><a href="Evaluator.html">Evaluator</a></li><li><a href="HungarianStemmer.html">HungarianStemmer</a></li><li><a href="ItalianStemmer.html">ItalianStemmer</a></li><li><a href="Language.html">Language</a></li><li><a href="LogisticRegressionClassifier.html">LogisticRegressionClassifier</a></li><li><a href="Matrix.html">Matrix</a></li><li><a href="MemoryConversationContext.html">MemoryConversationContext</a></li><li><a href="NamedEntity.html">NamedEntity</a></li><li><a href="NerManager.html">NerManager</a></li><li><a href="NlgManager.html">NlgManager</a></li><li><a href="NlpClassifier.html">NlpClassifier</a></li><li><a href="NlpManager.html">NlpManager</a></li><li><a href="NorwegianStemmer.html">NorwegianStemmer</a></li><li><a href="PortugueseStemmer.html">PortugueseStemmer</a></li><li><a href="Recognizer.html">Recognizer</a></li><li><a href="RegexNamedEntity.html">RegexNamedEntity</a></li><li><a href="RomanianStemmer.html">RomanianStemmer</a></li><li><a href="RussianStemmer.html">RussianStemmer</a></li><li><a href="SentimentAnalyzer.html">SentimentAnalyzer</a></li><li><a href="SentimentManager.html">SentimentManager</a></li><li><a href="SimilarSearch.html">SimilarSearch</a></li><li><a href="SlotManager.html">SlotManager</a></li><li><a href="StemmerJa.html">StemmerJa</a></li><li><a href="SwedishStemmer.html">SwedishStemmer</a></li><li><a href="Tokenizer.html">Tokenizer</a></li><li><a href="TrimNamedEntity.html">TrimNamedEntity</a></li><li><a href="TurkishStemmer.html">TurkishStemmer</a></li><li><a href="Vector.html">Vector</a></li><li><a href="XTable.html">XTable</a></li></ul><h3>Global</h3><ul><li><a href="global.html#endsinArr">endsinArr</a></li><li><a href="global.html#prelude">prelude</a></li><li><a href="global.html#regions">regions</a></li><li><a href="global.html#stem">stem</a></li><li><a href="global.html#stopwords">stopwords</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Sat Oct 13 2018 19:14:51 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
================================================
FILE: docs/v3/static/ConversationContext.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: ConversationContext</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Class: ConversationContext</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>ConversationContext<span class="signature">(settings)</span><span class="type-signature"></span></h2>
<div class="class-description">Abstract class for a conversation context of a chatbot.
The conversation context is the responsible of storing and retrieving
the context scope variables based on the current conversation.
The getConversationContext receive the session of the chatbot, and must return
a promise with the context in the resolve.</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="ConversationContext"><span class="type-signature"></span>new ConversationContext<span class="signature">(settings)</span><span class="type-signature"></span></h4>
<div class="description">
Constructor of the class.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>settings</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Settings for the instance.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="recognizer_conversation-context.js.html">recognizer/conversation-context.js</a>, <a href="recognizer_conversation-context.js.html#line31">line 31</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="getConversationContext"><span class="type-signature"></span>getConversationContext<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
Given a session, return a promise to resolve the conversation context.
</di
gitextract_o01b_1hw/
├── .eslintignore
├── .eslintrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ └── node.js.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── docs/
│ ├── v3/
│ │ ├── NLU_evaluation.xlsx
│ │ ├── README.md
│ │ ├── bayes-nlu.md
│ │ ├── benchmarking.md
│ │ ├── binary-relevance-nlu.md
│ │ ├── brain-nlu.md
│ │ ├── builtin-duckling.md
│ │ ├── builtin-entity-extraction.md
│ │ ├── example-of-use.md
│ │ ├── example-with-languages.md
│ │ ├── installation.md
│ │ ├── language-guesser.md
│ │ ├── language-support.md
│ │ ├── loading-from-excel.md
│ │ ├── logistic-regression-nlu.md
│ │ ├── microsoft-bot-framework.md
│ │ ├── ner-manager.md
│ │ ├── nlp-manager.md
│ │ ├── nlu-manager.md
│ │ ├── sentiment-analysis.md
│ │ ├── similar-search.md
│ │ ├── slot-filling.md
│ │ └── static/
│ │ ├── BinaryNeuralNetworkClassifier.html
│ │ ├── Classifier.html
│ │ ├── ConversationContext.html
│ │ ├── DutchStemmer.html
│ │ ├── EnglishStemmer.html
│ │ ├── EnumNamedEntity.html
│ │ ├── Evaluator.html
│ │ ├── HungarianStemmer.html
│ │ ├── ItalianStemmer.html
│ │ ├── Language.html
│ │ ├── LogisticRegressionClassifier.html
│ │ ├── Matrix.html
│ │ ├── MemoryConversationContext.html
│ │ ├── NamedEntity.html
│ │ ├── NerManager.html
│ │ ├── NlgManager.html
│ │ ├── NlpClassifier.html
│ │ ├── NlpManager.html
│ │ ├── NorwegianStemmer.html
│ │ ├── PortugueseStemmer.html
│ │ ├── Recognizer.html
│ │ ├── RegexNamedEntity.html
│ │ ├── RomanianStemmer.html
│ │ ├── RussianStemmer.html
│ │ ├── SentimentAnalyzer.html
│ │ ├── SentimentManager.html
│ │ ├── SimilarSearch.html
│ │ ├── SlotManager.html
│ │ ├── StemmerJa.html
│ │ ├── SwedishStemmer.html
│ │ ├── Tokenizer.html
│ │ ├── TrimNamedEntity.html
│ │ ├── TurkishStemmer.html
│ │ ├── Vector.html
│ │ ├── XTable.html
│ │ ├── classifiers_binary-neural-network-classifier.js.html
│ │ ├── classifiers_classifier.js.html
│ │ ├── classifiers_logistic-regression-classifier.js.html
│ │ ├── global.html
│ │ ├── index.html
│ │ ├── language_language.js.html
│ │ ├── math_mathops.js.html
│ │ ├── math_matrix.js.html
│ │ ├── math_vector.js.html
│ │ ├── ner_enum-named-entity.js.html
│ │ ├── ner_named-entity.js.html
│ │ ├── ner_ner-manager.js.html
│ │ ├── ner_regex-named-entity.js.html
│ │ ├── ner_trim-named-entity.js.html
│ │ ├── nlg_nlg-manager.js.html
│ │ ├── nlp_nlp-classifier.js.html
│ │ ├── nlp_nlp-manager.js.html
│ │ ├── nlp_nlp-util.js.html
│ │ ├── nlp_stemmers_dutch-stemmer.js.html
│ │ ├── nlp_stemmers_english-stemmer.js.html
│ │ ├── nlp_stemmers_hungarian-stemmer.js.html
│ │ ├── nlp_stemmers_italian-stemmer.js.html
│ │ ├── nlp_stemmers_natural_porter-stemmer-fr.js.html
│ │ ├── nlp_stemmers_natural_porter-stemmer-pt.js.html
│ │ ├── nlp_stemmers_natural_stemmer-ja.js.html
│ │ ├── nlp_stemmers_natural_token.js.html
│ │ ├── nlp_stemmers_norwegian-stemmer.js.html
│ │ ├── nlp_stemmers_portuguese-stemmer.js.html
│ │ ├── nlp_stemmers_romanian-stemmer.js.html
│ │ ├── nlp_stemmers_russian-stemmer.js.html
│ │ ├── nlp_stemmers_swedish-stemmer.js.html
│ │ ├── nlp_stemmers_turkish-stemmer.js.html
│ │ ├── nlp_tokenizers_tokenizer.js.html
│ │ ├── recognizer_conversation-context.js.html
│ │ ├── recognizer_memory-conversation-context.js.html
│ │ ├── recognizer_recognizer.js.html
│ │ ├── scripts/
│ │ │ ├── linenumber.js
│ │ │ └── prettify/
│ │ │ ├── Apache-License-2.0.txt
│ │ │ ├── lang-css.js
│ │ │ └── prettify.js
│ │ ├── sentiment_sentiment-analyzer.js.html
│ │ ├── sentiment_sentiment-manager.js.html
│ │ ├── slot_slot-manager.js.html
│ │ ├── styles/
│ │ │ ├── jsdoc-default.css
│ │ │ ├── prettify-jsdoc.css
│ │ │ └── prettify-tomorrow.css
│ │ ├── util_evaluator.js.html
│ │ ├── util_similar-search.js.html
│ │ ├── xtables_xtable-utils.js.html
│ │ └── xtables_xtable.js.html
│ └── v4/
│ ├── console-connector.md
│ ├── core/
│ │ ├── arr-to-obj.md
│ │ ├── file-system.md
│ │ ├── logger.md
│ │ ├── normalizer.md
│ │ ├── obj-to-arr.md
│ │ ├── stopwords.md
│ │ ├── timer.md
│ │ └── uuid.md
│ ├── emoji.md
│ ├── language-support.md
│ ├── logger.md
│ ├── mini-faq.md
│ ├── ner-manager.md
│ ├── ner-quickstart.md
│ ├── neural.md
│ ├── nlp-intent-logics.md
│ ├── nlp-manager.md
│ ├── nlu.md
│ ├── qna.md
│ ├── quickstart.md
│ ├── similarity.md
│ ├── slot-filling.md
│ └── webandreact.md
├── examples/
│ ├── 01-container/
│ │ ├── README.md
│ │ ├── index.js
│ │ ├── pipelines.md
│ │ └── plugins/
│ │ ├── join.js
│ │ ├── lower.js
│ │ ├── reverse.js
│ │ ├── split.js
│ │ └── upperFirst.js
│ ├── 02-qna-classic/
│ │ ├── index.js
│ │ └── train-nlp.js
│ ├── 03-qna-pipelines/
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 04-qna-web/
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 05-qna-dual/
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 06-huge-ner/
│ │ ├── airports.json
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 07-nlpjs-on-aws-lambda/
│ │ ├── README.md
│ │ ├── nlpjs-lambda/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── events/
│ │ │ │ └── event.json
│ │ │ ├── hello-world/
│ │ │ │ ├── .npmignore
│ │ │ │ ├── app.js
│ │ │ │ ├── package.json
│ │ │ │ └── tests/
│ │ │ │ └── unit/
│ │ │ │ └── test-handler.js
│ │ │ ├── nlpjs/
│ │ │ │ ├── .npmignore
│ │ │ │ ├── app.js
│ │ │ │ ├── engine.js
│ │ │ │ └── package.json
│ │ │ └── template.yaml
│ │ └── nlpjs-lambda-with-DynamoDB/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── nlpjs/
│ │ │ ├── .npmignore
│ │ │ ├── app.js
│ │ │ ├── engine.js
│ │ │ └── package.json
│ │ ├── schema.json
│ │ └── template.yaml
│ ├── 08-neural-network/
│ │ ├── 01-basic-usage.js
│ │ ├── 02-export-import.js
│ │ ├── 03-activate-log.js
│ │ ├── 04-custom-log.js
│ │ ├── 05-change-parameters.js
│ │ ├── README.md
│ │ └── data/
│ │ └── corpus.json
│ ├── 09-logger/
│ │ ├── 01-core-logger.js
│ │ ├── 02-register-logger.js
│ │ ├── 03-logger-plugin.js
│ │ └── README.md
│ ├── 10-remove-emojis/
│ │ ├── 01-remove-emojis.js
│ │ └── README.md
│ ├── 11-console-connector/
│ │ ├── 01-console-connector.js
│ │ ├── 02-console-connector-nlp.js
│ │ ├── README.md
│ │ └── corpus.json
│ ├── 12-similarity/
│ │ ├── 01-levenshtein.js
│ │ ├── 02-similarity.js
│ │ ├── 03-spell-check.js
│ │ ├── 04-spell-check-training.js
│ │ ├── 05-levenshtein-wa.js
│ │ ├── 06-similarity-wa.js
│ │ ├── 07-spell-check-wa.js
│ │ ├── 08-spell-check-training-wa.js
│ │ ├── 09-similarity-benchmark.js
│ │ ├── README.md
│ │ └── data/
│ │ └── book.txt
│ ├── 13-languages/
│ │ ├── corpora/
│ │ │ ├── corpus-en.json
│ │ │ ├── corpus-es.json
│ │ │ ├── corpus-fr.json
│ │ │ ├── corpus-he.json
│ │ │ ├── corpus-id.json
│ │ │ └── corpus-it.json
│ │ ├── english/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ ├── 12-benchmark.js
│ │ │ └── README.md
│ │ ├── french/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ ├── 12-benchmark.js
│ │ │ └── README.md
│ │ ├── hebrew/
│ │ │ └── 12-benchmark.js
│ │ ├── indonesian/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ └── 12-benchmark.js
│ │ ├── italian/
│ │ │ ├── 01-normalization.js
│ │ │ ├── 02-tokenization.js
│ │ │ ├── 03-tokenization-normalized.js
│ │ │ ├── 04-stopword-identify.js
│ │ │ ├── 05-stopword-remove.js
│ │ │ ├── 06-stopword-dictionary.js
│ │ │ ├── 07-stem-word.js
│ │ │ ├── 08-stem-array.js
│ │ │ ├── 09-tokenize-and-stem.js
│ │ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ │ ├── 11-sentiment-analysis.js
│ │ │ ├── 12-benchmark.js
│ │ │ └── README.md
│ │ ├── measure-corpus.js
│ │ └── spanish/
│ │ ├── 01-normalization.js
│ │ ├── 02-tokenization.js
│ │ ├── 03-tokenization-normalized.js
│ │ ├── 04-stopword-identify.js
│ │ ├── 05-stopword-remove.js
│ │ ├── 06-stopword-dictionary.js
│ │ ├── 07-stem-word.js
│ │ ├── 08-stem-array.js
│ │ ├── 09-tokenize-and-stem.js
│ │ ├── 10-tokenize-and-stem-remove-stopwords.js
│ │ ├── 11-sentiment-analysis.js
│ │ ├── 12-benchmark.js
│ │ └── README.md
│ ├── 14-ner-corpus/
│ │ ├── README.md
│ │ ├── conf.json
│ │ ├── corpus.json
│ │ ├── heros.json
│ │ ├── index.js
│ │ └── pipelines.md
│ ├── 15-nlu/
│ │ ├── 01-neural-nlu.js
│ │ ├── 02-brain-nlu.js
│ │ ├── 03-domain-manager.js
│ │ ├── 04-domain-manager-by-domain.js
│ │ ├── 05-nlu-manager.js
│ │ ├── 06-nlu-manager-by-domain.js
│ │ ├── README.md
│ │ └── corpus50.json
│ ├── 16-fb-connector/
│ │ ├── .gitignore
│ │ ├── Procfile
│ │ ├── README.md
│ │ ├── conf.json
│ │ ├── corpus-en.json
│ │ ├── flows/
│ │ │ └── script.dlg
│ │ ├── index.js
│ │ ├── nlpjs-custom/
│ │ │ └── express-api-server/
│ │ │ ├── express-api-app.js
│ │ │ ├── express-api-server.js
│ │ │ └── index.js
│ │ ├── package.json
│ │ └── pipelines.md
│ ├── 17-ner-nlg/
│ │ ├── index.js
│ │ └── package.json
│ ├── 18-ner-builtin-ms/
│ │ ├── index.js
│ │ └── package.json
│ ├── 19-ner-trim-entities/
│ │ ├── index.js
│ │ └── package.json
│ ├── 80-bert-server/
│ │ ├── README.md
│ │ ├── app.py
│ │ ├── corpus-en.json
│ │ ├── corpus-es.json
│ │ ├── index.js
│ │ ├── requirements.txt
│ │ ├── vocab-en.txt
│ │ └── vocab-multi.txt
│ ├── 81-bert-qna/
│ │ ├── README.md
│ │ ├── app.py
│ │ ├── conf.json
│ │ ├── index.js
│ │ ├── pipelines.md
│ │ └── requirements.txt
│ └── 90-benchmark/
│ ├── corpus-en.json
│ ├── corpus-es.json
│ └── index.js
├── greenkeeper.json
├── lerna.json
├── package.json
└── packages/
├── api-auth-jwt/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── api-auth-jwt.js
│ │ ├── configure-passport.js
│ │ ├── default-settings.js
│ │ ├── ensure-authenticated.js
│ │ ├── index.js
│ │ └── user.router.js
│ └── test/
│ ├── api-auth-jwt.test.js
│ ├── api-server-mock.js
│ ├── default-settings.test.js
│ ├── res-mock.js
│ └── router-mock.js
├── basic/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ └── index.js
│ └── test/
│ └── basic.test.js
├── bert-open-question/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── bert-open-question.js
│ └── index.js
├── bert-tokenizer/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── dicts/
│ │ ├── vocab-en.txt
│ │ └── vocab-multi.txt
│ ├── package.json
│ ├── src/
│ │ ├── bert-word-piece-tokenizer.js
│ │ ├── index.js
│ │ └── multi-bert-word-piece-tokenizer.js
│ └── test/
│ ├── bert-word-piece-tokenizer.test.js
│ └── multi-bert-word-piece-tokenizer.test.js
├── bot/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── bot-localization.js
│ │ ├── bot.js
│ │ ├── dialog-manager.js
│ │ ├── dialog-parse.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── test-connector.js
│ │ └── validators.js
│ └── test/
│ ├── bot.test.js
│ ├── dialog-parse.test.js
│ ├── helper.test.js
│ ├── mock-template.js
│ ├── scenario01.dlt
│ ├── scenario02.dlt
│ ├── scenario05-01.dlt
│ ├── scenario05-02.dlt
│ ├── script1.dlg
│ ├── script2.dlg
│ ├── script3.dlg
│ ├── script4.dlg
│ ├── script5.dlg
│ └── validators.test.js
├── builtin-compromise/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-compromise.js
│ │ └── index.js
│ └── test/
│ └── compromise.test.js
├── builtin-default/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-default.js
│ │ ├── common-regex.js
│ │ ├── index.js
│ │ └── recognizers.js
│ └── test/
│ └── builtin-default.test.js
├── builtin-duckling/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-duckling.js
│ │ └── index.js
│ └── test/
│ └── duckling.test.js
├── builtin-microsoft/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── builtin-dictionary.json
│ │ ├── builtin-inverse.json
│ │ ├── builtin-microsoft.js
│ │ └── index.js
│ └── test/
│ ├── builtin-microsoft.test.js
│ ├── date.json
│ ├── number-age.json
│ ├── number-currency.json
│ ├── number-dimension.json
│ ├── number-ordinal.json
│ ├── number-percent.json
│ ├── number.json
│ └── sequence.json
├── connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── connector.js
│ │ ├── index.js
│ │ └── session.js
│ └── test/
│ └── connector.test.js
├── console-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── console-connector.js
│ │ └── index.js
│ └── test/
│ └── console-connector.test.js
├── core/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── among.js
│ │ ├── arr-to-obj.js
│ │ ├── base-stemmer.js
│ │ ├── clonable.js
│ │ ├── container-bootstrap.js
│ │ ├── container.js
│ │ ├── context.js
│ │ ├── default-compiler.js
│ │ ├── dock.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── logger.js
│ │ ├── memory-storage.js
│ │ ├── mock-fs.js
│ │ ├── normalizer.js
│ │ ├── obj-to-arr.js
│ │ ├── stemmer.js
│ │ ├── stopwords.js
│ │ ├── timer.js
│ │ ├── tokenizer.js
│ │ └── uuid.js
│ └── test/
│ ├── arr-to-obj.test.js
│ ├── assets/
│ │ ├── char.js
│ │ ├── cloned.js
│ │ └── lower.js
│ ├── clonable.test.js
│ ├── container.test.js
│ ├── logger.test.js
│ ├── mock-fs.test.js
│ ├── normalizer.test.js
│ ├── obj-to-arr.test.js
│ ├── stopwords.test.js
│ ├── timer.test.js
│ └── uuid.test.js
├── core-loader/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── container-bootstrap.js
│ │ ├── dock.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ └── plugin-information.json
│ └── test/
│ ├── assets/
│ │ ├── char.js
│ │ ├── cloned.js
│ │ └── lower.js
│ ├── clonable.test.js
│ └── container.test.js
├── database/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── collection.js
│ │ ├── database.js
│ │ ├── index.js
│ │ └── memory-adapter.js
│ └── test/
│ ├── collection.test.js
│ ├── database.test.js
│ ├── fs.js
│ └── memory-adapter.test.js
├── dialogflow-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── dialogflow-connector.js
│ └── index.js
├── directline-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── directline-connector.js
│ ├── directline-controller.js
│ └── index.js
├── emoji/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── emoji.js
│ │ ├── emoji.json
│ │ └── index.js
│ └── test/
│ └── emoji.test.js
├── evaluator/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── compile.js
│ │ ├── evaluator.js
│ │ ├── index.js
│ │ ├── javascript-compiler.js
│ │ └── template.js
│ └── test/
│ ├── compile.test.js
│ ├── evaluator.test.js
│ └── javascript-compiler.test.js
├── express-api-server/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── express-api-app.js
│ │ ├── express-api-server.js
│ │ ├── index.js
│ │ └── public/
│ │ ├── botchat.css
│ │ ├── botchat.js
│ │ ├── index.html
│ │ └── main.js
│ └── test/
│ ├── express-api-app.test.js
│ └── express-api-server.test.js
├── express-api-serverless/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── express-api-serverless.js
│ └── index.js
├── fb-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── fb-connector.js
│ ├── index.js
│ └── settings.js
├── fullbot/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── fullbot.js
│ │ ├── index.js
│ │ └── utils.js
│ └── test/
│ ├── fullbot.test.js
│ └── script.dlg
├── lang-all/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-all.js
│ │ └── lang-functions.js
│ └── test/
│ └── lang-all.test.js
├── lang-ar/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ar.js
│ │ ├── normalizer-ar.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ar.json
│ │ │ ├── negations_ar.json
│ │ │ └── sentiment_ar.js
│ │ ├── stemmer-ar.js
│ │ ├── stopwords-ar.js
│ │ ├── tokenizer-ar.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ar.test.js
├── lang-bert/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-bert.js
│ │ ├── normalizer-bert.js
│ │ ├── sentiment/
│ │ │ ├── negations_bert.json
│ │ │ └── sentiment_bert.js
│ │ ├── stemmer-bert.js
│ │ ├── stopwords-bert.js
│ │ └── tokenizer-bert.js
│ └── test/
│ ├── normalizer-bert.test.js
│ ├── request-mock.js
│ ├── stemmer-bert.test.js
│ ├── stopwords-bert.test.js
│ └── tokenizer-bert.test.js
├── lang-bn/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-bn.js
│ │ ├── normalizer-bn.js
│ │ ├── sentiment/
│ │ │ ├── afinn_bn.json
│ │ │ ├── negations_bn.json
│ │ │ └── sentiment_bn.js
│ │ ├── stemmer-bn.js
│ │ ├── stopwords-bn.js
│ │ └── tokenizer-bn.js
│ └── test/
│ ├── lang-bn.test.js
│ └── tokenizer-bn.test.js
├── lang-ca/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ca.js
│ │ ├── normalizer-ca.js
│ │ ├── sentiment/
│ │ │ ├── negations_ca.json
│ │ │ ├── senticon_ca.json
│ │ │ └── sentiment_ca.js
│ │ ├── stemmer-ca.js
│ │ ├── stopwords-ca.js
│ │ ├── tokenizer-ca.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ca.test.js
├── lang-cs/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-cs.js
│ │ ├── normalizer-cs.js
│ │ ├── sentiment/
│ │ │ ├── afinn_cs.json
│ │ │ ├── negations_cs.json
│ │ │ └── sentiment_cs.js
│ │ ├── stemmer-cs.js
│ │ ├── stopwords-cs.js
│ │ ├── tokenizer-cs.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-cs.test.js
├── lang-da/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-da.js
│ │ ├── normalizer-da.js
│ │ ├── sentiment/
│ │ │ ├── afinn_da.json
│ │ │ ├── negations_da.json
│ │ │ └── sentiment_da.js
│ │ ├── stemmer-da.js
│ │ ├── stopwords-da.js
│ │ ├── tokenizer-da.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ca.test.js
├── lang-de/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-de.js
│ │ ├── normalizer-de.js
│ │ ├── sentiment/
│ │ │ ├── negations_de.json
│ │ │ ├── senticon_de.json
│ │ │ └── sentiment_de.js
│ │ ├── stemmer-de.js
│ │ ├── stopwords-de.js
│ │ ├── tokenizer-de.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-de.test.js
├── lang-el/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-el.js
│ │ ├── normalizer-el.js
│ │ ├── sentiment/
│ │ │ ├── afinn_el.json
│ │ │ ├── negations_el.json
│ │ │ └── sentiment_el.js
│ │ ├── stemmer-el.js
│ │ ├── stopwords-el.js
│ │ └── tokenizer-el.js
│ └── test/
│ └── lang-el.test.js
├── lang-en/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-en.js
│ │ └── sentiment/
│ │ ├── negations_en.json
│ │ ├── senticon_en.json
│ │ └── sentiment_en.js
│ └── test/
│ ├── lang-en.test.js
│ └── stemmer-en.test.js
├── lang-en-min/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-en.js
│ │ ├── normalizer-en.js
│ │ ├── sentiment/
│ │ │ └── sentiment_en.js
│ │ ├── stemmer-en.js
│ │ ├── stopwords-en.js
│ │ ├── tokenizer-en.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-en.test.js
│ ├── stemmer-en.test.js
│ └── tokenizer-en.test.js
├── lang-es/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── dictionary-es.json
│ │ ├── index.js
│ │ ├── lang-es.js
│ │ ├── normalizer-es.js
│ │ ├── sentiment/
│ │ │ ├── afinn_es.json
│ │ │ ├── negations_es.json
│ │ │ ├── senticon_es.json
│ │ │ └── sentiment_es.js
│ │ ├── stemmer-es.js
│ │ ├── stopwords-es.js
│ │ ├── tokenizer-es.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-es.test.js
│ └── stemmer-es.test.js
├── lang-eu/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-eu.js
│ │ ├── normalizer-eu.js
│ │ ├── sentiment/
│ │ │ ├── negations_eu.json
│ │ │ ├── senticon_eu.json
│ │ │ └── sentiment_eu.js
│ │ ├── stemmer-eu.js
│ │ ├── stopwords-eu.js
│ │ └── tokenizer-eu.js
│ └── test/
│ └── lang-eu.test.js
├── lang-fa/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-fa.js
│ │ ├── normalizer-fa.js
│ │ ├── sentiment/
│ │ │ ├── afinn_fa.json
│ │ │ ├── negations_fa.json
│ │ │ └── sentiment_fa.js
│ │ ├── stemmer-fa.js
│ │ ├── stopwords-fa.js
│ │ ├── tokenizer-fa.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-fa.test.js
├── lang-fi/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-fi.js
│ │ ├── normalizer-fi.js
│ │ ├── sentiment/
│ │ │ ├── afinn_fi.json
│ │ │ ├── negations_fi.json
│ │ │ └── sentiment_fi.js
│ │ ├── stemmer-fi.js
│ │ ├── stopwords-fi.js
│ │ ├── tokenizer-fi.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-fi.test.js
├── lang-fr/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-fr.js
│ │ ├── normalizer-fr.js
│ │ ├── sentiment/
│ │ │ ├── negations_fr.json
│ │ │ ├── pattern_fr.json
│ │ │ └── sentiment_fr.js
│ │ ├── stemmer-fr.js
│ │ ├── stopwords-fr.js
│ │ ├── tokenizer-fr.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-fr.test.js
│ └── tokenizer-fr.test.js
├── lang-ga/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ga.js
│ │ ├── normalizer-ga.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ga.json
│ │ │ ├── negations_ga.json
│ │ │ └── sentiment_ga.js
│ │ ├── stemmer-ga.js
│ │ ├── stopwords-ga.js
│ │ └── tokenizer-ga.js
│ └── test/
│ └── lang-ga.test.js
├── lang-gl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-gl.js
│ │ ├── normalizer-gl.js
│ │ ├── sentiment/
│ │ │ ├── negations_gl.json
│ │ │ ├── senticon_gl.json
│ │ │ └── sentiment_gl.js
│ │ ├── stemmer-gl.js
│ │ ├── stopwords-gl.js
│ │ ├── tokenizer-gl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-gl.test.js
├── lang-hi/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-hi.js
│ │ ├── normalizer-hi.js
│ │ ├── sentiment/
│ │ │ ├── afinn_hi.json
│ │ │ ├── negations_hi.json
│ │ │ └── sentiment_hi.js
│ │ ├── stemmer-hi.js
│ │ ├── stopwords-hi.js
│ │ ├── tokenizer-hi.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-hi.test.js
├── lang-hu/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-hu.js
│ │ ├── normalizer-hu.js
│ │ ├── sentiment/
│ │ │ ├── afinn_hu.json
│ │ │ ├── negations_hu.json
│ │ │ └── sentiment_hu.js
│ │ ├── stemmer-hu.js
│ │ ├── stopwords-hu.js
│ │ ├── tokenizer-hu.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-hu.test.js
├── lang-hy/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-hy.js
│ │ ├── normalizer-hy.js
│ │ ├── sentiment/
│ │ │ ├── afinn_hy.json
│ │ │ ├── negations_hy.json
│ │ │ └── sentiment_hy.js
│ │ ├── stemmer-hy.js
│ │ ├── stopwords-hy.js
│ │ └── tokenizer-hy.js
│ └── test/
│ └── lang-hy.test.js
├── lang-id/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── indonesian-stemmer.js
│ │ ├── lang-id.js
│ │ ├── normalizer-id.js
│ │ ├── sentiment/
│ │ │ ├── afinn_id.json
│ │ │ ├── negations_id.json
│ │ │ └── sentiment_id.js
│ │ ├── stemmer-id.js
│ │ ├── stopwords-id.js
│ │ ├── tokenizer-id.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-id.test.js
│ └── stemmer-id.test.js
├── lang-it/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-it.js
│ │ ├── normalizer-it.js
│ │ ├── sentiment/
│ │ │ ├── negations_it.json
│ │ │ ├── pattern_it.json
│ │ │ └── sentiment_it.js
│ │ ├── stemmer-it.js
│ │ ├── stopwords-it.js
│ │ ├── tokenizer-it.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-it.test.js
├── lang-ja/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── helper.js
│ │ ├── hepburn.json
│ │ ├── index.js
│ │ ├── japanese-rules.json
│ │ ├── keigo.json
│ │ ├── lang-ja.js
│ │ ├── normalizer-ja.js
│ │ ├── sentiment/
│ │ │ ├── negations_ja.json
│ │ │ └── sentiment_ja.js
│ │ ├── stemmer-ja.js
│ │ ├── stopwords-ja.js
│ │ └── tokenizer-ja.js
│ └── test/
│ ├── lang-ja.test.js
│ └── tokenizer-ja.test.js
├── lang-ko/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── chunk-match.js
│ │ ├── dict.json
│ │ ├── hangul.js
│ │ ├── index.js
│ │ ├── korean-chunker.js
│ │ ├── korean-conjugation.js
│ │ ├── korean-dictionary.js
│ │ ├── korean-pos.js
│ │ ├── korean-substantive.js
│ │ ├── korean-token.js
│ │ ├── korean-tokenizer.js
│ │ ├── lang-ko.js
│ │ ├── names-dict.json
│ │ ├── normalizer-ko.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ko.json
│ │ │ ├── negations_ko.json
│ │ │ └── sentiment_ko.js
│ │ ├── stemmer-ko.js
│ │ ├── stopwords-ko.js
│ │ └── tokenizer-ko.js
│ └── test/
│ ├── lang-ko.test.js
│ └── stemmer-ko.test.js
├── lang-lt/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-lt.js
│ │ ├── normalizer-lt.js
│ │ ├── sentiment/
│ │ │ ├── afinn_lt.json
│ │ │ ├── negations_lt.json
│ │ │ └── sentiment_lt.js
│ │ ├── stemmer-lt.js
│ │ ├── stopwords-lt.js
│ │ └── tokenizer-lt.js
│ └── test/
│ └── lang-lt.test.js
├── lang-ms/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ms.js
│ │ ├── normalizer-ms.js
│ │ ├── sentiment/
│ │ │ └── sentiment_ms.js
│ │ ├── stemmer-ms.js
│ │ ├── stopwords-ms.js
│ │ └── tokenizer-ms.js
│ └── test/
│ ├── lang-ms.test.js
│ └── stemmer-ms.test.js
├── lang-ne/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ne.js
│ │ ├── normalizer-ne.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ne.json
│ │ │ ├── negations_ne.json
│ │ │ └── sentiment_ne.js
│ │ ├── stemmer-ne.js
│ │ ├── stopwords-ne.js
│ │ └── tokenizer-ne.js
│ └── test/
│ └── lang-lt.test.js
├── lang-nl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-nl.js
│ │ ├── normalizer-nl.js
│ │ ├── sentiment/
│ │ │ ├── negations_nl.json
│ │ │ ├── pattern_nl.json
│ │ │ └── sentiment_nl.js
│ │ ├── stemmer-nl.js
│ │ ├── stopwords-nl.js
│ │ ├── tokenizer-nl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-nl.test.js
├── lang-no/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-no.js
│ │ ├── normalizer-no.js
│ │ ├── sentiment/
│ │ │ ├── afinn_no.json
│ │ │ ├── negations_no.json
│ │ │ └── sentiment_no.js
│ │ ├── stemmer-no.js
│ │ ├── stopwords-no.js
│ │ └── tokenizer-no.js
│ └── test/
│ └── lang-no.test.js
├── lang-pl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-pl.js
│ │ ├── normalizer-pl.js
│ │ ├── sentiment/
│ │ │ ├── afinn_pl.json
│ │ │ ├── negations_pl.json
│ │ │ └── sentiment_pl.js
│ │ ├── stemmer-pl.js
│ │ ├── stopwords-pl.js
│ │ ├── tokenizer-pl.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-pl.test.js
│ └── stemmer-pl.test.js
├── lang-pt/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-pt.js
│ │ ├── normalizer-pt.js
│ │ ├── sentiment/
│ │ │ ├── afinn_pt.json
│ │ │ ├── negations_pt.json
│ │ │ └── sentiment_pt.js
│ │ ├── stemmer-pt.js
│ │ ├── stopwords-pt.js
│ │ ├── tokenizer-pt.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-pt.test.js
│ ├── stemmer-pt.test.js
│ └── tokenizer-pt.test.js
├── lang-ro/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ro.js
│ │ ├── normalizer-ro.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ro.json
│ │ │ ├── negations_ro.json
│ │ │ └── sentiment_ro.js
│ │ ├── stemmer-ro.js
│ │ ├── stopwords-ro.js
│ │ └── tokenizer-ro.js
│ └── test/
│ └── lang-ro.test.js
├── lang-ru/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ru.js
│ │ ├── normalizer-ru.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ru.json
│ │ │ ├── negations_ru.json
│ │ │ └── sentiment_ru.js
│ │ ├── stemmer-ru.js
│ │ ├── stopwords-ru.js
│ │ ├── tokenizer-ru.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-ru.test.js
├── lang-sl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-sl.js
│ │ ├── normalizer-sl.js
│ │ ├── sentiment/
│ │ │ ├── afinn_sl.json
│ │ │ ├── negations_sl.json
│ │ │ └── sentiment_sl.js
│ │ ├── stemmer-sl.js
│ │ ├── stopwords-sl.js
│ │ ├── tokenizer-sl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-sl.test.js
├── lang-sr/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-sr.js
│ │ ├── normalizer-sr.js
│ │ ├── sentiment/
│ │ │ ├── afinn_sr.json
│ │ │ ├── negations_sr.json
│ │ │ └── sentiment_sr.js
│ │ ├── stemmer-sr.js
│ │ ├── stopwords-sr.js
│ │ └── tokenizer-sr.js
│ └── test/
│ └── lang-sr.test.js
├── lang-sv/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-sv.js
│ │ ├── normalizer-sv.js
│ │ ├── sentiment/
│ │ │ ├── afinn_sv.json
│ │ │ ├── negations_sv.json
│ │ │ └── sentiment_sv.js
│ │ ├── stemmer-sv.js
│ │ ├── stopwords-sv.js
│ │ ├── tokenizer-sv.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-sv.test.js
├── lang-ta/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-ta.js
│ │ ├── normalizer-ta.js
│ │ ├── sentiment/
│ │ │ ├── afinn_ta.json
│ │ │ ├── negations_ta.json
│ │ │ └── sentiment_ta.js
│ │ ├── stemmer-ta.js
│ │ ├── stopwords-ta.js
│ │ └── tokenizer-ta.js
│ └── test/
│ └── lang-ta.test.js
├── lang-th/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-th.js
│ │ ├── normalizer-th.js
│ │ ├── sentiment/
│ │ │ ├── afinn_th.json
│ │ │ ├── negations_th.json
│ │ │ └── sentiment_th.js
│ │ ├── stemmer-th.js
│ │ ├── stopwords-th.js
│ │ ├── thai-aspects.json
│ │ └── tokenizer-th.js
│ └── test/
│ └── lang-th.test.js
├── lang-tl/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-tl.js
│ │ ├── normalizer-tl.js
│ │ ├── sentiment/
│ │ │ ├── afinn_tl.json
│ │ │ ├── negations_tl.json
│ │ │ └── sentiment_tl.js
│ │ ├── stemmer-tl.js
│ │ ├── stopwords-tl.js
│ │ ├── tokenizer-tl.js
│ │ └── trigrams.js
│ └── test/
│ └── lang-tl.test.js
├── lang-tr/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-tr.js
│ │ ├── normalizer-tr.js
│ │ ├── sentiment/
│ │ │ ├── afinn_tr.json
│ │ │ ├── negations_tr.json
│ │ │ └── sentiment_tr.js
│ │ ├── stemmer-tr.js
│ │ ├── stopwords-tr.js
│ │ ├── tokenizer-tr.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-tr.test.js
│ └── stemmer-tr.test.js
├── lang-uk/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lang-uk.js
│ │ ├── normalizer-uk.js
│ │ ├── sentiment/
│ │ │ ├── afinn_uk.json
│ │ │ ├── negations_uk.json
│ │ │ └── sentiment_uk.js
│ │ ├── stemmer-uk.js
│ │ ├── stopwords-uk.js
│ │ ├── tokenizer-uk.js
│ │ └── trigrams.js
│ └── test/
│ ├── lang-uk.test.js
│ └── stemmer-uk.test.js
├── lang-zh/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── cedict_ts.u8.js
│ │ ├── dictionary.js
│ │ ├── dictionary.json
│ │ ├── index.js
│ │ ├── lang-zh.js
│ │ ├── normalizer-zh.js
│ │ ├── sentiment/
│ │ │ ├── negations_zh.json
│ │ │ └── sentiment_zh.js
│ │ ├── stemmer-zh.js
│ │ ├── stopwords-zh.js
│ │ ├── tokenizer-zh.js
│ │ └── translate-zh.js
│ └── test/
│ ├── lang-zh.test.js
│ └── translate-zh.test.js
├── language/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── data.json
│ │ ├── index.js
│ │ ├── language.js
│ │ └── languages.json
│ └── test/
│ ├── fixtures.json
│ └── language.test.js
├── language-min/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── data.json
│ │ ├── index.js
│ │ ├── language.js
│ │ └── languages.json
│ └── test/
│ ├── fixtures.json
│ ├── language.test.js
│ └── testdata.json
├── lexer/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ ├── lexer.js
│ │ └── token.js
│ └── test/
│ └── lexer.test.js
├── logger/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── logger.js
│ └── test/
│ └── logger.test.js
├── mongodb-adapter/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── mongodb-adapter.js
│ └── test/
│ ├── collection-mock.js
│ ├── mongodb-adapter.test.js
│ └── mongodb-mock.js
├── msbf-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── get-msbf-token.js
│ ├── index.js
│ └── msbf-connector.js
├── ner/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── extractor-builtin.js
│ │ ├── extractor-enum.js
│ │ ├── extractor-regex.js
│ │ ├── extractor-trim.js
│ │ ├── index.js
│ │ ├── ner.js
│ │ ├── reduce-edges.js
│ │ └── trim-types.js
│ └── test/
│ ├── extractor-enum.test.js
│ ├── extractor-regex.test.js
│ ├── extractor-trim.test.js
│ ├── ner.test.js
│ └── reduce-edges.test.js
├── neural/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── corpus-lookup.js
│ │ ├── index.js
│ │ ├── lookup.js
│ │ └── neural-network.js
│ └── test/
│ ├── corpus.json
│ └── neural-network.test.js
├── neural-worker/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── default-settings.json
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── neural-network.js
│ │ └── worker.js
│ └── test/
│ ├── corpus.json
│ └── neural-network.test.js
├── nlg/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── action-manager.js
│ │ ├── index.js
│ │ └── nlg-manager.js
│ └── test/
│ ├── action-manager.test.js
│ ├── bootstrap.js
│ └── nlg-manager.test.js
├── nlp/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── context-manager.js
│ │ ├── index.js
│ │ └── nlp.js
│ └── test/
│ ├── context-manager.test.js
│ ├── nlp.test.js
│ └── template-mock.js
├── nlu/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── domain-manager.js
│ │ ├── index.js
│ │ ├── nlu-manager.js
│ │ ├── nlu-neural.js
│ │ ├── nlu.js
│ │ └── none-languages.js
│ └── test/
│ ├── bootstrap.js
│ ├── corpus50.json
│ ├── domain-manager.test.js
│ ├── domains.js
│ ├── nlu-manager.test.js
│ ├── nlu-neural.test.js
│ └── nlu.test.js
├── nlu-luis/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── index.js
│ └── nlu-luis.js
├── node-nlp/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── classifiers/
│ │ │ └── index.js
│ │ ├── index.js
│ │ ├── language/
│ │ │ └── index.js
│ │ ├── nlg/
│ │ │ ├── index.js
│ │ │ └── nlg-manager.js
│ │ ├── nlp/
│ │ │ ├── index.js
│ │ │ ├── nlp-excel-reader.js
│ │ │ ├── nlp-manager.js
│ │ │ └── nlp-util.js
│ │ ├── nlu/
│ │ │ ├── brain-nlu.js
│ │ │ └── index.js
│ │ ├── recognizer/
│ │ │ ├── conversation-context.js
│ │ │ ├── index.js
│ │ │ ├── memory-conversation-context.js
│ │ │ └── recognizer.js
│ │ ├── sentiment/
│ │ │ ├── index.js
│ │ │ ├── sentiment-analyzer.js
│ │ │ └── sentiment-manager.js
│ │ ├── util/
│ │ │ ├── handlebars.js
│ │ │ ├── index.js
│ │ │ └── spell-check.js
│ │ └── xtables/
│ │ └── index.js
│ └── test/
│ ├── classifiers/
│ │ └── neural-network.test.js
│ ├── language/
│ │ └── language.test.js
│ ├── nlg/
│ │ ├── action-manager.test.js
│ │ └── nlg-manager.test.js
│ ├── nlp/
│ │ ├── corpus-en.json
│ │ ├── nlp-excel-reader.test.js
│ │ ├── nlp-manager.test.js
│ │ ├── nlp-util.test.js
│ │ ├── rules.xls
│ │ ├── rulesnoregex.xls
│ │ ├── stemmers/
│ │ │ ├── bengali-stemmer.test.js
│ │ │ ├── galician-stemmer.test.js
│ │ │ ├── greek-stemmer.test.js
│ │ │ ├── spanish-stemmer.test.js
│ │ │ ├── tagalog-stemmer.test.js
│ │ │ └── ukrainian-stemmer.test.js
│ │ └── tokenizers/
│ │ ├── aggresive-tokenizer-bn.test.js
│ │ ├── aggressive-tokenizer-en.test.js
│ │ ├── aggressive-tokenizer-es.test.js
│ │ ├── aggressive-tokenizer-fa.test.js
│ │ ├── aggressive-tokenizer-fr.test.js
│ │ ├── aggressive-tokenizer-id.test.js
│ │ ├── aggressive-tokenizer-it.test.js
│ │ ├── aggressive-tokenizer-nl.test.js
│ │ ├── aggressive-tokenizer-no.test.js
│ │ ├── aggressive-tokenizer-pl.test.js
│ │ ├── aggressive-tokenizer-pt.test.js
│ │ ├── aggressive-tokenizer-ru.test.js
│ │ ├── aggressive-tokenizer-sv.test.js
│ │ └── tokenizer-ja.test.js
│ ├── nlu/
│ │ └── brain-nlu.test.js
│ ├── recognizer/
│ │ ├── conversation-context.test.js
│ │ └── memory-conversation-context.test.js
│ ├── sentiment/
│ │ ├── sentiment-analyzer.test.js
│ │ └── sentiment-manager.test.js
│ ├── util/
│ │ ├── emoji.test.js
│ │ ├── evaluator.test.js
│ │ ├── handlebars.test.js
│ │ ├── similar_search.test.js.no
│ │ └── spell-check.test.js
│ └── xtables/
│ ├── book1.json
│ ├── book1.xlsx
│ ├── matrix1.json
│ ├── xdoc.test.js
│ ├── xtable-utils.test.js
│ └── xtable.test.js
├── open-question/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── bert-tokenizer.js
│ │ ├── constants.js
│ │ ├── index.js
│ │ ├── model-downloader.js
│ │ ├── model.js
│ │ ├── qa-client.js
│ │ ├── runtime-thread.js
│ │ ├── runtime-worker.js
│ │ └── runtime.js
│ └── test/
│ ├── .models/
│ │ └── henryk/
│ │ └── bert-base-multilingual-cased-finetuned-dutch-squad2/
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ └── vocab.txt
│ ├── bert-tokenizer.test.js
│ ├── model-downloader.test.js
│ ├── model.test.js
│ ├── qa-client.test.js
│ └── runtime.test.js
├── python-compiler/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── expressions/
│ │ │ ├── assert-command.js
│ │ │ ├── assignment-command.js
│ │ │ ├── binary-expression.js
│ │ │ ├── break-command.js
│ │ │ ├── call-expression.js
│ │ │ ├── class-command.js
│ │ │ ├── composite-command.js
│ │ │ ├── constant-expression.js
│ │ │ ├── continue-command.js
│ │ │ ├── def-command.js
│ │ │ ├── dictionary-expression.js
│ │ │ ├── dotted-expression.js
│ │ │ ├── expression-command.js
│ │ │ ├── expression.js
│ │ │ ├── for-in-command.js
│ │ │ ├── global-variable-command.js
│ │ │ ├── group-expression.js
│ │ │ ├── if-command.js
│ │ │ ├── import-command.js
│ │ │ ├── index-expression.js
│ │ │ ├── index.js
│ │ │ ├── list-expression.js
│ │ │ ├── minus-expression.js
│ │ │ ├── new-expression.js
│ │ │ ├── pass-command.js
│ │ │ ├── raise-command.js
│ │ │ ├── return-command.js
│ │ │ ├── string-expression.js
│ │ │ ├── variable-expression.js
│ │ │ └── while-command.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── python-compiler.js
│ │ ├── python-executer.js
│ │ └── python-parser.js
│ └── test/
│ ├── python-compiler.test.js
│ └── python-parser.test.js
├── qna-importer/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── qna-importer.js
│ └── test/
│ ├── qna-importer.test.js
│ └── qna.tsv
├── request/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── fs.js
│ │ ├── index.js
│ │ └── request.js
│ └── test/
│ ├── file.txt
│ └── fs.test.js
├── request-rn/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── fs.js
│ ├── index.js
│ └── request.js
├── rest-connector/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ └── src/
│ ├── index.js
│ └── rest-connector.js
├── sentiment/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── sentiment-analyzer.js
│ └── test/
│ ├── bootstrap.js
│ └── sentiment-analyzer.test.js
├── similarity/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── cosine-similarity.js
│ │ ├── index.js
│ │ ├── leven.js
│ │ ├── similarity.js
│ │ └── spell-check.js
│ └── test/
│ ├── cosine-similarity.test.js
│ ├── leven.test.js
│ ├── similarity.test.js
│ └── spell-check.test.js
├── similarity-wa/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── cosine-similarity.js
│ │ ├── index.js
│ │ ├── leven.js
│ │ ├── similarity.js
│ │ └── spell-check.js
│ ├── test/
│ │ ├── cosine-similarity.test.js
│ │ ├── leven.test.js
│ │ ├── similarity.test.js
│ │ └── spell-check.test.js
│ └── wa/
│ ├── cosine-similarity.wasm
│ ├── cosine-similarity.wat
│ ├── leven.wasm
│ └── leven.wat
├── slot/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── package.json
│ ├── src/
│ │ ├── index.js
│ │ └── slot-manager.js
│ └── test/
│ └── slot-manager.test.js
├── utils/
│ ├── .npmignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── base-fn.js
│ │ ├── bench.js
│ │ ├── corpus-lookup.js
│ │ ├── downloader.js
│ │ ├── fs-extra.js
│ │ ├── index.js
│ │ ├── is-gibberish.js
│ │ ├── lookup.js
│ │ ├── markov.js
│ │ ├── ngrams.js
│ │ ├── nlp-analyzer.js
│ │ ├── pattern.js
│ │ ├── progress-bar.js
│ │ ├── softmax.js
│ │ └── tfidf.js
│ └── test/
│ ├── bench.test.js
│ ├── corpus-composed.json
│ ├── corpus-lookup.test.js
│ ├── corpus-pattern.json
│ ├── downloader.test.js
│ ├── fs-extra.test.js
│ ├── gibberish.test.js
│ ├── lookup.test.js
│ ├── markov.test.js
│ ├── ngrams.test.js
│ ├── nlp-analyzer.test.js
│ ├── pattern.test.js
│ ├── progress-bar.test.js
│ ├── softmax.test.js
│ └── tfidf.test.js
└── xtables/
├── .npmignore
├── LICENSE.md
├── package.json
├── src/
│ ├── index.js
│ ├── xdoc.js
│ ├── xtable-utils.js
│ └── xtable.js
└── test/
├── book1.json
├── book1.xlsx
├── matrix1.json
├── xdoc.test.js
├── xtable-utils.test.js
└── xtable.test.js
Showing preview only (403K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5014 symbols across 485 files)
FILE: docs/v3/static/scripts/prettify/prettify.js
function L (line 4) | function L(a) {
function M (line 146) | function M(a) {
function B (line 185) | function B(a, m, e, h) {
function x (line 188) | function x(a, m) {
function u (line 260) | function u(a) {
function D (line 329) | function D(a, m) {
function k (line 398) | function k(a, m) {
function C (line 407) | function C(a, m) {
function E (line 412) | function E(a) {
function m (line 642) | function m() {
FILE: examples/01-container/index.js
function main (line 26) | async function main() {
FILE: examples/01-container/plugins/join.js
class Join (line 24) | class Join {
method constructor (line 25) | constructor() {
method join (line 29) | join(input) {
method run (line 34) | run(input) {
FILE: examples/01-container/plugins/lower.js
class Lower (line 24) | class Lower {
method constructor (line 25) | constructor() {
method toLower (line 29) | toLower(input, text) {
method run (line 40) | run(input, arg) {
FILE: examples/01-container/plugins/reverse.js
class Reverse (line 24) | class Reverse {
method constructor (line 25) | constructor() {
method reverse (line 29) | reverse(input) {
method run (line 34) | run(input) {
FILE: examples/01-container/plugins/split.js
class Split (line 24) | class Split {
method constructor (line 25) | constructor() {
method split (line 29) | split(input) {
method run (line 34) | run(input) {
FILE: examples/01-container/plugins/upperFirst.js
class UpperFirst (line 24) | class UpperFirst {
method constructor (line 25) | constructor() {
method upperFirst (line 29) | upperFirst(input) {
method run (line 36) | run(input) {
FILE: examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/nlpjs/engine.js
constant NOT_PROD_ENV (line 8) | const NOT_PROD_ENV = process.env.AWS_SAM_LOCAL === 'true';
constant DEFAULT_LANGUAGE (line 19) | const DEFAULT_LANGUAGE = 'en';
constant DEFAULT_PHRASE (line 21) | const DEFAULT_PHRASE = 'Hi';
constant MODEL_TABLENAME_KEY (line 25) | const MODEL_TABLENAME_KEY = 'themodel';
function defineModel (line 30) | function defineModel() {
function trainModel (line 58) | function trainModel() {
function regenerateModel (line 73) | function regenerateModel(afterTrainCallback) {
function checkModel (line 81) | function checkModel() {
FILE: examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/nlpjs/engine.js
constant DEFAULT_PHRASE (line 9) | const DEFAULT_PHRASE = 'Hi';
constant MODEL_FILEPATH (line 11) | const MODEL_FILEPATH = '/tmp/model.nlp';
FILE: examples/08-neural-network/04-custom-log.js
function customLog (line 28) | function customLog(status, elapsed) {
FILE: examples/12-similarity/02-similarity.js
function showDistances (line 27) | function showDistances(word1, word2) {
FILE: examples/12-similarity/06-similarity-wa.js
function showDistances (line 27) | function showDistances(word1, word2) {
FILE: examples/12-similarity/09-similarity-benchmark.js
function getTime (line 32) | function getTime(hrTime) {
function runWordTests (line 36) | function runWordTests(leven) {
function runMediumTests (line 62) | function runMediumTests(leven) {
function runLongTests (line 75) | function runLongTests(leven) {
FILE: examples/13-languages/measure-corpus.js
function measureCorpus (line 29) | async function measureCorpus(corpus, plugins) {
FILE: examples/15-nlu/01-neural-nlu.js
function prepareCorpus (line 32) | function prepareCorpus(input, isTests = false) {
function measure (line 44) | async function measure(useStemmer) {
FILE: examples/15-nlu/03-domain-manager.js
function addFoodDomain (line 31) | function addFoodDomain(manager) {
function addPersonalityDomain (line 54) | function addPersonalityDomain(manager) {
FILE: examples/15-nlu/04-domain-manager-by-domain.js
function addFoodDomain (line 31) | function addFoodDomain(manager) {
function addPersonalityDomain (line 54) | function addPersonalityDomain(manager) {
FILE: examples/15-nlu/05-nlu-manager.js
function addFoodDomainEn (line 33) | function addFoodDomainEn(manager) {
function addFoodDomainEs (line 54) | function addFoodDomainEs(manager) {
function addPersonalityDomainEn (line 74) | function addPersonalityDomainEn(manager) {
function addPersonalityDomainEs (line 95) | function addPersonalityDomainEs(manager) {
FILE: examples/15-nlu/06-nlu-manager-by-domain.js
function addFoodDomainEn (line 33) | function addFoodDomainEn(manager) {
function addFoodDomainEs (line 54) | function addFoodDomainEs(manager) {
function addPersonalityDomainEn (line 74) | function addPersonalityDomainEn(manager) {
function addPersonalityDomainEs (line 95) | function addPersonalityDomainEs(manager) {
FILE: examples/16-fb-connector/nlpjs-custom/express-api-server/express-api-app.js
class ExpressApiApp (line 30) | class ExpressApiApp extends nlpjs.ExpressApiApp {
method initialize (line 32) | initialize() {
method loadComplements (line 47) | loadComplements() {
FILE: examples/16-fb-connector/nlpjs-custom/express-api-server/express-api-server.js
class ExpressApiServer (line 29) | class ExpressApiServer extends nlpjs.ExpressApiServer {
method start (line 30) | async start(input = {}) {
FILE: examples/80-bert-server/app.py
class CORSComponent (line 29) | class CORSComponent(object):
method process_response (line 30) | def process_response(self, req, resp, resource, req_succeeded):
class ResourceTokenize (line 45) | class ResourceTokenize(object):
method __init__ (line 46) | def __init__(self):
method on_post (line 49) | def on_post(self, req, resp):
FILE: examples/80-bert-server/index.js
function doTests (line 29) | async function doTests(manager, corpus) {
function measure (line 60) | async function measure() {
FILE: examples/81-bert-qna/app.py
class CORSComponent (line 30) | class CORSComponent(object):
method process_response (line 31) | def process_response(self, req, resp, resource, req_succeeded):
class ResourceTokenize (line 46) | class ResourceTokenize(object):
method __init__ (line 47) | def __init__(self):
method on_post (line 50) | def on_post(self, req, resp):
class ResourceQna (line 58) | class ResourceQna(object):
method __init__ (line 59) | def __init__(self):
method on_post (line 62) | def on_post(self, req, resp):
FILE: examples/90-benchmark/index.js
function doTests (line 5) | async function doTests(manager, corpus) {
function measure (line 24) | async function measure(withBuiltins = true) {
FILE: packages/api-auth-jwt/src/api-auth-jwt.js
class ApiAuthJwt (line 30) | class ApiAuthJwt {
method register (line 31) | register(container) {
FILE: packages/api-auth-jwt/src/configure-passport.js
function getLocalStrategy (line 29) | function getLocalStrategy(db, settings) {
function getJwtStrategy (line 60) | function getJwtStrategy(db, settings) {
function configurePassport (line 80) | function configurePassport(db, settings) {
FILE: packages/api-auth-jwt/src/default-settings.js
function getSettings (line 24) | function getSettings(container) {
FILE: packages/api-auth-jwt/src/ensure-authenticated.js
function ensureAuthenticated (line 26) | function ensureAuthenticated(req, res, next) {
FILE: packages/api-auth-jwt/src/user.router.js
function login (line 33) | function login(req, res) {
function refresh (line 63) | function refresh(req, res) {
function register (line 91) | function register(req, res, next) {
function testProtected (line 117) | function testProtected(req, res) {
function testUnprotected (line 121) | function testUnprotected(req, res) {
function mountUser (line 125) | function mountUser(router, container) {
FILE: packages/api-auth-jwt/test/api-auth-jwt.test.js
function bootstrap (line 32) | function bootstrap() {
function callWithReq (line 40) | function callWithReq(method, path, req, srcContainer) {
FILE: packages/api-auth-jwt/test/api-server-mock.js
class ApiServerMock (line 26) | class ApiServerMock {
method constructor (line 27) | constructor() {
method newRouter (line 32) | newRouter() {
method call (line 36) | call(method, path, req, res, next) {
FILE: packages/api-auth-jwt/test/res-mock.js
class ResMock (line 24) | class ResMock {
method status (line 25) | status(value) {
method send (line 30) | send(value) {
method json (line 38) | json(value) {
FILE: packages/api-auth-jwt/test/router-mock.js
class RouterMock (line 24) | class RouterMock {
method constructor (line 25) | constructor() {
method options (line 33) | options(path, route) {
method get (line 37) | get(path, route) {
method post (line 41) | post(path, route) {
method put (line 45) | put(path, route) {
method delete (line 49) | delete(path, route) {
FILE: packages/bert-open-question/src/bert-open-question.js
class BertOpenQuestion (line 26) | class BertOpenQuestion extends Clonable {
method constructor (line 27) | constructor(settings = {}, container = undefined) {
method registerDefault (line 46) | registerDefault() {
method getAnswer (line 58) | async getAnswer(locale, query) {
FILE: packages/bert-tokenizer/src/bert-word-piece-tokenizer.js
class BertWordPieceTokenizer (line 26) | class BertWordPieceTokenizer extends Clonable {
method constructor (line 27) | constructor(settings = {}) {
method loadDictionary (line 49) | loadDictionary(inputVocabContent) {
method createToken (line 77) | createToken(text, start, srcType) {
method splitSentence (line 90) | splitSentence(str) {
method getBestPrefix (line 121) | getBestPrefix(word) {
method getBestAffix (line 134) | getBestAffix(word) {
method tokenizeWord (line 147) | tokenizeWord(srcWord, useExtra = false, isInside = false) {
method tokenizeSentence (line 197) | tokenizeSentence(sentence, useExtra = false) {
method insertEncoding (line 227) | insertEncoding(
method encodeQuestion (line 246) | encodeQuestion(question, useExtra = false) {
method getLastWordIndex (line 287) | getLastWordIndex(encodings) {
method encode (line 297) | encode(
method cloneEncoding (line 356) | cloneEncoding(encoding) {
method encodeSliced (line 368) | encodeSliced(
FILE: packages/bert-tokenizer/src/multi-bert-word-piece-tokenizer.js
class MultiBertWordPieceTokenizer (line 27) | class MultiBertWordPieceTokenizer {
method constructor (line 28) | constructor(settings = {}) {
method loadTokenizers (line 33) | loadTokenizers(locales, vocabContent, settings = {}) {
method loadTokenizersFromFile (line 44) | loadTokenizersFromFile(locales, fileName, settings = {}) {
method getTokenizer (line 60) | getTokenizer(locale) {
FILE: packages/bot/src/bot-localization.js
class BotLocalization (line 24) | class BotLocalization {
method constructor (line 25) | constructor() {
method addLocalization (line 29) | addLocalization(locale, srckey, value) {
method getLocalized (line 37) | getLocalized(locale, srckey) {
method removeLocale (line 49) | removeLocale(locale) {
method removeKey (line 56) | removeKey(key) {
method addRule (line 60) | addRule(rule) {
FILE: packages/bot/src/bot.js
class Bot (line 45) | class Bot extends Clonable {
method constructor (line 46) | constructor(settings = {}, container) {
method registerDefault (line 77) | registerDefault() {
method start (line 93) | async start() {
method registerAction (line 119) | registerAction(name, fn) {
method registerValidator (line 123) | registerValidator(name, fn) {
method getValidator (line 127) | getValidator(name) {
method registerCard (line 131) | registerCard(name, card) {
method setVariable (line 143) | async setVariable(context, variableName, variableValue) {
method getVariable (line 154) | getVariable(context, variableName) {
method beginDialog (line 161) | async beginDialog(session, context, dialog) {
method executeAction (line 168) | async executeAction(session, context, action) {
method runValidation (line 281) | async runValidation(session, context) {
method process (line 324) | async process(session) {
method addDialog (line 412) | addDialog(name, pipeline, settings) {
method getEntityOption (line 416) | getEntityOption(line) {
method buildAction (line 430) | buildAction(command, current) {
method loadScript (line 438) | async loadScript(fileName) {
method loadCorpus (line 708) | loadCorpus(corpus) {
method resetFlows (line 714) | async resetFlows() {
method resetContexts (line 723) | async resetContexts() {
method resetConversationContext (line 729) | async resetConversationContext(cid) {
FILE: packages/bot/src/dialog-manager.js
function defaultAction (line 26) | async function defaultAction(session, context) {
class DialogManager (line 36) | class DialogManager extends Clonable {
method constructor (line 37) | constructor(settings = {}, container) {
method registerDefault (line 54) | registerDefault() {}
method addDialog (line 56) | addDialog(name, pipeline, settings) {
method getDialog (line 64) | getDialog(name) {
method getNextActionDialog (line 68) | getNextActionDialog(stack) {
method getNextAction (line 75) | getNextAction(stack) {
method beginDialog (line 112) | beginDialog(stack, dialogName) {
method endDialog (line 116) | endDialog(stack) {
method restartDialog (line 120) | restartDialog(stack) {
method existsDialog (line 127) | existsDialog(dialog) {
FILE: packages/bot/src/dialog-parse.js
function getName (line 24) | function getName(tokens) {
function getDialogName (line 28) | function getDialogName(tokens) {
function trimBetween (line 37) | function trimBetween(line, left, right, shouldBeFirst = false) {
constant CARD_LINK_REGEX (line 58) | const CARD_LINK_REGEX = /!?\[.{0,100}\]\(https?:\/\/.{0,2048}\)/gi;
function trimLine (line 60) | function trimLine(line) {
function dialogParse (line 78) | function dialogParse(text) {
function loadScript (line 107) | async function loadScript(fileName, fs, alreadyLoaded = [], script = []) {
FILE: packages/bot/src/test-connector.js
class TestConnector (line 30) | class TestConnector extends Connector {
method initialize (line 31) | initialize() {
method say (line 36) | say(message, reference) {
method hear (line 74) | async hear(line) {
method parseTestScript (line 125) | async parseTestScript(fileName) {
method runScript (line 153) | async runScript(fileName) {
FILE: packages/bot/src/validators.js
function findEntity (line 26) | function findEntity(edges, entity, typeName) {
function validatorBuiltin (line 38) | async function validatorBuiltin(
function validatorEmail (line 99) | function validatorEmail(session, context, params) {
function validatorURL (line 103) | function validatorURL(session, context, params) {
function validatorIP (line 107) | function validatorIP(session, context, params) {
function validatorIPv4 (line 111) | function validatorIPv4(session, context, params) {
function validatorIPv6 (line 122) | function validatorIPv6(session, context, params) {
function validatorPhoneNumber (line 133) | function validatorPhoneNumber(session, context, params) {
function validatorNumber (line 143) | function validatorNumber(session, context, params) {
function validatorInteger (line 147) | function validatorInteger(session, context, params) {
function validatorDate (line 158) | function validatorDate(session, context, params) {
FILE: packages/bot/test/mock-template.js
class MockTemplate (line 24) | class MockTemplate {
method compile (line 25) | compile(message, context) {
FILE: packages/bot/test/validators.test.js
function buildSession (line 36) | function buildSession(text) {
FILE: packages/builtin-compromise/src/builtin-compromise.js
class BuiltinCompromise (line 70) | class BuiltinCompromise extends Clonable {
method constructor (line 71) | constructor(settings = {}, container = defaultContainer) {
method registerDefault (line 90) | registerDefault() {
method findBuiltinEntities (line 94) | async findBuiltinEntities(utterance) {
method extract (line 203) | async extract(srcInput) {
method run (line 228) | run(srcInput) {
method getCulture (line 235) | static getCulture(locale) {
FILE: packages/builtin-compromise/test/compromise.test.js
function getManager (line 29) | function getManager() {
function extract (line 34) | function extract(locale, utterance) {
FILE: packages/builtin-default/src/builtin-default.js
class BuiltinDefault (line 27) | class BuiltinDefault extends Clonable {
method constructor (line 28) | constructor(settings = {}, container = defaultContainer) {
method registerDefault (line 47) | registerDefault() {
method prereduceEdges (line 61) | prereduceEdges(edges) {
method findBuiltinEntities (line 83) | findBuiltinEntities(utterance, locale, srcBuiltins) {
method extract (line 102) | extract(srcInput) {
method run (line 118) | run(srcInput) {
FILE: packages/builtin-default/src/recognizers.js
function recognize (line 37) | function recognize(text, regex, entityName, typeName) {
function toDate (line 90) | function toDate(s) {
FILE: packages/builtin-default/test/builtin-default.test.js
function buildExpected (line 30) | function buildExpected(value, start, entityName, typeName) {
function buildInput (line 47) | function buildInput(text, builtins, locale = 'en') {
FILE: packages/builtin-duckling/src/builtin-duckling.js
class BuiltinDuckling (line 54) | class BuiltinDuckling extends Clonable {
method constructor (line 55) | constructor(settings = {}, container = defaultContainer) {
method registerDefault (line 80) | registerDefault() {
method request (line 91) | request(utterance, language) {
method transformEntity (line 129) | transformEntity(entity) {
method transform (line 218) | transform(entities) {
method findBuiltinEntities (line 222) | async findBuiltinEntities(utterance, language) {
method extract (line 232) | async extract(srcInput) {
method run (line 257) | run(srcInput) {
method getCulture (line 264) | static getCulture(locale) {
FILE: packages/builtin-duckling/test/duckling.test.js
function getManager (line 29) | function getManager() {
function extract (line 118) | function extract(locale, utterance) {
FILE: packages/builtin-microsoft/src/builtin-microsoft.js
function getCulture (line 52) | function getCulture(locale) {
class BuiltinMicrosoft (line 60) | class BuiltinMicrosoft extends Clonable {
method constructor (line 61) | constructor(settings = {}, container = defaultContainer) {
method registerDefault (line 84) | registerDefault() {
method translate (line 136) | translate(str, locale) {
method inverseTranslate (line 144) | inverseTranslate(str, locale) {
method calculateResolution (line 154) | calculateResolution(entity, locale) {
method prereduceEdges (line 245) | prereduceEdges(edges) {
method findBuiltinEntities (line 304) | findBuiltinEntities(utterance, locale, srcBuiltins) {
method extract (line 360) | extract(srcInput) {
method run (line 382) | run(srcInput) {
FILE: packages/builtin-microsoft/test/builtin-microsoft.test.js
method toContainResolution (line 38) | toContainResolution(received, argument) {
function addTests (line 78) | function addTests(base, locale, entityTypeName) {
FILE: packages/connector/src/connector.js
class Connector (line 27) | class Connector extends Clonable {
method constructor (line 28) | constructor(settings = {}, container = undefined) {
method registerDefault (line 48) | registerDefault() {
method getSnakeName (line 52) | getSnakeName() {
method initialize (line 61) | initialize() {
method close (line 65) | close() {
method destroy (line 69) | destroy() {
method createSession (line 73) | createSession(activity = {}) {
FILE: packages/connector/src/session.js
class Session (line 28) | class Session {
method constructor (line 29) | constructor(connector = {}, activity = {}) {
method beginDialog (line 58) | beginDialog(context, name) {
method endDialog (line 62) | endDialog(context) {
method restartDialog (line 66) | restartDialog(context) {
method createMessage (line 70) | createMessage() {
method addSuggestedActions (line 84) | addSuggestedActions(actions) {
method say (line 102) | async say(srcMessage, context) {
method sendCard (line 129) | async sendCard(card, context) {
FILE: packages/connector/test/connector.test.js
class TestConnector (line 28) | class TestConnector extends Connector {}
FILE: packages/console-connector/src/console-connector.js
class ConsoleConnector (line 27) | class ConsoleConnector extends Connector {
method initialize (line 28) | initialize() {
method say (line 38) | say(message, reference) {
method hear (line 59) | async hear(line) {
method close (line 101) | close() {
method exit (line 105) | exit() {
FILE: packages/core-loader/src/container-bootstrap.js
function loadPipelinesStr (line 51) | function loadPipelinesStr(instance, pipelines) {
function loadPipelinesFromFile (line 55) | function loadPipelinesFromFile(instance, fileName) {
function loadPipelines (line 60) | function loadPipelines(instance, fileName) {
function loadPlugins (line 79) | function loadPlugins(instance, fileName) {
function traverse (line 100) | function traverse(obj, preffix) {
function containerBootstrap (line 123) | function containerBootstrap(
FILE: packages/core-loader/src/dock.js
class Dock (line 28) | class Dock {
method constructor (line 29) | constructor() {
method getContainer (line 33) | getContainer(name) {
method get (line 37) | get(name) {
method createContainer (line 45) | async createContainer(
method buildChilds (line 88) | async buildChilds(container) {
method terraform (line 113) | async terraform(settings, mustLoadEnv = true) {
method start (line 123) | start(settings, mustLoadEnv = true) {
FILE: packages/core-loader/src/helper.js
function listFiles (line 36) | function listFiles(folderPath, recursive = true) {
function getAbsolutePath (line 53) | function getAbsolutePath(relative) {
function listFilesAbsolute (line 60) | function listFilesAbsolute(folderPath, recursive = true) {
function loadEnv (line 65) | function loadEnv(fileName = '.env') {
FILE: packages/core-loader/src/index.js
function dockStart (line 58) | async function dockStart(settings, mustLoadEnv) {
FILE: packages/core-loader/test/assets/char.js
class Char (line 24) | class Char {
method toChars (line 25) | toChars(srcInput) {
method filter (line 31) | filter(srcInput) {
method run (line 37) | run(input) {
FILE: packages/core-loader/test/assets/cloned.js
class Cloned (line 26) | class Cloned extends Clonable {
method constructor (line 27) | constructor(settings) {
method exportValues (line 44) | exportValues(target, source, key, value) {
method importValues (line 48) | importValues(target, source, key, value) {
method writeValues (line 52) | writeValues(target, source, key, value) {
method readValues (line 57) | readValues(target, source, key, value) {
FILE: packages/core-loader/test/assets/lower.js
class Lower (line 24) | class Lower {
method constructor (line 25) | constructor() {
method toLower (line 29) | toLower(srcInput, text, holder, container, context) {
method run (line 40) | run(input, arg1, arg2) {
FILE: packages/core-loader/test/container.test.js
class Other (line 29) | class Other {
method constructor (line 30) | constructor() {
method run (line 34) | run(srcInput) {
FILE: packages/core/src/among.js
class Among (line 27) | class Among {
method constructor (line 28) | constructor(s, sub, result, method, instance) {
FILE: packages/core/src/arr-to-obj.js
class ArrToObj (line 29) | class ArrToObj {
method constructor (line 35) | constructor(container = defaultContainer) {
method arrToObj (line 45) | static arrToObj(arr) {
method run (line 53) | run(input) {
FILE: packages/core/src/base-stemmer.js
class BaseStemmer (line 27) | class BaseStemmer {
method constructor (line 28) | constructor(container = defaultContainer, dictionary) {
method setCurrent (line 35) | setCurrent(value) {
method getCurrent (line 44) | getCurrent() {
method bc (line 48) | bc(s, ch) {
method in_grouping (line 55) | in_grouping(s, min, max) {
method in_grouping_b (line 65) | in_grouping_b(s, min, max) {
method out_grouping (line 75) | out_grouping(s, min, max) {
method out_grouping_b (line 90) | out_grouping_b(s, min, max) {
method eq_s (line 105) | eq_s(s_size, s) {
method eq_s_b (line 117) | eq_s_b(s_size, s) {
method find_among (line 129) | find_among(v, v_size) {
method find_among_b (line 195) | find_among_b(v, v_size) {
method replace_s (line 254) | replace_s(c_bra, c_ket, s) {
method slice_check (line 263) | slice_check() {
method slice_from (line 275) | slice_from(s) {
method slice_del (line 283) | slice_del() {
method insert (line 287) | insert(c_bra, c_ket, s) {
method slice_to (line 294) | slice_to(s) {
method stemWord (line 302) | stemWord(word) {
method stemWords (line 320) | stemWords(words) {
method stem (line 331) | stem(tokens) {
method getTokenizer (line 341) | getTokenizer() {
method getStopwords (line 350) | getStopwords() {
method tokenizeAndStem (line 357) | tokenizeAndStem(text, keepStops = true) {
FILE: packages/core/src/clonable.js
class Clonable (line 25) | class Clonable {
method constructor (line 30) | constructor(settings = {}, container = defaultContainer) {
method logger (line 35) | get logger() {
method applySettings (line 44) | applySettings(srcobj, settings = {}) {
method toJSON (line 54) | toJSON() {
method fromJSON (line 87) | fromJSON(json) {
method objToValues (line 108) | objToValues(obj, srcKeys) {
method valuesToObj (line 117) | valuesToObj(values, keys) {
method getPipeline (line 125) | getPipeline(tag) {
method runPipeline (line 129) | async runPipeline(input, pipeline) {
method use (line 133) | use(item) {
FILE: packages/core/src/container-bootstrap.js
function loadPipelinesStr (line 37) | function loadPipelinesStr(instance, pipelines) {
function traverse (line 41) | function traverse(obj, preffix) {
function containerBootstrap (line 64) | function containerBootstrap(
FILE: packages/core/src/container.js
class Container (line 31) | class Container {
method constructor (line 35) | constructor(hasPreffix = false) {
method registerCompiler (line 51) | registerCompiler(Compiler, name) {
method addClass (line 56) | addClass(clazz, name) {
method toJSON (line 60) | toJSON(instance) {
method fromJSON (line 66) | fromJSON(obj, settings) {
method register (line 83) | register(name, Clazz, isSingleton = true) {
method getBestKey (line 95) | getBestKey(name) {
method get (line 110) | get(name, settings) {
method buildLiteral (line 134) | buildLiteral(subtype, step, value, context) {
method resolvePathWithType (line 145) | resolvePathWithType(step, context, input, srcObject) {
method resolvePath (line 216) | resolvePath(step, context, input, srcObject) {
method setValue (line 221) | setValue(path, valuePath, context, input, srcObject) {
method incValue (line 229) | incValue(path, valuePath, context, input, srcObject) {
method decValue (line 240) | decValue(path, valuePath, context, input, srcObject) {
method eqValue (line 248) | eqValue(pathA, pathB, srcContext, input, srcObject) {
method neqValue (line 255) | neqValue(pathA, pathB, srcContext, input, srcObject) {
method gtValue (line 262) | gtValue(pathA, pathB, srcContext, input, srcObject) {
method geValue (line 269) | geValue(pathA, pathB, srcContext, input, srcObject) {
method ltValue (line 276) | ltValue(pathA, pathB, srcContext, input, srcObject) {
method leValue (line 283) | leValue(pathA, pathB, srcContext, input, srcObject) {
method deleteValue (line 290) | deleteValue(path, context, input, srcObject) {
method getValue (line 297) | getValue(srcPath, context, input, srcObject) {
method runPipeline (line 305) | async runPipeline(srcPipeline, input, srcObject, depth = 0) {
method use (line 332) | use(item, name, isSingleton, onlyIfNotExists = false) {
method getCompiler (line 356) | getCompiler(name) {
method buildPipeline (line 367) | buildPipeline(srcPipeline, prevPipeline = []) {
method registerPipeline (line 397) | registerPipeline(tag, pipeline, overwrite = true) {
method registerPipelineForChilds (line 408) | registerPipelineForChilds(childName, tag, pipeline, overwrite = true) {
method getPipeline (line 418) | getPipeline(tag) {
method registerConfiguration (line 436) | registerConfiguration(tag, configuration, overwrite = true) {
method getConfiguration (line 442) | getConfiguration(tag) {
method loadPipelinesFromString (line 455) | loadPipelinesFromString(str = '') {
method start (line 519) | async start(pipelineName = 'main') {
FILE: packages/core/src/context.js
class Context (line 27) | class Context extends Clonable {
method constructor (line 28) | constructor(settings = {}, container = undefined) {
method getStorage (line 46) | getStorage() {
method getContext (line 54) | getContext(key) {
method setContext (line 59) | setContext(key, value) {
method getContextValue (line 67) | async getContextValue(key, valueName) {
method setContextValue (line 72) | async setContextValue(key, valueName, value) {
FILE: packages/core/src/default-compiler.js
class DefaultCompiler (line 24) | class DefaultCompiler {
method constructor (line 25) | constructor(container) {
method getTokenFromWord (line 30) | getTokenFromWord(word) {
method compile (line 73) | compile(pipeline) {
method executeCall (line 119) | executeCall(firstToken, context, input, srcObject, depth) {
method executeReference (line 127) | executeReference(step, firstToken, context, input, srcObject) {
method doGoto (line 157) | doGoto(label, srcContext) {
method executeAction (line 163) | async executeAction(step, context, input, srcObject, depth) {
method findLabels (line 293) | findLabels(compiled, srcLabels) {
method execute (line 303) | async execute(compiled, srcInput, srcObject, depth) {
FILE: packages/core/src/dock.js
class Dock (line 26) | class Dock {
method constructor (line 27) | constructor() {
method getContainer (line 31) | getContainer(name) {
method createContainer (line 35) | async createContainer(
method buildChilds (line 73) | async buildChilds(container) {
method terraform (line 98) | async terraform(settings, mustLoadEnv = true) {
method start (line 108) | start(settings, mustLoadEnv = true) {
FILE: packages/core/src/helper.js
function compareWildcars (line 73) | function compareWildcars(text, rule) {
function loadEnvFromJson (line 82) | function loadEnvFromJson(preffix, json = {}) {
FILE: packages/core/src/index.js
function dockStart (line 50) | async function dockStart(settings, mustLoadEnv) {
FILE: packages/core/src/logger.js
class Logger (line 24) | class Logger {
method constructor (line 25) | constructor() {
method debug (line 29) | debug(...args) {
method info (line 34) | info(...args) {
method warn (line 39) | warn(...args) {
method error (line 44) | error(...args) {
method log (line 49) | log(...args) {
method trace (line 54) | trace(...args) {
method fatal (line 59) | fatal(...args) {
FILE: packages/core/src/memory-storage.js
class MemoryStorage (line 27) | class MemoryStorage extends Clonable {
method constructor (line 28) | constructor(settings = {}, container = undefined) {
method read (line 47) | read(keys) {
method saveItem (line 63) | saveItem(key, item) {
method write (line 71) | write(changes) {
method delete (line 90) | delete(keys) {
FILE: packages/core/src/mock-fs.js
function readFile (line 24) | function readFile() {
function writeFile (line 30) | function writeFile() {
function existsSync (line 36) | function existsSync() {
function lstatSync (line 40) | function lstatSync() {
function readFileSync (line 44) | function readFileSync() {
FILE: packages/core/src/normalizer.js
class Normalizer (line 26) | class Normalizer {
method constructor (line 27) | constructor(container = defaultContainer) {
method normalize (line 32) | normalize(text) {
method run (line 39) | run(srcInput) {
FILE: packages/core/src/obj-to-arr.js
class ObjToArr (line 25) | class ObjToArr {
method constructor (line 26) | constructor(container = defaultContainer) {
method objToArr (line 31) | static objToArr(obj) {
method run (line 35) | run(input) {
FILE: packages/core/src/stemmer.js
class Stemmer (line 25) | class Stemmer {
method constructor (line 26) | constructor(container = defaultContainer) {
method stem (line 31) | stem(tokens) {
method getStemmer (line 35) | getStemmer(srcInput) {
method addForTraining (line 51) | async addForTraining(srcInput) {
method train (line 59) | async train(srcInput) {
method run (line 67) | async run(srcInput) {
FILE: packages/core/src/stopwords.js
class Stopwords (line 25) | class Stopwords {
method constructor (line 26) | constructor(container = defaultContainer) {
method build (line 32) | build(list) {
method isNotStopword (line 38) | isNotStopword(token) {
method isStopword (line 42) | isStopword(token) {
method removeStopwords (line 46) | removeStopwords(tokens) {
method run (line 50) | run(srcInput) {
FILE: packages/core/src/timer.js
class Timer (line 29) | class Timer {
method constructor (line 34) | constructor(container = defaultContainer) {
method start (line 43) | start(input) {
method stop (line 54) | stop(srcInput) {
method run (line 64) | run(srcInput) {
FILE: packages/core/src/tokenizer.js
class Tokenizer (line 27) | class Tokenizer {
method constructor (line 28) | constructor(container = defaultContainer, shouldNormalize = false) {
method getNormalizer (line 35) | getNormalizer() {
method normalize (line 44) | normalize(text, force) {
method innerTokenize (line 52) | innerTokenize(text) {
method tokenize (line 56) | tokenize(text, normalize) {
method run (line 94) | async run(srcInput) {
FILE: packages/core/src/uuid.js
function uuid (line 24) | function uuid() {
FILE: packages/core/test/assets/char.js
class Char (line 24) | class Char {
method toChars (line 25) | toChars(srcInput) {
method filter (line 31) | filter(srcInput) {
method run (line 37) | run(input) {
FILE: packages/core/test/assets/cloned.js
class Cloned (line 26) | class Cloned extends Clonable {
method constructor (line 27) | constructor(settings) {
method exportValues (line 44) | exportValues(target, source, key, value) {
method importValues (line 48) | importValues(target, source, key, value) {
method writeValues (line 52) | writeValues(target, source, key, value) {
method readValues (line 57) | readValues(target, source, key, value) {
FILE: packages/core/test/assets/lower.js
class Lower (line 24) | class Lower {
method constructor (line 25) | constructor() {
method toLower (line 29) | toLower(srcInput, text, holder, container, context) {
method run (line 40) | run(input, arg1, arg2) {
FILE: packages/core/test/container.test.js
class Other (line 29) | class Other {
method constructor (line 30) | constructor() {
method run (line 34) | run(srcInput) {
FILE: packages/core/test/normalizer.test.js
class MockNormalizer (line 28) | class MockNormalizer {
method constructor (line 29) | constructor(container, locale, char) {
method normalize (line 37) | normalize(text) {
function getContainer (line 46) | function getContainer() {
FILE: packages/core/test/stopwords.test.js
class MockedStopwords (line 29) | class MockedStopwords extends Stopwords {
method constructor (line 30) | constructor(container, locale, words) {
function getContainer (line 38) | function getContainer() {
FILE: packages/database/src/collection.js
class Collection (line 24) | class Collection {
method constructor (line 25) | constructor(db, name) {
method runOp (line 30) | runOp(...args) {
method find (line 34) | find(condition) {
method findOne (line 38) | findOne(condition) {
method findById (line 42) | findById(id) {
method insertOne (line 46) | insertOne(item) {
method insertMany (line 50) | insertMany(items) {
method update (line 54) | update(item) {
method save (line 58) | save(item) {
method remove (line 62) | remove(condition, justOne) {
method removeById (line 66) | removeById(id) {
FILE: packages/database/src/database.js
class Database (line 28) | class Database extends Clonable {
method constructor (line 29) | constructor(settings = {}, container = undefined) {
method registerDefault (line 56) | registerDefault() {
method registerAdapter (line 71) | registerAdapter(name, adapter) {
method registerCollection (line 75) | registerCollection(name, adapterName) {
method connect (line 80) | connect() {
method disconnect (line 92) | disconnect() {
method getAdapter (line 104) | getAdapter(name) {
method getCollection (line 115) | getCollection(name) {
method createId (line 122) | createId(key) {
method find (line 126) | find(name, condition, limit) {
method findOne (line 130) | findOne(name, condition) {
method findById (line 134) | findById(name, id) {
method insertOne (line 138) | insertOne(name, item) {
method insertMany (line 142) | insertMany(name, items) {
method update (line 146) | update(name, item) {
method save (line 150) | save(name, item) {
method remove (line 154) | remove(name, condition, limit) {
method removeById (line 158) | removeById(name, id) {
FILE: packages/database/src/memory-adapter.js
class MemorydbAdapter (line 27) | class MemorydbAdapter extends Clonable {
method constructor (line 28) | constructor(settings = {}, container = undefined) {
method connect (line 53) | connect() {
method disconnect (line 57) | disconnect() {
method saveCollection (line 61) | async saveCollection(name) {
method loadCollection (line 71) | async loadCollection(name) {
method existsCollectionFile (line 78) | existsCollectionFile(name) {
method saveCollections (line 84) | saveCollections() {
method markToSave (line 97) | async markToSave(name) {
method getCollection (line 114) | async getCollection(name, autoCreate = true) {
method match (line 126) | static match(item, condition, conditionKeys) {
method find (line 136) | async find(name, condition, limit, offset) {
method findOne (line 161) | async findOne(name, condition = {}) {
method findById (line 166) | async findById(name, id) {
method insertOne (line 171) | async insertOne(name, item) {
method insertMany (line 182) | async insertMany(name, items) {
method save (line 198) | async save(name, item) {
method update (line 208) | async update(name, item) {
method remove (line 221) | async remove(name, condition = {}) {
method removeById (line 242) | async removeById(name, id) {
FILE: packages/database/test/fs.js
function readFile (line 26) | function readFile(fileName) {
function writeFile (line 37) | function writeFile(fileName, data, format = 'utf8') {
function existsSync (line 49) | function existsSync(fileName) {
function lstatSync (line 53) | function lstatSync(fileName) {
function readFileSync (line 57) | function readFileSync(fileName, encoding = 'utf8') {
function unlinkSync (line 61) | function unlinkSync(fileName) {
FILE: packages/dialogflow-connector/src/dialogflow-connector.js
class DialogflowConnector (line 27) | class DialogflowConnector extends Connector {
method initialize (line 28) | initialize() {
method hear (line 40) | async hear(conv) {
method say (line 82) | say(message, session) {
FILE: packages/directline-connector/src/directline-connector.js
class DirectlineConnector (line 29) | class DirectlineConnector extends Connector {
method constructor (line 30) | constructor(settings, container) {
method registerDefault (line 43) | registerDefault() {
method log (line 51) | log(level, message) {
method start (line 57) | start() {
method createAnswer (line 277) | createAnswer(srcActivity) {
method say (line 281) | say(srcActivity, text) {
FILE: packages/directline-connector/src/directline-controller.js
class DirectlineController (line 27) | class DirectlineController {
method constructor (line 28) | constructor(settings, parent) {
method getConversation (line 41) | getConversation(id, autocreate = false) {
method createActivity (line 52) | createActivity(incoming, conversationId) {
method createAnswer (line 69) | createAnswer(srcActivity) {
method createConversationUpdateActivity (line 88) | createConversationUpdateActivity(conversation) {
method createConversation (line 103) | createConversation() {
method addActivity (line 138) | addActivity(conversationId, srcActivity) {
method say (line 234) | say(activity) {
method getActivities (line 241) | getActivities(conversationId, watermark) {
method postActivityV3 (line 258) | postActivityV3(conversationId, srcActivity) {
FILE: packages/evaluator/src/compile.js
function processString (line 36) | function processString(str, context) {
function process (line 55) | function process(obj, context) {
function compile (line 73) | function compile(str) {
FILE: packages/evaluator/src/evaluator.js
class Evaluator (line 27) | class Evaluator {
method constructor (line 28) | constructor(context) {
method walkLiteral (line 33) | walkLiteral(node) {
method walkUnary (line 37) | walkUnary(node, context) {
method walkArray (line 53) | walkArray(node, context) {
method walkObject (line 65) | walkObject(node, context) {
method walkBinary (line 78) | walkBinary(node, context) {
method walkIdentifier (line 140) | walkIdentifier(node, context) {
method walkThis (line 147) | walkThis(node, context) {
method walkCall (line 155) | walkCall(node, context) {
method walkMember (line 177) | walkMember(node, context) {
method walkConditional (line 192) | walkConditional(node, context) {
method walkExpression (line 206) | walkExpression(node, context) {
method walkReturn (line 214) | walkReturn(node, context) {
method walkFunction (line 218) | walkFunction(node, context) {
method walkTemplateLiteral (line 243) | walkTemplateLiteral(node, context) {
method walkTemplateElement (line 252) | walkTemplateElement(node) {
method walkTaggedTemplate (line 256) | walkTaggedTemplate(node, context) {
method walkUpdateExpression (line 265) | walkUpdateExpression(node, context) {
method walkAssignmentExpression (line 282) | walkAssignmentExpression(node, context) {
method walkBlock (line 335) | walkBlock(node, context) {
method walk (line 346) | walk(node, context) {
method walkSetIdentifier (line 394) | walkSetIdentifier(node, context, value) {
method walkSetMember (line 400) | walkSetMember(node, context, value) {
method walkSet (line 420) | walkSet(node, context, value) {
method evaluateAll (line 431) | evaluateAll(str, context) {
method evaluate (line 445) | evaluate(str, context) {
FILE: packages/evaluator/src/javascript-compiler.js
class JavascriptCompiler (line 27) | class JavascriptCompiler {
method constructor (line 28) | constructor(container) {
method compile (line 34) | compile(pipeline) {
method log (line 41) | log(msg) {
method walkLiteral (line 46) | walkLiteral(node) {
method walkUnary (line 50) | async walkUnary(node, context) {
method walkArray (line 66) | async walkArray(node, context) {
method walkObject (line 78) | async walkObject(node, context) {
method walkBinary (line 91) | async walkBinary(node, context) {
method walkIdentifier (line 153) | async walkIdentifier(node, context) {
method walkThis (line 174) | async walkThis(node, context) {
method walkCall (line 182) | async walkCall(node, context) {
method walkMember (line 234) | async walkMember(node, context) {
method walkConditional (line 249) | async walkConditional(node, context) {
method walkExpression (line 263) | async walkExpression(node, context) {
method walkReturn (line 271) | async walkReturn(node, context) {
method walkFunction (line 275) | async walkFunction(node, context) {
method walkTemplateLiteral (line 301) | async walkTemplateLiteral(node, context) {
method walkTemplateElement (line 310) | walkTemplateElement(node) {
method walkTaggedTemplate (line 314) | async walkTaggedTemplate(node, context) {
method walkUpdateExpression (line 333) | async walkUpdateExpression(node, context) {
method walkVariableDeclaration (line 350) | async walkVariableDeclaration(node, context) {
method walkAssignmentExpression (line 365) | async walkAssignmentExpression(node, context) {
method walkBlock (line 418) | async walkBlock(node, context) {
method walk (line 429) | async walk(node, context) {
method walkSetIdentifier (line 479) | walkSetIdentifier(node, context, value) {
method walkSetMember (line 494) | async walkSetMember(node, context, value) {
method walkSet (line 514) | async walkSet(node, context, value) {
method evaluateAll (line 525) | async evaluateAll(str, context) {
method evaluate (line 545) | async evaluate(str, context) {
method execute (line 553) | async execute(compiled, srcInput, srcObject) {
FILE: packages/evaluator/src/template.js
class Template (line 26) | class Template {
method compile (line 27) | compile(str, context) {
FILE: packages/evaluator/test/javascript-compiler.test.js
method get (line 27) | get() {
FILE: packages/express-api-server/src/express-api-app.js
class ExpressApiApp (line 29) | class ExpressApiApp {
method constructor (line 30) | constructor(settings, plugins, routers) {
method newRouter (line 37) | static newRouter() {
method initialize (line 41) | initialize() {
method loadComplements (line 52) | loadComplements() {
FILE: packages/express-api-server/src/express-api-server.js
class ExpressApiServer (line 29) | class ExpressApiServer extends Clonable {
method constructor (line 30) | constructor(settings = {}, container = undefined) {
method registerDefault (line 54) | registerDefault() {
method isStarted (line 62) | isStarted() {
method newRouter (line 66) | newRouter() {
method start (line 70) | start(input = {}) {
FILE: packages/express-api-server/src/public/botchat.js
function r (line 1) | function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
function r (line 1) | function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function i (line 1) | function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}
function r (line 1) | function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function l (line 1) | function l(e,t,n){if(!t(e))throw new Error(n)}
function d (line 1) | function d(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}
function h (line 1) | function h(e){var t=!1;return function(){t||(t=!0,e())}}
function g (line 1) | function g(e,t,n){void 0===t&&(t=v),void 0===n&&(n="iterator");var r={me...
function y (line 1) | function y(e,t){var n=t.sagaStack;console.error(e),console.error(n)}
function C (line 1) | function C(e,t){var n=Object.keys(e),r=n.length;var i,a=0,s=Object(o.a)(...
function x (line 1) | function x(e){return{name:e.name||"anonymous",location:A(e)}}
function A (line 1) | function A(e){return e[r.g]}
function j (line 1) | function j(e,t){void 0===e&&(e=10);var n=new Array(e),r=0,i=0,o=0,a=func...
function ne (line 1) | function ne(e,t){return void 0===e&&(e="*"),Object(o.i)(e)?ee(B,{pattern...
function ie (line 1) | function ie(e,t){return Object(o.n)(t)&&(t=e,e=void 0),ee(z,{channel:e,a...
function ae (line 1) | function ae(e){var t=ee(q,e);return t.combinator=!0,t}
function se (line 1) | function se(e){var t=ee(F,e);return t.combinator=!0,t}
function ue (line 1) | function ue(e,t){var n,r=null;return Object(o.d)(e)?n=e:(Object(o.a)(e)?...
function ce (line 1) | function ce(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function le (line 1) | function le(e,t,n){void 0===n&&(n=[]);return ee(U,ue([e,t],n))}
function fe (line 1) | function fe(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function pe (line 1) | function pe(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function de (line 1) | function de(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function he (line 1) | function he(e){return ee(H,e)}
function ve (line 1) | function ve(e){return void 0===e&&(e=r.h),ee(G,e)}
function me (line 1) | function me(e){void 0===e&&(e=c);for(var t=arguments.length,n=new Array(...
function ge (line 1) | function ge(e,t){return ee(J,{pattern:e,buffer:t})}
function ye (line 1) | function ye(){return ee(Y,{})}
function be (line 1) | function be(e){return ee(Z,e)}
function Se (line 1) | function Se(e){return ee(Q,e)}
function we (line 1) | function we(e){return ee(X,e)}
function r (line 1) | function r(e){return(r="function"===typeof Symbol&&"symbol"===typeof Sym...
function i (line 1) | function i(e){return(i="function"===typeof Symbol&&"symbol"===r(Symbol.i...
function o (line 1) | function o(e,t){return!t||"object"!==i(t)&&"function"!==typeof t?functio...
function i (line 1) | function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("...
function o (line 1) | function o(e,t){for(var n in e)t[n]=e[n]}
function a (line 1) | function a(e,t,n){return i(e,t,n)}
function u (line 1) | function u(e,t,n){return(u=function(){if("undefined"===typeof Reflect||!...
function c (line 1) | function c(e){var t="function"===typeof Map?new Map:void 0;return(c=func...
function t (line 1) | function t(e){var n;return Object(r.a)(this,t),(n=Object(i.a)(this,Objec...
function t (line 1) | function t(e){var n;return Object(r.a)(this,t),(n=Object(i.a)(this,Objec...
function t (line 1) | function t(e,n){var a;return Object(r.a)(this,t),(a=Object(i.a)(this,Obj...
function e (line 1) | function e(e){this._isScalar=!1,e&&(this._subscribe=e)}
function i (line 1) | function i(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t]...
function i (line 1) | function i(e,t){return r.call(e,t)}
function o (line 1) | function o(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(6553...
function a (line 1) | function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);...
function h (line 1) | function h(e){return d[e]}
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function S (line 1) | function S(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
function w (line 1) | function w(e){var t=JSON.stringify(e),n=(0,u.default)(t).toString(36);re...
function _ (line 1) | function _(e){var t=Object.keys(e).filter((function(e){return"toString"!...
function E (line 1) | function E(e){var t=Object.keys(e).filter((function(e){return"toString"!...
function C (line 1) | function C(e){if(-1===e.indexOf(","))return[e];for(var t,n=[],r=[],i=0;t...
function x (line 1) | function x(e,t){if(!e)return t.replace(/\&/g,"");if(!t)return".css-"+e+"...
function A (line 1) | function A(e){var t=e.selector,n=e.style,r=p.transform({selector:t,style...
function k (line 1) | function k(e){var t=void 0,n=void 0,r=void 0,i=void 0;return Object.keys...
function I (line 1) | function I(e,t){var n=[],r=t.plain,i=t.selects,o=t.medias,a=t.supports;r...
function R (line 1) | function R(e){P[e.id]||(P[e.id]=e)}
function M (line 1) | function M(e){if(R(e),function(e){if(!T[e.id]){T[e.id]=!0;var t=k(e.styl...
function D (line 1) | function D(e,t){var n=C(e).map((function(e){return e.indexOf("&")>=0?e:"...
function N (line 1) | function N(e,t){return e?"@supports "+e.substring(9)+" and "+t.substring...
function B (line 1) | function B(e,t){var n=t.selector,r=void 0===n?"":n,i=t.mq,o=void 0===i?"...
function z (line 1) | function z(e){var t={label:[]};return B(t,{src:e}),M({id:w(t),style:t,la...
function H (line 1) | function H(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
function K (line 1) | function K(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
function J (line 1) | function J(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
function a (line 1) | function a(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}
function s (line 1) | function s(e,t){if(a()<t)throw new RangeError("Invalid typed array lengt...
function u (line 1) | function u(e,t,n){if(!u.TYPED_ARRAY_SUPPORT&&!(this instanceof u))return...
function c (line 1) | function c(e,t,n,r){if("number"===typeof t)throw new TypeError('"value" ...
function l (line 1) | function l(e){if("number"!==typeof e)throw new TypeError('"size" argumen...
function f (line 1) | function f(e,t){if(l(t),e=s(e,t<0?0:0|d(t)),!u.TYPED_ARRAY_SUPPORT)for(v...
function p (line 1) | function p(e,t){var n=t.length<0?0:0|d(t.length);e=s(e,n);for(var r=0;r<...
function d (line 1) | function d(e){if(e>=a())throw new RangeError("Attempt to allocate Buffer...
function h (line 1) | function h(e,t){if(u.isBuffer(e))return e.length;if("undefined"!==typeof...
function v (line 1) | function v(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)ret...
function m (line 1) | function m(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}
function g (line 1) | function g(e,t,n,r,i){if(0===e.length)return-1;if("string"===typeof n?(r...
function y (line 1) | function y(e,t,n,r,i){var o,a=1,s=e.length,u=t.length;if(void 0!==r&&("u...
function b (line 1) | function b(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r))>i&&(...
function S (line 1) | function S(e,t,n,r){return V(F(t,e.length-n),e,n,r)}
function w (line 1) | function w(e,t,n,r){return V(function(e){for(var t=[],n=0;n<e.length;++n...
function _ (line 1) | function _(e,t,n,r){return w(e,t,n,r)}
function E (line 1) | function E(e,t,n,r){return V(U(t),e,n,r)}
function O (line 1) | function O(e,t,n,r){return V(function(e,t){for(var n,r,i,o=[],a=0;a<e.le...
function C (line 1) | function C(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromBy...
function x (line 1) | function x(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i<n;){var o,a,...
function k (line 1) | function k(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+...
function I (line 1) | function I(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+...
function T (line 1) | function T(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);...
function P (line 1) | function P(e,t,n){for(var r=e.slice(t,n),i="",o=0;o<r.length;o+=2)i+=Str...
function R (line 1) | function R(e,t,n){if(e%1!==0||e<0)throw new RangeError("offset is not ui...
function j (line 1) | function j(e,t,n,r,i,o){if(!u.isBuffer(e))throw new TypeError('"buffer" ...
function M (line 1) | function M(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n...
function D (line 1) | function D(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.len...
function N (line 1) | function N(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out ...
function L (line 1) | function L(e,t,n,r,o){return o||N(e,0,n,4),i.write(e,t,n,r,23,4),n+4}
function B (line 1) | function B(e,t,n,r,o){return o||N(e,0,n,8),i.write(e,t,n,r,52,8),n+8}
function q (line 1) | function q(e){return e<16?"0"+e.toString(16):e.toString(16)}
function F (line 1) | function F(e,t){var n;t=t||1/0;for(var r=e.length,i=null,o=[],a=0;a<r;++...
function U (line 1) | function U(e){return r.toByteArray(function(e){if((e=function(e){return ...
function V (line 1) | function V(e,t,n,r){for(var i=0;i<r&&!(i+n>=t.length||i>=e.length);++i)t...
function s (line 1) | function s(e){return Object(r.b)(e)?"channel":Object(r.l)(e)?String(e):O...
function u (line 1) | function u(e,t,n){var r,s,u,c=t;function l(t,n){if(c===a)return o(t);if(...
function c (line 1) | function c(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<...
function l (line 1) | function l(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<...
function f (line 1) | function f(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<...
function p (line 1) | function p(e,t,n){for(var r=arguments.length,o=new Array(r>3?r-3:0),a=3;...
function d (line 1) | function d(e,t,n){for(var r=e,o=arguments.length,s=new Array(o>3?o-3:0),...
function h (line 1) | function h(e,t,n){for(var r=arguments.length,o=new Array(r>3?r-3:0),a=3;...
function v (line 1) | function v(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<...
function m (line 1) | function m(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<...
function g (line 1) | function g(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<...
function y (line 1) | function y(e,t,n){for(var r=arguments.length,o=new Array(r>3?r-3:0),a=3;...
function b (line 1) | function b(e,t,n){for(var r=arguments.length,o=new Array(r>3?r-3:0),a=3;...
function S (line 1) | function S(e,t,n){for(var r=arguments.length,o=new Array(r>3?r-3:0),a=3;...
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function n (line 1) | function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function i (line 1) | function i(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function r (line 1) | function r(e,t){if(!e)throw new Error(t||"Assertion failed")}
function i (line 1) | function i(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e....
function o (line 1) | function o(e,t,n){if(o.isBN(e))return e;this.negative=0,this.words=null,...
function s (line 1) | function s(e,t,n){for(var r=0,i=Math.min(e.length,n),o=t;o<i;o++){var a=...
function u (line 1) | function u(e,t,n,r){for(var i=0,o=Math.min(e.length,n),a=t;a<o;a++){var ...
function p (line 1) | function p(e,t,n){n.negative=t.negative^e.negative;var r=e.length+t.leng...
function h (line 1) | function h(e,t,n){return(new v).mulp(e,t,n)}
function v (line 1) | function v(e,t){this.x=e,this.y=t}
function g (line 1) | function g(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength()...
function y (line 1) | function y(){g.call(this,"k256","ffffffff ffffffff ffffffff ffffffff fff...
function b (line 1) | function b(){g.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 000...
function S (line 1) | function S(){g.call(this,"p192","ffffffff ffffffff ffffffff fffffffe fff...
function w (line 1) | function w(){g.call(this,"25519","7fffffffffffffff ffffffffffffffff ffff...
function _ (line 1) | function _(e){if("string"===typeof e){var t=o._prime(e);this.m=t.p,this....
function E (line 1) | function E(e){_.call(this,e),this.shift=this.m.bitLength(),this.shift%26...
function N (line 1) | function N(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function L (line 1) | function L(e){if(e&&e.__esModule)return e;var t=N();if(t&&t.has(e))retur...
function B (line 1) | function B(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(c){return vo...
function s (line 1) | function s(e){n(a,i,o,s,u,"next",e)}
function u (line 1) | function u(e){n(a,i,o,s,u,"throw",e)}
function e (line 1) | function e(t){var n=this;Object(i.a)(this,e),this.throwIfError=function(...
function e (line 1) | function e(){var t=this;Object(i.a)(this,e),this.privState=r.None,this.p...
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function r (line 1) | function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n,r){switch(e.call(this),this.syncErrorValue=null,this.sync...
function t (line 1) | function t(t,n,r,o){var s;e.call(this),this._parentSubscriber=t;var u=th...
function l (line 1) | function l(e){return e instanceof u||"syncErrorThrowable"in e&&e[s.rxSub...
function o (line 1) | function o(){throw new Error("setTimeout has not been defined")}
function a (line 1) | function a(){throw new Error("clearTimeout has not been defined")}
function s (line 1) | function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&s...
function p (line 1) | function p(){l&&u&&(l=!1,u.length?c=u.concat(c):f=-1,c.length&&d())}
function d (line 1) | function d(){if(!l){var e=s(p);l=!0;for(var t=c.length;t;){for(u=c,c=[];...
function h (line 1) | function h(e,t){this.fun=e,this.array=t}
function v (line 1) | function v(){}
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments...
function c (line 1) | function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function l (line 1) | function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function f (line 1) | function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function p (line 1) | function p(e){return Object.keys(e).reduce((function(t,n){var r=e[n];ret...
function d (line 1) | function d(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=...
function n (line 1) | function n(e,t){if(!e)throw new Error(t||"Assertion failed")}
function u (line 1) | function u(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function n (line 1) | function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototy...
function r (line 1) | function r(){this.constructor=t}
function t (line 1) | function t(t){var n=e.call(this,t)||this;return n.name="ArgumentNull",n....
function t (line 1) | function t(t){var n=e.call(this,t)||this;return n.name="InvalidOperation...
function t (line 1) | function t(t,n){var r=e.call(this,n)||this;return r.name=t+"ObjectDispos...
function o (line 1) | function o(e,t){return 55296===(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.l...
function a (line 1) | function a(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}
function s (line 1) | function s(e){return 1===e.length?"0"+e:e}
function u (line 1) | function u(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length...
function r (line 1) | function r(){this.constructor=t}
function t (line 1) | function t(t){var n=e.call(this,t)||this;return n.name="ArgumentNull",n....
function t (line 1) | function t(t){var n=e.call(this,t)||this;return n.name="InvalidOperation...
function t (line 1) | function t(t,n){var r=e.call(this,n)||this;return r.name=t+"ObjectDispos...
function e (line 1) | function e(){}
function r (line 1) | function r(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=...
function e (line 1) | function e(t,n){Object(i.a)(this,e),this.privName=t,this.privEventId=Obj...
function n (line 1) | function n(t){return"function"===typeof Symbol&&"symbol"===typeof Symbol...
function a (line 1) | function a(e){i.call(this),this.hashMode="string"===typeof e,this.hashMo...
function f (line 1) | function f(e){if(!(this instanceof f))return new f(e);a.call(this,e),s.c...
function p (line 1) | function p(){this.allowHalfOpen||this._writableState.ended||r.nextTick(d...
function d (line 1) | function d(e){e.end()}
function e (line 1) | function e(t,n,o,u){if(Object(i.a)(this,e),this.privBody=null,t===r.Text...
function i (line 1) | function i(){r.call(this)}
function i (line 1) | function i(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}
function o (line 1) | function o(){n.readable&&n.resume&&n.resume()}
function s (line 1) | function s(){a||(a=!0,e.end())}
function u (line 1) | function u(){a||(a=!0,"function"===typeof e.destroy&&e.destroy())}
function c (line 1) | function c(e){if(l(),0===r.listenerCount(this,"error"))throw e}
function l (line 1) | function l(){n.removeListener("data",i),e.removeListener("drain",o),n.re...
function i (line 1) | function i(e,t){this._block=r.alloc(e),this._finalSize=t,this._blockSize...
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function a (line 1) | function a(e){if("object"!==typeof e||null===e)return!1;for(var t=e;null...
function s (line 1) | function s(e,t,n){var i;if("function"===typeof t&&"function"===typeof n|...
function u (line 1) | function u(e,t){var n=t&&t.type;return"Given "+(n&&'action "'+String(n)+...
function c (line 1) | function c(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var i=t[...
function l (line 1) | function l(e,t){return function(){return t(e.apply(this,arguments))}}
function f (line 1) | function f(e,t){if("function"===typeof e)return l(e,t);if("object"!==typ...
function p (line 1) | function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function d (line 1) | function d(e,t){var n=Object.keys(e);return Object.getOwnPropertySymbols...
function h (line 1) | function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function v (line 1) | function v(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=...
function m (line 1) | function m(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=...
function r (line 1) | function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e._...
function t (line 1) | function t(e,n){var i,s=arguments.length>2&&void 0!==arguments[2]?argume...
function t (line 1) | function t(e,n,i){var s;return Object(r.a)(this,t),(s=Object(o.a)(this,O...
function t (line 1) | function t(e,n){return Object(r.a)(this,t),Object(o.a)(this,Object(a.a)(...
function t (line 1) | function t(e,n,i){var s;return Object(r.a)(this,t),(s=Object(o.a)(this,O...
function t (line 1) | function t(e,n,i){var s;return Object(r.a)(this,t),(s=Object(o.a)(this,O...
function t (line 1) | function t(e,n,i){var s;return Object(r.a)(this,t),(s=Object(o.a)(this,O...
function t (line 1) | function t(e,n,i){var s;return Object(r.a)(this,t),(s=Object(o.a)(this,O...
function a (line 1) | function a(e){if(null===e||void 0===e)throw new TypeError("Object.assign...
function e (line 1) | function e(e){this.closed=!1,this._parent=null,this._parents=null,this._...
function l (line 1) | function l(e){return e.reduce((function(e,t){return e.concat(t instanceo...
function s (line 1) | function s(){s.init.call(this)}
function c (line 1) | function c(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._m...
function l (line 1) | function l(e,t,n,r){var i,o,a,s;if("function"!==typeof n)throw new TypeE...
function f (line 1) | function f(){for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]...
function p (line 1) | function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener...
function d (line 1) | function d(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];retu...
function h (line 1) | function h(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"...
function v (line 1) | function v(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}
function n (line 1) | function n(e){return Object.prototype.toString.call(e)}
function u (line 1) | function u(e){s.call(this,"digest"),this._hash=e}
function o (line 1) | function o(){this.pending=null,this.pendingTotal=0,this.blockSize=this.c...
function n (line 1) | function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e....
function r (line 1) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 1) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function u (line 1) | function u(e,t){var n,r=e.type;return"imBack"===r||"messageBack"===r||"p...
function e (line 1) | function e(t,n){(0,i.default)(this,e),(0,a.default)(this,"card",void 0),...
function e (line 1) | function e(){}
function e (line 1) | function e(){}
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function i (line 1) | function i(e){var t=e.match(n);return t?{scheme:t[1],auth:t[2],host:t[3]...
function o (line 1) | function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth...
function a (line 1) | function a(e){var n=e,r=i(e);if(r){if(!r.path)return e;n=r.path}for(var ...
function s (line 1) | function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=i(t),s=i(e);if(s&&...
function c (line 1) | function c(e){return e}
function l (line 1) | function l(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.ch...
function f (line 1) | function f(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}
function r (line 1) | function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t){e.call(this,t),this.destination=t}
function t (line 1) | function t(){e.call(this),this.observers=[],this.closed=!1,this.isStoppe...
function t (line 1) | function t(t,n){e.call(this),this.destination=t,this.source=n}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(){e.apply(this,arguments)}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t){e.call(this),this.scheduler=t}
function o (line 1) | function o(e){var t;switch(this.encoding=function(e){var t=function(e){i...
function a (line 1) | function a(e){return e<=127?0:e>>5===6?2:e>>4===14?3:e>>3===30?4:e>>6===...
function s (line 1) | function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(12...
function u (line 1) | function u(e,t){if((e.length-t)%2===0){var n=e.toString("utf16le",t);if(...
function c (line 1) | function c(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n...
function l (line 1) | function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t)...
function f (line 1) | function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+...
function p (line 1) | function p(e){return e.toString(this.encoding)}
function d (line 1) | function d(e){return e&&e.length?this.write(e):""}
function s (line 1) | function s(e,n){var r={seen:[],stylize:c};return arguments.length>=3&&(r...
function u (line 1) | function u(e,t){var n=s.styles[t];return n?"\x1b["+s.colors[n][0]+"m"+e+...
function c (line 1) | function c(e,t){return e}
function l (line 1) | function l(e,n,r){if(e.customInspect&&n&&E(n.inspect)&&n.inspect!==t.ins...
function f (line 1) | function f(e){return"["+Error.prototype.toString.call(e)+"]"}
function p (line 1) | function p(e,t,n,r,i,o){var a,s,u;if((u=Object.getOwnPropertyDescriptor(...
function d (line 1) | function d(e){return Array.isArray(e)}
function h (line 1) | function h(e){return"boolean"===typeof e}
function v (line 1) | function v(e){return null===e}
function m (line 1) | function m(e){return"number"===typeof e}
function g (line 1) | function g(e){return"string"===typeof e}
function y (line 1) | function y(e){return void 0===e}
function b (line 1) | function b(e){return S(e)&&"[object RegExp]"===O(e)}
function S (line 1) | function S(e){return"object"===typeof e&&null!==e}
function w (line 1) | function w(e){return S(e)&&"[object Date]"===O(e)}
function _ (line 1) | function _(e){return S(e)&&("[object Error]"===O(e)||e instanceof Error)}
function E (line 1) | function E(e){return"function"===typeof e}
function O (line 1) | function O(e){return Object.prototype.toString.call(e)}
function C (line 1) | function C(e){return e<10?"0"+e.toString(10):e.toString(10)}
function A (line 1) | function A(){var e=new Date,t=[C(e.getHours()),C(e.getMinutes()),C(e.get...
function k (line 1) | function k(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function T (line 1) | function T(e,t){if(!e){var n=new Error("Promise was rejected with a fals...
function t (line 1) | function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),i=[],o=...
function n (line 1) | function n(){for(var n=[],r=0;r<arguments.length;r++)n.push(arguments[r]...
function i (line 1) | function i(e){r.isBuffer(e)||(e=r.from(e));for(var t=e.length/4|0,n=new ...
function o (line 1) | function o(e){for(;0<e.length;e++)e[0]=0}
function a (line 1) | function a(e,t,n,r,i){for(var o,a,s,u,c=n[0],l=n[1],f=n[2],p=n[3],d=e[0]...
function c (line 1) | function c(e){this._key=i(e),this._reset()}
function u (line 1) | function u(e,t){this.type=e,this.p=new r(t.p,16),this.red=t.prime?r.red(...
function c (line 1) | function c(e,t){this.curve=e,this.type=t,this.precomputed=null}
function c (line 1) | function c(e){var t;"object"!==typeof e||u.isBuffer(e)||(t=e.passphrase,...
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function ye (line 1) | function ye(){return{line:he,column:de,offset:fe+(ue.offset||0)}}
function be (line 1) | function be(){ve&&(me.push(ve),ne&&ne.call(oe,ve,{start:Z,end:ye()}),ve=...
function B (line 1) | function B(e){return e>=1&&e<=8||11===e||e>=13&&e<=31||e>=127&&e<=159||e...
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function e (line 1) | function e(){this._isProcessed=!1,this._original=null,this._processed=null}
function e (line 1) | function e(e,t){this.physicalSize=e,this.unit=t}
function e (line 1) | function e(){}
function o (line 1) | function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function e (line 1) | function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?argu...
function r (line 1) | function r(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n...
function r (line 1) | function r(){this.constructor=t}
function e (line 1) | function e(){}
function t (line 1) | function t(t,n,r){void 0===t&&(t=16e3),void 0===n&&(n=16),void 0===r&&(r...
function o (line 1) | function o(t,n){return delete e.exports[t],e.exports[t]=n,n}
method FeedHandler (line 1) | get FeedHandler(){return o("FeedHandler",n(1336))}
method Stream (line 1) | get Stream(){return o("Stream",n(1350))}
method WritableStream (line 1) | get WritableStream(){return o("WritableStream",n(515))}
method ProxyHandler (line 1) | get ProxyHandler(){return o("ProxyHandler",n(1352))}
method DomUtils (line 1) | get DomUtils(){return o("DomUtils",n(510))}
method CollectingHandler (line 1) | get CollectingHandler(){return o("CollectingHandler",n(1353))}
method RssHandler (line 1) | get RssHandler(){return o("RssHandler",this.FeedHandler)}
function e (line 1) | function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbo...
function t (line 1) | function t(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return vo...
function n (line 1) | function n(e){return function(){var n=this,r=arguments;return new Promis...
function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function o (line 1) | function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function a (line 1) | function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function s (line 1) | function s(e){return function(e){if(Array.isArray(e))return e}(e)||c(e)|...
function u (line 1) | function u(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new ...
function c (line 1) | function c(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Ob...
function f (line 1) | function f(e,t,n){d(t);var r=function e(t,n){if(n.length){var r=s(n),i=r...
function p (line 1) | function p(){return(p=n(r.mark((function e(t,n,i){var o,a,s,u,c,l,f;retu...
function d (line 1) | function d(e){if(!Array.isArray(e))throw new Error("path must be an arra...
function v (line 1) | function v(e,t){return m.apply(this,arguments)}
function m (line 1) | function m(){return(m=n(r.mark((function e(t,n){var i,o,a,c,l,f,p,d;retu...
function g (line 1) | function g(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}
function y (line 1) | function y(t,n,r){if(!n.length)return r;var o,c=s(n),f=c[0],p=c.slice(1)...
function o (line 1) | function o(){try{return r.apply(this,arguments)}catch(e){return i.errorO...
function i (line 1) | function i(e){var t,n=e.Symbol;return"function"===typeof n?n.observable?...
function i (line 1) | function i(e){var t=e.Symbol;if("function"===typeof t)return t.iterator|...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.array=t,this.scheduler=n,n||1!==t.leng...
function o (line 1) | function o(e,t){for(var n in e)t[n]=e[n]}
function a (line 1) | function a(e,t,n){return i(e,t,n)}
function a (line 1) | function a(e){var t=this;this.next=null,this.entry=null,this.finish=func...
function m (line 1) | function m(){}
function g (line 1) | function g(e,t){s=s||n(78),e=e||{};var r=t instanceof s;this.objectMode=...
function y (line 1) | function y(e){if(s=s||n(78),!h.call(y,this)&&!(this instanceof s))return...
function b (line 1) | function b(e,t,n,r,i,o,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!...
function S (line 1) | function S(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needD...
function w (line 1) | function w(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writ...
function _ (line 1) | function _(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!...
function E (line 1) | function E(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n)...
function O (line 1) | function O(e,t){var n=_(t);return n&&(!function(e,t){t.prefinished||t.fi...
function s (line 1) | function s(){i.call(this,64),this._a=1732584193,this._b=4023233417,this....
function u (line 1) | function u(e,t){return e<<t|e>>>32-t}
function c (line 1) | function c(e,t,n,r,i,o,a){return u(e+(t&n|~t&r)+i+o|0,a)+t|0}
function l (line 1) | function l(e,t,n,r,i,o,a){return u(e+(t&r|n&~r)+i+o|0,a)+t|0}
function f (line 1) | function f(e,t,n,r,i,o,a){return u(e+(t^n^r)+i+o|0,a)+t|0}
function p (line 1) | function p(e,t,n,r,i,o,a){return u(e+(n^(t|~r))+i+o|0,a)+t|0}
function d (line 1) | function d(){o.call(this,64),this._a=1732584193,this._b=4023233417,this....
function h (line 1) | function h(e,t){return e<<t|e>>>32-t}
function v (line 1) | function v(e,t,n,r,i,o,a,s){return h(e+(t^n^r)+o+a|0,s)+i|0}
function m (line 1) | function m(e,t,n,r,i,o,a,s){return h(e+(t&n|~t&r)+o+a|0,s)+i|0}
function g (line 1) | function g(e,t,n,r,i,o,a,s){return h(e+((t|~n)^r)+o+a|0,s)+i|0}
function y (line 1) | function y(e,t,n,r,i,o,a,s){return h(e+(t&r|n&~r)+o+a|0,s)+i|0}
function b (line 1) | function b(e,t,n,r,i,o,a,s){return h(e+(t^(n|~r))+o+a|0,s)+i|0}
function i (line 1) | function i(e){this.options=e,this.type=this.options.type,this.blockSize=...
function i (line 1) | function i(e){this.rand=e}
function o (line 1) | function o(e,n){var i=function(e){var t=a(e);return{blinder:t.toRed(r.mo...
function a (line 1) | function a(e){for(var t=e.modulus.byteLength(),n=new r(i(t));n.cmp(e.mod...
function u (line 1) | function u(e){"short"===e.type?this.curve=new a.short(e):"edwards"===e.t...
function c (line 1) | function c(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0...
function E (line 1) | function E(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function O (line 1) | function O(e){return e&&e.__esModule?e:{default:e}}
function C (line 1) | function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function I (line 1) | function I(){var e=C((0,p.default)(),1)[0],t=C((0,h.default)(),1)[0];ret...
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function y (line 1) | function y(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function b (line 1) | function b(e){return e&&e.__esModule?e:{default:e}}
function S (line 1) | function S(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function _ (line 1) | function _(e){var t=S((0,d.default)(),1)[0],n=(0,l.default)(),r=(0,p.def...
function E (line 1) | function E(){var e=S((0,d.default)(),2),t=e[0],n=e[1],r=(0,h.default)();...
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function v (line 1) | function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function m (line 1) | function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function e (line 1) | function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function p (line 1) | function p(e){return!!e.abort}
function d (line 1) | function d(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
function t (line 1) | function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function p (line 1) | function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function p (line 1) | function p(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function d (line 1) | function d(e){return e&&e.__esModule?e:{default:e}}
function h (line 1) | function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function o (line 1) | function o(e){return void 0===e||null===e||""===e}
function a (line 1) | function a(e,t,n){if(o(t))return n;for(var r in e){if(parseInt(r,10)>=0)...
function s (line 1) | function s(e,t,n,r){void 0===r&&(r=void 0),null===n||void 0===n||n===r?d...
function u (line 1) | function u(e){var t=/#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2...
function c (line 1) | function c(e,t){for(t+=1;t<e.length&&"<"==e[t];)for(;t<e.length&&">"!=e[...
function e (line 1) | function e(e,t){this.name=e,this.eventId=r.CreateNoDashGuid(),this.event...
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function e (line 1) | function e(e,t){this.headerName=e,this.token=t}
function r (line 1) | function r(){this.constructor=t}
function t (line 1) | function t(t,n,r){void 0===r&&(r=i.EventType.Info);var o=e.call(this,t,r...
function t (line 1) | function t(t,n,r){var i=e.call(this,t,n)||this;return i.result=r,i}
function t (line 1) | function t(t,n,r){var i=e.call(this,"RecognitionTriggeredEvent",t)||this...
function t (line 1) | function t(t,n,r){var i=e.call(this,"ListeningStartedEvent",t)||this;ret...
function t (line 1) | function t(t,n,r){var i=e.call(this,"ConnectingToServiceEvent",t)||this;...
function t (line 1) | function t(t,n,r,i,o){var a=e.call(this,"RecognitionStartedEvent",t)||th...
function t (line 1) | function t(t,n){return e.call(this,"SpeechStartDetectedEvent",t,n)||this}
function t (line 1) | function t(t,n){return e.call(this,"SpeechHypothesisEvent",t,n)||this}
function t (line 1) | function t(t,n){return e.call(this,"SpeechFragmentEvent",t,n)||this}
function t (line 1) | function t(t,n){return e.call(this,"SpeechEndDetectedEvent",t,n)||this}
function t (line 1) | function t(t,n){return e.call(this,"SpeechSimplePhraseEvent",t,n)||this}
function t (line 1) | function t(t,n){return e.call(this,"SpeechDetailedPhraseEvent",t,n)||this}
function t (line 1) | function t(t,n,r,o,a,s,u,c){var l=e.call(this,"RecognitionEndedEvent",t,...
function u (line 1) | function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function e (line 1) | function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?argu...
function s (line 1) | function s(){return(s=(0,o.default)(i.default.mark((function e(t){var n;...
function e (line 1) | function e(e,t){this.privName=e,this.privEventId=r.createNoDashGuid(),th...
function e (line 1) | function e(e,t){this.privHeaderName=e,this.privToken=t}
function r (line 1) | function r(){this.constructor=t}
function t (line 1) | function t(t,n,r,o){void 0===o&&(o=i.EventType.Info);var a=e.call(this,t...
function t (line 1) | function t(t,n,r,i){var o=e.call(this,"RecognitionTriggeredEvent",t,n)||...
function t (line 1) | function t(t,n,r,i){var o=e.call(this,"ListeningStartedEvent",t,n)||this...
function t (line 1) | function t(t,n,r){var i=e.call(this,"ConnectingToServiceEvent",t,r)||thi...
function t (line 1) | function t(t,n,r,i,o){var a=e.call(this,"RecognitionStartedEvent",t,o)||...
function t (line 1) | function t(t,n,r,o,a,s,u,l){var f=e.call(this,"RecognitionEndedEvent",t,...
function a (line 1) | function a(e){var t=i.get(e);return console.assert(null!=t,"'this' is ex...
function s (line 1) | function s(e){null==e.passiveListener?e.event.cancelable&&(e.canceled=!0...
function u (line 1) | function u(e,t){i.set(this,{eventTarget:e,event:t,eventPhase:2,currentTa...
function c (line 1) | function c(e){return{get:function(){return a(this).event[e]},set:functio...
function l (line 1) | function l(e){return{value:function(){var t=a(this).event;return t[e].ap...
function f (line 1) | function f(e){if(null==e||e===Object.prototype)return u;var t=o.get(e);r...
function p (line 1) | function p(e){return a(e).immediateStopped}
function d (line 1) | function d(e,t){a(e).passiveListener=t}
method type (line 1) | get type(){return a(this).event.type}
method target (line 1) | get target(){return a(this).eventTarget}
method currentTarget (line 1) | get currentTarget(){return a(this).currentTarget}
method NONE (line 1) | get NONE(){return 0}
method CAPTURING_PHASE (line 1) | get CAPTURING_PHASE(){return 1}
method AT_TARGET (line 1) | get AT_TARGET(){return 2}
method BUBBLING_PHASE (line 1) | get BUBBLING_PHASE(){return 3}
method eventPhase (line 1) | get eventPhase(){return a(this).eventPhase}
method bubbles (line 1) | get bubbles(){return Boolean(a(this).event.bubbles)}
method cancelable (line 1) | get cancelable(){return Boolean(a(this).event.cancelable)}
method defaultPrevented (line 1) | get defaultPrevented(){return a(this).canceled}
method composed (line 1) | get composed(){return Boolean(a(this).event.composed)}
method timeStamp (line 1) | get timeStamp(){return a(this).timeStamp}
method srcElement (line 1) | get srcElement(){return a(this).eventTarget}
method cancelBubble (line 1) | get cancelBubble(){return a(this).stopped}
method cancelBubble (line 1) | set cancelBubble(e){if(e){var t=a(this);t.stopped=!0,"boolean"===typeof ...
method returnValue (line 1) | get returnValue(){return!a(this).canceled}
method returnValue (line 1) | set returnValue(e){e||s(a(this))}
function m (line 1) | function m(e){return null!==e&&"object"===(0,r.default)(e)}
function g (line 1) | function g(e){var t=h.get(e);if(null==t)throw new TypeError("'this' is e...
function y (line 1) | function y(e,t){Object.defineProperty(e,"on".concat(t),function(e){retur...
function b (line 1) | function b(e){function t(){S.call(this)}t.prototype=Object.create(S.prot...
function S (line 1) | function S(){if(!(this instanceof S)){if(1===arguments.length&&Array.isA...
function a (line 1) | function a(e){var t=i.get(e);return console.assert(null!=t,"'this' is ex...
function s (line 1) | function s(e){null==e.passiveListener?e.event.cancelable&&(e.canceled=!0...
function u (line 1) | function u(e,t){i.set(this,{eventTarget:e,event:t,eventPhase:2,currentTa...
function c (line 1) | function c(e){return{get:function(){return a(this).event[e]},set:functio...
function l (line 1) | function l(e){return{value:function(){var t=a(this).event;return t[e].ap...
function f (line 1) | function f(e){if(null==e||e===Object.prototype)return u;var t=o.get(e);r...
function p (line 1) | function p(e){return a(e).immediateStopped}
function d (line 1) | function d(e,t){a(e).passiveListener=t}
method type (line 1) | get type(){return a(this).event.type}
method target (line 1) | get target(){return a(this).eventTarget}
method currentTarget (line 1) | get currentTarget(){return a(this).currentTarget}
method NONE (line 1) | get NONE(){return 0}
method CAPTURING_PHASE (line 1) | get CAPTURING_PHASE(){return 1}
method AT_TARGET (line 1) | get AT_TARGET(){return 2}
method BUBBLING_PHASE (line 1) | get BUBBLING_PHASE(){return 3}
method eventPhase (line 1) | get eventPhase(){return a(this).eventPhase}
method bubbles (line 1) | get bubbles(){return Boolean(a(this).event.bubbles)}
method cancelable (line 1) | get cancelable(){return Boolean(a(this).event.cancelable)}
method defaultPrevented (line 1) | get defaultPrevented(){return a(this).canceled}
method composed (line 1) | get composed(){return Boolean(a(this).event.composed)}
method timeStamp (line 1) | get timeStamp(){return a(this).timeStamp}
method srcElement (line 1) | get srcElement(){return a(this).eventTarget}
method cancelBubble (line 1) | get cancelBubble(){return a(this).stopped}
method cancelBubble (line 1) | set cancelBubble(e){if(e){var t=a(this);t.stopped=!0,"boolean"===typeof ...
method returnValue (line 1) | get returnValue(){return!a(this).canceled}
method returnValue (line 1) | set returnValue(e){e||s(a(this))}
function m (line 1) | function m(e){return null!==e&&"object"===(0,r.default)(e)}
function g (line 1) | function g(e){var t=h.get(e);if(null==t)throw new TypeError("'this' is e...
function y (line 1) | function y(e,t){Object.defineProperty(e,"on".concat(t),function(e){retur...
function b (line 1) | function b(e){function t(){S.call(this)}t.prototype=Object.create(S.prot...
function S (line 1) | function S(){if(!(this instanceof S)){if(1===arguments.length&&Array.isA...
function r (line 1) | function r(){this.__rules__=[],this.__cache__=null}
function r (line 1) | function r(e,t,n){this.type=e,this.tag=t,this.attrs=null,this.map=null,t...
function r (line 1) | function r(t){var n;return(n=e.call(this,t)||this).type="decl",n}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function e (line 1) | function e(e){for(var t in void 0===e&&(e={}),this.raws={},e)this[t]=e[t]}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(t){var n;return(n=e.call(this,t)||this).type="comment",n}
function r (line 1) | function r(t){var n;return(n=e.call(this,t)||this).type="atrule",n}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function s (line 1) | function s(){return e.apply(this,arguments)||this}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function u (line 1) | function u(t){var n;return(n=e.call(this,t)||this).type="rule",n.nodes||...
function e (line 1) | function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this...
function d (line 1) | function d(e){var t=e.store,n=e.context,o=e.children,a=Object(r.useMemo)...
function C (line 1) | function C(e,t){var n=e[1];return[t.payload,n+1]}
function A (line 1) | function A(e,t){void 0===t&&(t={});var n=t,o=n.getDisplayName,a=void 0==...
function I (line 1) | function I(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}
function T (line 1) | function T(e,t){if(I(e,t))return!0;if("object"!==typeof e||null===e||"ob...
function R (line 1) | function R(e){return function(t,n){var r=e(t,n);function i(){return r}re...
function j (line 1) | function j(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwn...
function M (line 1) | function M(e,t){return function(t,n){n.displayName;var r=function(e,t){r...
function L (line 1) | function L(e,t,n){return Object(v.a)({},n,{},e,{},t)}
function z (line 1) | function z(e,t,n,r){return function(i,o){return n(e(i,o),t(r,o),o)}}
function q (line 1) | function q(e,t,n,r,i){var o,a,s,u,c,l=i.areStatesEqual,f=i.areOwnPropsEq...
function F (line 1) | function F(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,i...
function U (line 1) | function U(e,t,n){for(var r=t.length-1;r>=0;r--){var i=t[r](e);if(i)retu...
function V (line 1) | function V(e,t){return e===t}
function H (line 1) | function H(){var e=Object(r.useContext)(s);return S()(e,"could not find ...
function G (line 1) | function G(e){void 0===e&&(e=s);var t=e===s?H:function(){return Object(r...
function J (line 1) | function J(e){void 0===e&&(e=s);var t=e===s?K:G(e);return function(){ret...
function Q (line 1) | function Q(e){void 0===e&&(e=s);var t=e===s?H:function(){return Object(r...
function S (line 1) | function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function w (line 1) | function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function u (line 1) | function u(e){return r.isMemo(e)?a:s[e.$$typeof]||i}
function e (line 1) | function e(t){var n=this;Object(r.a)(this,e),this.privEventListeners={},...
function e (line 1) | function e(t,n){Object(r.a)(this,e),this.privStatusCode=t,this.privReaso...
function u (line 1) | function u(e,t,n,r){var i=t&&t.prototype instanceof v?t:v,o=Object.creat...
function c (line 1) | function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(r){ret...
function v (line 1) | function v(){}
function m (line 1) | function m(){}
function g (line 1) | function g(){}
function _ (line 1) | function _(e){["next","throw","return"].forEach((function(t){e[t]=functi...
function E (line 1) | function E(e){var t;this._invoke=function(n,i){function o(){return new P...
function O (line 1) | function O(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,...
function C (line 1) | function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.f...
function x (line 1) | function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.comp...
function A (line 1) | function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.r...
function k (line 1) | function k(e){if(e){var n=e[o];if(n)return n.call(e);if("function"===typ...
function I (line 1) | function I(){return{value:t,done:!0}}
function i (line 1) | function i(r,i){return s.type="throw",s.arg=e,n.next=r,i&&(n.method="nex...
function f (line 1) | function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function p (line 1) | function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function e (line 1) | function e(t){(0,o.default)(this,e),(0,s.default)(this,"connectionStatus...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(){var t=e.call(this,"object unsubscribed");this.name=t.name="...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.value=t,this.scheduler=n,this._isScala...
function e (line 1) | function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue="N...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t){this.project=e,this.thisArg=t}
function t (line 1) | function t(t,n,r){e.call(this,t),this.project=n,this.count=0,this.thisAr...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e){this.connectable=e}
function t (line 1) | function t(t,n){e.call(this,t),this.connectable=n}
function o (line 1) | function o(e){if(this.buffer=null,this.writable=!0,this.readable=!0,!e)r...
function y (line 1) | function y(e,t){e=e||{};var r=t instanceof(o=o||n(78));this.objectMode=!...
function b (line 1) | function b(e){if(o=o||n(78),!(this instanceof b))return new b(e);this._r...
function S (line 1) | function S(e,t,n,r,i){var o,a=e._readableState;null===t?(a.reading=!1,fu...
function w (line 1) | function w(e,t,n,r){t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e...
function E (line 1) | function E(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!==...
function O (line 1) | function O(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable...
function C (line 1) | function C(e){d("emit readable"),e.emit("readable"),T(e)}
function x (line 1) | function x(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(A,e,t))}
function A (line 1) | function A(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.l...
function k (line 1) | function k(e){d("readable nexttick read 0"),e.read(0)}
function I (line 1) | function I(e,t){t.reading||(d("resume read 0"),e.read(0)),t.resumeSchedu...
function T (line 1) | function T(e){var t=e._readableState;for(d("flow",t.flowing);t.flowing&&...
function P (line 1) | function P(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift(...
function R (line 1) | function R(e){var t=e._readableState;if(t.length>0)throw new Error('"end...
function j (line 1) | function j(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=...
function M (line 1) | function M(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;retu...
function c (line 1) | function c(t,r){d("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped...
function l (line 1) | function l(){d("onend"),e.end()}
function v (line 1) | function v(t){d("ondata"),h=!1,!1!==e.write(t)||h||((1===o.pipesCount&&o...
function m (line 1) | function m(t){d("onerror",t),b(),e.removeListener("error",m),0===s(e,"er...
function g (line 1) | function g(){e.removeListener("finish",y),b()}
function y (line 1) | function y(){d("onfinish"),e.removeListener("close",g),b()}
function b (line 1) | function b(){d("unpipe"),n.unpipe(e)}
function i (line 1) | function i(e,t){e.emit("error",t)}
function o (line 1) | function o(e,t){var n=this._transformState;n.transforming=!1;var r=n.wri...
function a (line 1) | function a(e){if(!(this instanceof a))return new a(e);r.call(this,e),thi...
function s (line 1) | function s(){var e=this;"function"===typeof this._flush?this._flush((fun...
function u (line 1) | function u(e,t,n){if(t)return e.emit("error",t);if(null!=n&&e.push(n),e....
function p (line 1) | function p(e){if(!i.isBuffer(e)&&"string"!==typeof e){if(!f)throw m(c);i...
function d (line 1) | function d(e){if(!i.isBuffer(e)&&"string"!==typeof e&&"object"!==typeof ...
function h (line 1) | function h(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g...
function v (line 1) | function v(e){var t=4-(e=e.toString()).length%4;if(4!==t)for(var n=0;n<t...
function m (line 1) | function m(e){var t=[].slice.call(arguments,1),n=s.format.bind(s,e).appl...
function g (line 1) | function g(e){var t;return t=e,i.isBuffer(t)||"string"===typeof t||(e=JS...
function y (line 1) | function y(e){return function(t,n){!function(e){if(!i.isBuffer(e)){if("s...
function b (line 1) | function b(e){return function(t,n,o){var a=y(e)(t,o);return r(i.from(n),...
function S (line 1) | function S(e){return function(t,n){d(n),t=g(t);var r=o.createSign("RSA-S...
function w (line 1) | function w(e){return function(t,n,r){p(r),t=g(t),n=v(n);var i=o.createVe...
function _ (line 1) | function _(e){return function(t,n){d(n),t=g(t);var r=o.createSign("RSA-S...
function E (line 1) | function E(e){return function(t,n,r){p(r),t=g(t),n=v(n);var i=o.createVe...
function O (line 1) | function O(e){var t=S(e);return function(){var n=t.apply(null,arguments)...
function C (line 1) | function C(e){var t=w(e);return function(n,r,i){return r=a.joseToDer(r,"...
function x (line 1) | function x(){return function(){return""}}
function A (line 1) | function A(){return function(e,t){return""===t}}
function o (line 1) | function o(e){i.call(this),this._block=r.allocUnsafe(e),this._blockSize=...
function u (line 1) | function u(){this.init(),this._w=s,i.call(this,64,56)}
function c (line 1) | function c(e,t,n){return n^e&(t^n)}
function l (line 1) | function l(e,t,n){return e&t|n&(e|t)}
function f (line 1) | function f(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}
function p (line 1) | function p(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}
function d (line 1) | function d(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}
function u (line 1) | function u(){this.init(),this._w=s,i.call(this,128,112)}
function c (line 1) | function c(e,t,n){return n^e&(t^n)}
function l (line 1) | function l(e,t,n){return e&t|n&(e|t)}
function f (line 1) | function f(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}
function p (line 1) | function p(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}
function d (line 1) | function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}
function h (line 1) | function h(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}
function v (line 1) | function v(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}
function m (line 1) | function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}
function g (line 1) | function g(e,t){return e>>>0<t>>>0?1:0}
function t (line 1) | function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}
function f (line 1) | function f(e,t){o.call(this,"digest"),"string"===typeof t&&(t=a.from(t))...
function r (line 1) | function r(e,n){if("string"!==typeof e&&!t.isBuffer(e))throw new TypeErr...
function f (line 1) | function f(e,t,n){var a=function(e){return"rmd160"===e||"ripemd160"===e?...
function s (line 1) | function s(){this.tmp=new Array(2),this.keys=null}
function u (line 1) | function u(e){a.call(this,e);var t=new s;this._desState=t,this.deriveKey...
function a (line 1) | function a(e){var t=e._cipher.encryptBlockRaw(e._prev);return o(e._prev),t}
function l (line 1) | function l(e,t,n,a){o.call(this);var u=i.alloc(4,0);this._cipher=new r.A...
function a (line 1) | function a(e,t,n,a){o.call(this),this._cipher=new r.AES(t),this._prev=i....
function v (line 1) | function v(){if(null!==h)return h;var e=[];e[0]=2;for(var t=1,n=3;n<1048...
function m (line 1) | function m(e){for(var t=v(),n=0;n<t.length;n++)if(0===e.modn(t[n]))retur...
function g (line 1) | function g(e){var t=i.mont(e);return 0===u.toRed(t).redPow(e.subn(1)).fr...
function y (line 1) | function y(e,t){if(e<16)return new i(2===t||5===t?[140,123]:[140,39]);va...
function o (line 1) | function o(e){this.rand=e||new i.Rand}
function i (line 1) | function i(e){return 1===e.length?"0"+e:e}
function o (line 1) | function o(e){for(var t="",n=0;n<e.length;n++)t+=i(e[n].toString(16));re...
function i (line 1) | function i(e,t,n){return e&t^~e&n}
function o (line 1) | function o(e,t,n){return e&t^e&n^t&n}
function a (line 1) | function a(e,t,n){return e^t^n}
function y (line 1) | function y(){if(!(this instanceof y))return new y;m.call(this),this.h=[1...
function b (line 1) | function b(){if(!(this instanceof b))return new b;g.call(this),this.h=[1...
function S (line 1) | function S(e,t,n,r,i){var o=e&n^~e&i;return o<0&&(o+=4294967296),o}
function w (line 1) | function w(e,t,n,r,i,o){var a=t&r^~t&o;return a<0&&(a+=4294967296),a}
function _ (line 1) | function _(e,t,n,r,i){var o=e&n^e&i^n&i;return o<0&&(o+=4294967296),o}
function E (line 1) | function E(e,t,n,r,i,o){var a=t&r^t&o^r&o;return a<0&&(a+=4294967296),a}
function O (line 1) | function O(e,t){var n=a(e,t,28)^a(t,e,2)^a(t,e,7);return n<0&&(n+=429496...
function C (line 1) | function C(e,t){var n=s(e,t,28)^s(t,e,2)^s(t,e,7);return n<0&&(n+=429496...
function x (line 1) | function x(e,t){var n=a(e,t,14)^a(e,t,18)^a(t,e,9);return n<0&&(n+=42949...
function A (line 1) | function A(e,t){var n=s(e,t,14)^s(e,t,18)^s(t,e,9);return n<0&&(n+=42949...
function k (line 1) | function k(e,t){var n=a(e,t,1)^a(e,t,8)^u(e,t,7);return n<0&&(n+=4294967...
function I (line 1) | function I(e,t){var n=s(e,t,1)^s(e,t,8)^c(e,t,7);return n<0&&(n+=4294967...
function T (line 1) | function T(e,t){var n=a(e,t,19)^a(t,e,29)^u(e,t,6);return n<0&&(n+=42949...
function P (line 1) | function P(e,t){var n=s(e,t,19)^s(t,e,29)^c(e,t,6);return n<0&&(n+=42949...
function a (line 1) | function a(e,t){i.call(this,t),o.isBuffer(e)?(this.base=e,this.offset=0,...
function s (line 1) | function s(e,t){if(Array.isArray(e))this.length=0,this.value=e.map((func...
function u (line 1) | function u(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=ne...
function c (line 1) | function c(e){o.Node.call(this,"der",e)}
function l (line 1) | function l(e,t){var n=e.readUInt8(t);if(e.isError(n))return n;var r=s.ta...
function f (line 1) | function f(e,t,n){var r=e.readUInt8(n);if(e.isError(r))return r;if(!t&&1...
function u (line 1) | function u(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=ne...
function c (line 1) | function c(e){a.Node.call(this,"der",e)}
function l (line 1) | function l(e){return e<10?"0"+e:e}
function o (line 1) | function o(e){var t=i.allocUnsafe(4);return t.writeUInt32BE(e,0),t}
function a (line 1) | function a(){return n.getRandomValues(i),i[0]/o}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function w (line 1) | function w(e){return e&&e.__esModule?e:{default:e}}
function _ (line 1) | function _(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function T (line 1) | function T(e){var t=e.channelData;return!!(t=void 0===t?{}:t).speak}
function P (line 1) | function P(){var e=_((0,m.default)(),1)[0],t=_((0,g.default)(),1)[0];ret...
function P (line 1) | function P(e){return e&&e.__esModule?e:{default:e}}
function R (line 1) | function R(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new ...
function d (line 1) | function d(e){return e&&e.__esModule?e:{default:e}}
function h (line 1) | function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function r (line 1) | function r(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n...
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function h (line 1) | function h(e){return e&&e.__esModule?e:{default:e}}
function v (line 1) | function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function g (line 1) | function g(e){var t=e.displayText,n=e.title,r=e.type,i=e.value;return"me...
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(e){return(l="function"===typeof Symbol&&"symbol"===typeof Sym...
function f (line 1) | function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function p (line 1) | function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function d (line 1) | function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function h (line 1) | function h(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function v (line 1) | function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function m (line 1) | function m(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
function g (line 1) | function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e._...
function y (line 1) | function y(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[...
function b (line 1) | function b(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[...
function t (line 1) | function t(e){var n;return function(e,t){if(!(e instanceof t))throw new ...
function i (line 1) | function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function o (line 1) | function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function a (line 1) | function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments...
function c (line 1) | function c(e){return(c="function"===typeof Symbol&&"symbol"===typeof Sym...
function l (line 1) | function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function f (line 1) | function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function p (line 1) | function p(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
function d (line 1) | function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e._...
function t (line 1) | function t(e){var n;return function(e,t){if(!(e instanceof t))throw new ...
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e){return e&&e.__esModule?e:{default:e}}
function l (line 1) | function l(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function f (line 1) | function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function p (line 1) | function p(){var e=f((0,o.default)(),1)[0],t=f((0,s.default)(),1)[0].typ...
function v (line 1) | function v(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function m (line 1) | function m(e){return e&&e.__esModule?e:{default:e}}
function g (line 1) | function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function y (line 1) | function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function b (line 1) | function b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function S (line 1) | function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function w (line 1) | function w(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(c){return vo...
function _ (line 1) | function _(e){return function(){var t=this,n=arguments;return new Promis...
function O (line 1) | function O(e,t,n,r,i){return C.apply(this,arguments)}
function C (line 1) | function C(){return(C=_(r.mark((function e(t,n,i,o,a){return r.wrap((fun...
function a (line 1) | function a(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function l (line 1) | function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function f (line 1) | function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function p (line 1) | function p(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(c){return vo...
function d (line 1) | function d(e){return function(){var t=this,n=arguments;return new Promis...
function h (line 1) | function h(e,t,n,r,i){return v.apply(this,arguments)}
function v (line 1) | function v(){return(v=d(r.mark((function e(t,n,i,a,s){return r.wrap((fun...
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function p (line 1) | function p(e){return(p="function"===typeof Symbol&&"symbol"===typeof Sym...
function d (line 1) | function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function h (line 1) | function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function v (line 1) | function v(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function m (line 1) | function m(e){return(m=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function g (line 1) | function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e._...
function y (line 1) | function y(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
function S (line 1) | function S(e){var t=e.stateContext.mode,n=e.target,r=n.offsetHeight,i=n....
function t (line 1) | function t(e){var n;return function(e,t){if(!(e instanceof t))throw new ...
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments...
function f (line 1) | function f(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function p (line 1) | function p(e){if(e&&e.__esModule)return e;var t=f();if(t&&t.has(e))retur...
function d (line 1) | function d(e){return e&&e.__esModule?e:{default:e}}
function h (line 1) | function h(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new ...
function v (line 1) | function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function d (line 1) | function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function h (line 1) | function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function a (line 1) | function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function s (line 1) | function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function u (line 1) | function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function w (line 1) | function w(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function _ (line 1) | function _(e){if(e&&e.__esModule)return e;var t=w();if(t&&t.has(e))retur...
function E (line 1) | function E(e){return e&&e.__esModule?e:{default:e}}
function O (line 1) | function O(){return(O=Object.assign||function(e){for(var t=1;t<arguments...
function C (line 1) | function C(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)r...
function x (line 1) | function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function A (line 1) | function A(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function k (line 1) | function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function I (line 1) | function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function U (line 1) | function U(e){return e&&e.__esModule?e:{default:e}}
function V (line 1) | function V(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function W (line 1) | function W(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function H (line 1) | function H(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function G (line 1) | function G(e){var t=document.createElement("div");t.setAttribute("style"...
function r (line 1) | function r(e){return e.map((function(e){return"'".concat(e,"'")})).join(...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function p (line 1) | function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function a (line 1) | function a(t){return e.apply(this,t)}
function s (line 1) | function s(){return this instanceof s?e.apply(this,arguments):new a(argu...
function a (line 1) | function a(e){var t=e||{};return t.commonmark?o:t.gfm?i:r}
function s (line 1) | function s(e,t,n,i){"function"===typeof t&&"function"!==typeof n&&(i=n,n...
function s (line 1) | function s(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function _ (line 1) | function _(e){return e&&e.__esModule?e:{default:e}}
function E (line 1) | function E(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function f (line 1) | function f(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function s (line 1) | function s(e,t){if(!Number.isFinite(e))return null;var n=Math.abs(e),a=t...
function u (line 1) | function u(e){if("number"===typeof e&&!isNaN(e))return e;if("string"!==t...
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function l (line 1) | function l(e){return e&&e.__esModule?e:{default:e}}
function f (line 1) | function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function u (line 1) | function u(e){return e&&e.__esModule?e:{default:e}}
function c (line 1) | function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function o (line 1) | function o(t,n){try{var r=e.document;if("undefined"!==typeof r&&r.create...
function t (line 1) | function t(t){var n=t.activity,r=t.attachment;return"application/vnd.mic...
function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
function r (line 1) | function r(){this.constructor=t}
function e (line 1) | function e(e,t){this.default="#000000",this.subtle="#666666",e&&(this.de...
function t (line 1) | function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.high...
function e (line 1) | function e(e){this.imageSize=i.Size.Medium,this.maxImageHeight=100,e&&(t...
function e (line 1) | function e(e){this.allowInlinePlayback=!0,e&&(this.defaultPoster=e.defau...
function e (line 1) | function e(e){this.size=i.TextSize.Default,this.color=i.TextColor.Defaul...
function t (line 1) | function t(t){var n=e.call(this,t)||this;return n.maxWidth=150,n.weight=...
function e (line 1) | function e(e){this.actionMode=i.ShowCardActionMode.Inline,this.inlineTop...
function e (line 1) | function e(e){if(this.maxActions=5,this.spacing=i.Spacing.Default,this.b...
function e (line 1) | function e(e){this.default=new u,this.dark=new u,this.light=new u,this.a...
function e (line 1) | function e(e){this.foregroundColors=new g({default:{default:"#333333",su...
function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
function e (line 1) | function e(e){if(this._allStyles={},this._allStyles[i.ContainerStyle.Def...
function e (line 1) | function e(e,t,n){void 0===e&&(e=1),void 0===t&&(t=1),this._isValid=!0,t...
function e (line 1) | function e(){this.capabilities=null}
function e (line 1) | function e(e){this.fontFamily="Segoe UI,Segoe,Segoe WP,Helvetica Neue,He...
function e (line 1) | function e(e){this.default=new E,this.monospace=new E("'Courier New', Co...
function e (line 1) | function e(e){this.hostCapabilities=new _,this.choiceSetInputValueSepara...
function e (line 1) | function e(e,t,n,a){if(this.body=null,e===r.Text&&t&&"string"!==typeof t...
function e (line 1) | function e(e){var t=this;this.eventListeners={},this.isDisposed=!1,this....
function e (line 1) | function e(e){var t=this;this.ThrowIfError=function(){if(t.IsError)throw...
function e (line 1) | function e(){}
function e (line 1) | function e(){var e=this;this.state=r.None,this.promiseResult=null,this.p...
function e (line 1) | function e(e,t,n){var i=this;if(this.Open=function(){return i.connection...
function e (line 1) | function e(e,t,n,o){void 0===t&&(t=r.Interactive),void 0===n&&(n="en-us"...
function e (line 1) | function e(e){var t=this;this.Serialize=function(){return JSON.stringify...
function e (line 1) | function e(e,t){this.system=new u,this.os=e,this.device=t}
function e (line 1) | function e(){this.version="1.0.00000"}
function e (line 1) | function e(e,t,n){this.platform=e,this.name=t,this.version=n}
function e (line 1) | function e(e,t,n){this.manufacturer=e,this.model=t,this.version=n}
function e (line 1) | function e(){var e=this;this.Create=function(t,n,i){var u="";switch(t.Re...
function r (line 1) | function r(){this.constructor=t}
function e (line 1) | function e(){}
function t (line 1) | function t(t){var n=e.call(this)||this;return n.privSource=t,n}
function e (line 1) | function e(e,t,n,a){if(this.privBody=null,e===r.Text&&t&&"string"!==type...
function e (line 1) | function e(e){var t=this;this.privEventListeners={},this.privIsDisposed=...
function e (line 1) | function e(e){var t=this;this.throwIfError=function(){if(t.isError)throw...
function e (line 1) | function e(){}
function e (line 1) | function e(){var e=this;this.privState=r.None,this.privPromiseResult=nul...
function r (line 1) | function r(){this.constructor=t}
function e (line 1) | function e(){}
function n (line 1) | function n(){return null!==e&&e.apply(this,arguments)||this}
function t (line 1) | function t(t,n){var r=e.call(this)||this;return r.onEvent=function(e){r....
function t (line 1) | function t(){return e.call(this)||this}
function n (line 1) | function n(t,n){var r=e.call(this)||this;return r.onEvent=function(e){r....
function t (line 1) | function t(n,s,u,c){var l=this;if(this.open=function(){if(l.privConnecti...
function c (line 1) | function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function s (line 1) | function s(){return(s=(0,o.default)(i.default.mark((function e(t){var n,...
function e (line 1) | function e(t){var n=t.gender,r=t.lang,o=t.voiceURI;(0,i.default)(this,e)...
function c (line 1) | function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function t (line 1) | function t(e){var n;if((0,o.default)(this,t),n=(0,a.default)(this,(0,s.d...
function n (line 1) | function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t...
function l (line 1) | function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function r (line 1) | function r(e,t){var n,r,i,o,a,s=[],u=t.length;for(n=0;n<u;n++)126===(i=t...
function r (line 1) | function r(e,t){var n,r,i,o,a,s;for(n=t.length-1;n>=0;n--)95!==(r=t[n])....
function O (line 1) | function O(e){throw new RangeError(S[e])}
function C (line 1) | function C(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function x (line 1) | function x(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e...
function A (line 1) | function A(e){for(var t,n,r=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))...
function k (line 1) | function k(e){return C(e,(function(e){var t="";return e>65535&&(t+=E((e-...
function I (line 1) | function I(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function T (line 1) | function T(e,t,n){var r=0;for(e=n?_(e/d):e>>1,e+=_(e/t);e>w*f>>1;r+=c)e=...
function P (line 1) | function P(e){var t,n,r,i,o,a,s,p,d,g,y,b=[],S=e.length,w=0,E=v,C=h;for(...
function R (line 1) | function R(e){var t,n,r,i,o,a,s,p,d,g,y,b,S,w,C,x=[];for(b=(e=A(e)).leng...
function l (line 1) | function l(e,t){this._options=t||{},this._cbs=e||{},this._tagname="",thi...
function de (line 1) | function de(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}
function he (line 1) | function he(e,t,n){var r=e.toLowerCase();return e===r?function(e){e===r?...
function ve (line 1) | function ve(e,t){var n=e.toLowerCase();return function(r){r===n||r===e?t...
function me (line 1) | function me(e,t){this._state=u,this._buffer="",this._sectionStart=0,this...
function s (line 1) | function s(e,t,n){"object"===typeof e?(n=t,t=e,e=null):"function"===type...
method firstChild (line 1) | get firstChild(){var e=this.children;return e&&e[0]||null}
method lastChild (line 1) | get lastChild(){var e=this.children;return e&&e[e.length-1]||null}
method nodeType (line 1) | get nodeType(){return i[this.type]||i.element}
function u (line 1) | function u(e){var t=Object.keys(e).join("|"),n=l(e),r=new RegExp("&(?:"+...
function l (line 1) | function l(e){return function(t){return"#"===t.charAt(1)?"X"===t.charAt(...
function u (line 1) | function u(e){return";"!==e.substr(-1)&&(e+=";"),s(e)}
function u (line 1) | function u(e){return Object.keys(e).sort().reduce((function(t,n){return ...
function c (line 1) | function c(e){var t=[],n=[];return Object.keys(e).forEach((function(e){r...
function p (line 1) | function p(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"}
function d (line 1) | function d(e,t){return"&#x"+(1024*(e.charCodeAt(0)-55296)+e.charCodeAt(1...
function h (line 1) | function h(e,t){return function(n){return n.replace(t,(function(t){retur...
function s (line 1) | function s(e,t){var n=this._parser=new r(e,t),a=this._decoder=new o;i.ca...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e){var t="function"===typeof Map?new Map:void 0;return(s=func...
function u (line 1) | function u(e,t,n){return(u=function(){if("undefined"===typeof Reflect||!...
function c (line 1) | function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e._...
function l (line 1) | function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function a (line 1) | function a(t,n,r,i,o,s){var u;return(u=e.call(this,t)||this).name="CssSy...
function l (line 1) | function l(t){return e&&i.default.red?i.default.red.bold(t):t}
function f (line 1) | function f(t){return e&&i.default.gray?i.default.gray(t):t}
function e (line 1) | function e(e){this.builder=e}
function e (line 1) | function e(e){void 0===e&&(e=[]),this.version="7.0.25",this.plugins=this...
function t (line 1) | function t(t){return e.apply(this,arguments)}
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function c (line 1) | function c(e){return"object"===typeof e&&"function"===typeof e.then}
function e (line 1) | function e(t,n,r){var i;if(this.stringified=!1,this.processed=!1,"object...
function s (line 1) | function s(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceR...
function a (line 1) | function a(){this._array=[],this._set=o?new Map:Object.create(null)}
function i (line 1) | function i(t){var n;return(n=e.call(this,t)||this).type="root",n.nodes||...
function e (line 1) | function e(){var t=this;Object(o.a)(this,e),this.record=function(e,n,r){...
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments...
function e (line 1) | function e(t,n){Object(o.a)(this,e),this.privRecognitionMode=r.Interacti...
function e (line 1) | function e(t){var n=this;Object(o.a)(this,e),this.serialize=function(){r...
function t (line 1) | function t(e,n){var r,i=arguments.length>2&&void 0!==arguments[2]?argume...
function t (line 1) | function t(e){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)...
function t (line 1) | function t(e){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)...
function t (line 1) | function t(e){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)...
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function t (line 1) | function t(e,n,r){var i;return Object(o.a)(this,t),(i=Object(u.a)(this,O...
function t (line 1) | function t(e,n){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(...
function t (line 1) | function t(e,n){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(...
function t (line 1) | function t(e,n){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(...
function t (line 1) | function t(e,n,r){var i;return Object(o.a)(this,t),(i=Object(u.a)(this,O...
function M (line 1) | function M(e,t,n){return(M="undefined"!==typeof Reflect&&Reflect.get?Ref...
function e (line 1) | function e(t){var n=this;Object(o.a)(this,e),this.privReaderIdCounter=1,...
function e (line 1) | function e(t,n,r){var i=this;Object(o.a)(this,e),this.privIsClosed=!1,th...
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function e (line 1) | function e(t,n,r,i){var a=this;Object(o.a)(this,e),this.privRecorder=t,t...
function e (line 1) | function e(t,n){var r=this;Object(o.a)(this,e),this.privStreams={},this....
function e (line 1) | function e(){Object(o.a)(this,e)}
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(e){var n;return Object(o.a)(this,t),(n=Object(u.a)(this,Objec...
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function e (line 1) | function e(){Object(o.a)(this,e),this.privDisposed=!1}
function e (line 1) | function e(t){Object(o.a)(this,e),this.privSessionId=t}
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function t (line 1) | function t(e,n,r){var i;return Object(o.a)(this,t),(i=Object(u.a)(this,O...
function e (line 1) | function e(t,n,r,i,a,s,u,c){Object(o.a)(this,e),this.privResultId=t,this...
function t (line 1) | function t(e,n,r,i,a,s,l,f){return Object(o.a)(this,t),Object(u.a)(this,...
function t (line 1) | function t(e,n,r,i,a,s,l,f,p){var d;return Object(o.a)(this,t),(d=Object...
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(e,n,r){var i;return Object(o.a)(this,t),(i=Object(u.a)(this,O...
function t (line 1) | function t(e,n,r,i,a){var s;return Object(o.a)(this,t),(s=Object(u.a)(th...
function t (line 1) | function t(e,n,r){var i;return Object(o.a)(this,t),(i=Object(u.a)(this,O...
function t (line 1) | function t(e,n){var r;return Object(o.a)(this,t),(r=Object(u.a)(this,Obj...
function t (line 1) | function t(e,n,r,i,a,s,l,f,p){var d;return Object(o.a)(this,t),(d=Object...
function e (line 1) | function e(t,n){Object(o.a)(this,e),this.privReason=t,this.privAudio=n}
function e (line 1) | function e(){Object(o.a)(this,e),this.privKeys=[],this.privValues=[]}
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function e (line 1) | function e(t,n){Object(o.a)(this,e),this.privHeaderName=t,this.privToken=n}
function e (line 1) | function e(t,n){var r=this;Object(o.a)(this,e),this.privBuffers=[],this....
function e (line 1) | function e(t){Object(o.a)(this,e),this.privSpeechStartDetected=JSON.pars...
function t (line 1) | function t(e,n,r){var i,s=arguments.length>3&&void 0!==arguments[3]?argu...
function t (line 1) | function t(e,n,r,i){var a;return Object(o.a)(this,t),(a=Object(u.a)(this...
function t (line 1) | function t(e,n,r,i){var a;return Object(o.a)(this,t),(a=Object(u.a)(this...
function t (line 1) | function t(e,n,r){var i;return Object(o.a)(this,t),(i=Object(u.a)(this,O...
function t (line 1) | function t(e,n,r,i,a){var s;return Object(o.a)(this,t),(s=Object(u.a)(th...
function e (line 1) | function e(t,n,r){var i=this;Object(o.a)(this,e),this.privIsDisposed=!1,...
function e (line 1) | function e(t){var n=this;Object(o.a)(this,e),this.privIsDisposed=!1,this...
function e (line 1) | function e(){Object(o.a)(this,e)}
function e (line 1) | function e(t){Object(o.a)(this,e),this.privContext={},this.privDynamicGr...
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(e,n,r,i,a,s,l){var f;if(Object(o.a)(this,t),!n)throw new D.a(...
function e (line 1) | function e(t,n,r,i,a){var s=this;if(Object(o.a)(this,e),this.recognizeOv...
function e (line 1) | function e(t,n,r){Object(o.a)(this,e),this.audioConfig=void 0!==t?t:X.fr...
function e (line 1) | function e(t){Object(o.a)(this,e),this.privSpeechHypothesis=JSON.parse(t)}
function e (line 1) | function e(t){Object(o.a)(this,e),this.privSimpleSpeechPhrase=JSON.parse...
function e (line 1) | function e(){Object(o.a)(this,e)}
function e (line 1) | function e(t){Object(o.a)(this,e),this.privDetailedSpeechPhrase=JSON.par...
function t (line 1) | function t(e,n,r,i,a){var s;return Object(o.a)(this,t),(s=Object(u.a)(th...
function e (line 1) | function e(t,n,r,i,a,s){var u=this;if(Object(o.a)(this,e),this.privIsDis...
function e (line 1) | function e(t,n,r,i){Object(o.a)(this,e),this.privProxyHostName=t,this.pr...
function e (line 1) | function e(){Object(o.a)(this,e)}
function e (line 1) | function e(){Object(o.a)(this,e)}
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function t (line 1) | function t(e,n){var r;Object(o.a)(this,t);var i=e;return H.throwIfNull(i...
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function t (line 1) | function t(e,n,r,i,a,s){var l;return Object(o.a)(this,t),(l=Object(u.a)(...
function e (line 1) | function e(t){Object(o.a)(this,e),this.privIntentResponse=JSON.parse(t)}
function t (line 1) | function t(e,n,r,i,a){var s;return Object(o.a)(this,t),(s=Object(u.a)(th...
function t (line 1) | function t(e,n){var r;Object(o.a)(this,t),H.throwIfNullOrUndefined(e,"sp...
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function e (line 1) | function e(t,n,r,i,a){Object(o.a)(this,e),this.privCancelReason=n,this.p...
function e (line 1) | function e(){Object(o.a)(this,e),this.privMap=new Oe}
function e (line 1) | function e(t){Object(o.a)(this,e),this.privTranslationHypothesis=JSON.pa...
function e (line 1) | function e(t){Object(o.a)(this,e),this.privTranslationPhrase=JSON.parse(...
function e (line 1) | function e(t){Object(o.a)(this,e),this.privSynthesisEnd=JSON.parse(t),th...
function t (line 1) | function t(e,n,r,i,a){var s;return Object(o.a)(this,t),(s=Object(u.a)(th...
function t (line 1) | function t(e,n){var r;Object(o.a)(this,t);var i=e;return H.throwIfNull(i...
function e (line 1) | function e(t){Object(o.a)(this,e),this.privReason=t}
function e (line 1) | function e(t,n,r){Object(o.a)(this,e),this.privReason=t,this.privErrorDe...
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function e (line 1) | function e(){Object(o.a)(this,e)}
function e (line 1) | function e(t){Object(o.a)(this,e),this.privGrammerBuilder=t.dynamicGrammar}
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(){return Object(o.a)(this,t),Object(u.a)(this,Object(c.a)(t)....
function t (line 1) | function t(){var e;return Object(o.a)(this,t),(e=Object(u.a)(this,Object...
function e (line 1) | function e(t,n){Object(o.a)(this,e),this.privActivity=t,this.privAudioSt...
function e (line 1) | function e(t){Object(o.a)(this,e),this.privActivityResponse=JSON.parse(t)}
function e (line 1) | function e(t,n){Object(o.a)(this,e),this.privRequestId=n,this.privIsComp...
function e (line 1) | function e(){Object(o.a)(this,e),this.privTurnMap=new Map}
function t (line 1) | function t(e,n,r,i,a){var s;return Object(o.a)(this,t),(s=Object(u.a)(th...
function t (line 1) | function t(e,n){var r;Object(o.a)(this,t);var i=e;H.throwIfNull(e,"dialo...
function e (line 1) | function e(t){Object(o.a)(this,e),this.audioContext=null,this.gainNode=n...
function r (line 1) | function r(e){var t,n=e.Symbol;return"function"===typeof n?n.observable?...
function t (line 1) | function t(n,i,y,b,S){var w=this;if(Object(r.a)(this,t),this.open=functi...
function e (line 1) | function e(t,n,i){if(Object(r.a)(this,e),this.privPayload=null,!n)throw ...
function g (line 1) | function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?inv...
function S (line 1) | function S(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n...
function w (line 1) | function w(){}
function _ (line 1) | function _(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n...
function k (line 1) | function k(e,t,n){var r,i={},a=null,s=null;if(null!=t)for(r in void 0!==...
function I (line 1) | function I(e){return"object"===typeof e&&null!==e&&e.$$typeof===o}
function R (line 1) | function R(e,t,n,r){if(P.length){var i=P.pop();return i.result=e,i.keyPr...
function j (line 1) | function j(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,...
function M (line 1) | function M(e,t,n){return null==e?0:function e(t,n,r,i){var s=typeof t;"u...
function D (line 1) | function D(e,t){return"object"===typeof e&&null!==e&&null!=e.key?functio...
function N (line 1) | function N(e,t){e.func.call(e.context,t,e.count++)}
function L (line 1) | function L(e,t,n){var r=e.result,i=e.keyPrefix;e=e.func.call(e.context,t...
function B (line 1) | function B(e,t,n,r,i){var o="";null!=n&&(o=(""+n).replace(T,"$&/")+"/"),...
function z (line 1) | function z(){var e=O.current;if(null===e)throw Error(g(321));return e}
function a (line 1) | function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?inv...
function c (line 1) | function c(){if(s)for(var e in u){var t=u[e],n=s.indexOf(e);if(!(-1<n))t...
function l (line 1) | function l(e,t,n){if(d[e])throw Error(a(100,e));d[e]=t,h[e]=t.eventTypes...
function v (line 1) | function v(e,t,n,r,i,o,a,s,u){var c=Array.prototype.slice.call(arguments...
function w (line 1) | function w(e,t,n,r,i,o,a,s,u){m=!1,g=null,v.apply(S,arguments)}
function C (line 1) | function C(e,t,n){var r=e.type||"unknown-event";e.currentTarget=O(n),fun...
function x (line 1) | function x(e,t){if(null==t)throw Error(a(30));return null==e?t:Array.isA...
function A (line 1) | function A(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}
function I (line 1) | function I(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if...
function T (line 1) | function T(e){if(null!==e&&(k=x(k,e)),e=k,k=null,e){if(A(e,I),k)throw Er...
function R (line 1) | function R(e,t){var n=e.stateNode;if(!n)return null;var r=_(n);if(!r)ret...
function Z (line 1) | function Z(e){return null===e||"object"!==typeof e?null:"function"===typ...
function Q (line 1) | function Q(e){if(null==e)return null;if("function"===typeof e)return e.d...
function X (line 1) | function X(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:ca...
function re (line 1) | function re(e){if(e=E(e)){if("function"!==typeof ee)throw Error(a(280));...
function ie (line 1) | function ie(e){te?ne?ne.push(e):ne=[e]:te=e}
function oe (line 1) | function oe(){if(te){var e=te,t=ne;if(ne=te=null,re(e),t)for(e=0;e<t.len...
function ae (line 1) | function ae(e,t){return e(t)}
function se (line 1) | function se(e,t,n,r){return e(t,n,r)}
function ue (line 1) | function ue(){}
function pe (line 1) | function pe(){null===te&&null===ne||(ue(),oe())}
function ge (line 1) | function ge(e,t,n,r,i,o){this.acceptsBooleans=2===t||3===t||4===t,this.a...
function Se (line 1) | function Se(e){return e[1].toUpperCase()}
function we (line 1) | function we(e){switch(typeof e){case"boolean":case"number":case"object":...
function _e (line 1) | function _e(e,t,n,r){var i=ye.hasOwnProperty(t)?ye[t]:null;(null!==i?0==...
function Ee (line 1) | function Ee(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCas...
function Oe (line 1) | function Oe(e){e._valueTracker||(e._valueTracker=function(e){var t=Ee(e)...
function Ce (line 1) | function Ce(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n...
function xe (line 1) | function xe(e,t){var n=t.checked;return i({},t,{defaultChecked:void 0,de...
function Ae (line 1) | function Ae(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t....
function ke (line 1) | function ke(e,t){null!=(t=t.checked)&&_e(e,"checked",t,!1)}
function Ie (line 1) | function Ie(e,t){ke(e,t);var n=we(t.value),r=t.type;if(null!=n)"number"=...
function Te (line 1) | function Te(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defau...
function Pe (line 1) | function Pe(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(nul...
function Re (line 1) | function Re(e,t){return e=i({children:void 0},t),(t=function(e){var t=""...
function je (line 1) | function je(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i<n.length;i++)t...
function Me (line 1) | function Me(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));r...
function De (line 1) | function De(e,t){var n=t.value;if(null==n){if(n=t.defaultValue,null!=(t=...
function Ne (line 1) | function Ne(e,t){var n=we(t.value),r=we(t.defaultValue);null!=n&&((n=""+...
function Le (line 1) | function Le(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!...
function ze (line 1) | function ze(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";ca...
function qe (line 1) | function qe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?ze(t...
function Ve (line 1) | function Ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.n...
function We (line 1) | function We(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["W...
function Je (line 1) | function Je(e){if(Ge[e])return Ge[e];if(!He[e])return e;var t,n=He[e];fo...
function et (line 1) | function et(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else...
function tt (line 1) | function tt(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!=...
function nt (line 1) | function nt(e){if(et(e)!==e)throw Error(a(188))}
function rt (line 1) | function rt(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=...
function gt (line 1) | function gt(e,t,n,r){return{blockedOn:e,topLevelType:t,eventSystemFlags:...
function yt (line 1) | function yt(e,t){switch(e){case"focus":case"blur":ct=null;break;case"dra...
function bt (line 1) | function bt(e,t,n,r,i){return null===e||e.nativeEvent!==i?(e=gt(t,n,r,i)...
function St (line 1) | function St(e){var t=pr(e.target);if(null!==t){var n=et(t);if(null!==n)i...
function wt (line 1) | function wt(e){if(null!==e.blockedOn)return!1;var t=Pn(e.topLevelType,e....
function _t (line 1) | function _t(e,t,n){wt(e)&&n.delete(t)}
function Et (line 1) | function Et(){for(st=!1;0<ut.length;){var e=ut[0];if(null!==e.blockedOn)...
function Ot (line 1) | function Ot(e,t){e.blockedOn===t&&(e.blockedOn=null,st||(st=!0,o.unstabl...
function Ct (line 1) | function Ct(e){function t(t){return Ot(t,e)}if(0<ut.length){Ot(ut[0],e);...
function xt (line 1) | function xt(e){return(e=e.target||e.srcElement||window).correspondingUse...
function At (line 1) | function At(e){do{e=e.return}while(e&&5!==e.tag);return e||null}
function kt (line 1) | function kt(e,t,n){(t=R(e,n.dispatchConfig.phasedRegistrationNames[t]))&...
function It (line 1) | function It(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t...
function Tt (line 1) | function Tt(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=R(e,n.dis...
function Pt (line 1) | function Pt(e){e&&e.dispatchConfig.registrationName&&Tt(e._targetInst,nu...
function Rt (line 1) | function Rt(e){A(e,It)}
function jt (line 1) | function jt(){return!0}
function Mt (line 1) | function Mt(){return!1}
function Dt (line 1) | function Dt(e,t,n,r){for(var i in this.dispatchConfig=e,this._targetInst...
function Nt (line 1) | function Nt(e,t,n,r){if(this.eventPool.length){var i=this.eventPool.pop(...
function Lt (line 1) | function Lt(e){if(!(e instanceof this))throw Error(a(279));e.destructor(...
function Bt (line 1) | function Bt(e){e.eventPool=[],e.getPooled=Nt,e.release=Lt}
function t (line 1) | function t(){}
function n (line 1) | function n(){return r.apply(this,arguments)}
function Vt (line 1) | function Vt(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&...
function Kt (line 1) | function Kt(e){var t=this.nativeEvent;return t.getModifierState?t.getMod...
function Jt (line 1) | function Jt(){return Kt}
function En (line 1) | function En(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);brea...
function Cn (line 1) | function Cn(e,t){xn(t,e,!1)}
function xn (line 1) | function xn(e,t,n){switch(Sn(t)){case 0:var r=An.bind(null,t,1);break;ca...
function An (line 1) | function An(e,t,n){le||ue();var r=Tn,i=le;le=!0;try{se(r,e,t,n)}finally{...
function kn (line 1) | function kn(e,t,n){bn(yn,Tn.bind(null,e,t,n))}
function In (line 1) | function In(e,t,n,r){if(_n.length){var i=_n.pop();i.topLevelType=e,i.eve...
function Tn (line 1) | function Tn(e,t,n){if(On)if(0<ut.length&&-1<vt.indexOf(e))e=gt(null,e,t,...
function Pn (line 1) | function Pn(e,t,n){var r=xt(n);if(null!==(r=pr(r))){var i=et(r);if(null=...
function Rn (line 1) | function Rn(e){if(!$)return!1;var t=(e="on"+e)in document;return t||((t=...
function Mn (line 1) | function Mn(e){var t=jn.get(e);return void 0===t&&(t=new Set,jn.set(e,t)...
function Dn (line 1) | function Dn(e,t,n){if(!n.has(e)){switch(e){case"scroll":xn(t,"scroll",!0...
function Bn (line 1) | function Bn(e,t,n){return null==t||"boolean"===typeof t||""===t?"":n||"n...
function zn (line 1) | function zn(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=...
function Fn (line 1) | function Fn(e,t){if(t){if(qn[e]&&(null!=t.children||null!=t.dangerouslyS...
function Un (line 1) | function Un(e,t){if(-1===e.indexOf("-"))return"string"===typeof t.is;swi...
function Vn (line 1) | function Vn(e,t){var n=Mn(e=9===e.nodeType||11===e.nodeType?e:e.ownerDoc...
function Wn (line 1) | function Wn(){}
function Hn (line 1) | function Hn(e){if("undefined"===typeof(e=e||("undefined"!==typeof docume...
function Gn (line 1) | function Gn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}
function Kn (line 1) | function Kn(e,t){var n,r=Gn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.t...
function Jn (line 1) | function Jn(){for(var e=window,t=Hn();t instanceof e.HTMLIFrameElement;)...
function Yn (line 1) | function Yn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(...
function nr (line 1) | function nr(e,t){switch(e){case"button":case"input":case"select":case"te...
function rr (line 1) | function rr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"st...
function ar (line 1) | function ar(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||...
function sr (line 1) | function sr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){va...
function pr (line 1) | function pr(e){var t=e[cr];if(t)return t;for(var n=e.parentNode;n;){if(t...
function dr (line 1) | function dr(e){return!(e=e[cr]||e[fr])||5!==e.tag&&6!==e.tag&&13!==e.tag...
function hr (line 1) | function hr(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(...
function vr (line 1) | function vr(e){return e[lr]||null}
function br (line 1) | function br(){if(yr)return yr;var e,t,n=gr,r=n.length,i="value"in mr?mr....
function Tr (line 1) | function Tr(e,t){switch(e){case"keyup":return-1!==_r.indexOf(t.keyCode);...
function Pr (line 1) | function Pr(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}
function Dr (line 1) | function Dr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"inpu...
function Lr (line 1) | function Lr(e,t,n){return(e=Dt.getPooled(Nr.change,e,t,n)).type="change"...
function qr (line 1) | function qr(e){T(e)}
function Fr (line 1) | function Fr(e){if(Ce(hr(e)))return e}
function Ur (line 1) | function Ur(e,t){if("change"===e)return t}
function Wr (line 1) | function Wr(){Br&&(Br.detachEvent("onpropertychange",Hr),zr=Br=null)}
function Hr (line 1) | function Hr(e){if("value"===e.propertyName&&Fr(zr))if(e=Lr(zr,e,xt(e)),l...
function Gr (line 1) | function Gr(e,t,n){"focus"===e?(Wr(),zr=n,(Br=t).attachEvent("onproperty...
function Kr (line 1) | function Kr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)retu...
function Jr (line 1) | function Jr(e,t){if("click"===e)return Fr(t)}
function Yr (line 1) | function Yr(e,t){if("input"===e||"change"===e)return Fr(t)}
function ni (line 1) | function ni(e,t){if(ei(e,t))return!0;if("object"!==typeof e||null===e||"...
function ci (line 1) | function ci(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerD...
function di (line 1) | function di(e){0>pi||(e.current=fi[pi],fi[pi]=null,pi--)}
function hi (line 1) | function hi(e,t){pi++,fi[pi]=e.current,e.current=t}
function bi (line 1) | function bi(e,t){var n=e.type.contextTypes;if(!n)return vi;var r=e.state...
function Si (line 1) | function Si(e){return null!==(e=e.childContextTypes)&&void 0!==e}
function wi (line 1) | function wi(e){di(gi),di(mi)}
function _i (line 1) | function _i(e){di(gi),di(mi)}
function Ei (line 1) | function Ei(e,t,n){if(mi.current!==vi)throw Error(a(168));hi(mi,t),hi(gi...
function Oi (line 1) | function Oi(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"...
function Ci (line 1) | function Ci(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMe...
function xi (line 1) | function xi(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(t=Oi(e...
function Gi (line 1) | function Gi(){switch(ji()){case Mi:return 99;case Di:return 98;case Ni:r...
function Ki (line 1) | function Ki(e){switch(e){case 99:return Mi;case 98:return Di;case 97:ret...
function Ji (line 1) | function Ji(e,t){return e=Ki(e),Ai(e,t)}
function Yi (line 1) | function Yi(e,t,n){return e=Ki(e),ki(e,t,n)}
function Zi (line 1) | function Zi(e){return null===Fi?(Fi=[e],Ui=ki(Mi,Xi)):Fi.push(e),zi}
function Qi (line 1) | function Qi(){if(null!==Ui){var e=Ui;Ui=null,Ii(e)}Xi()}
function Xi (line 1) | function Xi(){if(!Vi&&null!==Fi){Vi=!0;var e=0;try{var t=Fi;Ji(99,(funct...
function eo (line 1) | function eo(e,t,n){return 1073741821-(1+((1073741821-e+t/10)/(n/=10)|0))*n}
function to (line 1) | function to(e,t){if(e&&e.defaultProps)for(var n in t=i({},t),e=e.default...
function ao (line 1) | function ao(){oo=io=ro=null}
function so (line 1) | function so(e,t){var n=e.type._context;hi(no,n._currentValue),n._current...
function uo (line 1) | function uo(e){var t=no.current;di(no),e.type._context._currentValue=t}
function co (line 1) | function co(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationT...
function lo (line 1) | function lo(e,t){ro=e,oo=io=null,null!==(e=e.dependencies)&&null!==e.fir...
function fo (line 1) | function fo(e,t){if(oo!==e&&!1!==t&&0!==t)if("number"===typeof t&&107374...
function ho (line 1) | function ho(e){return{baseState:e,firstUpdate:null,lastUpdate:null,first...
function vo (line 1) | function vo(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,la...
function mo (line 1) | function mo(e,t){return{expirationTime:e,suspenseConfig:t,tag:0,payload:...
function go (line 1) | function go(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.las...
function yo (line 1) | function yo(e,t){var n=e.alternate;if(null===n){var r=e.updateQueue,i=nu...
function bo (line 1) | function bo(e,t){var n=e.updateQueue;null===(n=null===n?e.updateQueue=ho...
function So (line 1) | function So(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(...
function wo (line 1) | function wo(e,t,n,r,o,a){switch(n.tag){case 1:return"function"===typeof(...
function _o (line 1) | function _o(e,t,n,r,i){po=!1;for(var o=(t=So(e,t)).baseState,a=null,s=0,...
function Eo (line 1) | function Eo(e,t,n){null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(...
function Oo (line 1) | function Oo(e,t){for(;null!==e;){var n=e.callback;if(null!==n){e.callbac...
function Ao (line 1) | function Ao(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:i...
function Io (line 1) | function Io(e,t,n,r,i,o,a){return"function"===typeof(e=e.stateNode).shou...
function To (line 1) | function To(e,t,n){var r=!1,i=vi,o=t.contextType;return"object"===typeof...
function Po (line 1) | function Po(e,t,n,r){e=t.state,"function"===typeof t.componentWillReceiv...
function Ro (line 1) | function Ro(e,t,n,r){var i=e.stateNode;i.props=n,i.state=e.memoizedState...
function Mo (line 1) | function Mo(e,t,n){if(null!==(e=n.ref)&&"function"!==typeof e&&"object"!...
function Do (line 1) | function Do(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object...
function No (line 1) | function No(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.next...
function Vo (line 1) | function Vo(e){if(e===zo)throw Error(a(174));return e}
function Wo (line 1) | function Wo(e,t){hi(Uo,t),hi(Fo,e),hi(qo,zo);var n=t.nodeType;switch(n){...
function Ho (line 1) | function Ho(e){di(qo),di(Fo),di(Uo)}
function Go (line 1) | function Go(e){Vo(Uo.current);var t=Vo(qo.current),n=qe(t,e.type);t!==n&...
function Ko (line 1) | function Ko(e){Fo.current===e&&(di(qo),di(Fo))}
function Yo (line 1) | function Yo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedSta...
function Zo (line 1) | function Zo(e,t){return{responder:e,props:t}}
function pa (line 1) | function pa(){throw Error(a(321))}
function da (line 1) | function da(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length...
function ha (line 1) | function ha(e,t,n,r,i,o){if($o=o,ea=t,na=null!==e?e.memoizedState:null,Q...
function va (line 1) | function va(){Qo.current=Ra,$o=0,oa=ia=ra=na=ta=ea=null,aa=0,sa=null,ua=...
function ma (line 1) | function ma(){var e={memoizedState:null,baseState:null,queue:null,baseUp...
function ga (line 1) | function ga(){if(null!==oa)oa=(ia=oa).next,na=null!==(ta=na)?ta.next:nul...
function ya (line 1) | function ya(e,t){return"function"===typeof t?t(e):t}
function ba (line 1) | function ba(e){var t=ga(),n=t.queue;if(null===n)throw Error(a(311));if(n...
function Sa (line 1) | function Sa(e){var t=ma();return"function"===typeof e&&(e=e()),t.memoize...
function wa (line 1) | function wa(e){return ba(ya)}
function _a (line 1) | function _a(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null...
function Ea (line 1) | function Ea(e,t,n,r){var i=ma();ua|=e,i.memoizedState=_a(t,n,void 0,void...
function Oa (line 1) | function Oa(e,t,n,r){var i=ga();r=void 0===r?null:r;var o=void 0;if(null...
function Ca (line 1) | function Ca(e,t){return Ea(516,192,e,t)}
function xa (line 1) | function xa(e,t){return Oa(516,192,e,t)}
function Aa (line 1) | function Aa(e,t){return"function"===typeof t?(e=e(),t(e),function(){t(nu...
function ka (line 1) | function ka(){}
function Ia (line 1) | function Ia(e,t){return ma().memoizedState=[e,void 0===t?null:t],e}
function Ta (line 1) | function Ta(e,t){var n=ga();t=void 0===t?null:t;var r=n.memoizedState;re...
function Pa (line 1) | function Pa(e,t,n){if(!(25>fa))throw Error(a(301));var r=e.alternate;if(...
function Ba (line 1) | function Ba(e,t){var n=Gu(5,null,null,0);n.elementType="DELETED",n.type=...
function za (line 1) | function za(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==...
function qa (line 1) | function qa(e){if(La){var t=Na;if(t){var n=t;if(!za(e,t)){if(!(t=ar(n.ne...
function Fa (line 1) | function Fa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag...
function Ua (line 1) | function Ua(e){if(e!==Da)return!1;if(!La)return Fa(e),La=!0,!1;var t=e.t...
function Va (line 1) | function Va(){Na=Da=null,La=!1}
function Ga (line 1) | function Ga(e,t,n,r){t.child=null===e?Bo(t,null,n,r):Lo(t,e.child,n,r)}
function Ka (line 1) | function Ka(e,t,n,r,i){n=n.render;var o=t.ref;return lo(t,i),r=ha(e,t,n,...
function Ja (line 1) | function Ja(e,t,n,r,i,o){if(null===e){var a=n.type;return"function"!==ty...
function Ya (line 1) | function Ya(e,t,n,r,i,o){return null!==e&&ni(e.memoizedProps,r)&&e.ref==...
function Za (line 1) | function Za(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&...
function Qa (line 1) | function Qa(e,t,n,r,i){var o=Si(n)?yi:mi.current;return o=bi(t,o),lo(t,i...
function Xa (line 1) | function Xa(e,t,n,r,i){if(Si(n)){var o=!0;Ci(t)}else o=!1;if(lo(t,i),nul...
function $a (line 1) | function $a(e,t,n,r,i,o){Za(e,t);var a=0!==(64&t.effectTag);if(!r&&!a)re...
function es (line 1) | function es(e){var t=e.stateNode;t.pendingContext?Ei(0,t.pendingContext,...
function as (line 1) | function as(e,t,n){var r,i=t.mode,o=t.pendingProps,a=Jo.current,s=!1;if(...
function ss (line 1) | function ss(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.altern...
function us (line 1) | function us(e,t,n,r,i,o){var a=e.memoizedState;null===a?e.memoizedState=...
function cs (line 1) | function cs(e,t,n){var r=t.pendingProps,i=r.revealOrder,o=r.tail;if(Ga(e...
function ls (line 1) | function ls(e,t,n){null!==e&&(t.dependencies=e.dependencies);var r=t.exp...
function fs (line 1) | function fs(e){e.effectTag|=4}
function ps (line 1) | function ps(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var n=null...
function ds (line 1) | function ds(e){switch(e.tag){case 1:Si(e.type)&&wi();var t=e.effectTag;r...
function hs (line 1) | function hs(e,t){return{value:e,source:t,stack:X(t)}}
function ms (line 1) | function ms(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=X(n)),n...
function gs (line 1) | function gs(e){var t=e.ref;if(null!==t)if("function"===typeof t)try{t(nu...
function ys (line 1) | function ys(e,t){switch(t.tag){case 0:case 11:case 15:bs(2,0,t);break;ca...
function bs (line 1) | function bs(e,t,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:nu...
function Ss (line 1) | function Ss(e,t,n){switch("function"===typeof Wu&&Wu(t),t.tag){case 0:ca...
function ws (line 1) | function ws(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedSt...
function _s (line 1) | function _s(e){return 5===e.tag||3===e.tag||4===e.tag}
function Es (line 1) | function Es(e){e:{for(var t=e.return;null!==t;){if(_s(t)){var n=t;break ...
function Os (line 1) | function Os(e,t,n){for(var r,i,o=t,s=!1;;){if(!s){s=o.return;e:for(;;){i...
function Cs (line 1) | function Cs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:bs(4,8,t);...
function xs (line 1) | function xs(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n...
function ks (line 1) | function ks(e,t,n){(n=mo(n,null)).tag=3,n.payload={element:null};var r=t...
function Is (line 1) | function Is(e,t,n){(n=mo(n,null)).tag=3;var r=e.type.getDerivedStateFrom...
function hu (line 1) | function hu(){return(Ws&(Ns|Ls))!==Ms?1073741821-(Hi()/10|0):0!==du?du:d...
function vu (line 1) | function vu(e,t,n){if(0===(2&(t=t.mode)))return 1073741823;var r=Gi();if...
function mu (line 1) | function mu(e,t){if(50<fu)throw fu=0,pu=null,Error(a(185));if(null!==(e=...
function gu (line 1) | function gu(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.altern...
function yu (line 1) | function yu(e){var t=e.lastExpiredTime;return 0!==t?t:ec(e,t=e.firstPend...
function bu (line 1) | function bu(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741...
function Su (line 1) | function Su(e,t){if(du=0,t)return rc(e,t=hu()),bu(e),null;var n=yu(e);if...
function wu (line 1) | function wu(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,e.finishe...
function _u (line 1) | function _u(e,t){var n=Ws;Ws|=1;try{return e(t)}finally{(Ws=n)===Ms&&Qi()}}
function Eu (line 1) | function Eu(e,t){var n=Ws;Ws&=-2,Ws|=Ds;try{return e(t)}finally{(Ws=n)==...
function Ou (line 1) | function Ou(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e....
function Cu (line 1) | function Cu(e,t){for(;;){try{if(ao(),va(),null===Gs||null===Gs.return)re...
function xu (line 1) | function xu(){var e=Rs.current;return Rs.current=Ra,null===e?Ra:e}
function Au (line 1) | function Au(e,t){e<Zs&&2<e&&(Zs=e),null!==t&&e<Qs&&2<e&&(Qs=e,Xs=t)}
function ku (line 1) | function ku(e){e>$s&&($s=e)}
function Iu (line 1) | function Iu(){for(;null!==Gs;)Gs=Pu(Gs)}
function Tu (line 1) | function Tu(){for(;null!==Gs&&!Ti();)Gs=Pu(Gs)}
function Pu (line 1) | function Pu(e){var t=Ts(e.alternate,e,Ks);return e.memoizedProps=e.pendi...
function Ru (line 1) | function Ru(e){Gs=e;do{var t=Gs.alternate;if(e=Gs.return,0===(2048&Gs.ef...
function ju (line 1) | function ju(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)...
function Mu (line 1) | function Mu(e){var t=Gi();return Ji(99,Du.bind(null,e,t)),null}
function Du (line 1) | function Du(e,t){do{Lu()}while(null!==uu);if((Ws&(Ns|Ls))!==Ms)throw Err...
function Nu (line 1) | function Nu(){for(;null!==ru;){var e=ru.effectTag;0!==(256&e)&&ys(ru.alt...
function Lu (line 1) | function Lu(){if(90!==cu){var e=97<cu?97:cu;return cu=90,Ji(e,Bu)}}
function Bu (line 1) | function Bu(){if(null===uu)return!1;var e=uu;if(uu=null,(Ws&(Ns|Ls))!==M...
function zu (line 1) | function zu(e,t,n){yo(e,t=ks(e,t=hs(n,t),1073741823)),null!==(e=gu(e,107...
function qu (line 1) | function qu(e,t){if(3===e.tag)zu(e,e,t);else for(var n=e.return;null!==n...
function Fu (line 1) | function Fu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),Hs===e&&Ks===...
function Uu (line 1) | function Uu(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(t=v...
function Hu (line 1) | function Hu(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this....
function Gu (line 1) | function Gu(e,t,n,r){return new Hu(e,t,n,r)}
function Ku (line 1) | function Ku(e){return!(!(e=e.prototype)||!e.isReactComponent)}
function Ju (line 1) | function Ju(e,t){var n=e.alternate;return null===n?((n=Gu(e.tag,t,e.key,...
function Yu (line 1) | function Yu(e,t,n,r,i,o){var s=2;if(r=e,"function"===typeof e)Ku(e)&&(s=...
function Zu (line 1) | function Zu(e,t,n,r){return(e=Gu(7,e,r,t)).expirationTime=n,e}
function Qu (line 1) | function Qu(e,t,n){return(e=Gu(6,e,null,t)).expirationTime=n,e}
function Xu (line 1) | function Xu(e,t,n){return(t=Gu(4,null!==e.children?e.children:[],e.key,t...
function $u (line 1) | function $u(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,thi...
function ec (line 1) | function ec(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime...
function tc (line 1) | function tc(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;n<t&&(...
function nc (line 1) | function nc(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.fi...
function rc (line 1) | function rc(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTim...
function ic (line 1) | function ic(e,t,n,r){var i=t.current,o=hu(),s=Co.suspense;o=vu(o,i,s);e:...
function oc (line 1) | function oc(e){if(!(e=e.current).child)return null;switch(e.child.tag){c...
function ac (line 1) | function ac(e,t){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retr...
function sc (line 1) | function sc(e,t){ac(e,t),(e=e.alternate)&&ac(e,t)}
function uc (line 1) | function uc(e,t,n){var r=new $u(e,t,n=null!=n&&!0===n.hydrate),i=Gu(3,nu...
function cc (line 1) | function cc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeTy...
function lc (line 1) | function lc(e,t,n,r,i){var o=n._reactRootContainer;if(o){var a=o._intern...
function fc (line 1) | function fc(e,t){var n=2<arguments.length&&void 0!==arguments[2]?argumen...
function C (line 1) | function C(e,t){var n=e.length;e.push(t);e:for(;;){var r=Math.floor((n-1...
function x (line 1) | function x(e){return void 0===(e=e[0])?null:e}
function A (line 1) | function A(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e...
function k (line 1) | function k(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}
function L (line 1) | function L(e){for(var t=x(T);null!==t;){if(null===t.callback)A(T);else{i...
function B (line 1) | function B(e){if(N=!1,L(e),!D)if(null!==x(I))D=!0,r(z);else{var t=x(T);n...
function z (line 1) | function z(e,n){D=!1,N&&(N=!1,o()),M=!0;var r=j;try{for(L(n),R=x(I);null...
function q (line 1) | function q(e){switch(e){case 1:return-1;case 2:return 250;case 5:return ...
function p (line 1) | function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function d (line 1) | function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function f (line 1) | function f(e){return function(t){return function(e){var t=e.channelData;...
function p (line 1) | function p(e,t){var n=t.channelData,r=(n=void 0===n?{}:n).clientActivity...
function u (line 1) | function u(e){var t=function(e,t){if("object"!==(0,i.default)(e)||null==...
function c (line 1) | function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function A (line 1) | function A(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(e){var t;return i.default.wrap((function(n){for(;;)switch(n.p...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function C (line 1) | function C(){return"r_".concat((0,p.default)().substr(0,10))}
function x (line 1) | function x(e){var t,n,r;return o.default.wrap((function(i){for(;;)switch...
function A (line 1) | function A(e,t){var n=e.token,r=((0,u.decode)(n)||{}).user;return r?(t&&...
function k (line 1) | function k(e){var t,n,r,i;return o.default.wrap((function(o){for(;;)swit...
function I (line 1) | function I(){var e,t;return o.default.wrap((function(n){for(;;)switch(n....
function T (line 1) | function T(e,t){var n,r,i,a;return o.default.wrap((function(o){for(;;)sw...
function P (line 1) | function P(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function R (line 1) | function R(e,t){return T(e,o.default.mark((function e(){var n,r;return o...
function j (line 1) | function j(){var e;return o.default.wrap((function(t){for(;;)switch(t.pr...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t){e.call(this),this._value=t}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t){e.call(this),this.errors=t;var n=Error.call(this,t?t.lengt...
function i (line 1) | function i(e){return e?1===e.length?e[0]:function(t){return e.reduce((fu...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.subject=t,this.subscriber=n,this.close...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e){this.selector=e}
function t (line 1) | function t(t,n,r){e.call(this,t),this.selector=n,this.caught=r}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n,r){e.call(this),this.parent=t,this.outerValue=n,this.oute...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e){this.project=e}
function t (line 1) | function t(t,n){e.call(this,t),this.project=n,this.active=0,this.values=...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t){this.predicate=e,this.source=t}
function t (line 1) | function t(t,n,r){e.call(this,t),this.predicate=n,this.source=r,this.cou...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this,t,n),this.scheduler=t,this.pending=!1,this.w...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this)}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(){e.apply(this,arguments),this.actions=[],this.active=!1,this...
function e (line 1) | function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t){this.delay=e,this.scheduler=t}
function t (line 1) | function t(t,n,r){e.call(this,t),this.delay=n,this.scheduler=r,this.queu...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}
function t (line 1) | function t(t,n,r,o){e.call(this,t);var a=new i.Subscriber(n,r,o);a.syncE...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t){this.predicate=e,this.thisArg=t}
function t (line 1) | function t(t,n,r){e.call(this,t),this.predicate=n,this.thisArg=r,this.co...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t,n){void 0===n&&(n=Number.POSITIVE_INFINITY),this.project=...
function t (line 1) | function t(t,n,r,i){void 0===i&&(i=Number.POSITIVE_INFINITY),e.call(this...
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t){this.notifier=e,this.source=t}
function t (line 1) | function t(t,n,r){e.call(this,t),this.notifier=n,this.source=r}
function a (line 1) | function a(){return new o.Subject}
function e (line 1) | function e(e,t){this.subjectFactory=e,this.selector=t}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.source=t,this.subjectFactory=n,this._r...
function t (line 1) | function t(t,n){e.call(this,t),this.connectable=n}
function e (line 1) | function e(e){this.connectable=e}
function t (line 1) | function t(t,n){e.call(this,t),this.connectable=n}
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e){if(this.total=e,this.total<0)throw new o.ArgumentOutOfRang...
function t (line 1) | function t(t,n){e.call(this,t),this.total=n,this.count=0}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(){var t=e.call(this,"argument out of range");this.name=t.name...
function r (line 1) | function r(){this.constructor=e}
function l (line 1) | function l(){if(i.root.XMLHttpRequest)return new i.root.XMLHttpRequest;i...
function f (line 1) | function f(e,t){return void 0===t&&(t=null),new y({method:"GET",url:e,he...
function p (line 1) | function p(e,t,n){return new y({method:"POST",url:e,body:t,headers:n})}
function d (line 1) | function d(e,t){return new y({method:"DELETE",url:e,headers:t})}
function h (line 1) | function h(e,t,n){return new y({method:"PUT",url:e,body:t,headers:n})}
function v (line 1) | function v(e,t,n){return new y({method:"PATCH",url:e,body:t,headers:n})}
function g (line 1) | function g(e,t){return m(new y({method:"GET",url:e,responseType:"json",h...
function t (line 1) | function t(t){e.call(this);var n={async:!0,createXHR:function(){return t...
function t (line 1) | function t(t,n){e.call(this,t),this.request=n,this.done=!1;var r=n.heade...
function r (line 1) | function r(e){var t=r,n=t.subscriber,i=t.progressSubscriber,o=t.request;...
function s (line 1) | function s(e){var t=s,n=t.subscriber,r=t.progressSubscriber,i=t.request;...
function t (line 1) | function t(t,n,r){e.call(this,t),this.message=t,this.xhr=n,this.request=...
function _ (line 1) | function _(e,t){switch(e){case"json":return"response"in t?t.responseType...
function t (line 1) | function t(t,n){e.call(this,"ajax timeout",t,n)}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this,null),this.ish=t,this.scheduler=n}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.promise=t,this.scheduler=n}
function a (line 1) | function a(e){var t=e.value,n=e.subscriber;n.closed||(n.next(t),n.comple...
function s (line 1) | function s(e){var t=e.err,n=e.subscriber;n.closed||n.error(t)}
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){if(e.call(this),this.scheduler=n,null==t)throw new Error...
function e (line 1) | function e(e,t,n){void 0===t&&(t=0),void 0===n&&(n=e.length),this.str=e,...
function e (line 1) | function e(e,t,n){void 0===t&&(t=0),void 0===n&&(n=function(e){var t=+e....
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.arrayLike=t,this.scheduler=n,n||1!==t....
function r (line 1) | function r(){this.constructor=e}
function e (line 1) | function e(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}
function t (line 1) | function t(t,n,r){void 0===r&&(r=0),e.call(this,t),this.scheduler=n,this...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){void 0===t&&(t=0),void 0===n&&(n=a.async),e.call(this),t...
function r (line 1) | function r(){this.constructor=e}
function t (line 1) | function t(t,n){e.call(this),this.error=t,this.scheduler=n}
function c (line 1) | function c(e,t){return r.from(e,t).toString("base64").replace(/=/g,"").r...
function l (line 1) | function l(e){var t=e.header,n=e.payload,r=e.secret||e.privateKey,i=e.en...
function f (line 1) | function f(e){var t=e.secret||e.privateKey||e.key,n=new i(t);this.readab...
function c (line 1) | function c(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. L...
function l (line 1) | function l(e,t,n){for(var i,o,a=[],s=t;s<n;s+=3)i=(e[s]<<16&16711680)+(e...
function e (line 1) | function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Ca...
function o (line 1) | function o(e,t){this._id=e,this._clearFn=t}
function c (line 1) | function c(e){delete o[e]}
function l (line 1) | function l(e){if(a)setTimeout(l,0,e);else{var t=o[e];if(t){a=!0;try{!fun...
function n (line 1) | function n(e){try{if(!t.localStorage)return!1}catch(r){return!1}var n=t....
function o (line 1) | function o(e){if(!(this instanceof o))return new o(e);r.call(this,e)}
function o (line 1) | function o(e,t){if(!r.isBuffer(e)||!r.isBuffer(t))return!1;if(e.length!=...
function u (line 1) | function u(){this.init(),this._w=s,i.call(this,64,56)}
function c (line 1) | function c(e){return e<<30|e>>>2}
function l (line 1) | function l(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}
function u (line 1) | function u(){this.init(),this._w=s,i.call(this,64,56)}
function c (line 1) | function c(e){return e<<5|e>>>27}
function l (line 1) | function l(e){return e<<30|e>>>2}
function f (line 1) | function f(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}
function u (line 1) | function u(){this.init(),this._w=s,o.call(this,64,56)}
function u (line 1) | function u(){this.init(),this._w=s,o.call(this,128,112)}
function t (line 1) | function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}
function u (line 1) | function u(e,t){o.call(this,"digest"),"string"===typeof t&&(t=i.from(t))...
function p (line 1) | function p(e,t,n,r,i){return c.importKey("raw",e,{name:"PBKDF2"},!1,["de...
function u (line 1) | function u(e,t,n){if(e=e.toLowerCase(),o[e])return i.createCipheriv(e,t,...
function c (line 1) | function c(e,t,n){if(e=e.toLowerCase(),o[e])return i.createDecipheriv(e,...
function u (line 1) | function u(e){r.call(this);var t,n=e.mode.toLowerCase(),i=s[n];t=e.decry...
function a (line 1) | function a(e){r.equal(e.length,8,"Invalid IV length"),this.iv=new Array(...
function t (line 1) | function t(t){e.call(this,t),this._cbcInit()}
function s (line 1) | function s(e,t){r.equal(t.length,24,"Invalid key length");var n=t.slice(...
function u (line 1) | function u(e){o.call(this,e);var t=new s(this.type,this.options.key);thi...
function l (line 1) | function l(e,t,n){s.call(this),this._cache=new p,this._cipher=new u.AES(...
function p (line 1) | function p(){this.cache=o.allocUnsafe(0)}
function d (line 1) | function d(e,t,n){var s=r[e.toLowerCase()];if(!s)throw new TypeError("in...
function o (line 1) | function o(e,t,n){var o=t.length,a=i(t,e._cache);return e._cache=e._cach...
function i (line 1) | function i(e,t,n){var i=e._cipher.encryptBlock(e._prev)[0]^t;return e._p...
function i (line 1) | function i(e,t,n){for(var r,i,a=-1,s=0;++a<8;)r=t&1<<7-a?128:0,s+=(128&(...
function o (line 1) | function o(e,t){var n=e.length,i=-1,o=r.allocUnsafe(e.length);for(e=r.co...
function i (line 1) | function i(e){return e._prev=e._cipher.encryptBlock(e._prev),e._prev}
function o (line 1) | function o(e){var t=r.allocUnsafe(16);return t.writeUInt32BE(e[0]>>>0,0)...
function a (line 1) | function a(e){this.h=e,this.state=r.alloc(16,0),this.cache=r.allocUnsafe...
function l (line 1) | function l(e,t,n){s.call(this),this._cache=new f,this._last=void 0,this....
function f (line 1) | function f(){this.cache=i.allocUnsafe(0)}
function p (line 1) | function p(e,t,n){var s=o[e.toLowerCase()];if(!s)throw new TypeError("in...
function p (line 1) | function p(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._p...
function d (line 1) | function d(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._p...
function v (line 1) | function v(e,t,n){this.setGenerator(t),this.__prime=new r(e),this._prime...
function m (line 1) | function m(e,n){var r=new t(e.toArray());return n?r.toString(n):r}
function c (line 1) | function c(e){i.Writable.call(this);var t=u[e];if(!t)throw new Error("Un...
function l (line 1) | function l(e){i.Writable.call(this);var t=u[e];if(!t)throw new Error("Un...
function f (line 1) | function f(e){return new c(e)}
function p (line 1) | function p(e){return new l(e)}
function c (line 1) | function c(e,n,i,o){if((e=new t(e.toArray())).length<n.byteLength()){var...
function l (line 1) | function l(e,t){var n=new a(e),r=(e.length<<3)-t.bitLength();return r>0&...
function f (line 1) | function f(e,n,i){var o,a;do{for(o=new t(0);8*o.length<e.bitLength();)n....
function p (line 1) | function p(e,t,n,r){return e.toRed(a.mont(n)).redPow(t).fromRed().mod(r)}
function u (line 1) | function u(e){a.call(this,"short",e),this.a=new i(e.a,16).toRed(this.red...
function c (line 1) | function c(e,t,n,r){a.BasePoint.call(this,e,"affine"),null===t&&null===n...
function l (line 1) | function l(e,t,n,r){a.BasePoint.call(this,e,"jacobian"),null===t&&null==...
function i (line 1) | function i(t){return e.point(t[0],t[1],n)}
function s (line 1) | function s(e){o.call(this,"mont",e),this.a=new r(e.a,16).toRed(this.red)...
function u (line 1) | function u(e,t,n){o.BasePoint.call(this,e,"projective"),null===t&&null==...
function u (line 1) | function u(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|...
function c (line 1) | function c(e,t,n,r,o){a.BasePoint.call(this,e,"projective"),null===t&&nu...
function p (line 1) | function p(){if(!(this instanceof p))return new p;l.call(this),this.h=[1...
function o (line 1) | function o(){if(!(this instanceof o))return new o;i.call(this),this.h=[3...
function o (line 1) | function o(){if(!(this instanceof o))return new o;i.call(this),this.h=[3...
function l (line 1) | function l(){if(!(this instanceof l))return new l;c.call(this),this.h=[1...
function f (line 1) | function f(e,t,n,r){return e<=15?t^n^r:e<=31?t&n|~t&r:e<=47?(t|~n)^r:e<=...
function p (line 1) | function p(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?240...
function d (line 1) | function d(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:...
function o (line 1) | function o(e,t,n){if(!(this instanceof o))return new o(e,t,n);this.Hash=...
function f (line 1) | function f(e){if(!(this instanceof f))return new f(e);"string"===typeof ...
function a (line 1) | function a(e){if(!(this instanceof a))return new a(e);this.hash=e.hash,t...
function o (line 1) | function o(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._imp...
function a (line 1) | function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(o(e.r&...
function s (line 1) | function s(){this.place=0}
function u (line 1) | function u(e,t){var n=e[t.place++];if(!(128&n))return n;for(var r=15&n,i...
function c (line 1) | function c(e){for(var t=0,n=e.length-1;!e[t]&&!(128&e[t+1])&&t<n;)t++;re...
function l (line 1) | function l(e,t){if(t<128)e.push(t);else{var n=1+(Math.log(t)/Math.LN2>>>...
function l (line 1) | function l(e){if(a("ed25519"===e,"only tested with ed25519 so far"),!(th...
function s (line 1) | function s(e,t){this.eddsa=e,this._secret=o(t.secret),e.isPoint(t.pub)?t...
function u (line 1) | function u(e,t){this.eddsa=e,"object"!==typeof t&&(t=s(t)),Array.isArray...
function o (line 1) | function o(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}
function Context (line 1) | function Context(){}
function i (line 1) | function i(e){this._reporterState={obj:null,path:[],options:e||{},errors...
function o (line 1) | function o(e,t){this.path=e,this.rethrow(t)}
function c (line 1) | function c(e,t){var n={};this._baseState=n,n.enc=e,n.parent=t||null,n.ch...
function a (line 1) | function a(e){o.call(this,e),this.enc="pem"}
function o (line 1) | function o(e){i.call(this,e),this.enc="pem"}
function s (line 1) | function s(e,t){if(e.cmpn(0)<=0)throw new Error("invalid sig");if(e.cmp(...
function a (line 1) | function a(e){this.curveType=o[e],this.curveType||(this.curveType={name:...
function s (line 1) | function s(e,n,r){Array.isArray(e)||(e=e.toArray());var i=new t(e);if(r&...
function i (line 1) | function i(){throw new Error("secure random number generation not suppor...
function f (line 1) | function f(e,t){if("number"!==typeof e||e!==e)throw new TypeError("offse...
function p (line 1) | function p(e,t,n){if("number"!==typeof e||e!==e)throw new TypeError("siz...
function d (line 1) | function d(e,t,n,i){if(r.browser){var o=e.buffer,s=new Uint8Array(o,t,n)...
function u (line 1) | function u(e){if(r.isBuffer(e))return e;if("string"===typeof e)return r....
function c (line 1) | function c(e,t,n){for(var r=0;t+r<n&&0===e[t+r];)++r;return e[t+r]>=o&&-...
function r (line 1) | function r(e){return(e/8|0)+(e%8===0?0:1)}
function l (line 1) | function l(e){if(function(e){return"[object Object]"===Object.prototype....
function f (line 1) | function f(e){var t=e.split(".",1)[0];return l(r.from(t,"base64").toStri...
function p (line 1) | function p(e){return e.split(".")[2]}
function d (line 1) | function d(e){return c.test(e)&&!!f(e)}
function h (line 1) | function h(e,t,n){if(!t){var r=new Error("Missing algorithm parameter fo...
function v (line 1) | function v(e,t){if(t=t||{},!d(e=s(e)))return null;var n=f(e);if(!n)retur...
function m (line 1) | function m(e){var t=(e=e||{}).secret||e.publicKey||e.key,n=new i(t);this...
function u (line 1) | function u(e,t,n,r){var i=t>=1.5*n;return Math.round(e/n)+" "+r+(i?"s":"")}
function K (line 1) | function K(e,t){if(t&&"object"===typeof t||(t={loose:!!t,includePrerelea...
function J (line 1) | function J(e,t){if(t&&"object"===typeof t||(t={loose:!!t,includePrerelea...
function Z (line 1) | function Z(e,t){var n=Y.test(e),r=Y.test(t);return n&&r&&(e=+e,t=+t),e==...
function Q (line 1) | function Q(e,t,n){return new J(e,n).compare(new J(t,n))}
function X (line 1) | function X(e,t,n){return Q(e,t,n)>0}
function $ (line 1) | function $(e,t,n){return Q(e,t,n)<0}
function ee (line 1) | function ee(e,t,n){return 0===Q(e,t,n)}
function te (line 1) | function te(e,t,n){return 0!==Q(e,t,n)}
function ne (line 1) | function ne(e,t,n){return Q(e,t,n)>=0}
function re (line 1) | function re(e,t,n){return Q(e,t,n)<=0}
function ie (line 1) | function ie(e,t,n,r){switch(t){case"===":return"object"===typeof e&&(e=e...
function oe (line 1) | function oe(e,t){if(t&&"object"===typeof t||(t={loose:!!t,includePrerele...
function se (line 1) | function se(e,t){if(t&&"object"===typeof t||(t={loose:!!t,includePrerele...
function ue (line 1) | function ue(e){return!e||"x"===e.toLowerCase()||"*"===e}
function ce (line 1) | function ce(e,t,n,r,i,o,a,s,u,c,l,f,p){return((t=ue(n)?"":ue(r)?">="+n+"...
function le (line 1) | function le(e,t,n){for(var i=0;i<e.length;i++)if(!e[i].test(t))return!1;...
function fe (line 1) | function fe(e,t,n){try{t=new se(t,n)}catch(r){return!1}return t.test(e)}
function pe (line 1) | function pe(e,t,n,r){var i,o,a,s,u;switch(e=new J(e,r),t=new se(t,r),n){...
function m (line 1) | function m(e,t,n,r){if(!l(n))throw new Error('Expected "'+r+'" to be a p...
function c (line 1) | function c(e){if(a)return a(e);throw e}
function g (line 1) | function g(e){return e!==e}
function y (line 1) | function y(e,t){return function(e,t){for(var n=-1,r=e?e.length:0,i=Array...
function A (line 1) | function A(e,t){var n=T(e)||function(e){return function(e){return j(e)&&...
function k (line 1) | function k(e){if(!function(e){var t=e&&e.constructor,n="function"==typeo...
function I (line 1) | function I(e,t){return!!(t=null==t?r:t)&&("number"==typeof e||v.test(e))...
function P (line 1) | function P(e){return null!=e&&function(e){return"number"==typeof e&&e>-1...
function R (line 1) | function R(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
function j (line 1) | function j(e){return!!e&&"object"==typeof e}
function p (line 1) | function p(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
function d (line 1) | function d(e,t){var d;if("function"!=typeof t)throw new TypeError(n);ret...
function h (line 1) | function h(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
function f (line 1) | function f(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function v (line 1) | function v(e,t){return e.from?e.from.role||(e=e.from.id===t?(0,a.default...
function m (line 1) | function m(e){var t,n;return i.default.wrap((function(r){for(;;)switch(r...
function g (line 1) | function g(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(){var e,t,n,r,s,f,p;return i.default.wrap((function(i){for(;;...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function w (line 1) | function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function _ (line 1) | function _(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function E (line 1) | function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
function O (line 1) | function O(e,t,n,r,a){var c,S,w,O,C,x,A,k,I,T,P,R,j,M,D;return i.default...
function C (line 1) | function C(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function a (line 1) | function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function a (line 1) | function a(e){var t=function(e,t){if("object"!==(0,i.default)(e)||null==...
function p (line 1) | function p(e){var t,n,r;return i.default.wrap((function(i){for(;;)switch...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(e){var t;return i.default.wrap((function(n){for(;;)switch(n.p...
function v (line 1) | function v(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function m (line 1) | function m(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function r (line 1) | function r(){this._types=Object.create(null),this._extensions=Object.cre...
function p (line 1) | function p(e){var t,n,r,a;return i.default.wrap((function(i){for(;;)swit...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(e){var t,n,r,a;return i.default.wrap((function(i){for(;;)swit...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(e){var t;return i.default.wrap((function(n){for(;;)switch(n.p...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function g (line 1) | function g(e){return(0,o.take)((function(t){var n=t.payload,r=t.type;ret...
function y (line 1) | function y(){var e;return i.default.wrap((function(t){for(;;)switch(t.pr...
function b (line 1) | function b(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function m (line 1) | function m(e){var t;return i.default.wrap((function(n){for(;;)switch(n.p...
function g (line 1) | function g(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function v (line 1) | function v(){var e;return i.default.wrap((function(t){for(;;)switch(t.pr...
function m (line 1) | function m(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function f (line 1) | function f(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function f (line 1) | function f(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function p (line 1) | function p(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function d (line 1) | function d(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function h (line 1) | function h(){return i.default.wrap((function(e){for(;;)switch(e.prev=e.n...
function v (line 1) | function v(e){return e&&e.__esModule?e:{default:e}}
function m (line 1) | function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function g (line 1) | function g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
function y (line 1) | function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function b (line 1) | function b(e){return(b="function"===typeof Symbol&&"symbol"===typeof Sym...
function S (line 1) | function S(){return(S=Object.assign||function(e){for(var t=1;t<arguments...
function w (line 1) | function w(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)r...
function _ (line 1) | function _(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function E (line 1) | function E(e,t){return!t||"object"!==b(t)&&"function"!==typeof t?functio...
function O (line 1) | function O(e){return(O=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function C (line 1) | function C(e,t){return(C=Object.setPrototypeOf||function(e,t){return e._...
function I (line 1) | function I(e){var t=(0,l.default)(e,(0,f.default)())({});return function...
function T (line 1) | function T(e){var t=(0,l.default)(e,(0,p.default)())({});return function...
function t (line 1) | function t(e){var n;return function(e,t){if(!(e instanceof t))throw new ...
function a (line 1) | function a(e){return e[e.length-1]}
function s (line 1) | function s(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleShee...
function p (line 1) | function p(){var e=document.createElement("style");return e.type="text/c...
function d (line 1) | function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
function i (line 1) | function i(e){return e&&e.__esModule?e:{default:e}}
function r (line 1) | function r(e){return function(){return e}}
function i (line 1) | function i(e){if(function(e){return null===e||void 0===e||!1===e||"objec...
function o (line 1) | function o(e){return Array.isArray(e)?function(e){var t=!1,n=[];return e...
function s (line 1) | function s(e){return e&&e.__esModule?e:{default:e}}
function u (line 1) | function u(e){this.fns=e||[]}
function m (line 1) | function m(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return"-"+e.toLowerCase()}
function r (line 1) | function r(e,t){return e.charCodeAt(t++)+(e.charCodeAt(t++)<<8)+(e.charC...
function i (line 1) | function i(e,t){return e.charCodeAt(t++)+(e.charCodeAt(t++)<<8)}
function o (line 1) | function o(e,t){return(65535&(e|=0))*(t|=0)+(((e>>>16)*t&65535)<<16)|0}
function i (line 1) | function i(){}
function o (line 1) | function o(){}
function e (line 1) | function e(e,t,n,i,o,a){if(a!==r){var s=new Error("Calling PropTypes val...
function t (line 1) | function t(){return e}
function d (line 1) | function d(){if("function"!==typeof WeakMap)return null;var e=new WeakMa...
function h (line 1) | function h(e){return e&&e.__esModule?e:{default:e}}
function v (line 1) | function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function w (line 1) | function w(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(...
function _ (line 1) | function _(e){return w(e)===p}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||fun...
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function o (line 1) | function o(){throw new TypeError("Invalid attempt to destructure non-ite...
function a (line 1) | function a(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===...
function s (line 1) | function s(e){if(Array.isArray(e))return e}
function v (line 1) | function v(e){return e&&e.__esModule?e:{default:e}}
function m (line 1) | function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments...
function g (line 1) | function g(e){return(g="function"===typeof Symbol&&"symbol"===typeof Sym...
function y (line 1) | function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){va...
function b (line 1) | function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
function S (line 1) | function S(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function w (line 1) | function w(e,t){return!t||"object"!==g(t)&&"function"!==typeof t?functio...
function _ (line 1) | function _(e){return(_=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function E (line 1) | function E(e,t){return(E=Object.setPrototypeOf||function(e,t){return e._...
function t (line 1) | function t(e){var n;return function(e,t){if(!(e instanceof t))throw new ...
function o (line 1) | function o(e){return e&&e.__esModule?e:{default:e}}
function a (line 1) | function a(e){return(a="function"===typeof Symbol&&"symbol"===typeof Sym...
function s (line 1) | function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function u (line 1) | function u(e,t){return!t||"object"!==a(t)&&"function"!==typeof t?functio...
function c (line 1) | function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function l (line 1) | function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e._...
function t (line 1) | function t(e){return function(e,t){if(!(e instanceof t))throw new TypeEr...
function r (line 1) | function r(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n...
function a (line 1) | function a(e){return e&&e.__esModule?e:{default:e}}
function s (line 1) | function s(e){return(s="function"===typeof Symbol&&"symbol"===typeof Sym...
function u (line 1) | function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
function c (line 1) | function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:funct...
function l (line 1) | function l(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
Copy disabled (too large)
Download .json
Condensed preview — 1601 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (37,703K chars).
[
{
"path": ".eslintignore",
"chars": 236,
"preview": "lib/**/*.json\r\nlib/nlp/stemmers/**/*.js\r\ncoverage/**\r\ntoto.js\r\nnode_modules\r\ndist\r\ndocs/v3/static/scripts\r\npackages/pyth"
},
{
"path": ".eslintrc",
"chars": 635,
"preview": "{\r\n \"extends\": [\"airbnb-base\", \"plugin:jest/recommended\", \"prettier\"],\r\n \"plugins\": [\"import\", \"jest\", \"prettier\"],\r\n "
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 683,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\nA clear and concise descriptio"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 560,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n**Is your feature request related to a problem? "
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 1615,
"preview": "# Issue Template\r\n\r\n<!---\r\nBEFORE YOU SUBMIT please search open/closed issues before submitting,\r\nsince someone might ha"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 371,
"preview": "# Pull Request Template\r\n\r\n## PR Checklist\r\n\r\n- [ ] I have run `npm test` locally and all tests are passing.\r\n- [ ] I ha"
},
{
"path": ".github/dependabot.yml",
"chars": 501,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/node.js.yml",
"chars": 737,
"preview": "# This workflow will do a clean install of node dependencies, build the source code and run tests across different versi"
},
{
"path": ".gitignore",
"chars": 63,
"preview": "/coverage\r\nnode_modules\r\n\r\n.vscode\r\n.idea\r\n*BAK*\r\n\r\nmodel.nlp\r\n"
},
{
"path": ".npmignore",
"chars": 51,
"preview": "screenshots\nmodel.nlp\ndocs\nexamples\n.github\n.vscode"
},
{
"path": "CHANGELOG.md",
"chars": 7074,
"preview": "# Changelog\nAll notable changes to release of this project will be documented in this file.\n\nFor detailed change-info on"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5648,
"preview": "# Contributor Covenant Code of Conduct\r\n \r\n## Our Pledge\r\n \r\nWe as members, contributors, and leaders pledge to make par"
},
{
"path": "CONTRIBUTING.md",
"chars": 1023,
"preview": "# How to Contribute\r\n\r\n## Reporting Issues\r\n\r\nShould you run into issues with the project, please don't hesitate to let "
},
{
"path": "LICENSE.md",
"chars": 1105,
"preview": "# MIT License\r\n\r\nCopyright (c) AXA Group Operations Spain S.A.\r\n\r\nPermission is hereby granted, free of charge, to any p"
},
{
"path": "README.md",
"chars": 19512,
"preview": "\n\n# NLP.js\n\n[\n\n# NLP.js\n\n[ with utterances and their intents.\nThen you can "
},
{
"path": "docs/v3/benchmarking.md",
"chars": 9639,
"preview": "# Benchmarking\n\n## Introduction\n\nThis benchmark is done following the instructions at https://github.com/Botfuel/benchma"
},
{
"path": "docs/v3/binary-relevance-nlu.md",
"chars": 2314,
"preview": "# Binary Relevance NLU\n\nYou can train a Binary Relevance Neural Network NLU classifier (indicating language) with uttera"
},
{
"path": "docs/v3/brain-nlu.md",
"chars": 2233,
"preview": "# Brain NLU\n\nYou can train a multilabel (Brain) NLU classifier (indicating language) with utterances and their intents.\n"
},
{
"path": "docs/v3/builtin-duckling.md",
"chars": 19413,
"preview": "# Integration with Duckling\n\nInstead of using the existing builtin entity extraction, you can integrate with duckling.\n\n"
},
{
"path": "docs/v3/builtin-entity-extraction.md",
"chars": 18784,
"preview": "# Builtin Entity Extraction\n\nFor integration with duckling please visit [Builtin Duckling](builtin-duckling.md). Ducklin"
},
{
"path": "docs/v3/example-of-use.md",
"chars": 1906,
"preview": "# Example of use\n\nYou can see a great example of use at the folder \\examples\\console-bot. This example is able to train "
},
{
"path": "docs/v3/example-with-languages.md",
"chars": 2509,
"preview": "# Example with languages\n\nThis example show how to handle the three kind of different scenarios with languages:\n1. The l"
},
{
"path": "docs/v3/installation.md",
"chars": 145,
"preview": "# Installation\n\nIf you're looking to use NLP.js in your node application, you can install via NPM like so:\n\n```bash\n "
},
{
"path": "docs/v3/language-guesser.md",
"chars": 2109,
"preview": "# Language Guesser\n\nThe language object gives your code the skill to guess the language of a text. The method guess do t"
},
{
"path": "docs/v3/language-support.md",
"chars": 8966,
"preview": "# Language Support\n\nAny language is supported, even fantasy languages, but there are 30 languages with stemmer support. "
},
{
"path": "docs/v3/loading-from-excel.md",
"chars": 621,
"preview": "# Loading from Excel\n\nThe NLP manager can load all the information from an excel file.\nYou can find an example excel fil"
},
{
"path": "docs/v3/logistic-regression-nlu.md",
"chars": 2301,
"preview": "# Logistic Regression NLU\n\nYou can train a Logistic Regression NLU classifier (indicating language) with utterances and "
},
{
"path": "docs/v3/microsoft-bot-framework.md",
"chars": 5213,
"preview": "# Microsoft Bot Framwork\n\n## Introduction\n\nYou can integrate it with Microsoft Bot Framework chatbots by importing the _"
},
{
"path": "docs/v3/ner-manager.md",
"chars": 5756,
"preview": "# NER Manager\n\nThe Named Entity Recognition manager is able to store an structure of entities and options of the entity "
},
{
"path": "docs/v3/nlp-manager.md",
"chars": 7119,
"preview": "# NLP Manager\n\nThe `NlpManager` is able to manage several languages. It manages the named entities, and trains the NLP c"
},
{
"path": "docs/v3/nlu-manager.md",
"chars": 7846,
"preview": "# NLU Manager\n\nThe NLU Manager is the main classifier class for Natural Language Understanding. \nIs able to manage sever"
},
{
"path": "docs/v3/sentiment-analysis.md",
"chars": 3093,
"preview": "# Sentiment Analysis\n\nThe Sentiment Analysis module is able to calculate the sentiment based on the AFINN.\nLanguages acc"
},
{
"path": "docs/v3/similar-search.md",
"chars": 1745,
"preview": "# Similar Search\n\nSimilar Search is used to calculate the levenshtein distance between two strings and also is able to s"
},
{
"path": "docs/v3/slot-filling.md",
"chars": 6487,
"preview": "# Slot filling\n\nOne great feature that NLP systems can have is slot filling. When you define an intent, you can define w"
},
{
"path": "docs/v3/static/BinaryNeuralNetworkClassifier.html",
"chars": 9572,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: BinaryNeuralNetworkClassifie"
},
{
"path": "docs/v3/static/Classifier.html",
"chars": 18882,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Classifier</title>\n\n <scr"
},
{
"path": "docs/v3/static/ConversationContext.html",
"chars": 8593,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: ConversationContext</title>\n"
},
{
"path": "docs/v3/static/DutchStemmer.html",
"chars": 4415,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: DutchStemmer</title>\n\n <s"
},
{
"path": "docs/v3/static/EnglishStemmer.html",
"chars": 4431,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: EnglishStemmer</title>\n\n "
},
{
"path": "docs/v3/static/EnumNamedEntity.html",
"chars": 14980,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: EnumNamedEntity</title>\n\n "
},
{
"path": "docs/v3/static/Evaluator.html",
"chars": 10832,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Evaluator</title>\n\n <scri"
},
{
"path": "docs/v3/static/HungarianStemmer.html",
"chars": 4447,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: HungarianStemmer</title>\n\n "
},
{
"path": "docs/v3/static/ItalianStemmer.html",
"chars": 4431,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: ItalianStemmer</title>\n\n "
},
{
"path": "docs/v3/static/Language.html",
"chars": 11277,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Language</title>\n\n <scrip"
},
{
"path": "docs/v3/static/LogisticRegressionClassifier.html",
"chars": 9406,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: LogisticRegressionClassifier"
},
{
"path": "docs/v3/static/Matrix.html",
"chars": 31574,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Matrix</title>\n\n <script "
},
{
"path": "docs/v3/static/MemoryConversationContext.html",
"chars": 6867,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: MemoryConversationContext</t"
},
{
"path": "docs/v3/static/NamedEntity.html",
"chars": 9477,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: NamedEntity</title>\n\n <sc"
},
{
"path": "docs/v3/static/NerManager.html",
"chars": 37257,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: NerManager</title>\n\n <scr"
},
{
"path": "docs/v3/static/NlgManager.html",
"chars": 15244,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: NlgManager</title>\n\n <scr"
},
{
"path": "docs/v3/static/NlpClassifier.html",
"chars": 20152,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: NlpClassifier</title>\n\n <"
},
{
"path": "docs/v3/static/NlpManager.html",
"chars": 48039,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: NlpManager</title>\n\n <scr"
},
{
"path": "docs/v3/static/NorwegianStemmer.html",
"chars": 4447,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: NorwegianStemmer</title>\n\n "
},
{
"path": "docs/v3/static/PortugueseStemmer.html",
"chars": 4455,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: PortugueseStemmer</title>\n\n "
},
{
"path": "docs/v3/static/Recognizer.html",
"chars": 25433,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Recognizer</title>\n\n <scr"
},
{
"path": "docs/v3/static/RegexNamedEntity.html",
"chars": 15415,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: RegexNamedEntity</title>\n\n "
},
{
"path": "docs/v3/static/RomanianStemmer.html",
"chars": 4439,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: RomanianStemmer</title>\n\n "
},
{
"path": "docs/v3/static/RussianStemmer.html",
"chars": 4431,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: RussianStemmer</title>\n\n "
},
{
"path": "docs/v3/static/SentimentAnalyzer.html",
"chars": 7333,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: SentimentAnalyzer</title>\n\n "
},
{
"path": "docs/v3/static/SentimentManager.html",
"chars": 8236,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: SentimentManager</title>\n\n "
},
{
"path": "docs/v3/static/SimilarSearch.html",
"chars": 17277,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: SimilarSearch</title>\n\n <"
},
{
"path": "docs/v3/static/SlotManager.html",
"chars": 20840,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: SlotManager</title>\n\n <sc"
},
{
"path": "docs/v3/static/StemmerJa.html",
"chars": 10931,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: StemmerJa</title>\n\n <scri"
},
{
"path": "docs/v3/static/SwedishStemmer.html",
"chars": 4431,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: SwedishStemmer</title>\n\n "
},
{
"path": "docs/v3/static/Tokenizer.html",
"chars": 6609,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Tokenizer</title>\n\n <scri"
},
{
"path": "docs/v3/static/TrimNamedEntity.html",
"chars": 5013,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: TrimNamedEntity</title>\n\n "
},
{
"path": "docs/v3/static/TurkishStemmer.html",
"chars": 4431,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: TurkishStemmer</title>\n\n "
},
{
"path": "docs/v3/static/Vector.html",
"chars": 25827,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: Vector</title>\n\n <script "
},
{
"path": "docs/v3/static/XTable.html",
"chars": 11424,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Class: XTable</title>\n\n <script "
},
{
"path": "docs/v3/static/classifiers_binary-neural-network-classifier.js.html",
"chars": 6480,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: classifiers/binary-neural-n"
},
{
"path": "docs/v3/static/classifiers_classifier.js.html",
"chars": 9333,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: classifiers/classifier.js</"
},
{
"path": "docs/v3/static/classifiers_logistic-regression-classifier.js.html",
"chars": 6888,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: classifiers/logistic-regres"
},
{
"path": "docs/v3/static/global.html",
"chars": 11567,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Global</title>\n\n <script src=\"sc"
},
{
"path": "docs/v3/static/index.html",
"chars": 12988,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Home</title>\n\n <script src=\"scri"
},
{
"path": "docs/v3/static/language_language.js.html",
"chars": 7502,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: language/language.js</title"
},
{
"path": "docs/v3/static/math_mathops.js.html",
"chars": 11215,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: math/mathops.js</title>\n\n "
},
{
"path": "docs/v3/static/math_matrix.js.html",
"chars": 14017,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: math/matrix.js</title>\n\n "
},
{
"path": "docs/v3/static/math_vector.js.html",
"chars": 10517,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: math/vector.js</title>\n\n "
},
{
"path": "docs/v3/static/ner_enum-named-entity.js.html",
"chars": 7501,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: ner/enum-named-entity.js</t"
},
{
"path": "docs/v3/static/ner_named-entity.js.html",
"chars": 5998,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: ner/named-entity.js</title>"
},
{
"path": "docs/v3/static/ner_ner-manager.js.html",
"chars": 25097,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: ner/ner-manager.js</title>\n"
},
{
"path": "docs/v3/static/ner_regex-named-entity.js.html",
"chars": 7205,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: ner/regex-named-entity.js</"
},
{
"path": "docs/v3/static/ner_trim-named-entity.js.html",
"chars": 14351,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: ner/trim-named-entity.js</t"
},
{
"path": "docs/v3/static/nlg_nlg-manager.js.html",
"chars": 8064,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlg/nlg-manager.js</title>\n"
},
{
"path": "docs/v3/static/nlp_nlp-classifier.js.html",
"chars": 13343,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/nlp-classifier.js</titl"
},
{
"path": "docs/v3/static/nlp_nlp-manager.js.html",
"chars": 26020,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/nlp-manager.js</title>\n"
},
{
"path": "docs/v3/static/nlp_nlp-util.js.html",
"chars": 14792,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/nlp-util.js</title>\n\n "
},
{
"path": "docs/v3/static/nlp_stemmers_dutch-stemmer.js.html",
"chars": 24888,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/dutch-stemmer."
},
{
"path": "docs/v3/static/nlp_stemmers_english-stemmer.js.html",
"chars": 37445,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/english-stemme"
},
{
"path": "docs/v3/static/nlp_stemmers_hungarian-stemmer.js.html",
"chars": 33267,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/hungarian-stem"
},
{
"path": "docs/v3/static/nlp_stemmers_italian-stemmer.js.html",
"chars": 35167,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/italian-stemme"
},
{
"path": "docs/v3/static/nlp_stemmers_natural_porter-stemmer-fr.js.html",
"chars": 18136,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/natural/porter"
},
{
"path": "docs/v3/static/nlp_stemmers_natural_porter-stemmer-pt.js.html",
"chars": 11861,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/natural/porter"
},
{
"path": "docs/v3/static/nlp_stemmers_natural_stemmer-ja.js.html",
"chars": 7406,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/natural/stemme"
},
{
"path": "docs/v3/static/nlp_stemmers_natural_token.js.html",
"chars": 8817,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/natural/token."
},
{
"path": "docs/v3/static/nlp_stemmers_norwegian-stemmer.js.html",
"chars": 13022,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/norwegian-stem"
},
{
"path": "docs/v3/static/nlp_stemmers_portuguese-stemmer.js.html",
"chars": 33648,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/portuguese-ste"
},
{
"path": "docs/v3/static/nlp_stemmers_romanian-stemmer.js.html",
"chars": 31475,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/romanian-stemm"
},
{
"path": "docs/v3/static/nlp_stemmers_russian-stemmer.js.html",
"chars": 23662,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/russian-stemme"
},
{
"path": "docs/v3/static/nlp_stemmers_swedish-stemmer.js.html",
"chars": 12753,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/swedish-stemme"
},
{
"path": "docs/v3/static/nlp_stemmers_turkish-stemmer.js.html",
"chars": 91719,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/stemmers/turkish-stemme"
},
{
"path": "docs/v3/static/nlp_tokenizers_tokenizer.js.html",
"chars": 5076,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: nlp/tokenizers/tokenizer.js"
},
{
"path": "docs/v3/static/recognizer_conversation-context.js.html",
"chars": 5964,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: recognizer/conversation-con"
},
{
"path": "docs/v3/static/recognizer_memory-conversation-context.js.html",
"chars": 5955,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: recognizer/memory-conversat"
},
{
"path": "docs/v3/static/recognizer_recognizer.js.html",
"chars": 12867,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: recognizer/recognizer.js</t"
},
{
"path": "docs/v3/static/scripts/linenumber.js",
"chars": 598,
"preview": "/*global document */\n(function() {\n var source = document.getElementsByClassName(\"prettyprint source linenums\");\n var "
},
{
"path": "docs/v3/static/scripts/prettify/Apache-License-2.0.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "docs/v3/static/scripts/prettify/lang-css.js",
"chars": 1065,
"preview": "PR.registerLangHandler(\n PR.createSimpleLexer(\n [[\"pln\", /^[\\t\\n\\f\\r ]+/, null, \" \\t\\r\\n\f\"]],\n [\n [\"str\", /^"
},
{
"path": "docs/v3/static/scripts/prettify/prettify.js",
"chars": 21602,
"preview": "var q = null;\nwindow.PR_SHOULD_USE_CONTINUATION = !0;\n(function() {\n function L(a) {\n function m(a) {\n var f = "
},
{
"path": "docs/v3/static/sentiment_sentiment-analyzer.js.html",
"chars": 8267,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: sentiment/sentiment-analyze"
},
{
"path": "docs/v3/static/sentiment_sentiment-manager.js.html",
"chars": 6190,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: sentiment/sentiment-manager"
},
{
"path": "docs/v3/static/slot_slot-manager.js.html",
"chars": 9985,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: slot/slot-manager.js</title"
},
{
"path": "docs/v3/static/styles/jsdoc-default.css",
"chars": 5972,
"preview": "@font-face {\n font-family: 'Open Sans';\n font-weight: normal;\n font-style: normal;\n src: url('../fonts/OpenS"
},
{
"path": "docs/v3/static/styles/prettify-jsdoc.css",
"chars": 1535,
"preview": "/* JSDoc prettify.js theme */\n\n/* plain text */\n.pln {\n color: #000000;\n font-weight: normal;\n font-style: normal;\n}\n"
},
{
"path": "docs/v3/static/styles/prettify-tomorrow.css",
"chars": 2008,
"preview": "/* Tomorrow Theme */\n/* Original theme - https://github.com/chriskempson/tomorrow-theme */\n/* Pretty printing styles. Us"
},
{
"path": "docs/v3/static/util_evaluator.js.html",
"chars": 17031,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: util/evaluator.js</title>\n\n"
},
{
"path": "docs/v3/static/util_similar-search.js.html",
"chars": 15709,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: util/similar-search.js</tit"
},
{
"path": "docs/v3/static/xtables_xtable-utils.js.html",
"chars": 7919,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: xtables/xtable-utils.js</ti"
},
{
"path": "docs/v3/static/xtables_xtable.js.html",
"chars": 7048,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>JSDoc: Source: xtables/xtable.js</title>\n\n"
},
{
"path": "docs/v4/console-connector.md",
"chars": 1158,
"preview": "# @nlpjs/console-connector\n\n## Installation\n\nYou can install the console connector @nlpjs/console-connector using:\n\n```b"
},
{
"path": "docs/v4/core/arr-to-obj.md",
"chars": 1489,
"preview": "# ArrToObj\n\nThis is a plugin to transform an array of strings into a hashmap where the keys are the different strings in"
},
{
"path": "docs/v4/core/file-system.md",
"chars": 3080,
"preview": "# File System\n\n## Introduction\n\nTo be able to work with files, a File System should be defined. A file system should inc"
},
{
"path": "docs/v4/core/logger.md",
"chars": 761,
"preview": "# logger\n\nThis is a singleton to write logs. \nIn this case due to browser compatibility, it works using console, and it "
},
{
"path": "docs/v4/core/normalizer.md",
"chars": 3309,
"preview": "# Normalizer\n\nA normalizer is a plugin that normalize the text of a language. Normalization is the process to transform "
},
{
"path": "docs/v4/core/obj-to-arr.md",
"chars": 1279,
"preview": "# ObjToArr\n\nThis is a plugin to transform an hashmap object to an array of strings where each string is a key of the has"
},
{
"path": "docs/v4/core/stopwords.md",
"chars": 1232,
"preview": "# Stopwords\n\nThere are plugins that remove stopwords from an array of tokens. Each language plugin provides it's own sto"
},
{
"path": "docs/v4/core/timer.md",
"chars": 542,
"preview": "# Timer\n\nTimer is a simple timing class to measure the time consumed by processes. As it should be compatible with web, "
},
{
"path": "docs/v4/core/uuid.md",
"chars": 292,
"preview": "# UUID\n\nA Unique Identifier generator that is compatible with browsers, so it does not use the crypto library, it uses M"
},
{
"path": "docs/v4/emoji.md",
"chars": 554,
"preview": "# @nlpjs/emoji\n\n## Introduction\n\n@nlpjs/emoji is the package that adds the function _removeEmojis_ which replaces emojis"
},
{
"path": "docs/v4/language-support.md",
"chars": 32474,
"preview": "# Language Support\n\n## Supported languages\n\nNative Support means that the tokenizer and stemmer are included in javascri"
},
{
"path": "docs/v4/logger.md",
"chars": 1611,
"preview": "# logger\n\n## Introduction\nA logger can be registered to log what happens during the execution.\n\n## Default logger in @nl"
},
{
"path": "docs/v4/mini-faq.md",
"chars": 10855,
"preview": "# Mini-FAQ\n\n@jesus-seijas-sp collected a mini FAQ for some v4 topics:\n\nHi,\n\nI will put here a FAQ with the links to diff"
},
{
"path": "docs/v4/ner-manager.md",
"chars": 9079,
"preview": "# NER Manager\n\nThe Named Entity Recognition manager is able to store an structure of entities and options of the entity "
},
{
"path": "docs/v4/ner-quickstart.md",
"chars": 4151,
"preview": "# NER Quick Start\n\n## Install the needed packages\n\nIn your node project folder, install the @nlpjs/basic, @nlpjs/express"
},
{
"path": "docs/v4/neural.md",
"chars": 3879,
"preview": "# NeuralNetwork\n\n## Introduction\n\n_NeuralNetwork_ is the class for an NLU Neural Network, able to train a classifier and"
},
{
"path": "docs/v4/nlp-intent-logics.md",
"chars": 5060,
"preview": "## NLP Logic for Intents\n\nWhen the NLP has detected an intent there are some options to execute own logic for that inten"
},
{
"path": "docs/v4/nlp-manager.md",
"chars": 10323,
"preview": "# NLP Manager\n\nThe `NlpManager` is able to manage several languages. It manages the named entities, and trains the NLP c"
},
{
"path": "docs/v4/nlu.md",
"chars": 14114,
"preview": "# @nlpjs/nlu\n\n## Installation\n\nYou can install @nlpjs/nlu:\n\n```bash\n npm install @nlpjs/nlu\n```\n\n## NluNeural\n\nClass "
},
{
"path": "docs/v4/qna.md",
"chars": 3758,
"preview": "# QnA\n\nThis will guide you through the process of creating a bot using a QnA tsv file instead of a corpus with intents.\n"
},
{
"path": "docs/v4/quickstart.md",
"chars": 18446,
"preview": "# Quick Start\n\n## Install the library\nAt the folder where is your node project, install the basic library, that will ins"
},
{
"path": "docs/v4/similarity.md",
"chars": 2597,
"preview": "# @nlpjs/similarity\n\n## TABLE OF CONTENTS\n\n<!--ts-->\n\n- [Installation](#installation)\n- [leven](#leven)\n- [similarity](#"
},
{
"path": "docs/v4/slot-filling.md",
"chars": 14428,
"preview": "# Slot filling\n\nOne great feature that NLP systems can have is slot filling. When you define an intent, you can define w"
},
{
"path": "docs/v4/webandreact.md",
"chars": 7348,
"preview": "# Web and React Native\n\n## Preparing to generate a bundle\n\nNLP.js is developed to be a Node.js project, but even with th"
},
{
"path": "examples/01-container/README.md",
"chars": 5712,
"preview": "# Example 01: Container, Plugins and Pipelines\n\n## Introduction\n\nThis example show how to use the Container, and how to "
},
{
"path": "examples/01-container/index.js",
"chars": 1581,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/01-container/pipelines.md",
"chars": 160,
"preview": "# Pipelines\n\n## reverse\nsplit\nreverse\njoin\n->output.text\n\n## reverse-and-*\n$reverse\nlower\n->output.text\n\n## reverse-and-"
},
{
"path": "examples/01-container/plugins/join.js",
"chars": 1389,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/01-container/plugins/lower.js",
"chars": 1554,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/01-container/plugins/reverse.js",
"chars": 1409,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/01-container/plugins/split.js",
"chars": 1387,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/01-container/plugins/upperFirst.js",
"chars": 1463,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/02-qna-classic/index.js",
"chars": 1877,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/02-qna-classic/train-nlp.js",
"chars": 35909,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/03-qna-pipelines/conf.json",
"chars": 629,
"preview": "{\n \"pathPlugins\": \"./plugins\",\n \"pathPipelines\": \"./pipelines.md\",\n \"settings\": {\n \"nlp\": {\n \"languages\": [\"e"
},
{
"path": "examples/03-qna-pipelines/corpus.json",
"chars": 21714,
"preview": "{\n \"name\": \"Corpus\",\n \"locale\": \"en-US\",\n \"data\": [\n {\n \"intent\": \"agent.acquaintance\",\n \"utterances\": ["
},
{
"path": "examples/03-qna-pipelines/index.js",
"chars": 1410,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/03-qna-pipelines/pipelines.md",
"chars": 198,
"preview": "# Pipelines\n\n## console.hear\neq input.message \"quit\"\njne sendMessage\nconsole.exit\nlabel sendMessage\nnlp.process input.me"
},
{
"path": "examples/04-qna-web/conf.json",
"chars": 778,
"preview": "{\n \"pathPlugins\": \"./plugins\",\n \"pathPipeline\": \"./pipelines.md\",\n \"settings\": {\n \"nlp\": {\n \"languages\": [\"en"
},
{
"path": "examples/04-qna-web/corpus.json",
"chars": 21716,
"preview": "{\n \"name\": \"Corpus\",\n \"locale\": \"en-US\",\n \"data\": [\n {\n \"intent\": \"agent.acquaintance\",\n \"utterances\": ["
},
{
"path": "examples/04-qna-web/index.js",
"chars": 1269,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/04-qna-web/pipelines.md",
"chars": 37,
"preview": "# Pipelines\n\n## main\nnlp.loadOrTrain\n"
},
{
"path": "examples/05-qna-dual/conf.json",
"chars": 1015,
"preview": "{\n \"pathPlugins\": \"./plugins\",\n \"pathPipeline\": \"./pipelines.md\",\n \"settings\": {\n \"nlp\": {\n \"languages\": [\"en"
},
{
"path": "examples/05-qna-dual/corpus.json",
"chars": 21714,
"preview": "{\n \"name\": \"Corpus\",\n \"locale\": \"en-US\",\n \"data\": [\n {\n \"intent\": \"agent.acquaintance\",\n \"utterances\": ["
},
{
"path": "examples/05-qna-dual/index.js",
"chars": 1190,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/05-qna-dual/pipelines.md",
"chars": 230,
"preview": "# default\n\n## main\nnlp.loadOrTrain\n\n# bot1\n\n## console.hear\neq input.message \"quit\"\njne sendMessage\nconsole.exit\nlabel s"
},
{
"path": "examples/06-huge-ner/airports.json",
"chars": 8916558,
"preview": "{\n \"00AK\": {\n \"icao\": \"00AK\",\n \"iata\": \"\",\n \"name\": \"Lowell Field\",\n \"city\": \"Anchor Poin"
},
{
"path": "examples/06-huge-ner/conf.json",
"chars": 692,
"preview": "{\n \"pathPlugins\": \"./plugins\",\n \"pathPipelines\": \"./pipelines.md\",\n \"settings\": {\n \"nlp\": {\n \"languages\": [\"e"
},
{
"path": "examples/06-huge-ner/corpus.json",
"chars": 21714,
"preview": "{\n \"name\": \"Corpus\",\n \"locale\": \"en-US\",\n \"data\": [\n {\n \"intent\": \"agent.acquaintance\",\n \"utterances\": ["
},
{
"path": "examples/06-huge-ner/index.js",
"chars": 1965,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/06-huge-ner/pipelines.md",
"chars": 198,
"preview": "# Pipelines\n\n## console.hear\neq input.message \"quit\"\njne sendMessage\nconsole.exit\nlabel sendMessage\nnlp.process input.me"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/README.md",
"chars": 12383,
"preview": "# README\n\nOn this examples we can test to deploy an AWS Lambda function which will have a NLPjs engine and we will inter"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/.gitignore",
"chars": 2043,
"preview": "\n# Created by https://www.gitignore.io/api/osx,node,linux,windows\n\n### Linux ###\n*~\n\n# temporary files which can be crea"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/README.md",
"chars": 7542,
"preview": "# nlpjs-lambda\n\nThis project contains source code and supporting files for a serverless application that you can deploy "
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/events/event.json",
"chars": 1997,
"preview": "{\n \"body\": \"{\\\"message\\\": \\\"hello world\\\"}\",\n \"resource\": \"/{proxy+}\",\n \"path\": \"/path/to/resource\",\n \"httpMethod\": "
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/hello-world/.npmignore",
"chars": 8,
"preview": "tests/*\n"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/hello-world/app.js",
"chars": 1009,
"preview": "/* eslint-disable no-unused-vars */\n// const axios = require('axios')\n// const url = 'http://checkip.amazonaws.com/';\n\n/"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/hello-world/package.json",
"chars": 782,
"preview": "{\n \"name\": \"hello_world\",\n \"version\": \"1.0.0\",\n \"description\": \"hello world sample for NodeJS\",\n \"main\": \"app.js\",\n "
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/hello-world/tests/unit/test-handler.js",
"chars": 605,
"preview": "const chai = require('chai');\nconst app = require('../../app.js');\n\nconst { expect } = chai;\nlet event;\nlet context;\n\nde"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/nlpjs/.npmignore",
"chars": 8,
"preview": "tests/*\n"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/nlpjs/app.js",
"chars": 2231,
"preview": "/* eslint-disable no-console */\n/* eslint-disable prettier/prettier */\n\nconst { engine } = require('./engine.js');\n\n/**\n"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/nlpjs/engine.js",
"chars": 1547,
"preview": "/* eslint-disable no-console */\n/* eslint-disable prettier/prettier */\n\nconst fs = require('fs');\n\n// const { NlpManager"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/nlpjs/package.json",
"chars": 455,
"preview": "{\n \"name\": \"nlpjs_lambda_function\",\n \"version\": \"1.0.0\",\n \"main\": \"app.js\",\n \"dependencies\": {\n \"node-nlp\": \"^4.3"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda/template.yaml",
"chars": 2496,
"preview": "AWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\nDescription: >\n nlpjs-lambda\n\n Sample SAM"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/.gitignore",
"chars": 2057,
"preview": "\n# Created by https://www.gitignore.io/api/osx,node,linux,windows\n\n### Linux ###\n*~\n\n# temporary files which can be crea"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/README.md",
"chars": 7542,
"preview": "# nlpjs-lambda\n\nThis project contains source code and supporting files for a serverless application that you can deploy "
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/nlpjs/.npmignore",
"chars": 8,
"preview": "tests/*\n"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/nlpjs/app.js",
"chars": 2263,
"preview": "/* eslint-disable func-names */\n/* eslint-disable no-console */\n/* eslint-disable prettier/prettier */\n\nconst { engine }"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/nlpjs/engine.js",
"chars": 5296,
"preview": "/* eslint-disable func-names */\n/* eslint-disable no-console */\n/* eslint-disable prettier/prettier */\n\n// eslint-disabl"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/nlpjs/package.json",
"chars": 509,
"preview": "{\n \"name\": \"nlpjs_lambda_function\",\n \"version\": \"1.0.0\",\n \"main\": \"app.js\",\n \"dependencies\": {\n \"node-nlp\": \"^4.3"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/schema.json",
"chars": 324,
"preview": "{\n \"TableName\": \"NLPjsModelTable\",\n \"KeySchema\": [{\n \"AttributeName\": \"id\",\n \"KeyType\": \"HASH\"\n }"
},
{
"path": "examples/07-nlpjs-on-aws-lambda/nlpjs-lambda-with-DynamoDB/template.yaml",
"chars": 1521,
"preview": "AWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\nDescription: >\n nlpjs-lambda\n\n Sample SAM"
},
{
"path": "examples/08-neural-network/01-basic-usage.js",
"chars": 1346,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/08-neural-network/02-export-import.js",
"chars": 1420,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/08-neural-network/03-activate-log.js",
"chars": 1359,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/08-neural-network/04-custom-log.js",
"chars": 1544,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/08-neural-network/05-change-parameters.js",
"chars": 1415,
"preview": "/*\n * Copyright (c) AXA Group Operations Spain S.A.\n *\n * Permission is hereby granted, free of charge, to any person ob"
},
{
"path": "examples/08-neural-network/README.md",
"chars": 470,
"preview": "# Neural Network Examples\n\nThose are examples to show how to use the class _NeuralNetwork_ from package _@nlpjs/neural_\n"
},
{
"path": "examples/08-neural-network/data/corpus.json",
"chars": 885,
"preview": "[\n {\n \"input\": { \"who\": 1, \"are\": 1, \"you\": 1 },\n \"output\": { \"who\": 1 }\n },\n {\n \"input\": { \"say\": 1, \"about"
}
]
// ... and 1401 more files (download for full content)
About this extraction
This page contains the full source code of the axa-group/nlp.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1601 files (32.5 MB), approximately 8.6M tokens, and a symbol index with 5014 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.