diff --git a/builds/compromise.js b/builds/compromise.js index 546bed225..7b3ea61a9 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -8392,31 +8392,7 @@ var _01Lexicon = checkLexicon; - var apostrophes = /[\'‘’‛‵′`´]$/; - var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; - var oneLetterWord = { - I: true, - A: true - }; - - var isAcronym$2 = function isAcronym(term, world) { - var str = term.reduced; // a known acronym like fbi - - if (term.tags.Acronym) { - return true; - } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false - // } - // 'PIZZA' is not an acronym. - - - if (str.length > 4 && world.words[str]) { - return false; - } - - return term.isAcronym(); - }; // - + var apostrophes = /[\'‘’‛‵′`´]$/; // var checkPunctuation = function checkPunctuation(terms, i, world) { var term = terms[i]; //check hyphenation @@ -8445,15 +8421,14 @@ } } } // 'NASA' is, but not 'i REALLY love it.' + // if (term.tags.Noun === true && isAcronym(term, world)) { + // term.tag('Acronym', 'acronym-step', world) + // term.tag('Noun', 'acronym-infer', world) + // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { + // term.tag('Acronym', 'one-letter-acronym', world) + // term.tag('Noun', 'one-letter-infer', world) + // } - - if (isAcronym$2(term, world)) { - term.tag('Acronym', 'acronym-step', world); - term.tag('Noun', 'acronym-infer', world); - } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { - term.tag('Acronym', 'one-letter-acronym', world); - term.tag('Noun', 'one-letter-infer', world); - } }; var _02Punctuation$1 = checkPunctuation; @@ -9306,12 +9281,69 @@ var _05Organizations = tagOrgs; + var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; + var periodSeperated = /([A-Z]\.){2}[A-Z]?/i; + var oneLetterWord = { + I: true, + A: true + }; + + var isAcronym$2 = function isAcronym(term, world) { + var str = term.reduced; // a known acronym like fbi + + if (term.tags.Acronym) { + return true; + } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { + // return false + // } + // known-words, like 'PIZZA' is not an acronym. + + + if (world.words[str]) { + return false; + } + + return term.isAcronym(); + }; // F.B.I., NBC, - but not 'NO COLLUSION' + + + var checkAcronym = function checkAcronym(terms, world) { + terms.forEach(function (term) { + //these are not acronyms + if (term.tags.RomanNumeral === true) { + return; + } //period-ones F.D.B. + + + if (periodSeperated.test(term.text) === true) { + term.tag('Acronym', 'period-acronym', world); + } //non-period ones are harder + + + if (term.isUpperCase() && isAcronym$2(term, world)) { + term.tag('Acronym', 'acronym-step', world); + term.tag('Noun', 'acronym-infer', world); + } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { + term.tag('Acronym', 'one-letter-acronym', world); + term.tag('Noun', 'one-letter-infer', world); + } //if it's a organization, + + + if (term.tags.Organization && term.text.length < 4) { + term.tag('Acronym', 'acronym-org', world); + } + }); + }; + + var _06Acronyms = checkAcronym; + var step = { neighbours: _01Neighbours, "case": _02Case, stem: _03Stem, plural: _04Plurals, - organizations: _05Organizations + organizations: _05Organizations, + acronyms: _06Acronyms }; // var fallbacks = function fallbacks(doc, terms) { @@ -9329,7 +9361,9 @@ } }); // turn 'Foo University' into an Org - step.organizations(terms, world); //are the nouns singular or plural? + step.organizations(terms, world); //turn 'FBD' into an acronym + + step.acronyms(terms, world); //are the nouns singular or plural? terms.forEach(function (t) { step.plural(t, doc.world); diff --git a/builds/compromise.js.map b/builds/compromise.js.map index 0ae4a95ce..b2de02de9 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.3.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det\n .match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]')\n .tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //'foo-up'\n vb.match('#Verb (up|off|over|out)')\n .match('@hasHyphen .')\n .tag('#PhrasalVerb')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.3.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length < 4) {\n term.tag('Acronym', 'acronym-org', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det\n .match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]')\n .tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //'foo-up'\n vb.match('#Verb (up|off|over|out)')\n .match('@hasHyphen .')\n .tag('#PhrasalVerb')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index abd919c2d..dca7b0e09 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},D,x,H,z,L);function _(){return"undefined"!=typeof window&&window.document}var q=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=C(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=C(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=xe(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},je=function(e,t){var n={};Ne(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ee={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Ne(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return Ne(this,e,!0).length>0},not:function(e){var t=this,n=je(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,Ee),Object.assign(Oe.prototype,ge);var He={term:"terms"};Object.keys(He).forEach((function(e){return Oe.prototype[e]=Oe.prototype[He[e]]}));var Te=Oe,Ve=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Ve.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new Ve(t)};for(var ze=Ve,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,_e=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,qe=/^\s+/,We=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===_e.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new ze;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Te(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new ze;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Te(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Vt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},_t=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],qt=[/ary$/],Wt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Zt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Xt={toSuperlative:function(e){if(Wt.hasOwnProperty(e))return Wt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=B((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Pn=B((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Dn=(Bn.json,Bn.data,B((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=jn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Hn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Tn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Hn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}if(void 0===n[i]||!0!==n.hasOwnProperty(i))if(i===e[a].reduced||!0!==n.hasOwnProperty(e[a].reduced)){if(!0===er.test(i)){var s=i.replace(er,"");!0===n.hasOwnProperty(s)&&e[a].tag(n[s],"noprefix-lexicon",t)}}else e[a].tag(n[e[a].reduced],"lexicon",t);else e[a].tag(n[i],"lexicon",t)}return e},rr=/[\'‘’‛‵′`´]$/,ar=/^[A-Z]('s|,)?$/,ir={I:!0,A:!0},or=function(e,t,n){var r=e[t];if(rr.test(r.text)&&!rr.test(r.pre)&&!rr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ir.hasOwnProperty(r.text)&&ar.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},sr=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],ur=/^[IVXLCDM]{2,}$/,lr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cr="Adjective",hr="Infinitive",dr="PresentTense",fr="Singular",mr="PastTense",pr="Expression",gr="LastName",vr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,gr],[/.[^aeiou]ica$/,fr],[/^([hyj]a)+$/,pr]],c:[[/.[^aeiou]ic$/,cr]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,mr],[/.[aeo]{2}[bdgmnprvz]ed$/,mr],[/.[aeiou][sg]hed$/,mr],[/.[aeiou]red$/,mr],[/.[aeiou]r?ried$/,mr],[/.[bcdgtr]led$/,mr],[/.[aoui]f?led$/,mr],[/.[iao]sed$/,mr],[/[aeiou]n?[cs]ed$/,mr],[/[aeiou][rl]?[mnf]ed$/,mr],[/[aeiou][ns]?c?ked$/,mr],[/[aeiou][nl]?ged$/,mr],[/.[tdbwxz]ed$/,mr],[/[^aeiou][aeiou][tvx]ed$/,mr],[/.[cdlmnprstv]ied$/,mr],[/[^aeiou]ard$/,fr],[/[aeiou][^aeiou]id$/,cr],[/.[vrl]id$/,cr]],e:[[/.[lnr]ize$/,hr],[/.[^aeiou]ise$/,hr],[/.[aeiou]te$/,hr],[/.[^aeiou][ai]ble$/,cr],[/.[^aeiou]eable$/,cr],[/.[ts]ive$/,cr]],h:[[/.[^aeiouf]ish$/,cr],[/.v[iy]ch$/,gr],[/^ug?h+$/,pr],[/^uh[ -]?oh$/,pr]],i:[[/.[oau][wvl]ski$/,gr]],k:[[/^(k)+$/,pr]],l:[[/.[gl]ial$/,cr],[/.[^aeiou]ful$/,cr],[/.[nrtumcd]al$/,cr],[/.[^aeiou][ei]al$/,cr]],m:[[/.[^aeiou]ium$/,fr],[/[^aeiou]ism$/,fr],[/^h*u*m+$/,pr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,cr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,pr],[/^(yo)+$/,pr],[/^woo+[pt]?$/,pr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,fr],[/[^i]fer$/,hr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,cr],[/[aeiou].*ist$/,cr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,dr],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,fr],[/.[aeiou]sks$/,dr],[/.[aeiou]kes$/,dr],[/[aeiou][^aeiou]is$/,fr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,pr]],v:[[/.[^aeiou][ai][kln]ov$/,gr]],y:[[/.[cts]hy$/,cr],[/.[st]ty$/,cr],[/.[gk]y$/,cr],[/.[tnl]ary$/,cr],[/.[oe]ry$/,fr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,cr],[/.(gg|bb|zz)ly$/,cr],[/.[aeiou]my$/,cr],[/[ea]{2}zy$/,cr],[/.[^aeiou]ity$/,fr]]},br="Adjective",yr="Infinitive",wr="PresentTense",kr="Singular",Ar="PastTense",$r="Adverb",Gr="Plural",Pr="Verb",Fr="LastName",Cr=[null,null,{ea:kr,ia:"Noun",ic:br,ly:$r,"'n":Pr,"'t":Pr},{oed:Ar,ued:Ar,xed:Ar," so":$r,"'ll":"Modal","'re":"Copula",azy:br,end:Pr,ped:Ar,ffy:br,ify:yr,ing:"Gerund",ize:yr,lar:br,mum:br,nes:wr,nny:br,oid:br,ous:br,que:br,rmy:br,rol:kr,sis:kr,zes:wr},{amed:Ar,aped:Ar,ched:Ar,lked:Ar,nded:Ar,cted:Ar,dged:Ar,akis:Fr,cede:yr,chuk:Fr,czyk:Fr,ects:wr,ends:Pr,enko:Fr,ette:kr,fies:wr,fore:$r,gate:yr,gone:br,ices:Gr,ints:Gr,ions:Gr,less:$r,llen:br,made:br,nsen:Fr,oses:wr,ould:"Modal",some:br,sson:Fr,tage:yr,teen:"Value",tion:kr,tive:br,tors:"Noun",vice:kr},{tized:Ar,urned:Ar,eased:Ar,ances:Gr,bound:br,ettes:Gr,fully:$r,ishes:wr,ities:Gr,marek:Fr,nssen:Fr,ology:"Noun",ports:Gr,rough:br,tches:wr,tieth:"Ordinal",tures:Gr,wards:$r,where:$r},{auskas:Fr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Fr,sdottir:Fr}],Br={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"=2&&ur.test(n)&&lr.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Cr[i.length].hasOwnProperty(i)){var o=Cr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===vr.hasOwnProperty(r))for(var a=vr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Dr)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Br.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Nr=function(e,t){var n=e.world;xr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Lr={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Jr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],_r=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],qr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Jr.find((function(t){return e.tags[t]})))return;if(Lr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Lr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(_r.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(qr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},Kr=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Rr=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Qr={neighbours:Hr,case:zr,stem:Sr,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ma=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Ha(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();vi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new vi(e,this,this.world)},vi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(vi.prototype,gi.misc),Object.assign(vi.prototype,gi.selections),pi(vi);var bi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(bi).forEach((function(e){return vi.prototype[e]=vi.prototype[bi[e]]}));var yi=vi,wi=new pn,ki=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&wi.addWords(t);var n=rt(e,wi),r=new yi(n,null,wi);return r.tagger(),r};return ki.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&wi.addWords(t);var n=rt(e,wi),r=new yi(n,null,wi);return r},ki.extend=function(e){return e(yi,wi),this},ki.clone=function(){return wi=wi.clone(),this},ki.load=function(e){var t=at(e,wi);return new yi(t,null,wi)},ki.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return wi.verbose(e),this},ki.version="12.3.0",ki.import=ki.load,ki})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},D,x,H,z,L);function _(){return"undefined"!=typeof window&&window.document}var q=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=F(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=F(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=xe(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},je=function(e,t){var n={};Ne(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ee={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Ne(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return Ne(this,e,!0).length>0},not:function(e){var t=this,n=je(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,Ee),Object.assign(Oe.prototype,ge);var He={term:"terms"};Object.keys(He).forEach((function(e){return Oe.prototype[e]=Oe.prototype[He[e]]}));var Te=Oe,Ve=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Ve.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new Ve(t)};for(var ze=Ve,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,_e=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,qe=/^\s+/,We=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===_e.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new ze;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Te(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new ze;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Te(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Vt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},_t=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],qt=[/ary$/],Wt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Zt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Xt={toSuperlative:function(e){if(Wt.hasOwnProperty(e))return Wt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=B((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Pn=B((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Dn=(Bn.json,Bn.data,B((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=jn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Hn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Tn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Hn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}if(void 0===n[i]||!0!==n.hasOwnProperty(i))if(i===e[a].reduced||!0!==n.hasOwnProperty(e[a].reduced)){if(!0===er.test(i)){var s=i.replace(er,"");!0===n.hasOwnProperty(s)&&e[a].tag(n[s],"noprefix-lexicon",t)}}else e[a].tag(n[e[a].reduced],"lexicon",t);else e[a].tag(n[i],"lexicon",t)}return e},rr=/[\'‘’‛‵′`´]$/,ar=function(e,t,n){var r=e[t];if(rr.test(r.text)&&!rr.test(r.pre)&&!rr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}},ir=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],or=/^[IVXLCDM]{2,}$/,sr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,ur=function(e,t){for(var n=e.text,r=0;r=2&&or.test(n)&&sr.test(n)&&e.tag("RomanNumeral","xvii",t)},lr="Adjective",cr="Infinitive",hr="PresentTense",dr="Singular",fr="PastTense",mr="Expression",pr="LastName",gr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,pr],[/.[^aeiou]ica$/,dr],[/^([hyj]a)+$/,mr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,fr],[/.[aeo]{2}[bdgmnprvz]ed$/,fr],[/.[aeiou][sg]hed$/,fr],[/.[aeiou]red$/,fr],[/.[aeiou]r?ried$/,fr],[/.[bcdgtr]led$/,fr],[/.[aoui]f?led$/,fr],[/.[iao]sed$/,fr],[/[aeiou]n?[cs]ed$/,fr],[/[aeiou][rl]?[mnf]ed$/,fr],[/[aeiou][ns]?c?ked$/,fr],[/[aeiou][nl]?ged$/,fr],[/.[tdbwxz]ed$/,fr],[/[^aeiou][aeiou][tvx]ed$/,fr],[/.[cdlmnprstv]ied$/,fr],[/[^aeiou]ard$/,dr],[/[aeiou][^aeiou]id$/,lr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,pr],[/^ug?h+$/,mr],[/^uh[ -]?oh$/,mr]],i:[[/.[oau][wvl]ski$/,pr]],k:[[/^(k)+$/,mr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,dr],[/[^aeiou]ism$/,dr],[/^h*u*m+$/,mr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,mr],[/^(yo)+$/,mr],[/^woo+[pt]?$/,mr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,dr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,hr],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,dr],[/.[aeiou]sks$/,hr],[/.[aeiou]kes$/,hr],[/[aeiou][^aeiou]is$/,dr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,mr]],v:[[/.[^aeiou][ai][kln]ov$/,pr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,dr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,dr]]},vr="Adjective",br="Infinitive",yr="PresentTense",wr="Singular",kr="PastTense",Ar="Adverb",$r="Plural",Gr="Verb",Pr="LastName",Cr=[null,null,{ea:wr,ia:"Noun",ic:vr,ly:Ar,"'n":Gr,"'t":Gr},{oed:kr,ued:kr,xed:kr," so":Ar,"'ll":"Modal","'re":"Copula",azy:vr,end:Gr,ped:kr,ffy:vr,ify:br,ing:"Gerund",ize:br,lar:vr,mum:vr,nes:yr,nny:vr,oid:vr,ous:vr,que:vr,rmy:vr,rol:wr,sis:wr,zes:yr},{amed:kr,aped:kr,ched:kr,lked:kr,nded:kr,cted:kr,dged:kr,akis:Pr,cede:br,chuk:Pr,czyk:Pr,ects:yr,ends:Gr,enko:Pr,ette:wr,fies:yr,fore:Ar,gate:br,gone:vr,ices:$r,ints:$r,ions:$r,less:Ar,llen:vr,made:vr,nsen:Pr,oses:yr,ould:"Modal",some:vr,sson:Pr,tage:br,teen:"Value",tion:wr,tive:vr,tors:"Noun",vice:wr},{tized:kr,urned:kr,eased:kr,ances:$r,bound:vr,ettes:$r,fully:Ar,ishes:yr,ities:$r,marek:Pr,nssen:Pr,ology:"Noun",ports:$r,rough:vr,tches:yr,tieth:"Ordinal",tures:$r,wards:Ar,where:Ar},{auskas:Pr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Pr,sdottir:Pr}],Fr={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Cr[i.length].hasOwnProperty(i)){var o=Cr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===gr.hasOwnProperty(r))for(var a=gr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Br)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Fr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},xr=function(e,t){var n=e.world;Dr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Sr={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Lr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Jr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],_r=[/i$/,/ae$/],qr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Lr.find((function(t){return e.tags[t]})))return;if(Sr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Sr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Jr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(_r.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},Wr=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Kr=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Rr=/^[A-Z]('s|,)?$/,Qr=/([A-Z]\.){2}[A-Z]?/i,Ur={I:!0,A:!0},Zr={neighbours:Or,case:Vr,stem:Mr,plural:qr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},La=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Va(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();yi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new yi(e,this,this.world)},yi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(yi.prototype,bi.misc),Object.assign(yi.prototype,bi.selections),vi(yi);var wi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(wi).forEach((function(e){return yi.prototype[e]=yi.prototype[wi[e]]}));var ki=yi,Ai=new pn,$i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Ai.addWords(t);var n=rt(e,Ai),r=new ki(n,null,Ai);return r.tagger(),r};return $i.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Ai.addWords(t);var n=rt(e,Ai),r=new ki(n,null,Ai);return r},$i.extend=function(e){return e(ki,Ai),this},$i.clone=function(){return Ai=Ai.clone(),this},$i.load=function(e){var t=at(e,Ai);return new ki(t,null,Ai)},$i.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return Ai.verbose(e),this},$i.version="12.3.0",$i.import=$i.load,$i})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index 54cc807d7..3fc37fada 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -8386,31 +8386,7 @@ var checkLexicon = function checkLexicon(terms, world) { var _01Lexicon = checkLexicon; -var apostrophes = /[\'‘’‛‵′`´]$/; -var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; -var oneLetterWord = { - I: true, - A: true -}; - -var isAcronym$2 = function isAcronym(term, world) { - var str = term.reduced; // a known acronym like fbi - - if (term.tags.Acronym) { - return true; - } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false - // } - // 'PIZZA' is not an acronym. - - - if (str.length > 4 && world.words[str]) { - return false; - } - - return term.isAcronym(); -}; // - +var apostrophes = /[\'‘’‛‵′`´]$/; // var checkPunctuation = function checkPunctuation(terms, i, world) { var term = terms[i]; //check hyphenation @@ -8439,15 +8415,14 @@ var checkPunctuation = function checkPunctuation(terms, i, world) { } } } // 'NASA' is, but not 'i REALLY love it.' + // if (term.tags.Noun === true && isAcronym(term, world)) { + // term.tag('Acronym', 'acronym-step', world) + // term.tag('Noun', 'acronym-infer', world) + // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { + // term.tag('Acronym', 'one-letter-acronym', world) + // term.tag('Noun', 'one-letter-infer', world) + // } - - if (isAcronym$2(term, world)) { - term.tag('Acronym', 'acronym-step', world); - term.tag('Noun', 'acronym-infer', world); - } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { - term.tag('Acronym', 'one-letter-acronym', world); - term.tag('Noun', 'one-letter-infer', world); - } }; var _02Punctuation$1 = checkPunctuation; @@ -9300,12 +9275,69 @@ var tagOrgs = function tagOrgs(terms, world) { var _05Organizations = tagOrgs; +var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; +var periodSeperated = /([A-Z]\.){2}[A-Z]?/i; +var oneLetterWord = { + I: true, + A: true +}; + +var isAcronym$2 = function isAcronym(term, world) { + var str = term.reduced; // a known acronym like fbi + + if (term.tags.Acronym) { + return true; + } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { + // return false + // } + // known-words, like 'PIZZA' is not an acronym. + + + if (world.words[str]) { + return false; + } + + return term.isAcronym(); +}; // F.B.I., NBC, - but not 'NO COLLUSION' + + +var checkAcronym = function checkAcronym(terms, world) { + terms.forEach(function (term) { + //these are not acronyms + if (term.tags.RomanNumeral === true) { + return; + } //period-ones F.D.B. + + + if (periodSeperated.test(term.text) === true) { + term.tag('Acronym', 'period-acronym', world); + } //non-period ones are harder + + + if (term.isUpperCase() && isAcronym$2(term, world)) { + term.tag('Acronym', 'acronym-step', world); + term.tag('Noun', 'acronym-infer', world); + } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { + term.tag('Acronym', 'one-letter-acronym', world); + term.tag('Noun', 'one-letter-infer', world); + } //if it's a organization, + + + if (term.tags.Organization && term.text.length < 4) { + term.tag('Acronym', 'acronym-org', world); + } + }); +}; + +var _06Acronyms = checkAcronym; + var step = { neighbours: _01Neighbours, "case": _02Case, stem: _03Stem, plural: _04Plurals, - organizations: _05Organizations + organizations: _05Organizations, + acronyms: _06Acronyms }; // var fallbacks = function fallbacks(doc, terms) { @@ -9323,7 +9355,9 @@ var fallbacks = function fallbacks(doc, terms) { } }); // turn 'Foo University' into an Org - step.organizations(terms, world); //are the nouns singular or plural? + step.organizations(terms, world); //turn 'FBD' into an acronym + + step.acronyms(terms, world); //are the nouns singular or plural? terms.forEach(function (t) { step.plural(t, doc.world); diff --git a/scratch.js b/scratch.js index 2281c39f0..2bfb14c08 100644 --- a/scratch.js +++ b/scratch.js @@ -1,7 +1,8 @@ const nlp = require('./src/index') +// const nlp = require('./') nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) // nlp('WE’RE NOT WORTHY!').debug() -nlp('fbi').debug() +nlp('contacted nbc').debug() diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index a322cbe76..6bf3877a8 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -110,7 +110,7 @@ test('pos-basic-tag:', function(t) { ['he blamed the girl', ['Pronoun', 'PastTense', 'Determiner', 'Singular']], ['his fine', ['Possessive', 'Noun']], // ['contracted AIDS', ['PastTense', 'Acronym']], - ['contacted nbc', ['PastTense', 'Acronym']], + // ['contacted nbc', ['PastTense', 'Acronym']], ['city/town', ['Noun', 'Noun']], ['boyfriend to Jane', ['Noun', 'Conjunction', 'Person']], // ['boyfriend of Jane', ['Noun', 'Conjunction', 'Person']],