diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 672153f15..43389076f 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: - node-version: [10.x, 13.x] + node-version: [10.x, 15.x] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 907b973dd..4d177e053 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -3,10 +3,8 @@ name: Coverage on: - push: - branches: [master] - pull_request: - branches: [master] + release: + types: [created] jobs: getCoverage: diff --git a/.gitignore b/.gitignore index da1f97920..2796d40d9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ coverage/ .env .nyc_output/ .vscode -coverage.lcov \ No newline at end of file +coverage.lcov +codecov.yml +plugins/phrases/data/ \ No newline at end of file diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index d510a01cf..9173a05b0 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},G={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},R={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},G,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=_(this,e)[0]),r}},U=Object.assign({},$,V,q,z,R);function H(){return"undefined"!=typeof window&&window.document}var Q=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=T(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=f(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=T(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();ot.prototype.clone=function(){var t=new ot(this.text);return t.pre=this.pre,t.post=this.post,t.clean=this.clean,t.reduced=this.reduced,t.root=this.root,t.implicit=this.implicit,t.tags=Object.assign({},this.tags),t},Object.assign(ot.prototype,U),Object.assign(ot.prototype,it);var st=ot,at={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ut(o)),!0===t.trim&&(o=o.trim()),o}},ht={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},lt=/[.?!]\s*$/,ft=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,lt.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},pt=function(t,e,r){var n=t.terms(),i=e.terms();ft(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;n.next=e[0].id,i.next=o,o&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},dt=/ /,vt=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===dt.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start),r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},mt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},gt={append:function(t,e){return pt(this,t,e),this},prepend:function(t,e){return vt(this,t,e),this},delete:function(t){return mt(this,t),this},replace:function(t,e){var r=this.length;pt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,mt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},bt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},yt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},At=Object.assign({},at,ct,ht,gt,bt,yt),wt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},xt=function(t,e,r,n,i,o){for(var s=e;es)return[!1,null];if(!0===u.end&&r+s!==n)return[!1,null]}if(c){var d=jt(i,h,t,p,u.named);s>1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var v=Pt(t,s,e[a+1],u,r);if(void 0!==u.min&&v-su.max){s+=u.max;continue}if(null===v)return[!1,null];c&&(jt(i,h,t,s,u.named).length=v-s),s=v}}return[t.slice(0,s),i]},Ot=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},Ct=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,Ft=new RegExp(/^<(\S+)>/),Tt=function(t){return t[t.length-1]},Nt=function(t){return t[0]},$t=function(t){return t.substr(1)},Vt=function(t){return t.substr(0,t.length-1)},St=function(t){return t=$t(t),t=Vt(t)},Bt=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Tt(e)&&(n.end=!0,e=Vt(e)),"^"===Nt(e)&&(n.start=!0,e=$t(e)),("["===Nt(e)||"]"===Tt(e))&&(n.named=!0,"["===Nt(e)?n.groupType="]"===Tt(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Nt(e))){var o=Ft.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Tt(e)&&(n.greedy=!0,e=Vt(e)),"*"!==e&&"*"===Tt(e)&&"\\*"!==e&&(n.greedy=!0,e=Vt(e)),"?"===Tt(e)&&(n.optional=!0,e=Vt(e)),"!"===Nt(e)&&(n.negative=!0,e=$t(e)),"("===Nt(e)&&")"===Tt(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=$t(n.choices[0]);var s=n.choices.length-1;n.choices[s]=Vt(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Nt(e)&&"/"===Tt(e))return e=St(e),n.regex=new RegExp(e),n;if("~"===Nt(e)&&"~"===Tt(e))return e=St(e),n.soft=!0,n.word=e,n}return!0===Ct.test(e)&&(e=e.replace(Ct,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Nt(e)?(n.tag=$t(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Nt(e)?(n.method=$t(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},It=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Bt),r=It(r)},qt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Dt(e)),!0===wt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=Et(i,e,0,i.length),a=c(s,2),u=a[0],h=a[1];return!1!==u&&u.length>0&&(u=u.filter((function(t){return t})),o.push({match:u,groups:h})),Ot(i,e,o)}for(var l=0;li.length);l+=1){var f=Et(i.slice(l),e,l,i.length),p=c(f,2),d=p[0],v=p[1];if(!1!==d&&d.length>0&&(l+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:v}),!0===r))return Ot(i,e,o)}return Ot(i,e,o)},Mt=function(t,e){var r={};qt(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Lt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=qt(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return qt(this,t,!0).length>0},not:function(t){var e=this,r=Mt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},zt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};zt.prototype.buildFrom=function(t,e,r){var n=new zt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(zt.prototype,Lt),Object.assign(zt.prototype,At);var Wt={term:"terms"};Object.keys(Wt).forEach((function(t){return zt.prototype[t]=zt.prototype[Wt[t]]}));var _t=zt,Gt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Gt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Gt(e)};var Rt=Gt,Ut=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Ht=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Qt=/\S/,Zt=/[ .][A-Z]\.? *$/i,Jt=/(?:\u2026|\.{2,}) *$/,Yt=/((?:\r?\n|\r)+)/,Kt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Xt=/^\s+/,te=function(t,e){if(!0===Zt.test(t))return!1;if(!0===Jt.test(t))return!1;if(!1===Kt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},ee=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Qt.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Yt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var h=1;h0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,n=null;"string"!=typeof t&&("number"==typeof t?t=String(t):he(t)&&(n=t)),n=(n=n||ee(t,e)).map((function(t){return ce(t)})),r=r||new Rt;var i=n.map((function(t){t=t.map((function(t){var e=new st(t);return r.add(e),e})),Ut(t);var e=new _t(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},fe=function(t,e){var r=new Rt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new st(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Ut(i),new _t(i[0].id,i.length,r)}))},pe={},de=["Person","Place","Organization"],ve={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"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},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:de},Actor:{isA:"Noun",notA:de},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:de},Demonym:{isA:["Noun","ProperNoun"],notA:de},Possessive:{isA:"Noun"}},me={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"}},ge={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"}},be=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ye={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:be},Conjunction:{notA:be},Preposition:{notA:be},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"]}},Ae={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},we=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:Ae[e]?t[e].color=Ae[e]:t[e].isA.some((function(r){return!!Ae[r]&&(t[e].color=Ae[r],!0)}))})),t},xe=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))},Ge={tag:function(t,e){return t?(_e(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(_e(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},Re={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},Ue=function(t){return t.split(/[ -]/g)},He=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=Ue(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=Je(s)),o=le(s,r.world,r.pool());var a=r.buildFrom(o);a.tagger(),o=a.list}if(!0===n.keepTags){var u=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){u[e]&&t.tagSafe(u[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},Ke=N((function(t,e){var r=function(t,e){var r=le(t,e.world)[0],n=e.buildFrom([r]);return n.tagger(),e.list=n.list,e};e.append=function(t){var e=this;return t?this.found?(this.uncache(),this.list.forEach((function(r){var n=le(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):r(t,this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?this.found?(this.uncache(),this.list.forEach((function(r){var n=le(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):r(t,this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&er(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),nr=N((function(t){var e="",r=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};sr.alphabetical=sr.alpha,sr.wordcount=sr.wordCount;var ar={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},ur={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):ar.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===Or.test(o)){var a=o.replace(Or,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},Fr=function(t){var e=t.termList();return kr(e,t.world),t},Tr=function(t){var r=function(t){i(o,t);var r=u(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),o}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},Nr=/\./,$r=function(t){var r=function(t){i(o,t);var r=u(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===Nr.test(t.post)&&(e+="."),t.set(e)})),this}}]),o}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},Vr=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#WeekDay && @hasComma) #Date").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},Sr=function(t){var r=function(t){i(o,t);var r=u(o);function o(t,n,i){var s;return e(this,o),(s=r.call(this,t,n,i)).contracted=null,s}return n(o,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r1&&void 0!==arguments[1]?arguments[1]:{},n=this.match("(#City && @hasComma) (#Region|#Country)"),i=this.not(n).splitAfter("@hasComma"),o=(i=i.concat(n)).quotations();return o.found&&(i=i.splitOn(o.eq(0))),i=i.match("#Noun+ (of|by)? the? #Noun+?"),!0!==e.keep_anaphora&&(i=(i=(i=(i=i.not("#Pronoun")).not("(there|these)")).not("(#Month|#WeekDay)")).not("(my|our|your|their|her|his)")),i=i.not("(of|for|by|the)$"),"number"==typeof t&&(i=i.get(t)),new r(i.list,this,this.world)},t},Zr=/\(/,Jr=/\)/,Yr=function(t){var r=function(t){i(o,t);var r=u(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"unwrap",value:function(){return this.list.forEach((function(t){var e=t.terms(0);e.pre=e.pre.replace(Zr,"");var r=t.lastTerm();r.post=r.post.replace(Jr,"")})),this}}]),o}(t);return t.prototype.parentheses=function(t){var e=[];return this.list.forEach((function(t){for(var r=t.terms(),n=0;n0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return Fr(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();bn.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new bn(t,this,this.world)},bn.prototype.fromText=function(t){var e=le(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(bn.prototype,gn.misc),Object.assign(bn.prototype,gn.selections),mn(bn);var yn={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(yn).forEach((function(t){return bn.prototype[t]=bn.prototype[yn[t]]}));var An=bn;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=le(t,r),i=new An(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=le(t,n),o=new An(i,null,n);return e&&Fr(o),o},n.extend=function(t){return t(An,r,this,_t,st,Rt),this},n.fromJSON=function(t){var e=fe(t,r);return new An(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.world=function(){return r},n.parseMatch=function(t){return Dt(t)},n.version="13.6.0",n.import=n.load,n}(new qe)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},G={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},R={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},G,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=_(this,e)[0]),r}},U=Object.assign({},$,V,q,z,R);function H(){return"undefined"!=typeof window&&window.document}var Q=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=T(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=f(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=T(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();ot.prototype.clone=function(){var t=new ot(this.text);return t.pre=this.pre,t.post=this.post,t.clean=this.clean,t.reduced=this.reduced,t.root=this.root,t.implicit=this.implicit,t.tags=Object.assign({},this.tags),t},Object.assign(ot.prototype,U),Object.assign(ot.prototype,it);var st=ot,at={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ut(o)),!0===t.trim&&(o=o.trim()),o}},ht={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},lt=/[.?!]\s*$/,ft=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,lt.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},pt=function(t,e,r){var n=t.terms(),i=e.terms();ft(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;n.next=e[0].id,i.next=o,o&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},dt=/ /,vt=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===dt.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start),r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},mt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},gt={append:function(t,e){return pt(this,t,e),this},prepend:function(t,e){return vt(this,t,e),this},delete:function(t){return mt(this,t),this},replace:function(t,e){var r=this.length;pt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,mt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},bt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},yt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},At=Object.assign({},at,ct,ht,gt,bt,yt),wt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},xt=function(t,e,r,n,i,o){for(var s=e;es)return[!1,null];if(!0===u.end&&r+s!==n)return[!1,null]}if(c){var d=jt(i,h,t,p,u.named);s>1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var v=Pt(t,s,e[a+1],u,r);if(void 0!==u.min&&v-su.max){s+=u.max;continue}if(null===v)return[!1,null];c&&(jt(i,h,t,s,u.named).length=v-s),s=v}}return[t.slice(0,s),i]},Ot=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},Ct=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,Ft=new RegExp(/^<(\S+)>/),Tt=function(t){return t[t.length-1]},Nt=function(t){return t[0]},$t=function(t){return t.substr(1)},Vt=function(t){return t.substr(0,t.length-1)},St=function(t){return t=$t(t),t=Vt(t)},Bt=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Tt(e)&&(n.end=!0,e=Vt(e)),"^"===Nt(e)&&(n.start=!0,e=$t(e)),("["===Nt(e)||"]"===Tt(e))&&(n.named=!0,"["===Nt(e)?n.groupType="]"===Tt(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Nt(e))){var o=Ft.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Tt(e)&&(n.greedy=!0,e=Vt(e)),"*"!==e&&"*"===Tt(e)&&"\\*"!==e&&(n.greedy=!0,e=Vt(e)),"?"===Tt(e)&&(n.optional=!0,e=Vt(e)),"!"===Nt(e)&&(n.negative=!0,e=$t(e)),"("===Nt(e)&&")"===Tt(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=$t(n.choices[0]);var s=n.choices.length-1;n.choices[s]=Vt(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Nt(e)&&"/"===Tt(e))return e=St(e),n.regex=new RegExp(e),n;if("~"===Nt(e)&&"~"===Tt(e))return e=St(e),n.soft=!0,n.word=e,n}return!0===Ct.test(e)&&(e=e.replace(Ct,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Nt(e)?(n.tag=$t(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Nt(e)?(n.method=$t(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},It=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Bt),r=It(r)},qt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Dt(e)),!0===wt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=Et(i,e,0,i.length),a=c(s,2),u=a[0],h=a[1];return!1!==u&&u.length>0&&(u=u.filter((function(t){return t})),o.push({match:u,groups:h})),Ot(i,e,o)}for(var l=0;li.length);l+=1){var f=Et(i.slice(l),e,l,i.length),p=c(f,2),d=p[0],v=p[1];if(!1!==d&&d.length>0&&(l+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:v}),!0===r))return Ot(i,e,o)}return Ot(i,e,o)},Mt=function(t,e){var r={};qt(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Lt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=qt(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return qt(this,t,!0).length>0},not:function(t){var e=this,r=Mt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},zt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};zt.prototype.buildFrom=function(t,e,r){var n=new zt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(zt.prototype,Lt),Object.assign(zt.prototype,At);var Wt={term:"terms"};Object.keys(Wt).forEach((function(t){return zt.prototype[t]=zt.prototype[Wt[t]]}));var _t=zt,Gt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Gt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Gt(e)};var Rt=Gt,Ut=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Ht=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Qt=/\S/,Zt=/[ .][A-Z]\.? *$/i,Jt=/(?:\u2026|\.{2,}) *$/,Yt=/((?:\r?\n|\r)+)/,Kt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Xt=/^\s+/,te=function(t,e){if(!0===Zt.test(t))return!1;if(!0===Jt.test(t))return!1;if(!1===Kt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},ee=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Qt.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Yt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var h=1;h0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,n=null;"string"!=typeof t&&("number"==typeof t?t=String(t):he(t)&&(n=t)),n=(n=n||ee(t,e)).map((function(t){return ce(t)})),r=r||new Rt;var i=n.map((function(t){t=t.map((function(t){var e=new st(t);return r.add(e),e})),Ut(t);var e=new _t(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},fe=function(t,e){var r=new Rt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new st(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Ut(i),new _t(i[0].id,i.length,r)}))},pe={},de=["Person","Place","Organization"],ve={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"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},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:de},Actor:{isA:"Noun",notA:de},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:de},Demonym:{isA:["Noun","ProperNoun"],notA:de},Possessive:{isA:"Noun"}},me={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","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:"PastTense"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},ge={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"}},be=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ye={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:be},Conjunction:{notA:be},Preposition:{notA:be},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"]}},Ae={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},we=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:Ae[e]?t[e].color=Ae[e]:t[e].isA.some((function(r){return!!Ae[r]&&(t[e].color=Ae[r],!0)}))})),t},xe=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))},Ge={tag:function(t,e){return t?(_e(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(_e(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},Re={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},Ue=function(t){return t.split(/[ -]/g)},He=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=Ue(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=Je(s)),o=le(s,r.world,r.pool());var a=r.buildFrom(o);a.tagger(),o=a.list}if(!0===n.keepTags){var u=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){u[e]&&t.tagSafe(u[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},Ke=N((function(t,e){var r=function(t,e){var r=le(t,e.world)[0],n=e.buildFrom([r]);return n.tagger(),e.list=n.list,e};e.append=function(t){var e=this;return t?this.found?(this.uncache(),this.list.forEach((function(r){var n=le(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):r(t,this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?this.found?(this.uncache(),this.list.forEach((function(r){var n=le(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):r(t,this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&er(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),nr=N((function(t){var e="",r=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};sr.alphabetical=sr.alpha,sr.wordcount=sr.wordCount;var ar={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},ur={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):ar.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===Or.test(o)){var a=o.replace(Or,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},Fr=function(t){var e=t.termList();return kr(e,t.world),t},Tr=function(t){var r=function(t){i(o,t);var r=u(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),o}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},Nr=/\./,$r=function(t){var r=function(t){i(o,t);var r=u(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===Nr.test(t.post)&&(e+="."),t.set(e)})),this}}]),o}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},Vr=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#WeekDay && @hasComma) #Date").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},Sr=function(t){var r=function(t){i(o,t);var r=u(o);function o(t,n,i){var s;return e(this,o),(s=r.call(this,t,n,i)).contracted=null,s}return n(o,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r1&&void 0!==arguments[1]?arguments[1]:{},n=this.match("(#City && @hasComma) (#Region|#Country)"),i=this.not(n).splitAfter("@hasComma"),o=(i=i.concat(n)).quotations();return o.found&&(i=i.splitOn(o.eq(0))),i=i.match("#Noun+ (of|by)? the? #Noun+?"),!0!==e.keep_anaphora&&(i=(i=(i=(i=i.not("#Pronoun")).not("(there|these)")).not("(#Month|#WeekDay)")).not("(my|our|your|their|her|his)")),i=i.not("(of|for|by|the)$"),"number"==typeof t&&(i=i.get(t)),new r(i.list,this,this.world)},t},Zr=/\(/,Jr=/\)/,Yr=function(t){var r=function(t){i(o,t);var r=u(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"unwrap",value:function(){return this.list.forEach((function(t){var e=t.terms(0);e.pre=e.pre.replace(Zr,"");var r=t.lastTerm();r.post=r.post.replace(Jr,"")})),this}}]),o}(t);return t.prototype.parentheses=function(t){var e=[];return this.list.forEach((function(t){for(var r=t.terms(),n=0;n0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return Fr(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();bn.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new bn(t,this,this.world)},bn.prototype.fromText=function(t){var e=le(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(bn.prototype,gn.misc),Object.assign(bn.prototype,gn.selections),mn(bn);var yn={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(yn).forEach((function(t){return bn.prototype[t]=bn.prototype[yn[t]]}));var An=bn;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=le(t,r),i=new An(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=le(t,n),o=new An(i,null,n);return e&&Fr(o),o},n.extend=function(t){return t(An,r,this,_t,st,Rt),this},n.fromJSON=function(t){var e=fe(t,r);return new An(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.world=function(){return r},n.parseMatch=function(t){return Dt(t)},n.version="13.7.0",n.import=n.load,n}(new qe)})); diff --git a/builds/compromise.js b/builds/compromise.js index c6a428659..1e6ce7ba0 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -1,4 +1,4 @@ -/* compromise 13.6.0 MIT */ +/* compromise 13.7.0 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -558,7 +558,7 @@ exports.hasHyphen = function () { - var hyphen = /(-|–|—)/; + var hyphen = /^(-|–|—)$/; return hyphen.test(this.post) || hyphen.test(this.pre); }; /** a dash separates words - like that */ @@ -3440,7 +3440,7 @@ var fromJSON_1 = fromJSON; - var _version = '13.6.0'; + var _version = '13.7.0'; var _data = { "Comparative": "true¦better", @@ -3451,25 +3451,26 @@ "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,lest,unless", + "Preposition": "true¦'o,-,aLbIcHdGexcept,fFiDmidQnotwithstandiRoBpSqua,sAt6u3vi2w0;/o,hereNith0;!in,oR;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oJ;ans,ince,o that;',f0n2ut;!f;f,n0;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", "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", + "Conjunction": "true¦&,aFbBcuz,how9in caEno8o7p5supposing,t2v1wh0yet;eth9ile;ers4s;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh", + "Abbreviation": "true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Pronoun": "true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s", - "Singular": "true¦0:10;1:13;a0Zb0Nc0Ed07e04fZgUhQiPjel0kitty,lOmKnJoIpEquestion mark,rCs7t4u2womY;nc0Us 2;doll0Gst0I; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst0Z;ep3ri1u2;de0Sff;faOmoO;st0Oze;al0i1o2;om,se;a4i0Ll07r3u2;dMrpoE;erogaXobl0Q;rt,te0K;bjUceHthers;othi1umb0G;a4ee06o2;del,m2nopo0rni1th0E;!my;n,yf0;i0unch;ci1nsect;ead start,o2;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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", + "Singular": "true¦0:14;1:17;a13b0Rc0Id0Be08f03gYhUiTjel0kitty,lRmNnMoLpGquestionFrDs8t5u3w2;ay,om01;nc0Xs 2;doll0Jst0L; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst12;ep3ri1u2;de0Vff;faRmoR;st0Rze;al0i1o2;om,se;! mark;a5i0Nla4r3u2;dOrpoG;erogaZobl0S;te,y0K;rt,te0L;bjVceIthers;othi1umb0H;a4ee07o2;del,m2nopo0rni1th0F;!my;n,yf0;i2unch;ly,ne;ci1nsect;ead start,o2uman right;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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;ailNcientJecretary,oldiGu0;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¦a01bYcQdPeOfiJgIhon,jr,king,lHmCoffic00p7queen,r3s0taoiseach,vice6;e1fc,gt,ir,r,u0;ltRpt,rg;cond liInBrgeaJ;abbi,e0;ar1p9s,v0;!erend; admirX;astOhd,r0vt;esideDi1of0;!essM;me mini4nce0;!ss;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¦0:1F;a1Mb1Ec15d12e0Vf0Pg0Ih0Di09j08knowled1Ll03mVnews,oUpRrMsBt6vi5w1;a3ea06i2oo1;d,l;ldlife,ne;rmth,t0;neg12ol07tae;e4h3oothpaste,r1una;affQou1;ble,sers,t;ermod1Hund0;a,nnis;a9cene05eri0Sh8il7kittl0Snow,o6p4t2u1;g0Vnshi0L;ati1Ge1;am,el;ace19e1;ci0Ned;ap,cc0;k,v0;eep,ingl0K;d08fe13l1nd;m0Wt;a4e2ic1;e,ke0H;c1laxa0Dsearch;ogni0Crea0C;bi0Din;aKe2hys13last6o1ressZ;lit12rk,w0;a0YtrV;bstetr10il,xygen;a6e4ilk,o3u1;mps,s1;ic;nHo0E;a1chan0V;sl03t;chine1il,themat0T; learn09ry;aught0e3i2ogi0Qu1;ck,g0G;ce,ghtn06ngui0OteratL;a1isK;th0;ewel8usti0J;ce,mp1nformaStself;a1ortan0H;ti1;en0F;a4isto3o1;ck1mework,n1spitali09;ey;ry;ir,libut,ppiB;ene4o2r1um,ymna0B;aAound;l1ssip;d,f; 1t08;editOpo1;ol;i5lour,o2urnit1;ure;od,rgive1uri0wl;ne1;ss;c7sh;conomZduca6lectr5n3quip4thZvery1;body,o1thF;ne;joy1tertain1;ment;iciNonU;tiG;ar2iabet1raugh2;es;ts;a8elcius,h4ivPl3o1urrency;al,ld w1nfusiBttB;ar;assMoth3;aos,e1;e2w1;ing;se;r5sh;a5eef,i2lood,owls,read,utt0;er;lliar2s1;on;ds;g1ss;ga1;ge;c6dvi5ero3ir2mnes1rt,thlet8;ty;craft;b5d1naut5;ynam4;ce;id,ou1;st1;ics", - "Infinitive": "true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Ps7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3ZreseC;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr4;intaEna4rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mBnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;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,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Gm25n22o1Xp1Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Qs7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3Zr0K;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0J;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aMeLiIoHuG;ltip3Crd0;nit11ve;nHrr10sreprG;eseC;d,g6us;asu2lt,n0Mr4;intaEna4rHtG;ch,t0;ch,kGry;et;aKeJiIoGu1A;aGck,ok,ve;d,n;ft,ke,mBnk,st2Vve;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFt,x;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on", "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;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;a1ern1Mi0;en2Hlni2Z;lenc2Uncouv0Gr2Gughn;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¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "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:FX;1:G1;2:FQ;3:FC;4:FB;5:FR;6:EQ;7:EO;8:GE;9:EY;A:GA;B:E4;C:G7;D:FN;E:FK;F:EF;aE1bD3cB7dAHe9Ff90g8Gh82i7Rj6Tk5Zl4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7DeHol1TvG;et7onB8;le0sen3;an9endBMhiB3iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9WenG0;kCYtor3;da,l8Unus,rG;a,nGoniD1;a,iDB;leGnesEB;nDKrG;i1y;aSePhNiMoJrGu6y4;acG2iGu0E;c3na,sG;h9Lta;nHrG;a,i;i9Iya;a5HffaCFna,s5;al3eGomasi0;a,l8Fo6Wres1;g7To6VrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs5tGwa0;ia0um;a,yn;iGya;a,ka,s5;a4e4iGmC9ra;!ka;a,t5;at5it5;a05carlet2Ye04hUiSkye,oQtMuHyG;bFIlvi1;e,sHzG;an2Tet7ie,y;anGi8;!a,e,nG;aEe;aIeG;fGl3DphG;an2;cF7r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh74;dy;aKeGirlBKo0y6;ba,e0i6lIrG;iGrBOyl;!d6Z;ia,lBU;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Xre0;bMdLi9lKmIndHrGs5vannaE;aEi0;ra,y;aGi4;nt5ra;lBMome;e,ie;in1ri0;a02eXhViToHuG;by,thBJ;bQcPlOnNsHwe0xG;an93ie,y;aHeGie,lC;ann8ll1marBEtB;!lGnn1;iGyn;e,nG;a,d7V;da,i,na;an9;hel52io;bin,erByn;a,cGkki,na,ta;helBYki;ea,iannDWoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cAQkaE;chGe,i0mo0n5DquCCvDy0;aCBelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAV;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4No6rvaBAtHulG;a,et7in1;ricGsy,tA7;a,e,ia;ctav3deHfAVlGphAV;a,ga,iv3;l3t7;aQePiJoGy6;eHrG;aEeDma;ll1mi;aKcIkGla,na,s5ta;iGki;!ta;hoB1k8AolG;a,eBG;!mh;l7Sna,risF;dIi5OnHo22taG;li1s5;cy,et7;eAiCN;a01ckenz2eViLoIrignayani,uriBFyG;a,rG;a,na,tAR;i4ll9WnG;a,iG;ca,ka,qB3;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9IlG;iGy;cent,e;red;!e6;ae6el3F;ag4JgKi,lHrG;edi60isFyl;an2iGliF;nGsAL;a,da;!an,han;b08c9Dd06e,g04i03l01nZrKtJuHv6Rx86yGz2;a,bell,ra;de,rG;a,eD;h74il9t2;a,cSgOiJjor2l6Hn2s5tIyG;!aGbe5PjaAlou;m,n9R;a,ha,i0;!aIbAKeHja,lCna,sGt52;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Jueri7;!t;!ry;et3HiB;elGi60y;a,l1;dGon,ue6;akranBy;iGlo35;a,ka,n9;a,re,s2;daGg2;!l2V;alCd2elGge,isBFon0;eiAin1yn;el,le;a0He07iWoQuKyG;d3la,nG;!a,dHe9RnGsAP;!a,e9Q;a,sAN;aB0cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a29e,l24n9;is,l1FrHtt2uG;el6is1;aIeHi8na,rG;a6Yi8;lei,n1tB;!in1;aPbb82d3lLnIsHv3zG;!a,be4Jet7z2;a,et7;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Fe;!n4E;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes5na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as5is5oG;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,stD;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s5;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlCri0y;ar5Cer5Cie,leDr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelCd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lCph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et7iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lCquelG;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;aEnaE;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolC;acHetGisel9;a,chD;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et7i5T;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;d0FileDkBl00mUn4ArRsMtLuKvG;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,eDis,la,othGthy;ea,y;an09naEonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraEra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et7iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleD;en,t7;aIeoHotG;il4B;!pat4;ir8rIudG;et7iG;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,eGot7;n1t7;!sa;d4el1PtG;al,el1O;cHlG;es7i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleDrCy;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;nwCok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaEvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt5yl;adHiG;ce;et7iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes5;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t7;an19elG;le;aYdWeUgQiOja,nHtoGya;inet7n3;!aJeHiGmI;e,ka;!mGt7;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t7;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;c3is5jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naE;c5da,leDmLnslKsG;haElG;inGyW;g,n;!h;ey;ee;en;at5g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lCsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", @@ -3482,17 +3483,16 @@ "MaleName": "true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:BZ;6:AT;7:9V;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,nde7sB;!l6t1;de,lCrr5yB;l1ne;lBt3;a93y;aEiBladimir;cCha0kt5CnceBrg9Bva0;!nt;ente,t5A;lentin49n8Y;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,l6;lom1nA3uB;leyma8ta;dBl7Jm1;!n6;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;e4Qg3n6olfo,ri68;co,ky;bAe9U;cBl6;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub5x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw5;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;!e7;a78ik;house,o03t1;e,olB;aj;ah,hBk6;a4eB;al,l;hClv2rB;le,ri7v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe7;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha7tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe7;!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;a7ri4N;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;cHd5kGmFrDsCvi3yB;!d5s1;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;a43d5;an,s0;lEo4FrDuBv6;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;ffr6rge;bri4l5rBv2;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;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym5zra;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;a8dl6nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e7ie,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,iDne7rByl;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,lCro7y;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;!foBl6y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n6rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid5ja0ElZmXnPputsiOrFsaEuCveBya0ziz;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,beOd5eIfFi,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", + "PhrasalVerb": "true¦0:7B;1:6Z;2:7N;3:7D;4:6S;5:7Q;6:7F;7:6Y;8:6L;9:6M;A:5P;B:7G;C:7A;D:79;a7Rb6Bc5Kd5Ge5Ef4Cg3Uh3Eiron0j3Ak35l2Pm2Fn2Do2Bp1Tquiet70r1Hs0BtRuPvacuum 1wHyammerDzE;eroAip FonE;e0k0;by,up;aKeHhGiForErit59;d 1k2X;mp0n2Ppe0r8s8;eel Cip 7V;aFiE;gh 08rd0;n Cr 3J;it 5Sk8lk6rm 63sh 7Et6Hv4V;rgeDsE;e 9herA;aTeRhPiLoJrGuEype 60;ckArn E;d2in,o3Mup;aFiEot0y 2D;ckle6Ip 7K;ck6Hde Y;ne6Gp Es4I;d2o6Uup;ck GdFe Egh62me0p o0Gre0;aw3ba4d2in,up;e 5Ty 1;by,oB;ink Erow 64;ba4ov7up;aEe 4Nll4U;m 1r X;ckDke Flk E;ov7u4V;aEba4d2in,o36up;ba4ft7p50w3;a0Ic0He0Bh07i05l01m00nZoYpTquare StKuIwE;earGiE;ngFtch E;aw3ba4o6Y; by;ck Eit 1m 1ss0;in,up;aJe0UiIoGrEuc39;aigh1RiE;ke 67n33;p Erm1U;by,in,oB;n34r 1tc3N;c33mp0nd Er6Qve6y 1;ba4d2up;d2oBup;ar30eHiGlFrEurD;ingDuc8;a38it 3Z;l10n 1;e5Jll0;be4Hrt0;ap 4Jow C;ash 56oke0;eep FiEow 9;c3Qp 1;in,oE;ff,v7;gn 4Ong32t Ez8;d2o5up;aGoEu4L;ot Eut0w 65;aw3ba4f3BoB;c2JdeAk50ve6;e Ill0nd HtE; Etl49;d2in,o5upE;!on;aw3ba4d2in,o22up;o5to;al4Tout0rap4T;il6v8;aOeLiKoHuE;b 4Mle0n Estl8;aEba4d2in5Bo3Mt34u3K;c21w3;ot FuE;g2Ond6;a21f2Vo5;ng 4Wp6;aEel6inAnt0;c56d E;o2Xu0F;c1Zt0;aReQiPlNoLrIsyc2DuE;ll Gt E;aEba4d2in,o1Kt39up;p3Ew3;ap3Dd2in,o5t37up;attleDess FiHoE;p 1;ah1Kon;iEp 5Ar3Sur4Cwer 5A;nt0;ay46uE;gAmp 9;ck 5Ag0leDn 9p43;el 4EncilA;c3Wir 2Ln0ss GtFy E;ba4oB; d2c21;aw3ba4o15;pEw3R;e3Qt C;arrow40erd0oE;d6te3Z;aLeJiIoGuE;ddl8lE;l 3D;c19p 1uth6ve E;al3Hd2in,o5up;ss0x 1;asur8lt 9ss E;a1Cup;ke En 9r35s1Nx0;do,o44up;aRePiKoEuck0;aIc3Dg HoEse0;k Ese3B;aft7ba4d2forw2Fin42ov7uE;nd7p;in,o0L;d 9;e HghtGnFsEv1U;ten 4I;e 1k 1; 1e33;ar48d2;av1It 33velE; o3Q;c8p 1sh EtchDugh6y1W;in3Qo5;eFick6nock E;d2o3M;eEyA;l 2Mp E;aw3ba4d2fTin,o06to,up;aGoFuE;ic8mpA;ke2Xt31;c36zz 1;aQeLiIoFuE;nker2Yrry 1s0V;lEneArse2T;d Ee 1;ba4d2fast,o00up;de Ft E;ba4on,up;aw3o5;aElp0;d Gl 27r Et 1;fEof;rom;in,oSu1D;c00m 1nEve it,z22;d Eg 2CkerG;d2in,o5;aSeMive Kloss 20oGrFunE; f0N;in3Eow 28; Eof 0V;aFb1Ait,oEr3At0Pu15;ff,n,v7;bo5ft7hKw3;aw3ba4d2in,oEup,w3;ff,n,ut;a1Aek0t E;aFb14d2oEr34up;ff,n,ut,v7;cFhEl1Ur32t,w3;ead;ross;d aFnE;g 1;bo5;a09e02iSlOoKrGuE;cEel 1;k 1;eFighten EownDy 1;aw3oB;eEshe1L; 1z8;lGol E;aEwi1E;bo5r2N;d 9low 1;aFeEip0;sh0;g 9ke0mErE;e 2P;gMlKnIrGsFzzE;le0;h 2M;e Em 1;aw3ba4up;d0isE;h 1;e El 16;aw3fJ;ht ba4ure0;eJnFsE;s 1;cGd E;fEoB;or;e C;dSl 1;cIll Erm0t0T;ap01bGd2in,oFtE;hrough;ff,ut,v7;a4ehi1X;e F;at0dge0nd Ey8;oBup;oGrE;ess 9op E;aw3bQin,o1A; 0Bubl8;aUhRlean 9oEross Cut 0X;me HoFuntE; o1Q;k 1l E;d2oB;aKbJforHin,oGtFuE;nd7;ogeth7;ut,v7;th,wE;ard;a4y;pEr1Cw3;art;eEipA;ck CeE;r 1;lKncel0rHsGtch FveA; in;o19up;h Ct6;ry FvE;e Y;aw3o15;l Em05;aEba4d2o13up;r0Yw3;a0Ke0Bl04oVrKuE;bblHcklWil02lGndlWrn 08st FtEy 13zz6;t C;in,o5up;k 9;e E;ov7;anNeaLiEush6;ghIng E;aFba4d2forEin,o5up;th;bo5lEr0Mw3;ong;teE;n 1;k E;d2in,o5up;ch0;arLgKil 9n8oHssGttlFunce Ex C;aw3ba4;e 9; ar0C;k Ct 1;e 1;d2up; d2;d 1;aJeed0oEurt0;cGw E;aw3ba4d2o5up;ck;k E;in,oL;ck0nk0st6; oKaHef 1nd E;d2ov7up;er;up;r0t E;d2in,oEup;ff,ut;ff,nE;to;ck Kil0nGrgFsE;h C;ainDe C;g CkD; on;in,o5; o5;aw3d2o5up;ay;cNdJsk Guction6; oB;ff;arEo5;ouE;nd;d E;d2oEup;ff,n;own;t E;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ay,ight,ust;an,o0;uld", - "Adjective": "true¦0:7N;1:82;2:81;3:88;4:7U;5:5R;6:57;7:4N;8:4M;9:7Z;A:6G;B:7L;a6Vb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uNvKwCyear5;arp0eGholeFiEoC;man5oCu6O;d6Qzy;despr7Ks5S;!sa7;eDlCste2A;co1Nl o4W;!k5;aDiCola4M;b88ce versa,ol5H;ca3gabo6Fnilla;ltUnHpDrb5Msu4tterC;!mo7F; f3Ab1SpEsCti1M;ca7etCide dKtairs;!ti2;er,i3U;aMbeco75convin2AdeJeIfair,ivers4knHprecedWrFsDwC;iel3Oritt6A;i1YuC;pervis0spec3Z;eCu5;cognIgul6Tl6T;own;ndi2v64xpect0;cid0rC;!grou5ZsC;iz0tood;b7pp0Essu6UuthorC;iz0;i27ra;aHeFhEi6AoDrC;i1oubl0us3N;geth6p,rp6Vuc67;ough4Xril34;en60l33mpCrr2Y;o6Ati2;boo,lCn;ent0;aXcWeUhTiRmug,nobbi3MoPpOqueami3MtGuCymb6H;bEi gener5EpCrpri6D;erCre0O;! dup6b,i2D;du0seq53;anda77eHiGrCunni2y3G;aightDiC;ki2p0; fCfC;or5K;ll,r5S;aCreotyp0;dfa6Cmi2;a56ec2Hir1Ilend6Cot on; call0le,mb6phist1YrCu0Wvi49;d6Ary;gnifica3nC;ce52g7;am2Se6ocki2ut;cCda1em5lfi33ni1Xpa6Jre8;o1Fr43;at5Gient29reec5G;cr0me;aKeFiDoC;bu60tt51uRy4;ghtCv4;!-2CfA;ar,bel,condi1du6Dfres5AlFpublic43sDtard0vC;ea27;is4DoC;lu1na3;aRe1Duc4B;b5TciCllyi2;al,st;aPeMicayu8lac5Ropuli5QrDuC;bl5Jmp0n51;eHiEoC;!b08fuBmiCp6;ne3si2;mDor,sCva1;ti8;a53e;ciBmC;a0FiC;er,um;ac21rCti1;fe9ma2YpleCv39;xi2;rCst;allelEtC;-tiCi4;me;!ed;bMffKkJld fashion0nIpHrg1Fth6utGvC;al,erC;!all,niDt,wC;eiCrouC;ght;do0Uer,g2Rsi4B;en,posi1; boa5Og2Pli8;!ay; gua5MbCli8;eat;eEsC;cCer0Fole1;e8u3P;d2Yse;aKeJiIoCua4X;nGrDtC;ab7;thC;!eC;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1B;aJeHiEoCultip7;bi7derCl0Wnth5ot,st;a1n;nCx0;dblo0SiaCor;tu38;ande3Qdi4NnaCre;ci2;cCgenta,in,j02keshift,le,mmoth,ny,sculi8;ab34ho;aLeGiDoCu16;uti15vi2;mDteraC;l,te;it0;ftFgCth4;al,eDitiC;ma1;nda3K;!-0D;ngu3Zst,tt6;ap1Yind5no0B;agg0uC;niNstifi0veni7;de4gno4Klleg4mRnFpso 21rC;a1rC;eleCita0K;va3; LaKbr0corJdHfluenRiRnGsFtDviC;go0Gti2;a9enBoxC;ic3B;a8i2Vul0E;a1er,oce3;iDoC;or;re9;deq3Qppr33;fCsitu,vitro;ro3;mGpC;arEerfe9oCrop6;li1rtC;a3ed;ti4;eCi0T;d2VnB;aJeGiEoCumdr3I;ne36ok0rrCs09ur5;if2Z;ghfalut1RspC;an2X;aDlC;liZpfA;li2;lFnErC;d05roC;wi2;dy;f,low0;ainfAener2Oiga24lIoHraEuC;ilCng ho;ty;cDtC;efAis;efA;ne,od;ea2Iob4;aUeOinNlLoGrC;a1VeEoz1MustC;raC;ti2;e2Gq11tfA;oErC; keeps,eCm6tuna1;g04ign;liC;sh;aCue3;g31tte1P;al,i1;dGmDrC;ti7;a7ini8;ne;le; up;bl0i3lBr Dux,voC;ri1uri1;oCreac1E;ff;aMfficie3lLmInGre9there4veFxC;a9cess,pe1QtraDuC;be2Nl0F;!va1E;n,ryday; CcouraFti0P;rou1sui1;erDiC;ne3;gi2;abo23dNe17i1;g6sC;t,ygC;oi2;er;aSeKiEoCrea14ue;mina3ne,ubC;le,tfA;dact1Bfficu1OsDvC;erB;creEeas0gruntl0hone1FordDtC;a3ressN;er5;et; IadpHfGgene1PliErang0spe1PtDvoC;ut;ail0ermin0;be1Mca1ghC;tfA;ia3;an;facto;i5magCngeroVs0G;ed,i2;ly;ertaNhief,ivil,oErC;aCowd0u0G;mp0vZz0;loJmHnDrrCve0P;e9u1I;cre1fu0LgrEsDtC;empo0Dra0E;ta3;ue3;mer08pleC;te,x;ni4ss4;in;aNeJizarIlGoDrC;and new,isk,okN;gDna fiUttom,urgeoC;is;us;ank,indC;!i2;re;autifAhiDlov0nCst,yoD;eUt;nd;ul;ckDnkru0XrrC;en;!wards; priori,b0Nc0Kd0Afra09g05h04lZmXntiquWppTrNsJttracti07utheIvFwC;aDkC;wa0U;ke,re;ant garDerC;age;de;ntV;leep,piEsuEtonC;isC;hi2;ri2;ab,bitFroEtiC;fiC;ci4;ga3;raC;ry;are3etiOrC;oprC;ia1;at0;aKuC;si2;arFcohDeCiJl,oof;rt;olC;ic;mi2;ead;ainEgressiDoniC;zi2;ve;st;id; JeHuGvC;aDerB;se;nc0;ed;lt;pt,qC;ua1;hoc,infinitC;um;cuDtu4u1;al;ra1;erMlLoJruIsDuC;nda3;e3oDtra9;ct;lu1rbi2;ng;te;pt;aCve;rd;aze,e;ra3;nt", - "Comparable": "true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;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;e4i3;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", + "Adjective": "true¦0:7P;1:84;2:83;3:8A;4:7W;5:5S;6:58;7:4O;8:4N;9:81;A:6I;a6Wb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uMvJwByear5;arp0eFholeEiDoB;man5oBu6P;d6Rzy;despr7Ls5S;!sa7;eClBste2A;co1Nl o4W;!k5;aCiBola4M;b89ce versa,ol5H;ca3gabo6Gnilla;ltUnHpCrb5Msu4tterB;!mo7G; Eb1SpDsBti1M;ca7etBide dKtairs;!ti2;er,i3U;f36to da1;aLbeco75convin29deIeHfair,ivers4knGprecedVrEsCwB;iel3Nritt6A;i1XuB;pervis0spec3Y;eBu5;cognHgul6Tl6T;own;ndi2v64xpect0;cid0rB;!grou5ZsB;iz0tood;b7pp0Dssu6UuthorB;iz0;i26ra;aGeEhDi6AoCrB;i1oubl0us3M;geth6p,rp6Vuc67;ough4Wril33;en60l32mpBrr2X;o6Ati2;boo,lBn;ent0;aWcVeThSiQmug,nobbi3LoOpNqueami3LtFuBymb6H;bDi gener5DpBrpri6D;erBre0N;! dup6b,i2C;du0seq52;anda77eGiFrBunni2y3F;aightCiB;ki2p0; fBfB;or5K;ll,r5S;aBreotyp0;dfa6Cmi2;a55ec2Gir1Hlend6Cot on; call0le,mb6phist1XrBu0Vvi48;d6Ary;gnifica3nB;ce51g7;am2Re6ocki2ut;cBda1em5lfi32ni1Wpa6Jre8;o1Er42;at5Gient28reec5G;cr0me;aJeEiCoB;bu60tt51uQy4;ghtBv4;!-2BfA;ar,bel,condi1du6Dfres5AlEpublic42sCtard0vB;ea26;is4CoB;lu1na3;aQe1Cuc4A;b5TciBllyi2;al,st;aOeLicayu8lac5Ropuli5QrCuB;bl5Jmp0n51;eGiDoB;!b07fu5RmiBp6;ne3si2;mCor,sBva1;ti8;a53e;ci5MmB;a0EiB;er,um;ac20rBti1;fe9ma2XpleBv38;xi2;rBst;allelDtB;-tiBi4;me;!ed;bLffJkIld fashion0nHpGrg1Eth6utFvB;al,erB;!all,niCt,wB;eiBrouB;ght;do0Ter,g2Qsi4B;en,posi1; boa5Og2Oli8;!ay; gua5MbBli8;eat;eDsB;cBer0Eole1;e8u3O;d2Xse;aJeIiHoBua4X;nFrCtB;ab7;thB;!eB;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1A;aIeGiDoBultip7;bi7derBl0Vnth5ot,st;a1n;nBx0;dblo0RiaBor;tu37;ande3Qdi4NnaBre;ci2;cBgenta,in,j01keshift,le,mmoth,ny,sculi8;ab33ho;aKeFiCoBu15;uti14vi2;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda3K;!-0C;ngu3Zst,tt6;ap1Xind5no0A;agg0uB;niMstifi0veni7;de4gno4Klleg4mQnEpso 20rB;a1rB;eleBita0J;va3; KaJbr0corIdGfluenQiQnFsEtCviB;go0Fti2;a9en3SoxB;ic3B;a8i2Vul0D;a1er,oce3;iCoB;or;re9;deq3Qppr33;fBsitu,vitro;ro3;mFpB;arDerfe9oBrop6;li1rtB;a3ed;ti4;eBi0S;d2Vn3C;aIeFiDoBumdr3I;ne36ok0rrBs08ur5;if2Z;ghfalut1QspB;an2X;aClB;liYpfA;li2;lEnDrB;d04roB;wi2;dy;f,low0;ainfAener2Oiga24lHoGraDuB;ilBng ho;ty;cCtB;efAis;efA;ne,od;ea2Iob4;aTeNinMlKoFrB;a1VeDoz1MustB;raB;ti2;e2Gq10tfA;oDrB; keeps,eBm6tuna1;g03ign;liB;sh;aBue3;g31tte1P;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i3l27r Cux,voB;ri1uri1;oBreac1E;ff;aLfficie3lKmHnFre9there4veExB;a9cess,pe1QtraCuB;be2Nl0E;!va1E;n,ryday; BcouraEti0O;rou1sui1;erCiB;ne3;gi2;abo23dMe17i1;g6sB;t,ygB;oi2;er;aReJiDoBrea14ue;mina3ne,ubB;le,tfA;dact1Bfficu1OsCvB;er1K;creDeas0gruntl0hone1FordCtB;a3ressM;er5;et; HadpGfFgene1PliDrang0spe1PtCvoB;ut;ail0ermin0;be1Mca1ghB;tfA;ia3;an;facto;i5magBngeroUs0G;ed,i2;ly;ertaMhief,ivil,oDrB;aBowd0u0G;mp0vZz0;loImGnCrrBve0P;e9u1I;cre1fu0LgrDsCtB;empo0Dra0E;ta3;ue3;mer08pleB;te,x;ni4ss4;in;aNeIizarHlFoCrB;and new,isk,okN;gCna fiUttom,urgeoB;is;us;ank,indB;!i2;re;autifAhiDloCnBst,yoD;eUt;v0w;nd;ul;ckCnkru0WrrB;en;!wards; priori,b0Mc0Jd09fra08g04h03lYmWntiquVppSrMsIttracti06utheHvEwB;aCkB;wa0T;ke,re;ant garCerB;age;de;ntU;leep,piDsuDtonB;isB;hi2;ri2;ab,bitEroDtiB;fiB;ci4;ga3;raB;ry;are3etiNrB;oprB;ia1;at0;aJuB;si2;arEcohCeBiIl,oof;rt;olB;ic;mi2;ead;ainDgressiConiB;zi2;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda3;e3oCtra9;ct;lu1rbi2;ng;te;pt;aBve;rd;aze,e;ra3;nt", + "Comparable": "true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;my;erce8n6rm;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;e4i3;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¦bOeJfDhundredNmOninAone,qu8s6t0zeroN;enMh3rNw0;e0o;l0ntD;fHve;ir0ousandKree;d,t6;e0ix8;cond,pt1ven7xt1;adr0int0;illionD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en0;!th;illion0;!s,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¦bHeEf8hundred,mHnineAone,qu6s4t0zero;en,h2rGw0;e0o;lve,n8;irt9ousandEree;e0ix5;pt1ven4xt1;adr0int0;illion;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion0;!s", "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;h1iny bit,o0wiO;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" + "Adverb": "true¦a08by 06d02eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,well,ye0;p,s; to,wards5;h1iny bit,o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hYtimes,w09;a1e0;alT;ndomSthN;ar excellDer0oint blank; Nhaps;f3n0;ce0ly;! 0;ag02moW; courIten;ewKo0; longEt 0;onIwithstanding;aybe,eanwhiAore0;!ovB;! aboU;deed,steV;en0;ce;or2u0;lArther0;!moJ; 0ev3;examp0good,suH;le;n1v0;er; mas0ough;se;e0irect1; 1finite0;ly;ju8trop;far,n0;ow; DbroCd nauseam,gBl6ny3part,s2t 0w4;be6l0mo6wor6;arge,ea5; soon,ide;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori", + "Determiner": "true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er" }; var entity = ['Person', 'Place', 'Organization']; @@ -3617,7 +3617,7 @@ // walks PresentTense: { isA: 'Verb', - notA: ['PastTense', 'Copula', 'FutureTense'] + notA: ['PastTense', 'FutureTense'] }, // neutral form - 'walk' Infinitive: { @@ -3657,7 +3657,7 @@ }, // shown Participle: { - isA: 'Verb' + isA: 'PastTense' }, // show up PhrasalVerb: { @@ -4229,7 +4229,11 @@ forms = Object.assign(forms, verbs[inf]); //add the others Object.keys(forms).forEach(function (tag) { - world.words[forms[tag]] = world.words[forms[tag]] || tag; + world.words[forms[tag]] = world.words[forms[tag]] || tag; // lexicon should prefer other tags, over participle + + if (world.words[forms[tag]] === 'Participle') { + world.words[forms[tag]] = tag; + } }); }; @@ -4253,7 +4257,15 @@ q1: 'Date', q2: 'Date', q3: 'Date', - q4: 'Date' + q4: 'Date', + her: ['Possessive', 'Pronoun'], + his: ['Possessive', 'Pronoun'], + their: ['Possessive', 'Pronoun'], + themselves: ['Possessive', 'Pronoun'], + your: ['Possessive', 'Pronoun'], + our: ['Possessive', 'Pronoun'], + my: ['Possessive', 'Pronoun'], + its: ['Possessive', 'Pronoun'] }; //nouns with irregular plural/singular forms @@ -4351,6 +4363,7 @@ pluperf: 'Pluperfect', a: 'Actor' }; // '_' in conjugations is the infinitive form + // (order matters, to the lexicon) var conjugations = { act: { @@ -4424,8 +4437,8 @@ pst: 'bit' }, bleed: { - prt: 'bled', - pst: 'bled' + pst: 'bled', + prt: 'bled' }, blow: { prt: '_n', @@ -4444,8 +4457,8 @@ pst: 'bred' }, bring: { - prt: 'brought', - pst: 'brought' + pst: 'brought', + prt: 'brought' }, broadcast: { pst: '_' @@ -4454,8 +4467,8 @@ pst: '_ed' }, build: { - prt: 'built', - pst: 'built' + pst: 'built', + prt: 'built' }, burn: { prt: '_ed' @@ -4464,8 +4477,8 @@ prt: '_' }, buy: { - prt: 'bought', - pst: 'bought' + pst: 'bought', + prt: 'bought' }, can: { a: '', @@ -4507,8 +4520,8 @@ prt: '_' }, deal: { - prt: '_t', - pst: '_t' + pst: '_t', + prt: '_t' }, develop: { a: '_er', @@ -4521,8 +4534,8 @@ }, dig: { g: '_ging', - prt: 'dug', - pst: 'dug' + pst: 'dug', + prt: 'dug' }, dive: { prt: '_d' @@ -4577,8 +4590,8 @@ pst: 'felt' }, fight: { - prt: 'fought', - pst: 'fought' + pst: 'fought', + prt: 'fought' }, find: { pst: 'found' @@ -4634,18 +4647,18 @@ prt: '_n' }, hang: { - prt: 'hung', - pst: 'hung' + pst: 'hung', + prt: 'hung' }, have: { g: 'having', - prt: 'had', pst: 'had', + prt: 'had', pres: 'has' }, hear: { - prt: '_d', - pst: '_d' + pst: '_d', + prt: '_d' }, hide: { prt: 'hidden', @@ -4655,12 +4668,12 @@ prt: '_' }, hold: { - prt: 'held', - pst: 'held' + pst: 'held', + prt: 'held' }, hurt: { - prt: '_', - pst: '_' + pst: '_', + prt: '_' }, ice: { g: 'icing', @@ -4686,19 +4699,19 @@ prt: '_n' }, lay: { - prt: 'laid', - pst: 'laid' + pst: 'laid', + prt: 'laid' }, lead: { - prt: 'led', - pst: 'led' + pst: 'led', + prt: 'led' }, leap: { prt: '_t' }, leave: { - prt: 'left', - pst: 'left' + pst: 'left', + prt: 'left' }, lend: { prt: 'lent' @@ -4708,8 +4721,8 @@ pst: 'lay' }, light: { - prt: 'lit', - pst: 'lit' + pst: 'lit', + prt: 'lit' }, log: { g: '_ging', @@ -4723,18 +4736,18 @@ pst: 'lost' }, make: { - prt: 'made', - pst: 'made' + pst: 'made', + prt: 'made' }, mean: { - prt: '_t', - pst: '_t' + pst: '_t', + prt: '_t' }, meet: { a: '_er', g: '_ing', - prt: 'met', - pst: 'met' + pst: 'met', + prt: 'met' }, miss: { pres: '_' @@ -4743,8 +4756,8 @@ g: 'naming' }, pay: { - prt: 'paid', - pst: 'paid' + pst: 'paid', + prt: 'paid' }, prove: { prt: '_n' @@ -4759,15 +4772,15 @@ prt: '_' }, read: { - prt: '_', - pst: '_' + pst: '_', + prt: '_' }, ride: { prt: 'ridden' }, ring: { - prt: 'rung', - pst: 'rang' + pst: 'rang', + prt: 'rung' }, rise: { fut: 'will have _n', @@ -4786,11 +4799,12 @@ pst: 'ran' }, say: { - prt: 'said', pst: 'said', + prt: 'said', pres: '_s' }, seat: { + pst: 'sat', prt: 'sat' }, see: { @@ -4802,8 +4816,8 @@ prt: 'sought' }, sell: { - prt: 'sold', - pst: 'sold' + pst: 'sold', + prt: 'sold' }, send: { prt: 'sent' @@ -4826,12 +4840,12 @@ pres: '_s' }, shine: { - prt: 'shone', - pst: 'shone' + pst: 'shone', + prt: 'shone' }, shoot: { - prt: 'shot', - pst: 'shot' + pst: 'shot', + prt: 'shot' }, show: { pst: '_ed' @@ -4860,8 +4874,8 @@ prt: 'slept' }, slide: { - prt: 'slid', - pst: 'slid' + pst: 'slid', + prt: 'slid' }, smash: { pres: '_es' @@ -4888,8 +4902,8 @@ }, spin: { g: '_ning', - prt: 'spun', - pst: 'spun' + pst: 'spun', + prt: 'spun' }, spit: { prt: 'spat' @@ -4917,8 +4931,8 @@ pst: 'stung' }, stink: { - prt: 'stunk', - pst: 'stunk' + pst: 'stunk', + prt: 'stunk' }, stream: { a: '_er' @@ -10274,7 +10288,7 @@ var miscCorrection = function miscCorrection(doc) { //exactly like var m = hasWord(doc, 'like'); - m.match('#Adverb like').notIf('(really|generally|typically|usually|sometimes|often) [like]').tag('Adverb', 'adverb-like'); //the orange. + m.match('#Adverb like').notIf('(really|generally|typically|usually|sometimes|often|just) [like]').tag('Adverb', 'adverb-like'); //the orange. m = hasTag(doc, 'Adjective'); m.match('#Determiner #Adjective$').notIf('(#Comparative|#Superlative)').terms(1).tag('Noun', 'the-adj-1'); // Firstname x (dangerous) @@ -10283,7 +10297,7 @@ m.match('#FirstName (#Noun|@titleCase)').ifNo('^#Possessive').ifNo('(#Pronoun|#Plural)').ifNo('@hasComma .').lastTerm().tag('#LastName', 'firstname-noun'); //three trains / one train m = hasTag(doc, 'Value'); - m = m.match('#Value #PresentTense'); + m = m.match('#Value #PresentTense').ifNo('#Copula'); if (m.found) { if (m.has('(one|1)') === true) { @@ -10299,7 +10313,7 @@ m = hasTag(doc, 'Gerund'); m.match("(be|been) (#Adverb|not)+? #Gerund").not('#Verb$').tag('Auxiliary', 'be-walking'); // directive verb - 'use reverse' - doc.match('(try|use|attempt|build|make) #Verb').ifNo('(@hasComma|#Negative|#Copula|will|be)').lastTerm().tag('#Noun', 'do-verb'); //possessives + doc.match('(try|use|attempt|build|make) #Verb').ifNo('(@hasComma|#Negative|#PhrasalVerb|#Copula|will|be)').lastTerm().tag('#Noun', 'do-verb'); //possessives //'her match' vs 'let her match' m = hasTag(doc, 'Possessive'); @@ -10339,7 +10353,7 @@ reason: 'u r' }, //sometimes adverbs - 'pretty good','well above' { - match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)', + match: '#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)', tag: '#Copula #Adverb #Adjective', reason: 'sometimes-adverb' }, //i better .. @@ -10388,12 +10402,8 @@ tag: 'Determiner', reason: 'captain-who' }, //that car goes + // { match: 'that #Noun [#PresentTense]', group: 0, tag: 'Determiner', reason: 'that-determiner' }, { - match: 'that #Noun [#Verb]', - group: 0, - tag: 'Determiner', - reason: 'that-determiner' - }, { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' @@ -10411,7 +10421,7 @@ tag: 'Preposition', reason: 'which-copula' }, { - match: 'just [like]', + match: '#Copula just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' @@ -10738,6 +10748,12 @@ group: 0, tag: 'Adjective', reason: 'baked-onions' + }, // well made + { + match: 'well [#PastTense]', + group: 0, + tag: 'Adjective', + reason: 'well-made' }, // is f*ed up { match: '#Copula [fucked up?]', @@ -10817,7 +10833,7 @@ reason: 'did-a-value' }, //'the can' { - match: '#Determiner [(can|will|may)]', + match: 'the [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' @@ -10843,12 +10859,92 @@ group: 0, tag: 'Noun', reason: 'all-presentTense' - }, //big dreams, critical thinking + }, //the above is clear + { + match: '#Determiner [#Adjective] #Copula', + group: 0, + tag: 'Noun', + reason: 'the-adj-is' + }, //real evil is + { + match: '#Adjective [#Adjective] #Copula', + group: 0, + tag: 'Noun', + reason: 'adj-adj-is' + }, // PresentTense/Noun ambiguities + // big dreams, critical thinking + // have big dreams { - match: '(#Adjective && !all) [#PresentTense]', + match: '(had|have|#PastTense) #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' + }, // excellent answer spencer + { + match: '^#Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'start adj-presentTense' + }, // one big reason + { + match: '#Value #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'one-big-reason' + }, // won widespread support + { + match: '#PastTense #Adjective+ [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'won-wide-support' + }, // many poses + { + match: '(many|few|several|couple) [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'many-poses' + }, // very big dreams + { + match: '#Adverb #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'very-big-dream' + }, // good wait staff + { + match: '#Adjective [#Infinitive] #Noun', + group: 0, + tag: 'Noun', + reason: 'good-wait-staff' + }, // adorable little store + { + match: '#Adjective #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'adorable-little-store' + }, // of basic training + { + match: '#Preposition #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'of-basic-training' + }, // early warning + { + match: '#Adjective [#Gerund]', + group: 0, + tag: 'Noun', + reason: 'early-warning' + }, // justifiying higher costs + { + match: '#Gerund #Adverb? #Comparative [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'higher-costs' + }, // do the dance + { + match: '#Infinitive (this|that|the) [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'do-this-dance' }, //his fine { match: '(his|her|its) [#Adjective]', @@ -10924,15 +11020,15 @@ group: 0, tag: 'Noun', reason: 'determiner7' - }, //by a bear. + }, //a nice deal { - match: '#Determiner #Adjective [#Infinitive]$', + match: '#Determiner #Adjective #Adjective? [#Infinitive]', group: 0, tag: 'Noun', - reason: 'a-inf' + reason: 'a-nice-inf' }, //the wait to vote { - match: '(the|this) [#Verb] #Preposition .', + match: 'the [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' @@ -10978,19 +11074,25 @@ group: 0, tag: 'Noun', reason: 'technical-noun' + }, // a blown motor + { + match: '(the|those|these|a|an) [#Participle] #Noun', + group: 0, + tag: 'Adjective', + reason: 'blown-motor' }, // walk the walk { - match: '(the|those|these) #Adjective? [#Infinitive]', + match: '(the|those|these|a|an) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' }, { - match: '(the|those|these) #Adjective? [#PresentTense]', + match: '(the|those|these|a|an) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' }, { - match: '(the|those|these) #Adjective? [#PastTense]', + match: '(the|those|these|a|an) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' @@ -11000,6 +11102,12 @@ group: 0, tag: 'Noun', reason: 'this-gerund' + }, // at some point + { + match: 'at some [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'at-some-inf' }, //air-flow { match: '(#Noun && @hasHyphen) #Verb', @@ -11060,8 +11168,44 @@ group: 0, tag: 'Noun', reason: 'swears-noun' + }, // the staff were + { + match: '(the|these) [#Singular] (were|are)', + group: 0, + tag: 'Plural', + reason: 'singular-were' + }, // running for congress + { + match: '#Gerund #Adjective? for [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'running-for' + }, // running to work + { + match: '#Gerund #Adjective to [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'running-to' + }, // any questions for + { + match: '(many|any|some|several) [#PresentTense] for', + group: 0, + tag: 'Noun', + reason: 'any-verbs-for' + }, // have fun + { + match: "(have|had) [#Adjective] #Preposition .", + group: 0, + tag: 'Noun', + reason: 'have-fun' + }, // co-founder + { + match: "co #Noun", + tag: 'Actor', + reason: 'co-noun' }]; + var adjectives$2 = "(".concat(_ambig.adverbs.adjectives.join('|'), ")"); var _05Adverb = [//still good { match: '[still] #Adjective', @@ -11080,6 +11224,18 @@ group: 0, tag: 'Adverb', reason: 'so-adv' + }, // way hotter + { + match: '[way] #Comparative', + group: 0, + tag: 'Adverb', + reason: 'way-adj' + }, // way too hot + { + match: '[way] #Adverb #Adjective', + group: 0, + tag: 'Adverb', + reason: 'way-too-adj' }, // all singing { match: '[all] #Verb', @@ -11088,7 +11244,7 @@ reason: 'all-verb' }, // sing like an angel { - match: '#Verb [like]', + match: '(#Verb && !#Modal) [like]', group: 0, tag: 'Adverb', reason: 'verb-like' @@ -11097,6 +11253,12 @@ match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' + }, //even held + { + match: '[even] #Verb', + group: 0, + tag: 'Adverb', + reason: 'even-walk' }, //cheering hard - dropped -ly's { match: '#PresentTense [(hard|quick|long|bright|slow)]', @@ -11109,6 +11271,35 @@ group: 0, tag: 'Adverb', reason: 'bit-1' + }, // is well + { + match: '#Copula [#Adverb]$', + group: 0, + tag: 'Adjective', + reason: 'is-well' + }, // a bit cold + { + match: 'a [(little|bit|wee) bit?] #Adjective', + group: 0, + tag: 'Adverb', + reason: 'a-bit-cold' + }, // dark green + { + match: "[".concat(adjectives$2, "] #Adjective"), + group: 0, + tag: 'Adverb', + reason: 'dark-green' + }, // kinda sparkly + { + match: "#Adverb [#Adverb]$", + group: 0, + tag: 'Adjective', + reason: 'kinda-sparkly' + }, { + match: "#Adverb [#Adverb] (and|or|then)", + group: 0, + tag: 'Adjective', + reason: 'kinda-sparkly-and' }]; var _06Value = [// ==== PhoneNumber ==== @@ -11226,7 +11417,32 @@ group: 0, tag: 'Gerund', reason: 'slowly-adj' - }, // ==== Tense ==== + }, // like + { + match: '(#Modal|i|they|we|do) not? [like]', + group: 0, + tag: 'PresentTense', + reason: 'modal-like' + }, // do not simply like + { + match: 'do (simply|just|really|not)+ [(#Adjective|like)]', + group: 0, + tag: 'Verb', + reason: 'do-simply-like' + }, // does mean + { + match: 'does (#Adverb|not)? [#Adjective]', + group: 0, + tag: 'PresentTense', + reason: 'does-mean' + }, // i mean + { + match: 'i (#Adverb|do)? not? [mean]', + group: 0, + tag: 'PresentTense', + reason: 'i-mean' + }, // { match: '!are (i|you|we) (#Adverb|do)? [#Adjective]', group: 0, tag: 'PresentTense', reason: 'i-mean' }, + // ==== Tense ==== //he left { match: '#Noun #Adverb? [left]', @@ -11276,12 +11492,6 @@ group: 0, tag: 'Auxiliary', reason: 'had-been' - }, //was walking - { - match: "[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)", - group: 0, - tag: 'Auxiliary', - reason: 'copula-walking' }, //support a splattering of auxillaries before a verb { match: "[(has|had) (#Adverb|not)+?] #PastTense", @@ -11306,6 +11516,18 @@ group: 0, tag: 'Auxiliary', reason: 'would-be' + }, //were being run + { + match: "(were|was) being [#PresentTense]", + group: 0, + tag: 'PastTense', + reason: 'was-being' + }, //have run + { + match: "have #PresentTense", + group: 0, + tag: 'PastTense', + reason: 'have-vb' }, //would have had { match: "[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb", @@ -11352,6 +11574,12 @@ group: 0, tag: 'Particle', reason: 'phrasal-particle' + }, //back it up + { + match: '#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]', + group: 0, + tag: 'Adverb', + reason: 'phrasal-pronoun-advb' }, // ==== Copula ==== //will be running (not copula) { @@ -11466,7 +11694,7 @@ }]; var _07Verbs = list$3; - var places = "(".concat(_ambig.person.verbs.join('|'), ")"); + var places = "(".concat(_ambig.person.places.join('|'), ")"); var list$4 = [// ==== Region ==== //West Norforlk { @@ -11889,33 +12117,6 @@ }]; var _10People = list$5; - var adjectives$2 = "(".concat(_ambig.adverbs.adjectives.join('|'), ")"); - var list$6 = [// a bit cold - { - match: 'a [(little|bit|wee) bit?] #Adjective', - group: 0, - tag: 'Adverb', - reason: 'a-bit-cold' - }, // dark green - { - match: "[".concat(adjectives$2, "] #Adjective"), - group: 0, - tag: 'Adverb', - reason: 'dark-green' - }, // kinda sparkly - { - match: "#Adverb [#Adverb]$", - group: 0, - tag: 'Adjective', - reason: 'kinda-sparkly' - }, { - match: "#Adverb [#Adverb] (and|or|then)", - group: 0, - tag: 'Adjective', - reason: 'kinda-sparkly-and' - }]; - var _11Adverbs = list$6; - var matches = []; matches = matches.concat(_01Misc); matches = matches.concat(_02Dates); @@ -11926,8 +12127,7 @@ matches = matches.concat(_07Verbs); matches = matches.concat(_08Place); matches = matches.concat(_09Org); - matches = matches.concat(_10People); - matches = matches.concat(_11Adverbs); // cache the easier conditions up-front + matches = matches.concat(_10People); // cache the easier conditions up-front var cacheRequired$1 = function cacheRequired(reg) { var needTags = []; @@ -13368,6 +13568,23 @@ if (verb.has('#Copula') || verb.out('normal') === 'be' && parsed.auxiliary.has('will')) { return toBe_1(parsed); + } // special handling of 'are walking' + + + if (parsed.auxiliary.has('are') && verb.has('#Gerund')) { + var og = parsed.original.clone(); + var past = og.clone().replace('are', 'were'); + var fut = og.clone().replace('are', 'will be'); + + var _infinitive = toInfinitive_1$1(parsed, world); + + var res = { + PastTense: past.text(), + PresentTense: og.text(), + FutureTense: fut.text(), + Infinitive: _infinitive + }; + return res; } // special handling of 'he could.' @@ -13919,6 +14136,11 @@ if (m.has('(is|was)$')) { m = m.splitBefore('(is|was)$'); + } //ensure it's not two verbs + + + if (m.has('#PresentTense #Adverb #PresentTense')) { + m = m.splitBefore('#Adverb #PresentTense'); } //grab (n)th result diff --git a/builds/compromise.min.js b/builds/compromise.min.js index f24f9eec8..166a0b2fb 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="undefined"!=typeof globalThis?globalThis: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 r(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},q={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},J={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},q,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=L(this,t)[0]),r}},K=Object.assign({},N,F,H,S,J);function R(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=B(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=d(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=B(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();ie.prototype.clone=function(){var e=new ie(this.text);return e.pre=this.pre,e.post=this.post,e.clean=this.clean,e.reduced=this.reduced,e.root=this.root,e.implicit=this.implicit,e.tags=Object.assign({},this.tags),e},Object.assign(ie.prototype,K),Object.assign(ie.prototype,ae);var oe=ie,se={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)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=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 n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ue(i)),!0===e.trim&&(i=i.trim()),i}},ce={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}},he=/[.?!]\s*$/,de=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,he.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},pe=function(e,t,r){var n=e.terms(),a=t.terms();de(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;n.next=t[0].id,a.next=i,i&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},ge=/ /,fe=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ge.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start),r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},me=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){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-=r,a.start===t&&(a.start=n.id),a.cache={})})),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)},ve={append:function(e,t){return pe(this,e,t),this},prepend:function(e,t){return fe(this,e,t),this},delete:function(e){return me(this,e),this},replace:function(e,t){var r=this.length;pe(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,me(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},be={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},ye={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},we=Object.assign({},se,le,ce,ve,be,ye),ke=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},Ae=function(e,t,r,n,a,i){for(var o=t;to)return[!1,null];if(!0===u.end&&r+o!==n)return[!1,null]}if(l){var g=Pe(a,c,e,p,u.named);o>1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=$e(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(Pe(a,c,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},Ce=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},xe=/\{([0-9]+,?[0-9]*)\}/,De=/&&/,je=new RegExp(/^<(\S+)>/),Be=function(e){return e[e.length-1]},Ee=function(e){return e[0]},Ne=function(e){return e.substr(1)},Fe=function(e){return e.substr(0,e.length-1)},Oe=function(e){return e=Ne(e),e=Fe(e)},Ve=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Be(t)&&(n.end=!0,t=Fe(t)),"^"===Ee(t)&&(n.start=!0,t=Ne(t)),("["===Ee(t)||"]"===Be(t))&&(n.named=!0,"["===Ee(t)?n.groupType="]"===Be(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ee(t))){var i=je.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Be(t)&&(n.greedy=!0,t=Fe(t)),"*"!==t&&"*"===Be(t)&&"\\*"!==t&&(n.greedy=!0,t=Fe(t)),"?"===Be(t)&&(n.optional=!0,t=Fe(t)),"!"===Ee(t)&&(n.negative=!0,t=Ne(t)),"("===Ee(t)&&")"===Be(t)){De.test(t)?(n.choices=t.split(De),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=Ne(n.choices[0]);var o=n.choices.length-1;n.choices[o]=Fe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===Ee(t)&&"/"===Be(t))return t=Oe(t),n.regex=new RegExp(t),n;if("~"===Ee(t)&&"~"===Be(t))return t=Oe(t),n.soft=!0,n.word=t,n}return!0===xe.test(t)&&(t=t.replace(xe,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Ee(t)?(n.tag=Ne(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Ee(t)?(n.method=Ne(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Te=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Ve),r=Te(r)},He=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=ze(t)),!0===ke(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ge(a,t,0,a.length),s=l(o,2),u=s[0],c=s[1];return!1!==u&&u.length>0&&(u=u.filter((function(e){return e})),i.push({match:u,groups:c})),Ce(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ge(a.slice(h),t,h,a.length),p=l(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return Ce(a,t,i)}return Ce(a,t,i)},Ie=function(e,t){var r={};He(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Me={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=He(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return He(this,e,!0).length>0},not:function(e){var t=this,r=Ie(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},Se=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Se.prototype.buildFrom=function(e,t,r){var n=new Se(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Se.prototype,Me),Object.assign(Se.prototype,we);var _e={term:"terms"};Object.keys(_e).forEach((function(e){return Se.prototype[e]=Se.prototype[_e[e]]}));var Le=Se,qe=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(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}();qe.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new qe(t)};for(var Je=qe,Ke=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Re=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,We=/\S/,Ue=/[ .][A-Z]\.? *$/i,Qe=/(?:\u2026|\.{2,}) *$/,Ze=/((?:\r?\n|\r)+)/,Xe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ye=/^\s+/,et=function(e,t){if(!0===Ue.test(e))return!1;if(!0===Qe.test(e))return!1;if(!1===Xe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},tt=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===We.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Ze),n=0;n0&&(n.push(l),a[u]="")}if(0===n.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&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,n=null;"string"!=typeof e&&("number"==typeof e?e=String(e):ct(e)&&(n=e)),n=(n=n||tt(e,t)).map((function(e){return lt(e)})),r=r||new Je;var a=n.map((function(e){e=e.map((function(e){var t=new oe(e);return r.add(t),t})),Ke(e);var t=new Le(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},dt=function(e,t){var r=new Je;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new oe(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return Ke(a),new Le(a[0].id,a.length,r)}))},pt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,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,lest,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:10;1:13;a0Zb0Nc0Ed07e04fZgUhQiPjel0kitty,lOmKnJoIpEquestion mark,rCs7t4u2womY;nc0Us 2;doll0Gst0I; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst0Z;ep3ri1u2;de0Sff;faOmoO;st0Oze;al0i1o2;om,se;a4i0Ll07r3u2;dMrpoE;erogaXobl0Q;rt,te0K;bjUceHthers;othi1umb0G;a4ee06o2;del,m2nopo0rni1th0E;!my;n,yf0;i0unch;ci1nsect;ead start,o2;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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;ailNcientJecretary,oldiGu0;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¦a01bYcQdPeOfiJgIhon,jr,king,lHmCoffic00p7queen,r3s0taoiseach,vice6;e1fc,gt,ir,r,u0;ltRpt,rg;cond liInBrgeaJ;abbi,e0;ar1p9s,v0;!erend; admirX;astOhd,r0vt;esideDi1of0;!essM;me mini4nce0;!ss;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¦0:1F;a1Mb1Ec15d12e0Vf0Pg0Ih0Di09j08knowled1Ll03mVnews,oUpRrMsBt6vi5w1;a3ea06i2oo1;d,l;ldlife,ne;rmth,t0;neg12ol07tae;e4h3oothpaste,r1una;affQou1;ble,sers,t;ermod1Hund0;a,nnis;a9cene05eri0Sh8il7kittl0Snow,o6p4t2u1;g0Vnshi0L;ati1Ge1;am,el;ace19e1;ci0Ned;ap,cc0;k,v0;eep,ingl0K;d08fe13l1nd;m0Wt;a4e2ic1;e,ke0H;c1laxa0Dsearch;ogni0Crea0C;bi0Din;aKe2hys13last6o1ressZ;lit12rk,w0;a0YtrV;bstetr10il,xygen;a6e4ilk,o3u1;mps,s1;ic;nHo0E;a1chan0V;sl03t;chine1il,themat0T; learn09ry;aught0e3i2ogi0Qu1;ck,g0G;ce,ghtn06ngui0OteratL;a1isK;th0;ewel8usti0J;ce,mp1nformaStself;a1ortan0H;ti1;en0F;a4isto3o1;ck1mework,n1spitali09;ey;ry;ir,libut,ppiB;ene4o2r1um,ymna0B;aAound;l1ssip;d,f; 1t08;editOpo1;ol;i5lour,o2urnit1;ure;od,rgive1uri0wl;ne1;ss;c7sh;conomZduca6lectr5n3quip4thZvery1;body,o1thF;ne;joy1tertain1;ment;iciNonU;tiG;ar2iabet1raugh2;es;ts;a8elcius,h4ivPl3o1urrency;al,ld w1nfusiBttB;ar;assMoth3;aos,e1;e2w1;ing;se;r5sh;a5eef,i2lood,owls,read,utt0;er;lliar2s1;on;ds;g1ss;ga1;ge;c6dvi5ero3ir2mnes1rt,thlet8;ty;craft;b5d1naut5;ynam4;ce;id,ou1;st1;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Ps7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3ZreseC;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr4;intaEna4rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mBnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;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,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on",Unit:"true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;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;a1ern1Mi0;en2Hlni2Z;lenc2Uncouv0Gr2Gughn;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¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v",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:FX;1:G1;2:FQ;3:FC;4:FB;5:FR;6:EQ;7:EO;8:GE;9:EY;A:GA;B:E4;C:G7;D:FN;E:FK;F:EF;aE1bD3cB7dAHe9Ff90g8Gh82i7Rj6Tk5Zl4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7DeHol1TvG;et7onB8;le0sen3;an9endBMhiB3iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9WenG0;kCYtor3;da,l8Unus,rG;a,nGoniD1;a,iDB;leGnesEB;nDKrG;i1y;aSePhNiMoJrGu6y4;acG2iGu0E;c3na,sG;h9Lta;nHrG;a,i;i9Iya;a5HffaCFna,s5;al3eGomasi0;a,l8Fo6Wres1;g7To6VrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs5tGwa0;ia0um;a,yn;iGya;a,ka,s5;a4e4iGmC9ra;!ka;a,t5;at5it5;a05carlet2Ye04hUiSkye,oQtMuHyG;bFIlvi1;e,sHzG;an2Tet7ie,y;anGi8;!a,e,nG;aEe;aIeG;fGl3DphG;an2;cF7r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh74;dy;aKeGirlBKo0y6;ba,e0i6lIrG;iGrBOyl;!d6Z;ia,lBU;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Xre0;bMdLi9lKmIndHrGs5vannaE;aEi0;ra,y;aGi4;nt5ra;lBMome;e,ie;in1ri0;a02eXhViToHuG;by,thBJ;bQcPlOnNsHwe0xG;an93ie,y;aHeGie,lC;ann8ll1marBEtB;!lGnn1;iGyn;e,nG;a,d7V;da,i,na;an9;hel52io;bin,erByn;a,cGkki,na,ta;helBYki;ea,iannDWoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cAQkaE;chGe,i0mo0n5DquCCvDy0;aCBelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAV;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4No6rvaBAtHulG;a,et7in1;ricGsy,tA7;a,e,ia;ctav3deHfAVlGphAV;a,ga,iv3;l3t7;aQePiJoGy6;eHrG;aEeDma;ll1mi;aKcIkGla,na,s5ta;iGki;!ta;hoB1k8AolG;a,eBG;!mh;l7Sna,risF;dIi5OnHo22taG;li1s5;cy,et7;eAiCN;a01ckenz2eViLoIrignayani,uriBFyG;a,rG;a,na,tAR;i4ll9WnG;a,iG;ca,ka,qB3;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9IlG;iGy;cent,e;red;!e6;ae6el3F;ag4JgKi,lHrG;edi60isFyl;an2iGliF;nGsAL;a,da;!an,han;b08c9Dd06e,g04i03l01nZrKtJuHv6Rx86yGz2;a,bell,ra;de,rG;a,eD;h74il9t2;a,cSgOiJjor2l6Hn2s5tIyG;!aGbe5PjaAlou;m,n9R;a,ha,i0;!aIbAKeHja,lCna,sGt52;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Jueri7;!t;!ry;et3HiB;elGi60y;a,l1;dGon,ue6;akranBy;iGlo35;a,ka,n9;a,re,s2;daGg2;!l2V;alCd2elGge,isBFon0;eiAin1yn;el,le;a0He07iWoQuKyG;d3la,nG;!a,dHe9RnGsAP;!a,e9Q;a,sAN;aB0cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a29e,l24n9;is,l1FrHtt2uG;el6is1;aIeHi8na,rG;a6Yi8;lei,n1tB;!in1;aPbb82d3lLnIsHv3zG;!a,be4Jet7z2;a,et7;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Fe;!n4E;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes5na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as5is5oG;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,stD;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s5;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlCri0y;ar5Cer5Cie,leDr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelCd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lCph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et7iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lCquelG;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;aEnaE;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolC;acHetGisel9;a,chD;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et7i5T;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;d0FileDkBl00mUn4ArRsMtLuKvG;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,eDis,la,othGthy;ea,y;an09naEonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraEra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et7iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleD;en,t7;aIeoHotG;il4B;!pat4;ir8rIudG;et7iG;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,eGot7;n1t7;!sa;d4el1PtG;al,el1O;cHlG;es7i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleDrCy;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;nwCok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaEvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt5yl;adHiG;ce;et7iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes5;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t7;an19elG;le;aYdWeUgQiOja,nHtoGya;inet7n3;!aJeHiGmI;e,ka;!mGt7;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t7;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;c3is5jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naE;c5da,leDmLnslKsG;haElG;inGyW;g,n;!h;ey;ee;en;at5g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lCsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",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,rd;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,hina3l2o1r0;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",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",Date:"true¦ago,t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",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:35;1:3C;2:3A;3:2Z;4:2F;5:31;a3Cb32c2Pd2Fe2Cf26g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Voshi1Kun;ma6ng;da,guc20mo28sh22zaR;iao,u;a7eb0il6o3right,u;li3Cs2;gn0lk0ng,tanabe;a6ivaldi;ssilj38zqu1;a9h8i2Ho7r6sui,urn0;an,ynisJ;lst0Prr1Vth;at1Vomps2;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar1lliv2BzuE;a6ein0;l24rm0;sa,u3;rn4th;lva,mmo25ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch1dLtos,z;amBeag20i9o7u6;bio,iz,sD;b6dri1NgIj0Tme25osevelt,ssi,ux,w17;erts,ins2;c6ve0F;ci,hards2;ir1os;aEeAh8ic6ow21ut1O;as6hl0;so;a6illips;m,n1U;ders5et8r7t6;e0Nr4;ez,ry;ers;h22rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1P;ega,iz;a6eils2guy5ix2owak,ym1F;gy,ka6var1L;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Ne6r0V;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin1;!o;aCe8i6op1uo;!n6u;coln,dholm;fe7n0Rr6w0K;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Mo8u7wo6;k,n;mar,znets4;bay6vacs;asZ;ra;hn,rl9to,ur,zl4;aAen9ha3imen1o6u3;h6nZu3;an6ns2;ss2;ki0Fs5;cks2nsse0E;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghOynh;a3ffmann,rvat;mingw7nde6rO;rs2;ay;ns5rrRs7y6;asEes;an4hi6;moK;aAil,o9r7u6;o,tierr1;ay6ub0;li3;m1nzal1;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand1;d7insteHsposi6vaL;to;is2wards;aCeBi9omin8u6;bo6rand;is;gu1;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,s2;on;eks7iy8var1;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:BZ;6:AT;7:9V;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,nde7sB;!l6t1;de,lCrr5yB;l1ne;lBt3;a93y;aEiBladimir;cCha0kt5CnceBrg9Bva0;!nt;ente,t5A;lentin49n8Y;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,l6;lom1nA3uB;leyma8ta;dBl7Jm1;!n6;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;e4Qg3n6olfo,ri68;co,ky;bAe9U;cBl6;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub5x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw5;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;!e7;a78ik;house,o03t1;e,olB;aj;ah,hBk6;a4eB;al,l;hClv2rB;le,ri7v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe7;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha7tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe7;!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;a7ri4N;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;cHd5kGmFrDsCvi3yB;!d5s1;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;a43d5;an,s0;lEo4FrDuBv6;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;ffr6rge;bri4l5rBv2;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;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym5zra;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;a8dl6nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e7ie,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,iDne7rByl;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,lCro7y;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;!foBl6y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n6rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid5ja0ElZmXnPputsiOrFsaEuCveBya0ziz;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,beOd5eIfFi,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,a;ay,ight,ust;an,o0;uld",Adjective:"true¦0:7N;1:82;2:81;3:88;4:7U;5:5R;6:57;7:4N;8:4M;9:7Z;A:6G;B:7L;a6Vb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uNvKwCyear5;arp0eGholeFiEoC;man5oCu6O;d6Qzy;despr7Ks5S;!sa7;eDlCste2A;co1Nl o4W;!k5;aDiCola4M;b88ce versa,ol5H;ca3gabo6Fnilla;ltUnHpDrb5Msu4tterC;!mo7F; f3Ab1SpEsCti1M;ca7etCide dKtairs;!ti2;er,i3U;aMbeco75convin2AdeJeIfair,ivers4knHprecedWrFsDwC;iel3Oritt6A;i1YuC;pervis0spec3Z;eCu5;cognIgul6Tl6T;own;ndi2v64xpect0;cid0rC;!grou5ZsC;iz0tood;b7pp0Essu6UuthorC;iz0;i27ra;aHeFhEi6AoDrC;i1oubl0us3N;geth6p,rp6Vuc67;ough4Xril34;en60l33mpCrr2Y;o6Ati2;boo,lCn;ent0;aXcWeUhTiRmug,nobbi3MoPpOqueami3MtGuCymb6H;bEi gener5EpCrpri6D;erCre0O;! dup6b,i2D;du0seq53;anda77eHiGrCunni2y3G;aightDiC;ki2p0; fCfC;or5K;ll,r5S;aCreotyp0;dfa6Cmi2;a56ec2Hir1Ilend6Cot on; call0le,mb6phist1YrCu0Wvi49;d6Ary;gnifica3nC;ce52g7;am2Se6ocki2ut;cCda1em5lfi33ni1Xpa6Jre8;o1Fr43;at5Gient29reec5G;cr0me;aKeFiDoC;bu60tt51uRy4;ghtCv4;!-2CfA;ar,bel,condi1du6Dfres5AlFpublic43sDtard0vC;ea27;is4DoC;lu1na3;aRe1Duc4B;b5TciCllyi2;al,st;aPeMicayu8lac5Ropuli5QrDuC;bl5Jmp0n51;eHiEoC;!b08fuBmiCp6;ne3si2;mDor,sCva1;ti8;a53e;ciBmC;a0FiC;er,um;ac21rCti1;fe9ma2YpleCv39;xi2;rCst;allelEtC;-tiCi4;me;!ed;bMffKkJld fashion0nIpHrg1Fth6utGvC;al,erC;!all,niDt,wC;eiCrouC;ght;do0Uer,g2Rsi4B;en,posi1; boa5Og2Pli8;!ay; gua5MbCli8;eat;eEsC;cCer0Fole1;e8u3P;d2Yse;aKeJiIoCua4X;nGrDtC;ab7;thC;!eC;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1B;aJeHiEoCultip7;bi7derCl0Wnth5ot,st;a1n;nCx0;dblo0SiaCor;tu38;ande3Qdi4NnaCre;ci2;cCgenta,in,j02keshift,le,mmoth,ny,sculi8;ab34ho;aLeGiDoCu16;uti15vi2;mDteraC;l,te;it0;ftFgCth4;al,eDitiC;ma1;nda3K;!-0D;ngu3Zst,tt6;ap1Yind5no0B;agg0uC;niNstifi0veni7;de4gno4Klleg4mRnFpso 21rC;a1rC;eleCita0K;va3; LaKbr0corJdHfluenRiRnGsFtDviC;go0Gti2;a9enBoxC;ic3B;a8i2Vul0E;a1er,oce3;iDoC;or;re9;deq3Qppr33;fCsitu,vitro;ro3;mGpC;arEerfe9oCrop6;li1rtC;a3ed;ti4;eCi0T;d2VnB;aJeGiEoCumdr3I;ne36ok0rrCs09ur5;if2Z;ghfalut1RspC;an2X;aDlC;liZpfA;li2;lFnErC;d05roC;wi2;dy;f,low0;ainfAener2Oiga24lIoHraEuC;ilCng ho;ty;cDtC;efAis;efA;ne,od;ea2Iob4;aUeOinNlLoGrC;a1VeEoz1MustC;raC;ti2;e2Gq11tfA;oErC; keeps,eCm6tuna1;g04ign;liC;sh;aCue3;g31tte1P;al,i1;dGmDrC;ti7;a7ini8;ne;le; up;bl0i3lBr Dux,voC;ri1uri1;oCreac1E;ff;aMfficie3lLmInGre9there4veFxC;a9cess,pe1QtraDuC;be2Nl0F;!va1E;n,ryday; CcouraFti0P;rou1sui1;erDiC;ne3;gi2;abo23dNe17i1;g6sC;t,ygC;oi2;er;aSeKiEoCrea14ue;mina3ne,ubC;le,tfA;dact1Bfficu1OsDvC;erB;creEeas0gruntl0hone1FordDtC;a3ressN;er5;et; IadpHfGgene1PliErang0spe1PtDvoC;ut;ail0ermin0;be1Mca1ghC;tfA;ia3;an;facto;i5magCngeroVs0G;ed,i2;ly;ertaNhief,ivil,oErC;aCowd0u0G;mp0vZz0;loJmHnDrrCve0P;e9u1I;cre1fu0LgrEsDtC;empo0Dra0E;ta3;ue3;mer08pleC;te,x;ni4ss4;in;aNeJizarIlGoDrC;and new,isk,okN;gDna fiUttom,urgeoC;is;us;ank,indC;!i2;re;autifAhiDlov0nCst,yoD;eUt;nd;ul;ckDnkru0XrrC;en;!wards; priori,b0Nc0Kd0Afra09g05h04lZmXntiquWppTrNsJttracti07utheIvFwC;aDkC;wa0U;ke,re;ant garDerC;age;de;ntV;leep,piEsuEtonC;isC;hi2;ri2;ab,bitFroEtiC;fiC;ci4;ga3;raC;ry;are3etiOrC;oprC;ia1;at0;aKuC;si2;arFcohDeCiJl,oof;rt;olC;ic;mi2;ead;ainEgressiDoniC;zi2;ve;st;id; JeHuGvC;aDerB;se;nc0;ed;lt;pt,qC;ua1;hoc,infinitC;um;cuDtu4u1;al;ra1;erMlLoJruIsDuC;nda3;e3oDtra9;ct;lu1rbi2;ng;te;pt;aCve;rd;aze,e;ra3;nt",Comparable:"true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;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;e4i3;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¦bOeJfDhundredNmOninAone,qu8s6t0zeroN;enMh3rNw0;e0o;l0ntD;fHve;ir0ousandKree;d,t6;e0ix8;cond,pt1ven7xt1;adr0int0;illionD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en0;!th;illion0;!s,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¦bHeEf8hundred,mHnineAone,qu6s4t0zero;en,h2rGw0;e0o;lve,n8;irt9ousandEree;e0ix5;pt1ven4xt1;adr0int0;illion;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion0;!s",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;h1iny bit,o0wiO;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"},gt=["Person","Place","Organization"],ft={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"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},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:gt},Actor:{isA:"Noun",notA:gt},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:gt},Demonym:{isA:["Noun","ProperNoun"],notA:gt},Possessive:{isA:"Noun"}},mt={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"}},vt={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"}},bt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],yt={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:bt},Conjunction:{notA:bt},Preposition:{notA:bt},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"]}},wt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},kt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:wt[t]?e[t].color=wt[t]:e[t].isA.some((function(r){return!!wt[r]&&(e[t].color=wt[r],!0)}))})),e},At=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Et=function(e,t,r){var n=Bt(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Jt.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Wt(e),r)).Gerund&&(r.Gerund=Qt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Qt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Qt.PresentTense(e)),r},Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Yt=[/ary$/],er={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},tr=[{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"}],rr=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],nr=[/ary$/,/ous$/],ar={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},ir=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],or={toSuperlative:function(e){if(er.hasOwnProperty(e))return er[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=cr(e);return null!==n?n:lr.test(e)?e+"es":e+"s"},dr=[[/([^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"],[/(eas)es$/i,"$1e"],[/(..[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,""]],pr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))},Dr={tag:function(e,t){return e?(xr(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(xr(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},jr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Br=function(e){return e.split(/[ -]/g)},Er=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Br(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},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,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=Or(o)),i=ht(o,r.world,r.pool());var s=r.buildFrom(i);s.tagger(),i=s.list}if(!0===n.keepTags){var u=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){u[t]&&e.tagSafe(u[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Tr=E((function(e,t){var r=function(e,t){var r=ht(e,t.world)[0],n=t.buildFrom([r]);return n.tagger(),t.list=n.list,t};t.append=function(e){var t=this;return e?this.found?(this.uncache(),this.list.forEach((function(r){var n=ht(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):r(e,this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?this.found?(this.uncache(),this.list.forEach((function(r){var n=ht(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):r(e,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 t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Ir(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),Sr=E((function(e){var t="",r=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};qr.alphabetical=qr.alpha,qr.wordcount=qr.wordCount;var Jr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Kr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Jr.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,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===hn.test(i)){var s=i.replace(hn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},gn=/[\'‘’‛‵′`´]$/,fn=/^(m|k|cm|km|m)\/(s|h|hr)$/,mn=[[/^[\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"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"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][ -])?[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,3}(st|nd|rd|th)?[-–][0-9\.]{1,3}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],vn=/^[IVXLCDM]{2,}$/,bn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,yn="Adjective",wn="Infinitive",kn="PresentTense",An="Singular",$n="PastTense",Pn="Adverb",Gn="Expression",Cn="Actor",xn="Verb",Dn="Noun",jn="LastName",Bn={a:[[/.[aeiou]na$/,Dn],[/.[oau][wvl]ska$/,jn],[/.[^aeiou]ica$/,An],[/^([hyj]a)+$/,Gn]],c:[[/.[^aeiou]ic$/,yn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,$n],[/.[aeo]{2}[bdgmnprvz]ed$/,$n],[/.[aeiou][sg]hed$/,$n],[/.[aeiou]red$/,$n],[/.[aeiou]r?ried$/,$n],[/.[bcdgtr]led$/,$n],[/.[aoui]f?led$/,$n],[/.[iao]sed$/,$n],[/[aeiou]n?[cs]ed$/,$n],[/[aeiou][rl]?[mnf]ed$/,$n],[/[aeiou][ns]?c?ked$/,$n],[/[aeiou][nl]?ged$/,$n],[/.[tdbwxz]ed$/,$n],[/[^aeiou][aeiou][tvx]ed$/,$n],[/.[cdlmnprstv]ied$/,$n],[/[^aeiou]ard$/,An],[/[aeiou][^aeiou]id$/,yn],[/.[vrl]id$/,yn]],e:[[/.[lnr]ize$/,wn],[/.[^aeiou]ise$/,wn],[/.[aeiou]te$/,wn],[/.[^aeiou][ai]ble$/,yn],[/.[^aeiou]eable$/,yn],[/.[ts]ive$/,yn]],h:[[/.[^aeiouf]ish$/,yn],[/.v[iy]ch$/,jn],[/^ug?h+$/,Gn],[/^uh[ -]?oh$/,Gn]],i:[[/.[oau][wvl]ski$/,jn]],k:[[/^(k){2}$/,Gn]],l:[[/.[gl]ial$/,yn],[/.[^aeiou]ful$/,yn],[/.[nrtumcd]al$/,yn],[/.[^aeiou][ei]al$/,yn]],m:[[/.[^aeiou]ium$/,An],[/[^aeiou]ism$/,An],[/^h*u*m+$/,Gn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,yn],[/[^aeiou]ician$/,Cn],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,Gn],[/^(yo)+$/,Gn],[/^woo+[pt]?$/,Gn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,An],[/[^i]fer$/,wn],[/.[^aeiou][ao]pher$/,Cn]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,yn],[/[aeiou].*ist$/,yn],[/^[a-z]et$/,xn]],s:[[/.[^aeiou]ises$/,kn],[/.[rln]ates$/,kn],[/.[^z]ens$/,xn],[/.[lstrn]us$/,An],[/.[aeiou]sks$/,kn],[/.[aeiou]kes$/,kn],[/[aeiou][^aeiou]is$/,An],[/[a-z]\'s$/,Dn],[/^yes+$/,Gn]],v:[[/.[^aeiou][ai][kln]ov$/,jn]],y:[[/.[cts]hy$/,yn],[/.[st]ty$/,yn],[/.[gk]y$/,yn],[/.[tnl]ary$/,yn],[/.[oe]ry$/,An],[/[rdntkbhs]ly$/,Pn],[/...lly$/,Pn],[/[bszmp]{2}y$/,yn],[/.(gg|bb|zz)ly$/,yn],[/.[aeiou]my$/,yn],[/[ea]{2}zy$/,yn],[/.[^aeiou]ity$/,An]]},En="Adjective",Nn="Infinitive",Fn="PresentTense",On="Singular",Vn="PastTense",Tn="Adverb",zn="Plural",Hn="Actor",In="Verb",Mn="Noun",Sn="LastName",_n="Modal",Ln=[null,null,{ea:On,ia:Mn,ic:En,ly:Tn,"'n":In,"'t":In},{oed:Vn,ued:Vn,xed:Vn," so":Tn,"'ll":_n,"'re":"Copula",azy:En,end:In,ped:Vn,ffy:En,ify:Nn,ing:"Gerund",ize:Nn,lar:En,mum:En,nes:Fn,nny:En,oid:En,ous:En,que:En,rmy:En,rol:On,sis:On,zes:Fn},{amed:Vn,aped:Vn,ched:Vn,lked:Vn,nded:Vn,cted:Vn,dged:Vn,akis:Sn,cede:Nn,chuk:Sn,czyk:Sn,ects:Fn,ends:In,enko:Sn,ette:On,fies:Fn,fore:Tn,gate:Nn,gone:En,ices:zn,ints:zn,ines:zn,ions:zn,less:Tn,llen:En,made:En,nsen:Sn,oses:Fn,ould:_n,some:En,sson:Sn,tage:Nn,teen:"Value",tion:On,tive:En,tors:Mn,vice:On},{tized:Vn,urned:Vn,eased:Vn,ances:zn,bound:En,ettes:zn,fully:Tn,ishes:Fn,ities:zn,marek:Sn,nssen:Sn,ology:Mn,ports:zn,rough:En,tches:Fn,tieth:"Ordinal",tures:zn,wards:Tn,where:Tn},{auskas:Sn,keeper:Hn,logist:Hn,teenth:"Value"},{opoulos:Sn,borough:"Place",sdottir:Sn}],qn={":(":!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){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}fn.test(n.text)&&n.tag("Unit","per-sec",r)},regex:function(e,t){for(var r=e.text,n=0;n=2&&vn.test(r)&&bn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Ln[i.length].hasOwnProperty(i)){var o=Ln[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===Bn.hasOwnProperty(n))for(var a=Bn[n],i=0;i35)}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Jn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),qn.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Rn=function(e,t){var r=e.world;Kn.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},aa={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]},ia=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],oa=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],sa=[/i$/,/ae$/],ua=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(ia.find((function(t){return e.tags[t]})))return;if(aa.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(aa.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(oa.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(sa.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},la=["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}),{}),ca=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()))},ha=/^[A-Z]('s|,)?$/,da=/([A-Z]\.){2}[A-Z]?/i,pa={I:!0,A:!0},ga={neighbours:Zn,case:ea,stem:na,plural:ua,organizations:function(e,t){for(var r=0;r0?ai=ai.concat(t):ai.push(e)})),ai.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Sa(r),words:Sa(n)}),e}));var ii=ai,oi=function(e){ii.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Sa(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},pi=function(e){var r=function(e){a(i,e);var r=u(i);function i(e,n,a){var o;return t(this,i),(o=r.call(this,e,n,a)).contracted=null,o}return n(i,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r1&&void 0!==arguments[1]?arguments[1]:{},n=this.match("(#City && @hasComma) (#Region|#Country)"),a=this.not(n).splitAfter("@hasComma"),i=(a=a.concat(n)).quotations();return i.found&&(a=a.splitOn(i.eq(0))),a=a.match("#Noun+ (of|by)? the? #Noun+?"),!0!==t.keep_anaphora&&(a=(a=(a=(a=a.not("#Pronoun")).not("(there|these)")).not("(#Month|#WeekDay)")).not("(my|our|your|their|her|his)")),a=a.not("(of|for|by|the)$"),"number"==typeof e&&(a=a.get(e)),new r(a.list,this,this.world)},e},Di=/\(/,ji=/\)/,Bi=function(e){var r=function(e){a(i,e);var r=u(i);function i(){return t(this,i),r.apply(this,arguments)}return n(i,[{key:"unwrap",value:function(){return this.list.forEach((function(e){var t=e.terms(0);t.pre=t.pre.replace(Di,"");var r=e.lastTerm();r.post=r.post.replace(ji,"")})),this}}]),i}(e);return e.prototype.parentheses=function(e){var t=[];return this.list.forEach((function(e){for(var r=e.terms(),n=0;n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return ui(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Qi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Qi(e,this,this.world)},Qi.prototype.fromText=function(e){var t=ht(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Qi.prototype,Ui.misc),Object.assign(Qi.prototype,Ui.selections),Wi(Qi);var Zi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Zi).forEach((function(e){return Qi.prototype[e]=Qi.prototype[Zi[e]]}));var Xi=Qi,Yi=function(e){var t=e.termList();return pn(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=ht(e,r),a=new Xi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=ht(e,n),i=new Xi(a,null,n);return t&&Yi(i),i},n.extend=function(e){return e(Xi,r,this,Le,oe,Je),this},n.fromJSON=function(e){var t=dt(e,r);return new Xi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.world=function(){return r},n.parseMatch=function(e){return ze(e)},n.version="13.6.0",n.import=n.load,n}(new Ar)})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis: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 r(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},q={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},J={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},q,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=_(this,t)[0]),r}},K=Object.assign({},F,O,I,S,J);function R(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=C(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=d(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=C(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();ie.prototype.clone=function(){var e=new ie(this.text);return e.pre=this.pre,e.post=this.post,e.clean=this.clean,e.reduced=this.reduced,e.root=this.root,e.implicit=this.implicit,e.tags=Object.assign({},this.tags),e},Object.assign(ie.prototype,K),Object.assign(ie.prototype,ae);var oe=ie,se={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)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=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 n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ue(i)),!0===e.trim&&(i=i.trim()),i}},ce={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}},he=/[.?!]\s*$/,de=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,he.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ge=function(e,t,r){var n=e.terms(),a=t.terms();de(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;n.next=t[0].id,a.next=i,i&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},pe=/ /,fe=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===pe.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start),r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},me=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){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-=r,a.start===t&&(a.start=n.id),a.cache={})})),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)},ve={append:function(e,t){return ge(this,e,t),this},prepend:function(e,t){return fe(this,e,t),this},delete:function(e){return me(this,e),this},replace:function(e,t){var r=this.length;ge(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,me(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},be={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},ye={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},we=Object.assign({},se,le,ce,ve,be,ye),Ae=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},ke=function(e,t,r,n,a,i){for(var o=t;to)return[!1,null];if(!0===u.end&&r+o!==n)return[!1,null]}if(l){var p=Pe(a,c,e,g,u.named);o>1&&u.greedy?p.length+=o-g:p.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=$e(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(Pe(a,c,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},Ge=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Ee=/\{([0-9]+,?[0-9]*)\}/,je=/&&/,xe=new RegExp(/^<(\S+)>/),Ce=function(e){return e[e.length-1]},Ne=function(e){return e[0]},Fe=function(e){return e.substr(1)},Oe=function(e){return e.substr(0,e.length-1)},De=function(e){return e=Fe(e),e=Oe(e)},Te=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Ce(t)&&(n.end=!0,t=Oe(t)),"^"===Ne(t)&&(n.start=!0,t=Fe(t)),("["===Ne(t)||"]"===Ce(t))&&(n.named=!0,"["===Ne(t)?n.groupType="]"===Ce(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ne(t))){var i=xe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Ce(t)&&(n.greedy=!0,t=Oe(t)),"*"!==t&&"*"===Ce(t)&&"\\*"!==t&&(n.greedy=!0,t=Oe(t)),"?"===Ce(t)&&(n.optional=!0,t=Oe(t)),"!"===Ne(t)&&(n.negative=!0,t=Fe(t)),"("===Ne(t)&&")"===Ce(t)){je.test(t)?(n.choices=t.split(je),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=Fe(n.choices[0]);var o=n.choices.length-1;n.choices[o]=Oe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===Ne(t)&&"/"===Ce(t))return t=De(t),n.regex=new RegExp(t),n;if("~"===Ne(t)&&"~"===Ce(t))return t=De(t),n.soft=!0,n.word=t,n}return!0===Ee.test(t)&&(t=t.replace(Ee,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Ne(t)?(n.tag=Fe(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Ne(t)?(n.method=Fe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Ve=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Te),r=Ve(r)},Ie=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=ze(t)),!0===Ae(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Be(a,t,0,a.length),s=l(o,2),u=s[0],c=s[1];return!1!==u&&u.length>0&&(u=u.filter((function(e){return e})),i.push({match:u,groups:c})),Ge(a,t,i)}for(var h=0;ha.length);h+=1){var d=Be(a.slice(h),t,h,a.length),g=l(d,2),p=g[0],f=g[1];if(!1!==p&&p.length>0&&(h+=p.length-1,p=p.filter((function(e){return e})),i.push({match:p,groups:f}),!0===r))return Ge(a,t,i)}return Ge(a,t,i)},He=function(e,t){var r={};Ie(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Me={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Ie(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Ie(this,e,!0).length>0},not:function(e){var t=this,r=He(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},Se=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Se.prototype.buildFrom=function(e,t,r){var n=new Se(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Se.prototype,Me),Object.assign(Se.prototype,we);var Le={term:"terms"};Object.keys(Le).forEach((function(e){return Se.prototype[e]=Se.prototype[Le[e]]}));var _e=Se,qe=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(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}();qe.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new qe(t)};for(var Je=qe,Ke=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Re=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,We=/\S/,Ue=/[ .][A-Z]\.? *$/i,Qe=/(?:\u2026|\.{2,}) *$/,Xe=/((?:\r?\n|\r)+)/,Ze=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ye=/^\s+/,et=function(e,t){if(!0===Ue.test(e))return!1;if(!0===Qe.test(e))return!1;if(!1===Ze.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},tt=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===We.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Xe),n=0;n0&&(n.push(l),a[u]="")}if(0===n.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&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,n=null;"string"!=typeof e&&("number"==typeof e?e=String(e):ct(e)&&(n=e)),n=(n=n||tt(e,t)).map((function(e){return lt(e)})),r=r||new Je;var a=n.map((function(e){e=e.map((function(e){var t=new oe(e);return r.add(t),t})),Ke(e);var t=new _e(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},dt=function(e,t){var r=new Je;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new oe(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return Ke(a),new _e(a[0].id,a.length,r)}))},gt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,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,lest,unless",Preposition:"true¦'o,-,aLbIcHdGexcept,fFiDmidQnotwithstandiRoBpSqua,sAt6u3vi2w0;/o,hereNith0;!in,oR;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oJ;ans,ince,o that;',f0n2ut;!f;f,n0;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",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¦&,aFbBcuz,how9in caEno8o7p5supposing,t2v1wh0yet;eth9ile;ers4s;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Abbreviation:"true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:14;1:17;a13b0Rc0Id0Be08f03gYhUiTjel0kitty,lRmNnMoLpGquestionFrDs8t5u3w2;ay,om01;nc0Xs 2;doll0Jst0L; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst12;ep3ri1u2;de0Vff;faRmoR;st0Rze;al0i1o2;om,se;! mark;a5i0Nla4r3u2;dOrpoG;erogaZobl0S;te,y0K;rt,te0L;bjVceIthers;othi1umb0H;a4ee07o2;del,m2nopo0rni1th0F;!my;n,yf0;i2unch;ly,ne;ci1nsect;ead start,o2uman right;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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;ailNcientJecretary,oldiGu0;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¦a01bYcQdPeOfiJgIhon,jr,king,lHmCoffic00p7queen,r3s0taoiseach,vice6;e1fc,gt,ir,r,u0;ltRpt,rg;cond liInBrgeaJ;abbi,e0;ar1p9s,v0;!erend; admirX;astOhd,r0vt;esideDi1of0;!essM;me mini4nce0;!ss;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¦0:1F;a1Mb1Ec15d12e0Vf0Pg0Ih0Di09j08knowled1Ll03mVnews,oUpRrMsBt6vi5w1;a3ea06i2oo1;d,l;ldlife,ne;rmth,t0;neg12ol07tae;e4h3oothpaste,r1una;affQou1;ble,sers,t;ermod1Hund0;a,nnis;a9cene05eri0Sh8il7kittl0Snow,o6p4t2u1;g0Vnshi0L;ati1Ge1;am,el;ace19e1;ci0Ned;ap,cc0;k,v0;eep,ingl0K;d08fe13l1nd;m0Wt;a4e2ic1;e,ke0H;c1laxa0Dsearch;ogni0Crea0C;bi0Din;aKe2hys13last6o1ressZ;lit12rk,w0;a0YtrV;bstetr10il,xygen;a6e4ilk,o3u1;mps,s1;ic;nHo0E;a1chan0V;sl03t;chine1il,themat0T; learn09ry;aught0e3i2ogi0Qu1;ck,g0G;ce,ghtn06ngui0OteratL;a1isK;th0;ewel8usti0J;ce,mp1nformaStself;a1ortan0H;ti1;en0F;a4isto3o1;ck1mework,n1spitali09;ey;ry;ir,libut,ppiB;ene4o2r1um,ymna0B;aAound;l1ssip;d,f; 1t08;editOpo1;ol;i5lour,o2urnit1;ure;od,rgive1uri0wl;ne1;ss;c7sh;conomZduca6lectr5n3quip4thZvery1;body,o1thF;ne;joy1tertain1;ment;iciNonU;tiG;ar2iabet1raugh2;es;ts;a8elcius,h4ivPl3o1urrency;al,ld w1nfusiBttB;ar;assMoth3;aos,e1;e2w1;ing;se;r5sh;a5eef,i2lood,owls,read,utt0;er;lliar2s1;on;ds;g1ss;ga1;ge;c6dvi5ero3ir2mnes1rt,thlet8;ty;craft;b5d1naut5;ynam4;ce;id,ou1;st1;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Gm25n22o1Xp1Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Qs7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3Zr0K;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0J;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aMeLiIoHuG;ltip3Crd0;nit11ve;nHrr10sreprG;eseC;d,g6us;asu2lt,n0Mr4;intaEna4rHtG;ch,t0;ch,kGry;et;aKeJiIoGu1A;aGck,ok,ve;d,n;ft,ke,mBnk,st2Vve;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFt,x;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on",Unit:"true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;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;a1ern1Mi0;en2Hlni2Z;lenc2Uncouv0Gr2Gughn;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",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:FX;1:G1;2:FQ;3:FC;4:FB;5:FR;6:EQ;7:EO;8:GE;9:EY;A:GA;B:E4;C:G7;D:FN;E:FK;F:EF;aE1bD3cB7dAHe9Ff90g8Gh82i7Rj6Tk5Zl4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7DeHol1TvG;et7onB8;le0sen3;an9endBMhiB3iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9WenG0;kCYtor3;da,l8Unus,rG;a,nGoniD1;a,iDB;leGnesEB;nDKrG;i1y;aSePhNiMoJrGu6y4;acG2iGu0E;c3na,sG;h9Lta;nHrG;a,i;i9Iya;a5HffaCFna,s5;al3eGomasi0;a,l8Fo6Wres1;g7To6VrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs5tGwa0;ia0um;a,yn;iGya;a,ka,s5;a4e4iGmC9ra;!ka;a,t5;at5it5;a05carlet2Ye04hUiSkye,oQtMuHyG;bFIlvi1;e,sHzG;an2Tet7ie,y;anGi8;!a,e,nG;aEe;aIeG;fGl3DphG;an2;cF7r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh74;dy;aKeGirlBKo0y6;ba,e0i6lIrG;iGrBOyl;!d6Z;ia,lBU;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Xre0;bMdLi9lKmIndHrGs5vannaE;aEi0;ra,y;aGi4;nt5ra;lBMome;e,ie;in1ri0;a02eXhViToHuG;by,thBJ;bQcPlOnNsHwe0xG;an93ie,y;aHeGie,lC;ann8ll1marBEtB;!lGnn1;iGyn;e,nG;a,d7V;da,i,na;an9;hel52io;bin,erByn;a,cGkki,na,ta;helBYki;ea,iannDWoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cAQkaE;chGe,i0mo0n5DquCCvDy0;aCBelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAV;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4No6rvaBAtHulG;a,et7in1;ricGsy,tA7;a,e,ia;ctav3deHfAVlGphAV;a,ga,iv3;l3t7;aQePiJoGy6;eHrG;aEeDma;ll1mi;aKcIkGla,na,s5ta;iGki;!ta;hoB1k8AolG;a,eBG;!mh;l7Sna,risF;dIi5OnHo22taG;li1s5;cy,et7;eAiCN;a01ckenz2eViLoIrignayani,uriBFyG;a,rG;a,na,tAR;i4ll9WnG;a,iG;ca,ka,qB3;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9IlG;iGy;cent,e;red;!e6;ae6el3F;ag4JgKi,lHrG;edi60isFyl;an2iGliF;nGsAL;a,da;!an,han;b08c9Dd06e,g04i03l01nZrKtJuHv6Rx86yGz2;a,bell,ra;de,rG;a,eD;h74il9t2;a,cSgOiJjor2l6Hn2s5tIyG;!aGbe5PjaAlou;m,n9R;a,ha,i0;!aIbAKeHja,lCna,sGt52;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Jueri7;!t;!ry;et3HiB;elGi60y;a,l1;dGon,ue6;akranBy;iGlo35;a,ka,n9;a,re,s2;daGg2;!l2V;alCd2elGge,isBFon0;eiAin1yn;el,le;a0He07iWoQuKyG;d3la,nG;!a,dHe9RnGsAP;!a,e9Q;a,sAN;aB0cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a29e,l24n9;is,l1FrHtt2uG;el6is1;aIeHi8na,rG;a6Yi8;lei,n1tB;!in1;aPbb82d3lLnIsHv3zG;!a,be4Jet7z2;a,et7;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Fe;!n4E;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes5na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as5is5oG;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,stD;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s5;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlCri0y;ar5Cer5Cie,leDr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelCd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lCph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et7iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lCquelG;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;aEnaE;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolC;acHetGisel9;a,chD;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et7i5T;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;d0FileDkBl00mUn4ArRsMtLuKvG;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,eDis,la,othGthy;ea,y;an09naEonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraEra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et7iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleD;en,t7;aIeoHotG;il4B;!pat4;ir8rIudG;et7iG;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,eGot7;n1t7;!sa;d4el1PtG;al,el1O;cHlG;es7i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleDrCy;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;nwCok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaEvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt5yl;adHiG;ce;et7iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes5;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t7;an19elG;le;aYdWeUgQiOja,nHtoGya;inet7n3;!aJeHiGmI;e,ka;!mGt7;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t7;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;c3is5jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naE;c5da,leDmLnslKsG;haElG;inGyW;g,n;!h;ey;ee;en;at5g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lCsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",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,rd;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,hina3l2o1r0;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",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",Date:"true¦ago,t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",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:35;1:3C;2:3A;3:2Z;4:2F;5:31;a3Cb32c2Pd2Fe2Cf26g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Voshi1Kun;ma6ng;da,guc20mo28sh22zaR;iao,u;a7eb0il6o3right,u;li3Cs2;gn0lk0ng,tanabe;a6ivaldi;ssilj38zqu1;a9h8i2Ho7r6sui,urn0;an,ynisJ;lst0Prr1Vth;at1Vomps2;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar1lliv2BzuE;a6ein0;l24rm0;sa,u3;rn4th;lva,mmo25ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch1dLtos,z;amBeag20i9o7u6;bio,iz,sD;b6dri1NgIj0Tme25osevelt,ssi,ux,w17;erts,ins2;c6ve0F;ci,hards2;ir1os;aEeAh8ic6ow21ut1O;as6hl0;so;a6illips;m,n1U;ders5et8r7t6;e0Nr4;ez,ry;ers;h22rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1P;ega,iz;a6eils2guy5ix2owak,ym1F;gy,ka6var1L;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Ne6r0V;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin1;!o;aCe8i6op1uo;!n6u;coln,dholm;fe7n0Rr6w0K;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Mo8u7wo6;k,n;mar,znets4;bay6vacs;asZ;ra;hn,rl9to,ur,zl4;aAen9ha3imen1o6u3;h6nZu3;an6ns2;ss2;ki0Fs5;cks2nsse0E;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghOynh;a3ffmann,rvat;mingw7nde6rO;rs2;ay;ns5rrRs7y6;asEes;an4hi6;moK;aAil,o9r7u6;o,tierr1;ay6ub0;li3;m1nzal1;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand1;d7insteHsposi6vaL;to;is2wards;aCeBi9omin8u6;bo6rand;is;gu1;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,s2;on;eks7iy8var1;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:BZ;6:AT;7:9V;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,nde7sB;!l6t1;de,lCrr5yB;l1ne;lBt3;a93y;aEiBladimir;cCha0kt5CnceBrg9Bva0;!nt;ente,t5A;lentin49n8Y;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,l6;lom1nA3uB;leyma8ta;dBl7Jm1;!n6;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;e4Qg3n6olfo,ri68;co,ky;bAe9U;cBl6;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub5x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw5;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;!e7;a78ik;house,o03t1;e,olB;aj;ah,hBk6;a4eB;al,l;hClv2rB;le,ri7v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe7;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha7tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe7;!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;a7ri4N;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;cHd5kGmFrDsCvi3yB;!d5s1;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;a43d5;an,s0;lEo4FrDuBv6;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;ffr6rge;bri4l5rBv2;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;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym5zra;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;a8dl6nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e7ie,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,iDne7rByl;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,lCro7y;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;!foBl6y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n6rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid5ja0ElZmXnPputsiOrFsaEuCveBya0ziz;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,beOd5eIfFi,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:7B;1:6Z;2:7N;3:7D;4:6S;5:7Q;6:7F;7:6Y;8:6L;9:6M;A:5P;B:7G;C:7A;D:79;a7Rb6Bc5Kd5Ge5Ef4Cg3Uh3Eiron0j3Ak35l2Pm2Fn2Do2Bp1Tquiet70r1Hs0BtRuPvacuum 1wHyammerDzE;eroAip FonE;e0k0;by,up;aKeHhGiForErit59;d 1k2X;mp0n2Ppe0r8s8;eel Cip 7V;aFiE;gh 08rd0;n Cr 3J;it 5Sk8lk6rm 63sh 7Et6Hv4V;rgeDsE;e 9herA;aTeRhPiLoJrGuEype 60;ckArn E;d2in,o3Mup;aFiEot0y 2D;ckle6Ip 7K;ck6Hde Y;ne6Gp Es4I;d2o6Uup;ck GdFe Egh62me0p o0Gre0;aw3ba4d2in,up;e 5Ty 1;by,oB;ink Erow 64;ba4ov7up;aEe 4Nll4U;m 1r X;ckDke Flk E;ov7u4V;aEba4d2in,o36up;ba4ft7p50w3;a0Ic0He0Bh07i05l01m00nZoYpTquare StKuIwE;earGiE;ngFtch E;aw3ba4o6Y; by;ck Eit 1m 1ss0;in,up;aJe0UiIoGrEuc39;aigh1RiE;ke 67n33;p Erm1U;by,in,oB;n34r 1tc3N;c33mp0nd Er6Qve6y 1;ba4d2up;d2oBup;ar30eHiGlFrEurD;ingDuc8;a38it 3Z;l10n 1;e5Jll0;be4Hrt0;ap 4Jow C;ash 56oke0;eep FiEow 9;c3Qp 1;in,oE;ff,v7;gn 4Ong32t Ez8;d2o5up;aGoEu4L;ot Eut0w 65;aw3ba4f3BoB;c2JdeAk50ve6;e Ill0nd HtE; Etl49;d2in,o5upE;!on;aw3ba4d2in,o22up;o5to;al4Tout0rap4T;il6v8;aOeLiKoHuE;b 4Mle0n Estl8;aEba4d2in5Bo3Mt34u3K;c21w3;ot FuE;g2Ond6;a21f2Vo5;ng 4Wp6;aEel6inAnt0;c56d E;o2Xu0F;c1Zt0;aReQiPlNoLrIsyc2DuE;ll Gt E;aEba4d2in,o1Kt39up;p3Ew3;ap3Dd2in,o5t37up;attleDess FiHoE;p 1;ah1Kon;iEp 5Ar3Sur4Cwer 5A;nt0;ay46uE;gAmp 9;ck 5Ag0leDn 9p43;el 4EncilA;c3Wir 2Ln0ss GtFy E;ba4oB; d2c21;aw3ba4o15;pEw3R;e3Qt C;arrow40erd0oE;d6te3Z;aLeJiIoGuE;ddl8lE;l 3D;c19p 1uth6ve E;al3Hd2in,o5up;ss0x 1;asur8lt 9ss E;a1Cup;ke En 9r35s1Nx0;do,o44up;aRePiKoEuck0;aIc3Dg HoEse0;k Ese3B;aft7ba4d2forw2Fin42ov7uE;nd7p;in,o0L;d 9;e HghtGnFsEv1U;ten 4I;e 1k 1; 1e33;ar48d2;av1It 33velE; o3Q;c8p 1sh EtchDugh6y1W;in3Qo5;eFick6nock E;d2o3M;eEyA;l 2Mp E;aw3ba4d2fTin,o06to,up;aGoFuE;ic8mpA;ke2Xt31;c36zz 1;aQeLiIoFuE;nker2Yrry 1s0V;lEneArse2T;d Ee 1;ba4d2fast,o00up;de Ft E;ba4on,up;aw3o5;aElp0;d Gl 27r Et 1;fEof;rom;in,oSu1D;c00m 1nEve it,z22;d Eg 2CkerG;d2in,o5;aSeMive Kloss 20oGrFunE; f0N;in3Eow 28; Eof 0V;aFb1Ait,oEr3At0Pu15;ff,n,v7;bo5ft7hKw3;aw3ba4d2in,oEup,w3;ff,n,ut;a1Aek0t E;aFb14d2oEr34up;ff,n,ut,v7;cFhEl1Ur32t,w3;ead;ross;d aFnE;g 1;bo5;a09e02iSlOoKrGuE;cEel 1;k 1;eFighten EownDy 1;aw3oB;eEshe1L; 1z8;lGol E;aEwi1E;bo5r2N;d 9low 1;aFeEip0;sh0;g 9ke0mErE;e 2P;gMlKnIrGsFzzE;le0;h 2M;e Em 1;aw3ba4up;d0isE;h 1;e El 16;aw3fJ;ht ba4ure0;eJnFsE;s 1;cGd E;fEoB;or;e C;dSl 1;cIll Erm0t0T;ap01bGd2in,oFtE;hrough;ff,ut,v7;a4ehi1X;e F;at0dge0nd Ey8;oBup;oGrE;ess 9op E;aw3bQin,o1A; 0Bubl8;aUhRlean 9oEross Cut 0X;me HoFuntE; o1Q;k 1l E;d2oB;aKbJforHin,oGtFuE;nd7;ogeth7;ut,v7;th,wE;ard;a4y;pEr1Cw3;art;eEipA;ck CeE;r 1;lKncel0rHsGtch FveA; in;o19up;h Ct6;ry FvE;e Y;aw3o15;l Em05;aEba4d2o13up;r0Yw3;a0Ke0Bl04oVrKuE;bblHcklWil02lGndlWrn 08st FtEy 13zz6;t C;in,o5up;k 9;e E;ov7;anNeaLiEush6;ghIng E;aFba4d2forEin,o5up;th;bo5lEr0Mw3;ong;teE;n 1;k E;d2in,o5up;ch0;arLgKil 9n8oHssGttlFunce Ex C;aw3ba4;e 9; ar0C;k Ct 1;e 1;d2up; d2;d 1;aJeed0oEurt0;cGw E;aw3ba4d2o5up;ck;k E;in,oL;ck0nk0st6; oKaHef 1nd E;d2ov7up;er;up;r0t E;d2in,oEup;ff,ut;ff,nE;to;ck Kil0nGrgFsE;h C;ainDe C;g CkD; on;in,o5; o5;aw3d2o5up;ay;cNdJsk Guction6; oB;ff;arEo5;ouE;nd;d E;d2oEup;ff,n;own;t E;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ay,ight,ust;an,o0;uld",Adjective:"true¦0:7P;1:84;2:83;3:8A;4:7W;5:5S;6:58;7:4O;8:4N;9:81;A:6I;a6Wb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uMvJwByear5;arp0eFholeEiDoB;man5oBu6P;d6Rzy;despr7Ls5S;!sa7;eClBste2A;co1Nl o4W;!k5;aCiBola4M;b89ce versa,ol5H;ca3gabo6Gnilla;ltUnHpCrb5Msu4tterB;!mo7G; Eb1SpDsBti1M;ca7etBide dKtairs;!ti2;er,i3U;f36to da1;aLbeco75convin29deIeHfair,ivers4knGprecedVrEsCwB;iel3Nritt6A;i1XuB;pervis0spec3Y;eBu5;cognHgul6Tl6T;own;ndi2v64xpect0;cid0rB;!grou5ZsB;iz0tood;b7pp0Dssu6UuthorB;iz0;i26ra;aGeEhDi6AoCrB;i1oubl0us3M;geth6p,rp6Vuc67;ough4Wril33;en60l32mpBrr2X;o6Ati2;boo,lBn;ent0;aWcVeThSiQmug,nobbi3LoOpNqueami3LtFuBymb6H;bDi gener5DpBrpri6D;erBre0N;! dup6b,i2C;du0seq52;anda77eGiFrBunni2y3F;aightCiB;ki2p0; fBfB;or5K;ll,r5S;aBreotyp0;dfa6Cmi2;a55ec2Gir1Hlend6Cot on; call0le,mb6phist1XrBu0Vvi48;d6Ary;gnifica3nB;ce51g7;am2Re6ocki2ut;cBda1em5lfi32ni1Wpa6Jre8;o1Er42;at5Gient28reec5G;cr0me;aJeEiCoB;bu60tt51uQy4;ghtBv4;!-2BfA;ar,bel,condi1du6Dfres5AlEpublic42sCtard0vB;ea26;is4CoB;lu1na3;aQe1Cuc4A;b5TciBllyi2;al,st;aOeLicayu8lac5Ropuli5QrCuB;bl5Jmp0n51;eGiDoB;!b07fu5RmiBp6;ne3si2;mCor,sBva1;ti8;a53e;ci5MmB;a0EiB;er,um;ac20rBti1;fe9ma2XpleBv38;xi2;rBst;allelDtB;-tiBi4;me;!ed;bLffJkIld fashion0nHpGrg1Eth6utFvB;al,erB;!all,niCt,wB;eiBrouB;ght;do0Ter,g2Qsi4B;en,posi1; boa5Og2Oli8;!ay; gua5MbBli8;eat;eDsB;cBer0Eole1;e8u3O;d2Xse;aJeIiHoBua4X;nFrCtB;ab7;thB;!eB;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1A;aIeGiDoBultip7;bi7derBl0Vnth5ot,st;a1n;nBx0;dblo0RiaBor;tu37;ande3Qdi4NnaBre;ci2;cBgenta,in,j01keshift,le,mmoth,ny,sculi8;ab33ho;aKeFiCoBu15;uti14vi2;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda3K;!-0C;ngu3Zst,tt6;ap1Xind5no0A;agg0uB;niMstifi0veni7;de4gno4Klleg4mQnEpso 20rB;a1rB;eleBita0J;va3; KaJbr0corIdGfluenQiQnFsEtCviB;go0Fti2;a9en3SoxB;ic3B;a8i2Vul0D;a1er,oce3;iCoB;or;re9;deq3Qppr33;fBsitu,vitro;ro3;mFpB;arDerfe9oBrop6;li1rtB;a3ed;ti4;eBi0S;d2Vn3C;aIeFiDoBumdr3I;ne36ok0rrBs08ur5;if2Z;ghfalut1QspB;an2X;aClB;liYpfA;li2;lEnDrB;d04roB;wi2;dy;f,low0;ainfAener2Oiga24lHoGraDuB;ilBng ho;ty;cCtB;efAis;efA;ne,od;ea2Iob4;aTeNinMlKoFrB;a1VeDoz1MustB;raB;ti2;e2Gq10tfA;oDrB; keeps,eBm6tuna1;g03ign;liB;sh;aBue3;g31tte1P;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i3l27r Cux,voB;ri1uri1;oBreac1E;ff;aLfficie3lKmHnFre9there4veExB;a9cess,pe1QtraCuB;be2Nl0E;!va1E;n,ryday; BcouraEti0O;rou1sui1;erCiB;ne3;gi2;abo23dMe17i1;g6sB;t,ygB;oi2;er;aReJiDoBrea14ue;mina3ne,ubB;le,tfA;dact1Bfficu1OsCvB;er1K;creDeas0gruntl0hone1FordCtB;a3ressM;er5;et; HadpGfFgene1PliDrang0spe1PtCvoB;ut;ail0ermin0;be1Mca1ghB;tfA;ia3;an;facto;i5magBngeroUs0G;ed,i2;ly;ertaMhief,ivil,oDrB;aBowd0u0G;mp0vZz0;loImGnCrrBve0P;e9u1I;cre1fu0LgrDsCtB;empo0Dra0E;ta3;ue3;mer08pleB;te,x;ni4ss4;in;aNeIizarHlFoCrB;and new,isk,okN;gCna fiUttom,urgeoB;is;us;ank,indB;!i2;re;autifAhiDloCnBst,yoD;eUt;v0w;nd;ul;ckCnkru0WrrB;en;!wards; priori,b0Mc0Jd09fra08g04h03lYmWntiquVppSrMsIttracti06utheHvEwB;aCkB;wa0T;ke,re;ant garCerB;age;de;ntU;leep,piDsuDtonB;isB;hi2;ri2;ab,bitEroDtiB;fiB;ci4;ga3;raB;ry;are3etiNrB;oprB;ia1;at0;aJuB;si2;arEcohCeBiIl,oof;rt;olB;ic;mi2;ead;ainDgressiConiB;zi2;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda3;e3oCtra9;ct;lu1rbi2;ng;te;pt;aBve;rd;aze,e;ra3;nt",Comparable:"true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;my;erce8n6rm;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;e4i3;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¦bOeJfDhundredNmOninAone,qu8s6t0zeroN;enMh3rNw0;e0o;l0ntD;fHve;ir0ousandKree;d,t6;e0ix8;cond,pt1ven7xt1;adr0int0;illionD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en0;!th;illion0;!s,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¦bHeEf8hundred,mHnineAone,qu6s4t0zero;en,h2rGw0;e0o;lve,n8;irt9ousandEree;e0ix5;pt1ven4xt1;adr0int0;illion;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion0;!s",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¦a08by 06d02eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,well,ye0;p,s; to,wards5;h1iny bit,o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hYtimes,w09;a1e0;alT;ndomSthN;ar excellDer0oint blank; Nhaps;f3n0;ce0ly;! 0;ag02moW; courIten;ewKo0; longEt 0;onIwithstanding;aybe,eanwhiAore0;!ovB;! aboU;deed,steV;en0;ce;or2u0;lArther0;!moJ; 0ev3;examp0good,suH;le;n1v0;er; mas0ough;se;e0irect1; 1finite0;ly;ju8trop;far,n0;ow; DbroCd nauseam,gBl6ny3part,s2t 0w4;be6l0mo6wor6;arge,ea5; soon,ide;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},pt=["Person","Place","Organization"],ft={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"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},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:pt},Actor:{isA:"Noun",notA:pt},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:pt},Demonym:{isA:["Noun","ProperNoun"],notA:pt},Possessive:{isA:"Noun"}},mt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","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:"PastTense"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},vt={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"}},bt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],yt={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:bt},Conjunction:{notA:bt},Preposition:{notA:bt},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"]}},wt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},At=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:wt[t]?e[t].color=wt[t]:e[t].isA.some((function(r){return!!wt[r]&&(e[t].color=wt[r],!0)}))})),e},kt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Nt=function(e,t,r){var n=Ct(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Jt.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Wt(e),r)).Gerund&&(r.Gerund=Qt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Qt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Qt.PresentTense(e)),r},Zt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Yt=[/ary$/],er={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},tr=[{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"}],rr=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],nr=[/ary$/,/ous$/],ar={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},ir=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],or={toSuperlative:function(e){if(er.hasOwnProperty(e))return er[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=cr(e);return null!==n?n:lr.test(e)?e+"es":e+"s"},dr=[[/([^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"],[/(eas)es$/i,"$1e"],[/(..[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,""]],gr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))},jr={tag:function(e,t){return e?(Er(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(Er(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},xr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Cr=function(e){return e.split(/[ -]/g)},Nr=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Cr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},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,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=Dr(o)),i=ht(o,r.world,r.pool());var s=r.buildFrom(i);s.tagger(),i=s.list}if(!0===n.keepTags){var u=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){u[t]&&e.tagSafe(u[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Vr=N((function(e,t){var r=function(e,t){var r=ht(e,t.world)[0],n=t.buildFrom([r]);return n.tagger(),t.list=n.list,t};t.append=function(e){var t=this;return e?this.found?(this.uncache(),this.list.forEach((function(r){var n=ht(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):r(e,this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?this.found?(this.uncache(),this.list.forEach((function(r){var n=ht(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):r(e,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 t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Hr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),Sr=N((function(e){var t="",r=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};qr.alphabetical=qr.alpha,qr.wordcount=qr.wordCount;var Jr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Kr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Jr.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,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===hn.test(i)){var s=i.replace(hn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},pn=/[\'‘’‛‵′`´]$/,fn=/^(m|k|cm|km|m)\/(s|h|hr)$/,mn=[[/^[\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"],[/^[0-9]{1,4}-[a-z]{2,9}-[0-9]{1,4}$/i,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"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][ -])?[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,3}(st|nd|rd|th)?[-–][0-9\.]{1,3}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],vn=/^[IVXLCDM]{2,}$/,bn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,yn="Adjective",wn="Infinitive",An="PresentTense",kn="Singular",$n="PastTense",Pn="Adverb",Bn="Expression",Gn="Actor",En="Verb",jn="Noun",xn="LastName",Cn={a:[[/.[aeiou]na$/,jn],[/.[oau][wvl]ska$/,xn],[/.[^aeiou]ica$/,kn],[/^([hyj]a)+$/,Bn]],c:[[/.[^aeiou]ic$/,yn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,$n],[/.[aeo]{2}[bdgmnprvz]ed$/,$n],[/.[aeiou][sg]hed$/,$n],[/.[aeiou]red$/,$n],[/.[aeiou]r?ried$/,$n],[/.[bcdgtr]led$/,$n],[/.[aoui]f?led$/,$n],[/.[iao]sed$/,$n],[/[aeiou]n?[cs]ed$/,$n],[/[aeiou][rl]?[mnf]ed$/,$n],[/[aeiou][ns]?c?ked$/,$n],[/[aeiou][nl]?ged$/,$n],[/.[tdbwxz]ed$/,$n],[/[^aeiou][aeiou][tvx]ed$/,$n],[/.[cdlmnprstv]ied$/,$n],[/[^aeiou]ard$/,kn],[/[aeiou][^aeiou]id$/,yn],[/.[vrl]id$/,yn]],e:[[/.[lnr]ize$/,wn],[/.[^aeiou]ise$/,wn],[/.[aeiou]te$/,wn],[/.[^aeiou][ai]ble$/,yn],[/.[^aeiou]eable$/,yn],[/.[ts]ive$/,yn]],h:[[/.[^aeiouf]ish$/,yn],[/.v[iy]ch$/,xn],[/^ug?h+$/,Bn],[/^uh[ -]?oh$/,Bn]],i:[[/.[oau][wvl]ski$/,xn]],k:[[/^(k){2}$/,Bn]],l:[[/.[gl]ial$/,yn],[/.[^aeiou]ful$/,yn],[/.[nrtumcd]al$/,yn],[/.[^aeiou][ei]al$/,yn]],m:[[/.[^aeiou]ium$/,kn],[/[^aeiou]ism$/,kn],[/^h*u*m+$/,Bn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,yn],[/[^aeiou]ician$/,Gn],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,Bn],[/^(yo)+$/,Bn],[/^woo+[pt]?$/,Bn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,kn],[/[^i]fer$/,wn],[/.[^aeiou][ao]pher$/,Gn]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,yn],[/[aeiou].*ist$/,yn],[/^[a-z]et$/,En]],s:[[/.[^aeiou]ises$/,An],[/.[rln]ates$/,An],[/.[^z]ens$/,En],[/.[lstrn]us$/,kn],[/.[aeiou]sks$/,An],[/.[aeiou]kes$/,An],[/[aeiou][^aeiou]is$/,kn],[/[a-z]\'s$/,jn],[/^yes+$/,Bn]],v:[[/.[^aeiou][ai][kln]ov$/,xn]],y:[[/.[cts]hy$/,yn],[/.[st]ty$/,yn],[/.[gk]y$/,yn],[/.[tnl]ary$/,yn],[/.[oe]ry$/,kn],[/[rdntkbhs]ly$/,Pn],[/...lly$/,Pn],[/[bszmp]{2}y$/,yn],[/.(gg|bb|zz)ly$/,yn],[/.[aeiou]my$/,yn],[/[ea]{2}zy$/,yn],[/.[^aeiou]ity$/,kn]]},Nn="Adjective",Fn="Infinitive",On="PresentTense",Dn="Singular",Tn="PastTense",Vn="Adverb",zn="Plural",In="Actor",Hn="Verb",Mn="Noun",Sn="LastName",Ln="Modal",_n=[null,null,{ea:Dn,ia:Mn,ic:Nn,ly:Vn,"'n":Hn,"'t":Hn},{oed:Tn,ued:Tn,xed:Tn," so":Vn,"'ll":Ln,"'re":"Copula",azy:Nn,end:Hn,ped:Tn,ffy:Nn,ify:Fn,ing:"Gerund",ize:Fn,lar:Nn,mum:Nn,nes:On,nny:Nn,oid:Nn,ous:Nn,que:Nn,rmy:Nn,rol:Dn,sis:Dn,zes:On},{amed:Tn,aped:Tn,ched:Tn,lked:Tn,nded:Tn,cted:Tn,dged:Tn,akis:Sn,cede:Fn,chuk:Sn,czyk:Sn,ects:On,ends:Hn,enko:Sn,ette:Dn,fies:On,fore:Vn,gate:Fn,gone:Nn,ices:zn,ints:zn,ines:zn,ions:zn,less:Vn,llen:Nn,made:Nn,nsen:Sn,oses:On,ould:Ln,some:Nn,sson:Sn,tage:Fn,teen:"Value",tion:Dn,tive:Nn,tors:Mn,vice:Dn},{tized:Tn,urned:Tn,eased:Tn,ances:zn,bound:Nn,ettes:zn,fully:Vn,ishes:On,ities:zn,marek:Sn,nssen:Sn,ology:Mn,ports:zn,rough:Nn,tches:On,tieth:"Ordinal",tures:zn,wards:Vn,where:Vn},{auskas:Sn,keeper:In,logist:In,teenth:"Value"},{opoulos:Sn,borough:"Place",sdottir:Sn}],qn={":(":!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){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}fn.test(n.text)&&n.tag("Unit","per-sec",r)},regex:function(e,t){for(var r=e.text,n=0;n=2&&vn.test(r)&&bn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===_n[i.length].hasOwnProperty(i)){var o=_n[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===Cn.hasOwnProperty(n))for(var a=Cn[n],i=0;i35)}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Jn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),qn.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Rn=function(e,t){var r=e.world;Kn.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},aa={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]},ia=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],oa=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],sa=[/i$/,/ae$/],ua=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(ia.find((function(t){return e.tags[t]})))return;if(aa.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(aa.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(oa.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(sa.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},la=["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}),{}),ca=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()))},ha=/^[A-Z]('s|,)?$/,da=/([A-Z]\.){2}[A-Z]?/i,ga={I:!0,A:!0},pa={neighbours:Xn,case:ea,stem:na,plural:ua,organizations:function(e,t){for(var r=0;r0?ai=ai.concat(t):ai.push(e)})),ai.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Sa(r),words:Sa(n)}),e}));var ii=ai,oi=function(e){ii.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Sa(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},gi=function(e){var r=function(e){a(i,e);var r=u(i);function i(e,n,a){var o;return t(this,i),(o=r.call(this,e,n,a)).contracted=null,o}return n(i,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r1&&void 0!==arguments[1]?arguments[1]:{},n=this.match("(#City && @hasComma) (#Region|#Country)"),a=this.not(n).splitAfter("@hasComma"),i=(a=a.concat(n)).quotations();return i.found&&(a=a.splitOn(i.eq(0))),a=a.match("#Noun+ (of|by)? the? #Noun+?"),!0!==t.keep_anaphora&&(a=(a=(a=(a=a.not("#Pronoun")).not("(there|these)")).not("(#Month|#WeekDay)")).not("(my|our|your|their|her|his)")),a=a.not("(of|for|by|the)$"),"number"==typeof e&&(a=a.get(e)),new r(a.list,this,this.world)},e},ji=/\(/,xi=/\)/,Ci=function(e){var r=function(e){a(i,e);var r=u(i);function i(){return t(this,i),r.apply(this,arguments)}return n(i,[{key:"unwrap",value:function(){return this.list.forEach((function(e){var t=e.terms(0);t.pre=t.pre.replace(ji,"");var r=e.lastTerm();r.post=r.post.replace(xi,"")})),this}}]),i}(e);return e.prototype.parentheses=function(e){var t=[];return this.list.forEach((function(e){for(var r=e.terms(),n=0;n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return ui(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Qi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Qi(e,this,this.world)},Qi.prototype.fromText=function(e){var t=ht(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Qi.prototype,Ui.misc),Object.assign(Qi.prototype,Ui.selections),Wi(Qi);var Xi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Xi).forEach((function(e){return Qi.prototype[e]=Qi.prototype[Xi[e]]}));var Zi=Qi,Yi=function(e){var t=e.termList();return gn(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=ht(e,r),a=new Zi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=ht(e,n),i=new Zi(a,null,n);return t&&Yi(i),i},n.extend=function(e){return e(Zi,r,this,_e,oe,Je),this},n.fromJSON=function(e){var t=dt(e,r);return new Zi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.world=function(){return r},n.parseMatch=function(e){return ze(e)},n.version="13.7.0",n.import=n.load,n}(new kr)})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index daf1f8604..bfba57060 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -1,4 +1,4 @@ -/* compromise 13.6.0 MIT */ +/* compromise 13.7.0 MIT */ function _typeof(obj) { "@babel/helpers - typeof"; @@ -552,7 +552,7 @@ var _02Punctuation = createCommonjsModule(function (module, exports) { exports.hasHyphen = function () { - var hyphen = /(-|–|—)/; + var hyphen = /^(-|–|—)$/; return hyphen.test(this.post) || hyphen.test(this.pre); }; /** a dash separates words - like that */ @@ -3434,7 +3434,7 @@ var fromJSON = function fromJSON(json, world) { var fromJSON_1 = fromJSON; -var _version = '13.6.0'; +var _version = '13.7.0'; var _data = { "Comparative": "true¦better", @@ -3445,25 +3445,26 @@ var _data = { "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,lest,unless", + "Preposition": "true¦'o,-,aLbIcHdGexcept,fFiDmidQnotwithstandiRoBpSqua,sAt6u3vi2w0;/o,hereNith0;!in,oR;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oJ;ans,ince,o that;',f0n2ut;!f;f,n0;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", "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", + "Conjunction": "true¦&,aFbBcuz,how9in caEno8o7p5supposing,t2v1wh0yet;eth9ile;ers4s;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh", + "Abbreviation": "true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Pronoun": "true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s", - "Singular": "true¦0:10;1:13;a0Zb0Nc0Ed07e04fZgUhQiPjel0kitty,lOmKnJoIpEquestion mark,rCs7t4u2womY;nc0Us 2;doll0Gst0I; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst0Z;ep3ri1u2;de0Sff;faOmoO;st0Oze;al0i1o2;om,se;a4i0Ll07r3u2;dMrpoE;erogaXobl0Q;rt,te0K;bjUceHthers;othi1umb0G;a4ee06o2;del,m2nopo0rni1th0E;!my;n,yf0;i0unch;ci1nsect;ead start,o2;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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", + "Singular": "true¦0:14;1:17;a13b0Rc0Id0Be08f03gYhUiTjel0kitty,lRmNnMoLpGquestionFrDs8t5u3w2;ay,om01;nc0Xs 2;doll0Jst0L; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst12;ep3ri1u2;de0Vff;faRmoR;st0Rze;al0i1o2;om,se;! mark;a5i0Nla4r3u2;dOrpoG;erogaZobl0S;te,y0K;rt,te0L;bjVceIthers;othi1umb0H;a4ee07o2;del,m2nopo0rni1th0F;!my;n,yf0;i2unch;ly,ne;ci1nsect;ead start,o2uman right;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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;ailNcientJecretary,oldiGu0;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¦a01bYcQdPeOfiJgIhon,jr,king,lHmCoffic00p7queen,r3s0taoiseach,vice6;e1fc,gt,ir,r,u0;ltRpt,rg;cond liInBrgeaJ;abbi,e0;ar1p9s,v0;!erend; admirX;astOhd,r0vt;esideDi1of0;!essM;me mini4nce0;!ss;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¦0:1F;a1Mb1Ec15d12e0Vf0Pg0Ih0Di09j08knowled1Ll03mVnews,oUpRrMsBt6vi5w1;a3ea06i2oo1;d,l;ldlife,ne;rmth,t0;neg12ol07tae;e4h3oothpaste,r1una;affQou1;ble,sers,t;ermod1Hund0;a,nnis;a9cene05eri0Sh8il7kittl0Snow,o6p4t2u1;g0Vnshi0L;ati1Ge1;am,el;ace19e1;ci0Ned;ap,cc0;k,v0;eep,ingl0K;d08fe13l1nd;m0Wt;a4e2ic1;e,ke0H;c1laxa0Dsearch;ogni0Crea0C;bi0Din;aKe2hys13last6o1ressZ;lit12rk,w0;a0YtrV;bstetr10il,xygen;a6e4ilk,o3u1;mps,s1;ic;nHo0E;a1chan0V;sl03t;chine1il,themat0T; learn09ry;aught0e3i2ogi0Qu1;ck,g0G;ce,ghtn06ngui0OteratL;a1isK;th0;ewel8usti0J;ce,mp1nformaStself;a1ortan0H;ti1;en0F;a4isto3o1;ck1mework,n1spitali09;ey;ry;ir,libut,ppiB;ene4o2r1um,ymna0B;aAound;l1ssip;d,f; 1t08;editOpo1;ol;i5lour,o2urnit1;ure;od,rgive1uri0wl;ne1;ss;c7sh;conomZduca6lectr5n3quip4thZvery1;body,o1thF;ne;joy1tertain1;ment;iciNonU;tiG;ar2iabet1raugh2;es;ts;a8elcius,h4ivPl3o1urrency;al,ld w1nfusiBttB;ar;assMoth3;aos,e1;e2w1;ing;se;r5sh;a5eef,i2lood,owls,read,utt0;er;lliar2s1;on;ds;g1ss;ga1;ge;c6dvi5ero3ir2mnes1rt,thlet8;ty;craft;b5d1naut5;ynam4;ce;id,ou1;st1;ics", - "Infinitive": "true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Ps7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3ZreseC;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr4;intaEna4rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mBnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;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,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Gm25n22o1Xp1Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Qs7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3Zr0K;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0J;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aMeLiIoHuG;ltip3Crd0;nit11ve;nHrr10sreprG;eseC;d,g6us;asu2lt,n0Mr4;intaEna4rHtG;ch,t0;ch,kGry;et;aKeJiIoGu1A;aGck,ok,ve;d,n;ft,ke,mBnk,st2Vve;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFt,x;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on", "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;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;a1ern1Mi0;en2Hlni2Z;lenc2Uncouv0Gr2Gughn;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¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "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:FX;1:G1;2:FQ;3:FC;4:FB;5:FR;6:EQ;7:EO;8:GE;9:EY;A:GA;B:E4;C:G7;D:FN;E:FK;F:EF;aE1bD3cB7dAHe9Ff90g8Gh82i7Rj6Tk5Zl4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7DeHol1TvG;et7onB8;le0sen3;an9endBMhiB3iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9WenG0;kCYtor3;da,l8Unus,rG;a,nGoniD1;a,iDB;leGnesEB;nDKrG;i1y;aSePhNiMoJrGu6y4;acG2iGu0E;c3na,sG;h9Lta;nHrG;a,i;i9Iya;a5HffaCFna,s5;al3eGomasi0;a,l8Fo6Wres1;g7To6VrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs5tGwa0;ia0um;a,yn;iGya;a,ka,s5;a4e4iGmC9ra;!ka;a,t5;at5it5;a05carlet2Ye04hUiSkye,oQtMuHyG;bFIlvi1;e,sHzG;an2Tet7ie,y;anGi8;!a,e,nG;aEe;aIeG;fGl3DphG;an2;cF7r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh74;dy;aKeGirlBKo0y6;ba,e0i6lIrG;iGrBOyl;!d6Z;ia,lBU;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Xre0;bMdLi9lKmIndHrGs5vannaE;aEi0;ra,y;aGi4;nt5ra;lBMome;e,ie;in1ri0;a02eXhViToHuG;by,thBJ;bQcPlOnNsHwe0xG;an93ie,y;aHeGie,lC;ann8ll1marBEtB;!lGnn1;iGyn;e,nG;a,d7V;da,i,na;an9;hel52io;bin,erByn;a,cGkki,na,ta;helBYki;ea,iannDWoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cAQkaE;chGe,i0mo0n5DquCCvDy0;aCBelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAV;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4No6rvaBAtHulG;a,et7in1;ricGsy,tA7;a,e,ia;ctav3deHfAVlGphAV;a,ga,iv3;l3t7;aQePiJoGy6;eHrG;aEeDma;ll1mi;aKcIkGla,na,s5ta;iGki;!ta;hoB1k8AolG;a,eBG;!mh;l7Sna,risF;dIi5OnHo22taG;li1s5;cy,et7;eAiCN;a01ckenz2eViLoIrignayani,uriBFyG;a,rG;a,na,tAR;i4ll9WnG;a,iG;ca,ka,qB3;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9IlG;iGy;cent,e;red;!e6;ae6el3F;ag4JgKi,lHrG;edi60isFyl;an2iGliF;nGsAL;a,da;!an,han;b08c9Dd06e,g04i03l01nZrKtJuHv6Rx86yGz2;a,bell,ra;de,rG;a,eD;h74il9t2;a,cSgOiJjor2l6Hn2s5tIyG;!aGbe5PjaAlou;m,n9R;a,ha,i0;!aIbAKeHja,lCna,sGt52;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Jueri7;!t;!ry;et3HiB;elGi60y;a,l1;dGon,ue6;akranBy;iGlo35;a,ka,n9;a,re,s2;daGg2;!l2V;alCd2elGge,isBFon0;eiAin1yn;el,le;a0He07iWoQuKyG;d3la,nG;!a,dHe9RnGsAP;!a,e9Q;a,sAN;aB0cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a29e,l24n9;is,l1FrHtt2uG;el6is1;aIeHi8na,rG;a6Yi8;lei,n1tB;!in1;aPbb82d3lLnIsHv3zG;!a,be4Jet7z2;a,et7;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Fe;!n4E;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes5na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as5is5oG;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,stD;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s5;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlCri0y;ar5Cer5Cie,leDr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelCd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lCph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et7iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lCquelG;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;aEnaE;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolC;acHetGisel9;a,chD;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et7i5T;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;d0FileDkBl00mUn4ArRsMtLuKvG;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,eDis,la,othGthy;ea,y;an09naEonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraEra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et7iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleD;en,t7;aIeoHotG;il4B;!pat4;ir8rIudG;et7iG;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,eGot7;n1t7;!sa;d4el1PtG;al,el1O;cHlG;es7i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleDrCy;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;nwCok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaEvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt5yl;adHiG;ce;et7iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes5;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t7;an19elG;le;aYdWeUgQiOja,nHtoGya;inet7n3;!aJeHiGmI;e,ka;!mGt7;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t7;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;c3is5jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naE;c5da,leDmLnslKsG;haElG;inGyW;g,n;!h;ey;ee;en;at5g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lCsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", @@ -3476,17 +3477,16 @@ var _data = { "MaleName": "true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:BZ;6:AT;7:9V;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,nde7sB;!l6t1;de,lCrr5yB;l1ne;lBt3;a93y;aEiBladimir;cCha0kt5CnceBrg9Bva0;!nt;ente,t5A;lentin49n8Y;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,l6;lom1nA3uB;leyma8ta;dBl7Jm1;!n6;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;e4Qg3n6olfo,ri68;co,ky;bAe9U;cBl6;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub5x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw5;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;!e7;a78ik;house,o03t1;e,olB;aj;ah,hBk6;a4eB;al,l;hClv2rB;le,ri7v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe7;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha7tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe7;!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;a7ri4N;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;cHd5kGmFrDsCvi3yB;!d5s1;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;a43d5;an,s0;lEo4FrDuBv6;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;ffr6rge;bri4l5rBv2;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;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym5zra;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;a8dl6nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e7ie,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,iDne7rByl;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,lCro7y;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;!foBl6y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n6rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid5ja0ElZmXnPputsiOrFsaEuCveBya0ziz;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,beOd5eIfFi,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", + "PhrasalVerb": "true¦0:7B;1:6Z;2:7N;3:7D;4:6S;5:7Q;6:7F;7:6Y;8:6L;9:6M;A:5P;B:7G;C:7A;D:79;a7Rb6Bc5Kd5Ge5Ef4Cg3Uh3Eiron0j3Ak35l2Pm2Fn2Do2Bp1Tquiet70r1Hs0BtRuPvacuum 1wHyammerDzE;eroAip FonE;e0k0;by,up;aKeHhGiForErit59;d 1k2X;mp0n2Ppe0r8s8;eel Cip 7V;aFiE;gh 08rd0;n Cr 3J;it 5Sk8lk6rm 63sh 7Et6Hv4V;rgeDsE;e 9herA;aTeRhPiLoJrGuEype 60;ckArn E;d2in,o3Mup;aFiEot0y 2D;ckle6Ip 7K;ck6Hde Y;ne6Gp Es4I;d2o6Uup;ck GdFe Egh62me0p o0Gre0;aw3ba4d2in,up;e 5Ty 1;by,oB;ink Erow 64;ba4ov7up;aEe 4Nll4U;m 1r X;ckDke Flk E;ov7u4V;aEba4d2in,o36up;ba4ft7p50w3;a0Ic0He0Bh07i05l01m00nZoYpTquare StKuIwE;earGiE;ngFtch E;aw3ba4o6Y; by;ck Eit 1m 1ss0;in,up;aJe0UiIoGrEuc39;aigh1RiE;ke 67n33;p Erm1U;by,in,oB;n34r 1tc3N;c33mp0nd Er6Qve6y 1;ba4d2up;d2oBup;ar30eHiGlFrEurD;ingDuc8;a38it 3Z;l10n 1;e5Jll0;be4Hrt0;ap 4Jow C;ash 56oke0;eep FiEow 9;c3Qp 1;in,oE;ff,v7;gn 4Ong32t Ez8;d2o5up;aGoEu4L;ot Eut0w 65;aw3ba4f3BoB;c2JdeAk50ve6;e Ill0nd HtE; Etl49;d2in,o5upE;!on;aw3ba4d2in,o22up;o5to;al4Tout0rap4T;il6v8;aOeLiKoHuE;b 4Mle0n Estl8;aEba4d2in5Bo3Mt34u3K;c21w3;ot FuE;g2Ond6;a21f2Vo5;ng 4Wp6;aEel6inAnt0;c56d E;o2Xu0F;c1Zt0;aReQiPlNoLrIsyc2DuE;ll Gt E;aEba4d2in,o1Kt39up;p3Ew3;ap3Dd2in,o5t37up;attleDess FiHoE;p 1;ah1Kon;iEp 5Ar3Sur4Cwer 5A;nt0;ay46uE;gAmp 9;ck 5Ag0leDn 9p43;el 4EncilA;c3Wir 2Ln0ss GtFy E;ba4oB; d2c21;aw3ba4o15;pEw3R;e3Qt C;arrow40erd0oE;d6te3Z;aLeJiIoGuE;ddl8lE;l 3D;c19p 1uth6ve E;al3Hd2in,o5up;ss0x 1;asur8lt 9ss E;a1Cup;ke En 9r35s1Nx0;do,o44up;aRePiKoEuck0;aIc3Dg HoEse0;k Ese3B;aft7ba4d2forw2Fin42ov7uE;nd7p;in,o0L;d 9;e HghtGnFsEv1U;ten 4I;e 1k 1; 1e33;ar48d2;av1It 33velE; o3Q;c8p 1sh EtchDugh6y1W;in3Qo5;eFick6nock E;d2o3M;eEyA;l 2Mp E;aw3ba4d2fTin,o06to,up;aGoFuE;ic8mpA;ke2Xt31;c36zz 1;aQeLiIoFuE;nker2Yrry 1s0V;lEneArse2T;d Ee 1;ba4d2fast,o00up;de Ft E;ba4on,up;aw3o5;aElp0;d Gl 27r Et 1;fEof;rom;in,oSu1D;c00m 1nEve it,z22;d Eg 2CkerG;d2in,o5;aSeMive Kloss 20oGrFunE; f0N;in3Eow 28; Eof 0V;aFb1Ait,oEr3At0Pu15;ff,n,v7;bo5ft7hKw3;aw3ba4d2in,oEup,w3;ff,n,ut;a1Aek0t E;aFb14d2oEr34up;ff,n,ut,v7;cFhEl1Ur32t,w3;ead;ross;d aFnE;g 1;bo5;a09e02iSlOoKrGuE;cEel 1;k 1;eFighten EownDy 1;aw3oB;eEshe1L; 1z8;lGol E;aEwi1E;bo5r2N;d 9low 1;aFeEip0;sh0;g 9ke0mErE;e 2P;gMlKnIrGsFzzE;le0;h 2M;e Em 1;aw3ba4up;d0isE;h 1;e El 16;aw3fJ;ht ba4ure0;eJnFsE;s 1;cGd E;fEoB;or;e C;dSl 1;cIll Erm0t0T;ap01bGd2in,oFtE;hrough;ff,ut,v7;a4ehi1X;e F;at0dge0nd Ey8;oBup;oGrE;ess 9op E;aw3bQin,o1A; 0Bubl8;aUhRlean 9oEross Cut 0X;me HoFuntE; o1Q;k 1l E;d2oB;aKbJforHin,oGtFuE;nd7;ogeth7;ut,v7;th,wE;ard;a4y;pEr1Cw3;art;eEipA;ck CeE;r 1;lKncel0rHsGtch FveA; in;o19up;h Ct6;ry FvE;e Y;aw3o15;l Em05;aEba4d2o13up;r0Yw3;a0Ke0Bl04oVrKuE;bblHcklWil02lGndlWrn 08st FtEy 13zz6;t C;in,o5up;k 9;e E;ov7;anNeaLiEush6;ghIng E;aFba4d2forEin,o5up;th;bo5lEr0Mw3;ong;teE;n 1;k E;d2in,o5up;ch0;arLgKil 9n8oHssGttlFunce Ex C;aw3ba4;e 9; ar0C;k Ct 1;e 1;d2up; d2;d 1;aJeed0oEurt0;cGw E;aw3ba4d2o5up;ck;k E;in,oL;ck0nk0st6; oKaHef 1nd E;d2ov7up;er;up;r0t E;d2in,oEup;ff,ut;ff,nE;to;ck Kil0nGrgFsE;h C;ainDe C;g CkD; on;in,o5; o5;aw3d2o5up;ay;cNdJsk Guction6; oB;ff;arEo5;ouE;nd;d E;d2oEup;ff,n;own;t E;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ay,ight,ust;an,o0;uld", - "Adjective": "true¦0:7N;1:82;2:81;3:88;4:7U;5:5R;6:57;7:4N;8:4M;9:7Z;A:6G;B:7L;a6Vb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uNvKwCyear5;arp0eGholeFiEoC;man5oCu6O;d6Qzy;despr7Ks5S;!sa7;eDlCste2A;co1Nl o4W;!k5;aDiCola4M;b88ce versa,ol5H;ca3gabo6Fnilla;ltUnHpDrb5Msu4tterC;!mo7F; f3Ab1SpEsCti1M;ca7etCide dKtairs;!ti2;er,i3U;aMbeco75convin2AdeJeIfair,ivers4knHprecedWrFsDwC;iel3Oritt6A;i1YuC;pervis0spec3Z;eCu5;cognIgul6Tl6T;own;ndi2v64xpect0;cid0rC;!grou5ZsC;iz0tood;b7pp0Essu6UuthorC;iz0;i27ra;aHeFhEi6AoDrC;i1oubl0us3N;geth6p,rp6Vuc67;ough4Xril34;en60l33mpCrr2Y;o6Ati2;boo,lCn;ent0;aXcWeUhTiRmug,nobbi3MoPpOqueami3MtGuCymb6H;bEi gener5EpCrpri6D;erCre0O;! dup6b,i2D;du0seq53;anda77eHiGrCunni2y3G;aightDiC;ki2p0; fCfC;or5K;ll,r5S;aCreotyp0;dfa6Cmi2;a56ec2Hir1Ilend6Cot on; call0le,mb6phist1YrCu0Wvi49;d6Ary;gnifica3nC;ce52g7;am2Se6ocki2ut;cCda1em5lfi33ni1Xpa6Jre8;o1Fr43;at5Gient29reec5G;cr0me;aKeFiDoC;bu60tt51uRy4;ghtCv4;!-2CfA;ar,bel,condi1du6Dfres5AlFpublic43sDtard0vC;ea27;is4DoC;lu1na3;aRe1Duc4B;b5TciCllyi2;al,st;aPeMicayu8lac5Ropuli5QrDuC;bl5Jmp0n51;eHiEoC;!b08fuBmiCp6;ne3si2;mDor,sCva1;ti8;a53e;ciBmC;a0FiC;er,um;ac21rCti1;fe9ma2YpleCv39;xi2;rCst;allelEtC;-tiCi4;me;!ed;bMffKkJld fashion0nIpHrg1Fth6utGvC;al,erC;!all,niDt,wC;eiCrouC;ght;do0Uer,g2Rsi4B;en,posi1; boa5Og2Pli8;!ay; gua5MbCli8;eat;eEsC;cCer0Fole1;e8u3P;d2Yse;aKeJiIoCua4X;nGrDtC;ab7;thC;!eC;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1B;aJeHiEoCultip7;bi7derCl0Wnth5ot,st;a1n;nCx0;dblo0SiaCor;tu38;ande3Qdi4NnaCre;ci2;cCgenta,in,j02keshift,le,mmoth,ny,sculi8;ab34ho;aLeGiDoCu16;uti15vi2;mDteraC;l,te;it0;ftFgCth4;al,eDitiC;ma1;nda3K;!-0D;ngu3Zst,tt6;ap1Yind5no0B;agg0uC;niNstifi0veni7;de4gno4Klleg4mRnFpso 21rC;a1rC;eleCita0K;va3; LaKbr0corJdHfluenRiRnGsFtDviC;go0Gti2;a9enBoxC;ic3B;a8i2Vul0E;a1er,oce3;iDoC;or;re9;deq3Qppr33;fCsitu,vitro;ro3;mGpC;arEerfe9oCrop6;li1rtC;a3ed;ti4;eCi0T;d2VnB;aJeGiEoCumdr3I;ne36ok0rrCs09ur5;if2Z;ghfalut1RspC;an2X;aDlC;liZpfA;li2;lFnErC;d05roC;wi2;dy;f,low0;ainfAener2Oiga24lIoHraEuC;ilCng ho;ty;cDtC;efAis;efA;ne,od;ea2Iob4;aUeOinNlLoGrC;a1VeEoz1MustC;raC;ti2;e2Gq11tfA;oErC; keeps,eCm6tuna1;g04ign;liC;sh;aCue3;g31tte1P;al,i1;dGmDrC;ti7;a7ini8;ne;le; up;bl0i3lBr Dux,voC;ri1uri1;oCreac1E;ff;aMfficie3lLmInGre9there4veFxC;a9cess,pe1QtraDuC;be2Nl0F;!va1E;n,ryday; CcouraFti0P;rou1sui1;erDiC;ne3;gi2;abo23dNe17i1;g6sC;t,ygC;oi2;er;aSeKiEoCrea14ue;mina3ne,ubC;le,tfA;dact1Bfficu1OsDvC;erB;creEeas0gruntl0hone1FordDtC;a3ressN;er5;et; IadpHfGgene1PliErang0spe1PtDvoC;ut;ail0ermin0;be1Mca1ghC;tfA;ia3;an;facto;i5magCngeroVs0G;ed,i2;ly;ertaNhief,ivil,oErC;aCowd0u0G;mp0vZz0;loJmHnDrrCve0P;e9u1I;cre1fu0LgrEsDtC;empo0Dra0E;ta3;ue3;mer08pleC;te,x;ni4ss4;in;aNeJizarIlGoDrC;and new,isk,okN;gDna fiUttom,urgeoC;is;us;ank,indC;!i2;re;autifAhiDlov0nCst,yoD;eUt;nd;ul;ckDnkru0XrrC;en;!wards; priori,b0Nc0Kd0Afra09g05h04lZmXntiquWppTrNsJttracti07utheIvFwC;aDkC;wa0U;ke,re;ant garDerC;age;de;ntV;leep,piEsuEtonC;isC;hi2;ri2;ab,bitFroEtiC;fiC;ci4;ga3;raC;ry;are3etiOrC;oprC;ia1;at0;aKuC;si2;arFcohDeCiJl,oof;rt;olC;ic;mi2;ead;ainEgressiDoniC;zi2;ve;st;id; JeHuGvC;aDerB;se;nc0;ed;lt;pt,qC;ua1;hoc,infinitC;um;cuDtu4u1;al;ra1;erMlLoJruIsDuC;nda3;e3oDtra9;ct;lu1rbi2;ng;te;pt;aCve;rd;aze,e;ra3;nt", - "Comparable": "true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;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;e4i3;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", + "Adjective": "true¦0:7P;1:84;2:83;3:8A;4:7W;5:5S;6:58;7:4O;8:4N;9:81;A:6I;a6Wb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uMvJwByear5;arp0eFholeEiDoB;man5oBu6P;d6Rzy;despr7Ls5S;!sa7;eClBste2A;co1Nl o4W;!k5;aCiBola4M;b89ce versa,ol5H;ca3gabo6Gnilla;ltUnHpCrb5Msu4tterB;!mo7G; Eb1SpDsBti1M;ca7etBide dKtairs;!ti2;er,i3U;f36to da1;aLbeco75convin29deIeHfair,ivers4knGprecedVrEsCwB;iel3Nritt6A;i1XuB;pervis0spec3Y;eBu5;cognHgul6Tl6T;own;ndi2v64xpect0;cid0rB;!grou5ZsB;iz0tood;b7pp0Dssu6UuthorB;iz0;i26ra;aGeEhDi6AoCrB;i1oubl0us3M;geth6p,rp6Vuc67;ough4Wril33;en60l32mpBrr2X;o6Ati2;boo,lBn;ent0;aWcVeThSiQmug,nobbi3LoOpNqueami3LtFuBymb6H;bDi gener5DpBrpri6D;erBre0N;! dup6b,i2C;du0seq52;anda77eGiFrBunni2y3F;aightCiB;ki2p0; fBfB;or5K;ll,r5S;aBreotyp0;dfa6Cmi2;a55ec2Gir1Hlend6Cot on; call0le,mb6phist1XrBu0Vvi48;d6Ary;gnifica3nB;ce51g7;am2Re6ocki2ut;cBda1em5lfi32ni1Wpa6Jre8;o1Er42;at5Gient28reec5G;cr0me;aJeEiCoB;bu60tt51uQy4;ghtBv4;!-2BfA;ar,bel,condi1du6Dfres5AlEpublic42sCtard0vB;ea26;is4CoB;lu1na3;aQe1Cuc4A;b5TciBllyi2;al,st;aOeLicayu8lac5Ropuli5QrCuB;bl5Jmp0n51;eGiDoB;!b07fu5RmiBp6;ne3si2;mCor,sBva1;ti8;a53e;ci5MmB;a0EiB;er,um;ac20rBti1;fe9ma2XpleBv38;xi2;rBst;allelDtB;-tiBi4;me;!ed;bLffJkIld fashion0nHpGrg1Eth6utFvB;al,erB;!all,niCt,wB;eiBrouB;ght;do0Ter,g2Qsi4B;en,posi1; boa5Og2Oli8;!ay; gua5MbBli8;eat;eDsB;cBer0Eole1;e8u3O;d2Xse;aJeIiHoBua4X;nFrCtB;ab7;thB;!eB;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1A;aIeGiDoBultip7;bi7derBl0Vnth5ot,st;a1n;nBx0;dblo0RiaBor;tu37;ande3Qdi4NnaBre;ci2;cBgenta,in,j01keshift,le,mmoth,ny,sculi8;ab33ho;aKeFiCoBu15;uti14vi2;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda3K;!-0C;ngu3Zst,tt6;ap1Xind5no0A;agg0uB;niMstifi0veni7;de4gno4Klleg4mQnEpso 20rB;a1rB;eleBita0J;va3; KaJbr0corIdGfluenQiQnFsEtCviB;go0Fti2;a9en3SoxB;ic3B;a8i2Vul0D;a1er,oce3;iCoB;or;re9;deq3Qppr33;fBsitu,vitro;ro3;mFpB;arDerfe9oBrop6;li1rtB;a3ed;ti4;eBi0S;d2Vn3C;aIeFiDoBumdr3I;ne36ok0rrBs08ur5;if2Z;ghfalut1QspB;an2X;aClB;liYpfA;li2;lEnDrB;d04roB;wi2;dy;f,low0;ainfAener2Oiga24lHoGraDuB;ilBng ho;ty;cCtB;efAis;efA;ne,od;ea2Iob4;aTeNinMlKoFrB;a1VeDoz1MustB;raB;ti2;e2Gq10tfA;oDrB; keeps,eBm6tuna1;g03ign;liB;sh;aBue3;g31tte1P;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i3l27r Cux,voB;ri1uri1;oBreac1E;ff;aLfficie3lKmHnFre9there4veExB;a9cess,pe1QtraCuB;be2Nl0E;!va1E;n,ryday; BcouraEti0O;rou1sui1;erCiB;ne3;gi2;abo23dMe17i1;g6sB;t,ygB;oi2;er;aReJiDoBrea14ue;mina3ne,ubB;le,tfA;dact1Bfficu1OsCvB;er1K;creDeas0gruntl0hone1FordCtB;a3ressM;er5;et; HadpGfFgene1PliDrang0spe1PtCvoB;ut;ail0ermin0;be1Mca1ghB;tfA;ia3;an;facto;i5magBngeroUs0G;ed,i2;ly;ertaMhief,ivil,oDrB;aBowd0u0G;mp0vZz0;loImGnCrrBve0P;e9u1I;cre1fu0LgrDsCtB;empo0Dra0E;ta3;ue3;mer08pleB;te,x;ni4ss4;in;aNeIizarHlFoCrB;and new,isk,okN;gCna fiUttom,urgeoB;is;us;ank,indB;!i2;re;autifAhiDloCnBst,yoD;eUt;v0w;nd;ul;ckCnkru0WrrB;en;!wards; priori,b0Mc0Jd09fra08g04h03lYmWntiquVppSrMsIttracti06utheHvEwB;aCkB;wa0T;ke,re;ant garCerB;age;de;ntU;leep,piDsuDtonB;isB;hi2;ri2;ab,bitEroDtiB;fiB;ci4;ga3;raB;ry;are3etiNrB;oprB;ia1;at0;aJuB;si2;arEcohCeBiIl,oof;rt;olB;ic;mi2;ead;ainDgressiConiB;zi2;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda3;e3oCtra9;ct;lu1rbi2;ng;te;pt;aBve;rd;aze,e;ra3;nt", + "Comparable": "true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;my;erce8n6rm;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;e4i3;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¦bOeJfDhundredNmOninAone,qu8s6t0zeroN;enMh3rNw0;e0o;l0ntD;fHve;ir0ousandKree;d,t6;e0ix8;cond,pt1ven7xt1;adr0int0;illionD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en0;!th;illion0;!s,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¦bHeEf8hundred,mHnineAone,qu6s4t0zero;en,h2rGw0;e0o;lve,n8;irt9ousandEree;e0ix5;pt1ven4xt1;adr0int0;illion;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion0;!s", "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;h1iny bit,o0wiO;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" + "Adverb": "true¦a08by 06d02eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,well,ye0;p,s; to,wards5;h1iny bit,o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hYtimes,w09;a1e0;alT;ndomSthN;ar excellDer0oint blank; Nhaps;f3n0;ce0ly;! 0;ag02moW; courIten;ewKo0; longEt 0;onIwithstanding;aybe,eanwhiAore0;!ovB;! aboU;deed,steV;en0;ce;or2u0;lArther0;!moJ; 0ev3;examp0good,suH;le;n1v0;er; mas0ough;se;e0irect1; 1finite0;ly;ju8trop;far,n0;ow; DbroCd nauseam,gBl6ny3part,s2t 0w4;be6l0mo6wor6;arge,ea5; soon,ide;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori", + "Determiner": "true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er" }; var entity = ['Person', 'Place', 'Organization']; @@ -3611,7 +3611,7 @@ var verbs = { // walks PresentTense: { isA: 'Verb', - notA: ['PastTense', 'Copula', 'FutureTense'] + notA: ['PastTense', 'FutureTense'] }, // neutral form - 'walk' Infinitive: { @@ -3651,7 +3651,7 @@ var verbs = { }, // shown Participle: { - isA: 'Verb' + isA: 'PastTense' }, // show up PhrasalVerb: { @@ -4223,7 +4223,11 @@ var addIrregulars = function addIrregulars(world) { forms = Object.assign(forms, verbs[inf]); //add the others Object.keys(forms).forEach(function (tag) { - world.words[forms[tag]] = world.words[forms[tag]] || tag; + world.words[forms[tag]] = world.words[forms[tag]] || tag; // lexicon should prefer other tags, over participle + + if (world.words[forms[tag]] === 'Participle') { + world.words[forms[tag]] = tag; + } }); }; @@ -4247,7 +4251,15 @@ var misc$1 = { q1: 'Date', q2: 'Date', q3: 'Date', - q4: 'Date' + q4: 'Date', + her: ['Possessive', 'Pronoun'], + his: ['Possessive', 'Pronoun'], + their: ['Possessive', 'Pronoun'], + themselves: ['Possessive', 'Pronoun'], + your: ['Possessive', 'Pronoun'], + our: ['Possessive', 'Pronoun'], + my: ['Possessive', 'Pronoun'], + its: ['Possessive', 'Pronoun'] }; //nouns with irregular plural/singular forms @@ -4345,6 +4357,7 @@ var mapping = { pluperf: 'Pluperfect', a: 'Actor' }; // '_' in conjugations is the infinitive form +// (order matters, to the lexicon) var conjugations = { act: { @@ -4418,8 +4431,8 @@ var conjugations = { pst: 'bit' }, bleed: { - prt: 'bled', - pst: 'bled' + pst: 'bled', + prt: 'bled' }, blow: { prt: '_n', @@ -4438,8 +4451,8 @@ var conjugations = { pst: 'bred' }, bring: { - prt: 'brought', - pst: 'brought' + pst: 'brought', + prt: 'brought' }, broadcast: { pst: '_' @@ -4448,8 +4461,8 @@ var conjugations = { pst: '_ed' }, build: { - prt: 'built', - pst: 'built' + pst: 'built', + prt: 'built' }, burn: { prt: '_ed' @@ -4458,8 +4471,8 @@ var conjugations = { prt: '_' }, buy: { - prt: 'bought', - pst: 'bought' + pst: 'bought', + prt: 'bought' }, can: { a: '', @@ -4501,8 +4514,8 @@ var conjugations = { prt: '_' }, deal: { - prt: '_t', - pst: '_t' + pst: '_t', + prt: '_t' }, develop: { a: '_er', @@ -4515,8 +4528,8 @@ var conjugations = { }, dig: { g: '_ging', - prt: 'dug', - pst: 'dug' + pst: 'dug', + prt: 'dug' }, dive: { prt: '_d' @@ -4571,8 +4584,8 @@ var conjugations = { pst: 'felt' }, fight: { - prt: 'fought', - pst: 'fought' + pst: 'fought', + prt: 'fought' }, find: { pst: 'found' @@ -4628,18 +4641,18 @@ var conjugations = { prt: '_n' }, hang: { - prt: 'hung', - pst: 'hung' + pst: 'hung', + prt: 'hung' }, have: { g: 'having', - prt: 'had', pst: 'had', + prt: 'had', pres: 'has' }, hear: { - prt: '_d', - pst: '_d' + pst: '_d', + prt: '_d' }, hide: { prt: 'hidden', @@ -4649,12 +4662,12 @@ var conjugations = { prt: '_' }, hold: { - prt: 'held', - pst: 'held' + pst: 'held', + prt: 'held' }, hurt: { - prt: '_', - pst: '_' + pst: '_', + prt: '_' }, ice: { g: 'icing', @@ -4680,19 +4693,19 @@ var conjugations = { prt: '_n' }, lay: { - prt: 'laid', - pst: 'laid' + pst: 'laid', + prt: 'laid' }, lead: { - prt: 'led', - pst: 'led' + pst: 'led', + prt: 'led' }, leap: { prt: '_t' }, leave: { - prt: 'left', - pst: 'left' + pst: 'left', + prt: 'left' }, lend: { prt: 'lent' @@ -4702,8 +4715,8 @@ var conjugations = { pst: 'lay' }, light: { - prt: 'lit', - pst: 'lit' + pst: 'lit', + prt: 'lit' }, log: { g: '_ging', @@ -4717,18 +4730,18 @@ var conjugations = { pst: 'lost' }, make: { - prt: 'made', - pst: 'made' + pst: 'made', + prt: 'made' }, mean: { - prt: '_t', - pst: '_t' + pst: '_t', + prt: '_t' }, meet: { a: '_er', g: '_ing', - prt: 'met', - pst: 'met' + pst: 'met', + prt: 'met' }, miss: { pres: '_' @@ -4737,8 +4750,8 @@ var conjugations = { g: 'naming' }, pay: { - prt: 'paid', - pst: 'paid' + pst: 'paid', + prt: 'paid' }, prove: { prt: '_n' @@ -4753,15 +4766,15 @@ var conjugations = { prt: '_' }, read: { - prt: '_', - pst: '_' + pst: '_', + prt: '_' }, ride: { prt: 'ridden' }, ring: { - prt: 'rung', - pst: 'rang' + pst: 'rang', + prt: 'rung' }, rise: { fut: 'will have _n', @@ -4780,11 +4793,12 @@ var conjugations = { pst: 'ran' }, say: { - prt: 'said', pst: 'said', + prt: 'said', pres: '_s' }, seat: { + pst: 'sat', prt: 'sat' }, see: { @@ -4796,8 +4810,8 @@ var conjugations = { prt: 'sought' }, sell: { - prt: 'sold', - pst: 'sold' + pst: 'sold', + prt: 'sold' }, send: { prt: 'sent' @@ -4820,12 +4834,12 @@ var conjugations = { pres: '_s' }, shine: { - prt: 'shone', - pst: 'shone' + pst: 'shone', + prt: 'shone' }, shoot: { - prt: 'shot', - pst: 'shot' + pst: 'shot', + prt: 'shot' }, show: { pst: '_ed' @@ -4854,8 +4868,8 @@ var conjugations = { prt: 'slept' }, slide: { - prt: 'slid', - pst: 'slid' + pst: 'slid', + prt: 'slid' }, smash: { pres: '_es' @@ -4882,8 +4896,8 @@ var conjugations = { }, spin: { g: '_ning', - prt: 'spun', - pst: 'spun' + pst: 'spun', + prt: 'spun' }, spit: { prt: 'spat' @@ -4911,8 +4925,8 @@ var conjugations = { pst: 'stung' }, stink: { - prt: 'stunk', - pst: 'stunk' + pst: 'stunk', + prt: 'stunk' }, stream: { a: '_er' @@ -10268,7 +10282,7 @@ var hasTag = function hasTag(doc, tag) { var miscCorrection = function miscCorrection(doc) { //exactly like var m = hasWord(doc, 'like'); - m.match('#Adverb like').notIf('(really|generally|typically|usually|sometimes|often) [like]').tag('Adverb', 'adverb-like'); //the orange. + m.match('#Adverb like').notIf('(really|generally|typically|usually|sometimes|often|just) [like]').tag('Adverb', 'adverb-like'); //the orange. m = hasTag(doc, 'Adjective'); m.match('#Determiner #Adjective$').notIf('(#Comparative|#Superlative)').terms(1).tag('Noun', 'the-adj-1'); // Firstname x (dangerous) @@ -10277,7 +10291,7 @@ var miscCorrection = function miscCorrection(doc) { m.match('#FirstName (#Noun|@titleCase)').ifNo('^#Possessive').ifNo('(#Pronoun|#Plural)').ifNo('@hasComma .').lastTerm().tag('#LastName', 'firstname-noun'); //three trains / one train m = hasTag(doc, 'Value'); - m = m.match('#Value #PresentTense'); + m = m.match('#Value #PresentTense').ifNo('#Copula'); if (m.found) { if (m.has('(one|1)') === true) { @@ -10293,7 +10307,7 @@ var miscCorrection = function miscCorrection(doc) { m = hasTag(doc, 'Gerund'); m.match("(be|been) (#Adverb|not)+? #Gerund").not('#Verb$').tag('Auxiliary', 'be-walking'); // directive verb - 'use reverse' - doc.match('(try|use|attempt|build|make) #Verb').ifNo('(@hasComma|#Negative|#Copula|will|be)').lastTerm().tag('#Noun', 'do-verb'); //possessives + doc.match('(try|use|attempt|build|make) #Verb').ifNo('(@hasComma|#Negative|#PhrasalVerb|#Copula|will|be)').lastTerm().tag('#Noun', 'do-verb'); //possessives //'her match' vs 'let her match' m = hasTag(doc, 'Possessive'); @@ -10333,7 +10347,7 @@ var list = [// ==== Mutliple tags ==== reason: 'u r' }, //sometimes adverbs - 'pretty good','well above' { - match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)', + match: '#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)', tag: '#Copula #Adverb #Adjective', reason: 'sometimes-adverb' }, //i better .. @@ -10382,12 +10396,8 @@ var list = [// ==== Mutliple tags ==== tag: 'Determiner', reason: 'captain-who' }, //that car goes +// { match: 'that #Noun [#PresentTense]', group: 0, tag: 'Determiner', reason: 'that-determiner' }, { - match: 'that #Noun [#Verb]', - group: 0, - tag: 'Determiner', - reason: 'that-determiner' -}, { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' @@ -10405,7 +10415,7 @@ var list = [// ==== Mutliple tags ==== tag: 'Preposition', reason: 'which-copula' }, { - match: 'just [like]', + match: '#Copula just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' @@ -10732,6 +10742,12 @@ var list$2 = [// all fell apart group: 0, tag: 'Adjective', reason: 'baked-onions' +}, // well made +{ + match: 'well [#PastTense]', + group: 0, + tag: 'Adjective', + reason: 'well-made' }, // is f*ed up { match: '#Copula [fucked up?]', @@ -10811,7 +10827,7 @@ var _04Noun = [// ==== Plural ==== reason: 'did-a-value' }, //'the can' { - match: '#Determiner [(can|will|may)]', + match: 'the [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' @@ -10837,12 +10853,92 @@ var _04Noun = [// ==== Plural ==== group: 0, tag: 'Noun', reason: 'all-presentTense' -}, //big dreams, critical thinking +}, //the above is clear +{ + match: '#Determiner [#Adjective] #Copula', + group: 0, + tag: 'Noun', + reason: 'the-adj-is' +}, //real evil is +{ + match: '#Adjective [#Adjective] #Copula', + group: 0, + tag: 'Noun', + reason: 'adj-adj-is' +}, // PresentTense/Noun ambiguities +// big dreams, critical thinking +// have big dreams { - match: '(#Adjective && !all) [#PresentTense]', + match: '(had|have|#PastTense) #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' +}, // excellent answer spencer +{ + match: '^#Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'start adj-presentTense' +}, // one big reason +{ + match: '#Value #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'one-big-reason' +}, // won widespread support +{ + match: '#PastTense #Adjective+ [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'won-wide-support' +}, // many poses +{ + match: '(many|few|several|couple) [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'many-poses' +}, // very big dreams +{ + match: '#Adverb #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'very-big-dream' +}, // good wait staff +{ + match: '#Adjective [#Infinitive] #Noun', + group: 0, + tag: 'Noun', + reason: 'good-wait-staff' +}, // adorable little store +{ + match: '#Adjective #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'adorable-little-store' +}, // of basic training +{ + match: '#Preposition #Adjective [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'of-basic-training' +}, // early warning +{ + match: '#Adjective [#Gerund]', + group: 0, + tag: 'Noun', + reason: 'early-warning' +}, // justifiying higher costs +{ + match: '#Gerund #Adverb? #Comparative [#PresentTense]', + group: 0, + tag: 'Noun', + reason: 'higher-costs' +}, // do the dance +{ + match: '#Infinitive (this|that|the) [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'do-this-dance' }, //his fine { match: '(his|her|its) [#Adjective]', @@ -10918,15 +11014,15 @@ var _04Noun = [// ==== Plural ==== group: 0, tag: 'Noun', reason: 'determiner7' -}, //by a bear. +}, //a nice deal { - match: '#Determiner #Adjective [#Infinitive]$', + match: '#Determiner #Adjective #Adjective? [#Infinitive]', group: 0, tag: 'Noun', - reason: 'a-inf' + reason: 'a-nice-inf' }, //the wait to vote { - match: '(the|this) [#Verb] #Preposition .', + match: 'the [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' @@ -10972,19 +11068,25 @@ var _04Noun = [// ==== Plural ==== group: 0, tag: 'Noun', reason: 'technical-noun' +}, // a blown motor +{ + match: '(the|those|these|a|an) [#Participle] #Noun', + group: 0, + tag: 'Adjective', + reason: 'blown-motor' }, // walk the walk { - match: '(the|those|these) #Adjective? [#Infinitive]', + match: '(the|those|these|a|an) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' }, { - match: '(the|those|these) #Adjective? [#PresentTense]', + match: '(the|those|these|a|an) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' }, { - match: '(the|those|these) #Adjective? [#PastTense]', + match: '(the|those|these|a|an) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' @@ -10994,6 +11096,12 @@ var _04Noun = [// ==== Plural ==== group: 0, tag: 'Noun', reason: 'this-gerund' +}, // at some point +{ + match: 'at some [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'at-some-inf' }, //air-flow { match: '(#Noun && @hasHyphen) #Verb', @@ -11054,8 +11162,44 @@ var _04Noun = [// ==== Plural ==== group: 0, tag: 'Noun', reason: 'swears-noun' +}, // the staff were +{ + match: '(the|these) [#Singular] (were|are)', + group: 0, + tag: 'Plural', + reason: 'singular-were' +}, // running for congress +{ + match: '#Gerund #Adjective? for [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'running-for' +}, // running to work +{ + match: '#Gerund #Adjective to [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'running-to' +}, // any questions for +{ + match: '(many|any|some|several) [#PresentTense] for', + group: 0, + tag: 'Noun', + reason: 'any-verbs-for' +}, // have fun +{ + match: "(have|had) [#Adjective] #Preposition .", + group: 0, + tag: 'Noun', + reason: 'have-fun' +}, // co-founder +{ + match: "co #Noun", + tag: 'Actor', + reason: 'co-noun' }]; +var adjectives$2 = "(".concat(_ambig.adverbs.adjectives.join('|'), ")"); var _05Adverb = [//still good { match: '[still] #Adjective', @@ -11074,6 +11218,18 @@ var _05Adverb = [//still good group: 0, tag: 'Adverb', reason: 'so-adv' +}, // way hotter +{ + match: '[way] #Comparative', + group: 0, + tag: 'Adverb', + reason: 'way-adj' +}, // way too hot +{ + match: '[way] #Adverb #Adjective', + group: 0, + tag: 'Adverb', + reason: 'way-too-adj' }, // all singing { match: '[all] #Verb', @@ -11082,7 +11238,7 @@ var _05Adverb = [//still good reason: 'all-verb' }, // sing like an angel { - match: '#Verb [like]', + match: '(#Verb && !#Modal) [like]', group: 0, tag: 'Adverb', reason: 'verb-like' @@ -11091,6 +11247,12 @@ var _05Adverb = [//still good match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' +}, //even held +{ + match: '[even] #Verb', + group: 0, + tag: 'Adverb', + reason: 'even-walk' }, //cheering hard - dropped -ly's { match: '#PresentTense [(hard|quick|long|bright|slow)]', @@ -11103,6 +11265,35 @@ var _05Adverb = [//still good group: 0, tag: 'Adverb', reason: 'bit-1' +}, // is well +{ + match: '#Copula [#Adverb]$', + group: 0, + tag: 'Adjective', + reason: 'is-well' +}, // a bit cold +{ + match: 'a [(little|bit|wee) bit?] #Adjective', + group: 0, + tag: 'Adverb', + reason: 'a-bit-cold' +}, // dark green +{ + match: "[".concat(adjectives$2, "] #Adjective"), + group: 0, + tag: 'Adverb', + reason: 'dark-green' +}, // kinda sparkly +{ + match: "#Adverb [#Adverb]$", + group: 0, + tag: 'Adjective', + reason: 'kinda-sparkly' +}, { + match: "#Adverb [#Adverb] (and|or|then)", + group: 0, + tag: 'Adjective', + reason: 'kinda-sparkly-and' }]; var _06Value = [// ==== PhoneNumber ==== @@ -11220,7 +11411,32 @@ var list$3 = [// adj -> gerund group: 0, tag: 'Gerund', reason: 'slowly-adj' -}, // ==== Tense ==== +}, // like +{ + match: '(#Modal|i|they|we|do) not? [like]', + group: 0, + tag: 'PresentTense', + reason: 'modal-like' +}, // do not simply like +{ + match: 'do (simply|just|really|not)+ [(#Adjective|like)]', + group: 0, + tag: 'Verb', + reason: 'do-simply-like' +}, // does mean +{ + match: 'does (#Adverb|not)? [#Adjective]', + group: 0, + tag: 'PresentTense', + reason: 'does-mean' +}, // i mean +{ + match: 'i (#Adverb|do)? not? [mean]', + group: 0, + tag: 'PresentTense', + reason: 'i-mean' +}, // { match: '!are (i|you|we) (#Adverb|do)? [#Adjective]', group: 0, tag: 'PresentTense', reason: 'i-mean' }, +// ==== Tense ==== //he left { match: '#Noun #Adverb? [left]', @@ -11270,12 +11486,6 @@ var list$3 = [// adj -> gerund group: 0, tag: 'Auxiliary', reason: 'had-been' -}, //was walking -{ - match: "[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)", - group: 0, - tag: 'Auxiliary', - reason: 'copula-walking' }, //support a splattering of auxillaries before a verb { match: "[(has|had) (#Adverb|not)+?] #PastTense", @@ -11300,6 +11510,18 @@ var list$3 = [// adj -> gerund group: 0, tag: 'Auxiliary', reason: 'would-be' +}, //were being run +{ + match: "(were|was) being [#PresentTense]", + group: 0, + tag: 'PastTense', + reason: 'was-being' +}, //have run +{ + match: "have #PresentTense", + group: 0, + tag: 'PastTense', + reason: 'have-vb' }, //would have had { match: "[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb", @@ -11346,6 +11568,12 @@ var list$3 = [// adj -> gerund group: 0, tag: 'Particle', reason: 'phrasal-particle' +}, //back it up +{ + match: '#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]', + group: 0, + tag: 'Adverb', + reason: 'phrasal-pronoun-advb' }, // ==== Copula ==== //will be running (not copula) { @@ -11460,7 +11688,7 @@ var list$3 = [// adj -> gerund }]; var _07Verbs = list$3; -var places = "(".concat(_ambig.person.verbs.join('|'), ")"); +var places = "(".concat(_ambig.person.places.join('|'), ")"); var list$4 = [// ==== Region ==== //West Norforlk { @@ -11883,33 +12111,6 @@ var list$5 = [// ==== Honorific ==== }]; var _10People = list$5; -var adjectives$2 = "(".concat(_ambig.adverbs.adjectives.join('|'), ")"); -var list$6 = [// a bit cold -{ - match: 'a [(little|bit|wee) bit?] #Adjective', - group: 0, - tag: 'Adverb', - reason: 'a-bit-cold' -}, // dark green -{ - match: "[".concat(adjectives$2, "] #Adjective"), - group: 0, - tag: 'Adverb', - reason: 'dark-green' -}, // kinda sparkly -{ - match: "#Adverb [#Adverb]$", - group: 0, - tag: 'Adjective', - reason: 'kinda-sparkly' -}, { - match: "#Adverb [#Adverb] (and|or|then)", - group: 0, - tag: 'Adjective', - reason: 'kinda-sparkly-and' -}]; -var _11Adverbs = list$6; - var matches = []; matches = matches.concat(_01Misc); matches = matches.concat(_02Dates); @@ -11920,8 +12121,7 @@ matches = matches.concat(_06Value); matches = matches.concat(_07Verbs); matches = matches.concat(_08Place); matches = matches.concat(_09Org); -matches = matches.concat(_10People); -matches = matches.concat(_11Adverbs); // cache the easier conditions up-front +matches = matches.concat(_10People); // cache the easier conditions up-front var cacheRequired$1 = function cacheRequired(reg) { var needTags = []; @@ -13362,6 +13562,23 @@ var conjugate$2 = function conjugate(parsed, world) { if (verb.has('#Copula') || verb.out('normal') === 'be' && parsed.auxiliary.has('will')) { return toBe_1(parsed); + } // special handling of 'are walking' + + + if (parsed.auxiliary.has('are') && verb.has('#Gerund')) { + var og = parsed.original.clone(); + var past = og.clone().replace('are', 'were'); + var fut = og.clone().replace('are', 'will be'); + + var _infinitive = toInfinitive_1$1(parsed, world); + + var res = { + PastTense: past.text(), + PresentTense: og.text(), + FutureTense: fut.text(), + Infinitive: _infinitive + }; + return res; } // special handling of 'he could.' @@ -13913,6 +14130,11 @@ var addMethod$9 = function addMethod(Doc) { if (m.has('(is|was)$')) { m = m.splitBefore('(is|was)$'); + } //ensure it's not two verbs + + + if (m.has('#PresentTense #Adverb #PresentTense')) { + m = m.splitBefore('#Adverb #PresentTense'); } //grab (n)th result diff --git a/changelog.md b/changelog.md index c9703e875..0bf8e2223 100644 --- a/changelog.md +++ b/changelog.md @@ -10,6 +10,16 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are +#### 13.7.0 +- **[change]** many misc tagging fixes + - 'if' is now a #Preposition + - possessive pronouns are #Pronoun and #Possessive + - more phrasal verbs + - make #Participle tag #PastTense + - favor #PastTense over #Participle interpretation in tagger +- **[change]** `@hasHyphen` returns false for sentence dashes +- a lot more testing + #### 13.6.0 - **[new]** first-attempt at `verbs().subject()` method diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..7302e577c --- /dev/null +++ b/codecov.yml @@ -0,0 +1,3 @@ +comment: false +branches: + - 'master' diff --git a/data/abbreviations/misc.js b/data/abbreviations/misc.js index 9fb3bcda1..3ac9b51f0 100644 --- a/data/abbreviations/misc.js +++ b/data/abbreviations/misc.js @@ -41,7 +41,6 @@ module.exports = [ 'vet', // 'sing',//singular 'ver', //version - 'vs', 'fem', //feminine 'masc', //masculine 'eng', //engineering/english diff --git a/data/adjectives/adjectives.js b/data/adjectives/adjectives.js index 938f1c172..d3efd0d7b 100644 --- a/data/adjectives/adjectives.js +++ b/data/adjectives/adjectives.js @@ -16,6 +16,7 @@ module.exports = [ 'assuring', 'astonishing', 'blinding', + 'below', 'boring', 'confusing', 'damaging', @@ -498,6 +499,7 @@ module.exports = [ 'upside down', 'upstairs', 'uptight', + 'up to date', 'urban', 'usual', 'utter', diff --git a/data/adjectives/comparables.js b/data/adjectives/comparables.js index 9eb628b66..41f785b3d 100644 --- a/data/adjectives/comparables.js +++ b/data/adjectives/comparables.js @@ -79,7 +79,6 @@ module.exports = [ 'financial', 'fine', 'firm', - 'fit', 'foamy', 'forgetful', 'formal', diff --git a/data/misc.js b/data/misc.js index c511650cc..a7d90e075 100644 --- a/data/misc.js +++ b/data/misc.js @@ -14,7 +14,7 @@ module.exports = { am: 'Copula', are: 'Copula', - if: 'Condition', + if: ['Condition', 'Preposition'], unless: 'Condition', lest: 'Condition', @@ -55,6 +55,7 @@ module.exports = { //misc records: 'Plural', '&': 'Conjunction', + vs: ['Conjunction', 'Abbreviation'], //pronouns i: ['Pronoun', 'Singular'], diff --git a/data/misc/adverbs.js b/data/misc/adverbs.js index 23af2eb2e..b7ea36f25 100644 --- a/data/misc/adverbs.js +++ b/data/misc/adverbs.js @@ -15,6 +15,7 @@ module.exports = [ 'anyway', 'apart', 'aside', + 'as soon', 'at best', 'at large', 'at least', @@ -28,6 +29,7 @@ module.exports = [ 'definitely', 'directly', 'en masse', + 'enough', 'ever', 'for example', 'for good', @@ -81,7 +83,7 @@ module.exports = [ 'upwards of', 'tiny bit', 'very', - 'way', + 'well', 'yep', 'yes', ] diff --git a/data/misc/determiners.js b/data/misc/determiners.js index b06753c79..08ba4c49f 100644 --- a/data/misc/determiners.js +++ b/data/misc/determiners.js @@ -7,7 +7,6 @@ module.exports = [ 'each', 'either', 'else', - 'enough', 'every', 'few', 'least', diff --git a/data/misc/prepositions.js b/data/misc/prepositions.js index 95949c582..cae2bb429 100644 --- a/data/misc/prepositions.js +++ b/data/misc/prepositions.js @@ -15,7 +15,6 @@ module.exports = [ 'at', 'atop', 'barring', - 'below', 'besides', 'between', 'bout', diff --git a/data/nouns/singulars.js b/data/nouns/singulars.js index 77ac7db5d..7fe1b0e79 100644 --- a/data/nouns/singulars.js +++ b/data/nouns/singulars.js @@ -30,9 +30,11 @@ module.exports = [ 'grand slam', 'head start', 'home run', + 'human right', 'home', 'house', 'insect', + 'line', 'lunch', 'meeting', 'model', @@ -43,8 +45,10 @@ module.exports = [ 'part', 'patent', 'plate', + 'player', 'problem', 'purpose', + 'question', 'question mark', 'room', 'rose', @@ -64,6 +68,7 @@ module.exports = [ 'tv show', 'us dollar', 'us state', + 'way', //double-consonant rule 'bottle', diff --git a/data/verbs/infinitives.js b/data/verbs/infinitives.js index 3401fd651..1c4480d58 100644 --- a/data/verbs/infinitives.js +++ b/data/verbs/infinitives.js @@ -210,6 +210,7 @@ module.exports = [ 'favor', 'fear', 'feature', + 'fit', 'figure', 'file', 'fill', @@ -293,7 +294,6 @@ module.exports = [ 'lift', 'like', 'limit', - 'line', 'link', 'list', 'listen', @@ -320,6 +320,7 @@ module.exports = [ 'mingle', 'minus', 'mirror', + 'misrepresent', 'monitor', 'move', 'multiply', @@ -381,7 +382,6 @@ module.exports = [ 'purchase', 'pursue', 'push', - 'question', 'raise', 'range', 'rank', diff --git a/data/verbs/phrasals.js b/data/verbs/phrasals.js index 2e81a7313..ab5ab0bdd 100644 --- a/data/verbs/phrasals.js +++ b/data/verbs/phrasals.js @@ -96,6 +96,9 @@ module.exports = [ 'burn in', 'burn off', 'burn out', + 'bust up', + 'bust out', + 'bust in', 'butt in', 'butt out', 'buy out', @@ -143,6 +146,7 @@ module.exports = [ 'come together', 'come under', 'cook up', + 'cool down', 'cool off', 'count off', 'count on', @@ -154,6 +158,7 @@ module.exports = [ 'cut out', 'cut up', 'do over', + 'double up', 'dress down', 'dress up', 'drop away', @@ -216,6 +221,7 @@ module.exports = [ 'flip out', 'fold down', 'fold up', + 'follow up', 'fool about', 'fool around', 'fool with', @@ -322,6 +328,7 @@ module.exports = [ 'horse around', 'hunker down', 'hush up', + 'hurry up', 'iron out', 'jack in', 'jack off', @@ -347,6 +354,7 @@ module.exports = [ 'knock down', 'knock off', 'knock out', + 'lace up', 'lap up', 'lash into', 'lash out', @@ -496,6 +504,7 @@ module.exports = [ 'put together', 'put up', 'rat out', + 'rack up', 'reach in', 'reach out', 'read off', @@ -530,6 +539,7 @@ module.exports = [ 'run through', 'run under', 'rustle up', + 'quiet down', 'sail off', 'save up', 'scale down', @@ -601,6 +611,8 @@ module.exports = [ 'snow out', 'sober up', 'sort out', + 'spin up', + 'speed up', 'spark up', 'spell out', 'spill over', @@ -639,6 +651,7 @@ module.exports = [ 'strike out', 'strike up', 'string up', + 'stuck up', 'suck in', 'suck up', 'suit up', @@ -697,6 +710,7 @@ module.exports = [ 'top out', 'top up', 'toss up', + 'track down', 'trade in', 'trade up', 'trickle down', diff --git a/data/verbs/verbs.js b/data/verbs/verbs.js index 63bfe6bc9..47a217736 100644 --- a/data/verbs/verbs.js +++ b/data/verbs/verbs.js @@ -1,21 +1,22 @@ //verbs we shouldn't conjugate module.exports = [ - 'awaken', + 'has', + 'keep tabs', + 'known', 'born', 'cannot', + 'awaken', + 'gonna', + 'msg', + 'seen', + 'shown', + 'make sure', + // 'frighten', 'given', - 'gonna', - 'has', 'hasten', 'heighten', - 'keep tabs', - 'known', 'lengthen', 'lessen', - 'make sure', - 'msg', - 'seen', - 'shown', 'worsen', ] diff --git a/package-lock.json b/package-lock.json index e42b6c7e3..e25b2c639 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "compromise", - "version": "13.5.0", + "version": "13.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -20,16 +20,16 @@ "dev": true }, "@babel/core": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.1.tgz", - "integrity": "sha512-6bGmltqzIJrinwRRdczQsMhruSi9Sqty9Te+/5hudn4Izx/JYRhW1QELpR+CIL0gC/c9A7WroH6FmkDGxmWx3w==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.1", "@babel/helper-module-transforms": "^7.12.1", "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.1", + "@babel/parser": "^7.12.3", "@babel/template": "^7.10.4", "@babel/traverse": "^7.12.1", "@babel/types": "^7.12.1", @@ -49,6 +49,12 @@ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", "dev": true }, + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", + "dev": true + }, "@babel/types": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", @@ -1664,9 +1670,9 @@ } }, "@rollup/plugin-commonjs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz", - "integrity": "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", + "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1696,9 +1702,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1941,9 +1947,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001148", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", - "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", + "version": "1.0.30001153", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001153.tgz", + "integrity": "sha512-qv14w7kWwm2IW7DBvAKWlCqGTmV2XxNtSejJBVplwRjhkohHuhRUpeSlPjtu9erru0+A12zCDUiSmvx/AcqVRA==", "dev": true }, "chalk": { @@ -2363,9 +2369,9 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { @@ -3317,9 +3323,9 @@ } }, "rollup": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.31.0.tgz", - "integrity": "sha512-0d8S3XwEZ7aCP910/9SjnelgLvC+ZXziouVolzxPOM1zvKkHioGkWGJIWmlOULlmvB8BZ6S0wrgsT4yMz0eyMg==", + "version": "2.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.1.tgz", + "integrity": "sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==", "dev": true, "requires": { "fsevents": "~2.1.2" @@ -3491,7 +3497,7 @@ }, "split": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/split/-/split-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", "dev": true, "requires": { @@ -3617,13 +3623,64 @@ } }, "tap-dancer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tap-dancer/-/tap-dancer-0.3.0.tgz", - "integrity": "sha512-ivZ+x++JKBbMQP5Jp7xfT21HsGJ+AeNMV4grlREyowcgDilFiY7b+nmDwffA+iagItqth3W+9UW4DBHsak3P8Q==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tap-dancer/-/tap-dancer-0.3.1.tgz", + "integrity": "sha512-uNzizp+IHd4fJL6ec9mOySmWFhmtGYPUjiRdgJ6pHKG2pc70wUOJh32Wxd1akveyzuPQjS7rtb4SFgVju0kJfw==", "dev": true, "requires": { - "chalk": "2.4.2", + "chalk": "4.1.0", "tap-out": "3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "tap-out": { diff --git a/package.json b/package.json index 1efa59194..da4ff3f30 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Spencer Kelly (http://spencermounta.in)", "name": "compromise", "description": "modest natural language processing", - "version": "13.6.0", + "version": "13.7.0", "main": "./builds/compromise.js", "unpkg": "./builds/compromise.min.js", "module": "./builds/compromise.mjs", @@ -56,22 +56,22 @@ "efrt-unpack": "2.2.0" }, "devDependencies": { - "@babel/core": "7.12.1", + "@babel/core": "7.12.3", "@babel/preset-env": "7.12.1", "@rollup/plugin-alias": "3.1.1", - "@rollup/plugin-commonjs": "15.1.0", + "@rollup/plugin-commonjs": "16.0.0", "@rollup/plugin-json": "4.1.0", - "@rollup/plugin-node-resolve": "9.0.0", + "@rollup/plugin-node-resolve": "10.0.0", "amble": "1.1.0", "codecov": "3.8.0", "efrt": "2.2.2", "nyc": "^15.1.0", - "rollup": "2.31.0", + "rollup": "2.32.1", "rollup-plugin-babel": "4.4.0", "rollup-plugin-filesize-check": "0.0.1", "rollup-plugin-terser": "7.0.2", "shelljs": "0.8.4", - "tap-dancer": "0.3.0", + "tap-dancer": "0.3.1", "tape": "5.0.1" }, "eslintIgnore": [ diff --git a/plugins/phrases/package-lock.json b/plugins/phrases/package-lock.json new file mode 100644 index 000000000..5da1c62d6 --- /dev/null +++ b/plugins/phrases/package-lock.json @@ -0,0 +1,148 @@ +{ + "name": "phrases", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "conllu-stream": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/conllu-stream/-/conllu-stream-0.0.1.tgz", + "integrity": "sha1-+M86aYk9H0Y8e4Y++j5UPiBHc4U=", + "requires": { + "pumpify": "^1.3.5", + "split2": "^2.1.1", + "through2": "^2.0.3" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "requires": { + "through2": "^2.0.2" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/plugins/phrases/package.json b/plugins/phrases/package.json new file mode 100644 index 000000000..eb15ff03b --- /dev/null +++ b/plugins/phrases/package.json @@ -0,0 +1,15 @@ +{ + "name": "compromise-phrases", + "version": "0.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "exit 0", + "test": "echo \"Error: no test specified\" && exit 0" + }, + "author": "", + "license": "ISC", + "dependencies": { + "conllu-stream": "0.0.1" + } +} diff --git a/plugins/phrases/readme.md b/plugins/phrases/readme.md new file mode 100644 index 000000000..92dd05579 --- /dev/null +++ b/plugins/phrases/readme.md @@ -0,0 +1,2 @@ +playing around with ideas in a work-in-progress dependency parser for compromise + diff --git a/plugins/phrases/scripts/parse-treebank.js b/plugins/phrases/scripts/parse-treebank.js new file mode 100644 index 000000000..fb678370e --- /dev/null +++ b/plugins/phrases/scripts/parse-treebank.js @@ -0,0 +1,24 @@ +const fs = require('fs') +// parse training data from UD into json +let path = `/Users/spencer/Downloads/Universal Dependencies 2.6/ud-treebanks-v2.6/UD_English-EWT/en_ewt-ud-train.conllu` +const conllu = require('conllu-stream') + +let result = [] +fs.createReadStream(path) + .pipe(conllu()) + .on('data', function (sentence) { + let terms = Object.keys(sentence.tokens).map(k => { + return sentence.tokens[k] + }) + terms = terms.filter(t => t.type === 'word' && t.upostag !== 'PUNCT') + terms = terms.map(t => t.xpostag) + result.push([sentence.toString(), terms]) + // result.push({ + // txt: sentence.toString(), + // terms: terms, + // }) + }) + .on('end', function () { + console.log(result.length) + // console.log(JSON.stringify(result, null, 2)) + }) diff --git a/plugins/phrases/scripts/test-phrase.js b/plugins/phrases/scripts/test-phrase.js new file mode 100644 index 000000000..1ddb2304c --- /dev/null +++ b/plugins/phrases/scripts/test-phrase.js @@ -0,0 +1,103 @@ +const fs = require('fs') +// parse training data from UD into json +let path = `/Users/spencer/Downloads/Universal Dependencies 2.6/ud-treebanks-v2.6/UD_English-EWT/en_ewt-ud-train.conllu` +const conllu = require('conllu-stream') + +const haveBefore = { + cop: true, + aux: true, + advmod: true, +} + +/** add spaces at the end */ +const padEnd = function (str, width) { + str = str.toString() + while (str.length < width) { + str += ' ' + } + return str +} + +let result = [] +fs.createReadStream(path) + .pipe(conllu()) + .on('data', function (sentence) { + let terms = Object.keys(sentence.tokens).map(k => { + return sentence.tokens[k] + }) + terms = terms.filter(t => t.type === 'word' && t.upostag !== 'PUNCT') + let subj = null + let root = null + let obj = null + terms.forEach((t, i) => { + // let rel = t.deprel === 'root' ? '*' : ' ' + // let rel = t.deprel + // console.log(padEnd(rel, 13) + ' -- ' + t.form) + + if (t.deprel === 'root') { + root = t.form + // look backward + let o = i - 1 + if (terms[o]) { + if (haveBefore[terms[o].deprel]) { + root = terms[o].form + ' ' + root + // look back twice + o = i - 2 + if (terms[o]) { + if (haveBefore[terms[o].deprel]) { + root = terms[o].form + ' ' + root + } + } + // look back three times + o = i - 3 + if (terms[o]) { + if (haveBefore[terms[o].deprel]) { + root = terms[o].form + ' ' + root + } + } + } + } + // look forward once + o = i + 1 + if (terms[o]) { + if (haveBefore[terms[o].deprel]) { + root = root + ' ' + terms[o].form + } + } + } + if (t.deprel === 'nsubj' || t.deprel === 'nsubj:pass') { + subj = t.form + } + if (t.deprel === 'obj') { + obj = t.form + } + }) + // console.log('---') + // if (!subj) { + // terms.forEach(t => { + // // let rel = t.deprel === 'root' ? '*' : ' ' + // let rel = t.deprel + // console.log(padEnd(rel, 13) + ' -- ' + padEnd(t.head, 13) + ' -- ' + t.form) + // }) + // console.log('---') + // } + // terms = terms.map(t => t.xpostag) + // result.push([sentence.toString(), terms]) + result.push({ + txt: sentence.toString(), + subj: subj, + verb: root, + obj: obj, + // terms: terms, + }) + }) + .on('end', function () { + // console.log(result.length) + // console.log(JSON.stringify(result[30], null, 2)) + // let obj = result[135] + // // console.log(obj) + // console.log(result[20]) + result = result.filter(o => o.verb && o.obj && o.verb) + + console.log(JSON.stringify(result, null, 2)) + }) diff --git a/plugins/phrases/scripts/test-tags.js b/plugins/phrases/scripts/test-tags.js new file mode 100644 index 000000000..fabd3f7c0 --- /dev/null +++ b/plugins/phrases/scripts/test-tags.js @@ -0,0 +1,97 @@ +const nlp = require('../../../src') +let data = require('../data/smaller-tags.json') +// console.log(data[42]) + +const mapping = { + CC: 'Conjunction', + CD: 'Cardinal', + DT: 'Determiner', + EX: 'Noun', //'there' + FW: 'Expression', + IN: 'Preposition', + JJ: 'Adjective', + JJR: 'Comparative', + JJS: 'Superlative', + MD: 'Verb', + NN: 'Noun', + NNS: 'Noun', + NNP: 'Noun', + NNPS: 'Noun', + POS: 'Possessive', + PRP: 'Pronoun', + PRP$: 'Pronoun', + RB: 'Adverb', + RP: 'Verb', //phrasal particle + RBR: 'Comparative', + RBS: 'Superlative', + TO: 'Conjunction', + UH: 'Expression', + VB: 'Verb', + VBD: 'Verb', + VBG: 'Gerund', + VBN: 'Verb', // past participle + VBP: 'Verb', // non-3rd person singular present + VBZ: 'Verb', // 3rd person singular present + WDT: 'Determiner', + WP: 'QuestionWord', + WP$: 'QuestionWord', + WRB: 'Adverb', + PDT: 'Noun', //predeterminer + SYM: 'Noun', //symbol + NFP: 'Noun', // +} + +const topk = function (arr) { + let obj = {} + arr.forEach(a => { + obj[a] = obj[a] || 0 + obj[a] += 1 + }) + let res = Object.keys(obj).map(k => [k, obj[k]]) + return res.sort((a, b) => (a[1] > b[1] ? -1 : 0)) +} + +let rights = [] +let wrongs = [] +let haveno = {} +let right = 0 +let wrong = 0 +// data = data.slice(0, 20) +data.forEach(a => { + let out = nlp(a[0]).json(0).terms + let word = null + let want = null + let errors = a[1].filter((tag, i) => { + out[i] = out[i] || {} + tag = mapping[tag] + if ((out[i].tags || []).includes(tag) !== true) { + // console.log(out[i].text, tag, out[i].tags) + word = out[i].text + want = tag + return true + } + return false + }) + if (errors.length === 0) { + right += 1 + rights.push({ + text: a[0], + tags: a[1].join(', '), + }) + } else { + wrong += 1 + wrongs.push({ text: a[0], word: word, want: want }) + } +}) +console.log('right:', right) +console.log('wrong', wrong) + +// let byTag = topk(wrongs.map(o => o.want)) +wrongs = wrongs.filter(o => o.want === 'Adverb') +let byWord = topk(wrongs.map(o => o.word)) +// wrongs = wrongs.filter(o => o.word === 'fun') + +// console.log(JSON.stringify(wrongs, null, 2)) +// console.log(JSON.stringify(byTag, null, 2)) +console.log(JSON.stringify(byWord, null, 2)) +// console.log(JSON.stringify(wrongs.length, null, 2)) diff --git a/plugins/sentences/tests/tense.test.js b/plugins/sentences/tests/tense.test.js index d1bcb9c5c..9c1d59b53 100644 --- a/plugins/sentences/tests/tense.test.js +++ b/plugins/sentences/tests/tense.test.js @@ -137,9 +137,11 @@ test('contraction past-tense', function (t) { let arr = [ [`I'm going to the shops`, `I went to the shops`], [`I'll go to the shops`, `I went to the shops`], - [`We're looking`, `We looked`], + [`We're looking`, `We were looking`], + [`We are looking`, `We were looking`], + // [`We are looking`, `We looked`], + // [`We're looking`, `We looked`], [`We'll look`, `We looked`], - [`We are looking`, `We looked`], ] arr.forEach((a) => { let str = nlp(a[0]).sentences().toPastTense().out() diff --git a/scratch.js b/scratch.js index e2c89704a..a6624fb42 100644 --- a/scratch.js +++ b/scratch.js @@ -1,8 +1,8 @@ const nlp = require('./src/index') // const spacetime = require('/Users/spencer/mountain/spacetime/src') -nlp.verbose(true) +// nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') -// nlp.extend(require('./plugins/numbers/src')) +nlp.extend(require('./plugins/sentences/src')) // nlp.extend(require('./plugins/dates/src')) // nlp.extend(require('./plugins/sentences/src')) @@ -20,15 +20,20 @@ Jennifer antibiotics in our X-ray Uro-radiology */ -/* //place false-positives -CT -St -*/ +// let doc = nlp(`Photographs from a seized computer `) +// let doc = nlp(`I am a licensed mental health counsellour`) +// let doc = nlp(`a blown motor.`) -// let doc = nlp(`ANA, ENA, CCP etc.`) -let doc = nlp(`promising to leave`) -doc.debug() +// let doc = nlp(`thanks`) +// let doc = nlp(`your own conclusions`) +// let doc = nlp(`The situation appears to be even worse`)//even +// let doc = nlp(`They even occasionally attack`) +// let doc = nlp(`a crime against humanity`) -// hmmm -// let doc = nlp('a farmer boy is') -// doc.match(`a (word|#Noun+) is`).debug() +// let doc = nlp(`your own destiny`) +// let doc = nlp(`kept me up to date`) +// let doc = nlp(`in regards to`) +// let doc = nlp(`have you gotten?`) + +let doc = nlp(`Please let me know if any of you need additional information.`) +doc.debug() diff --git a/scripts/build/build-all.js b/scripts/build/build-all.js index 8db465d1e..425a064e7 100644 --- a/scripts/build/build-all.js +++ b/scripts/build/build-all.js @@ -3,7 +3,7 @@ const fs = require('fs') const path = require('path') const sh = require('shelljs') -sh.ls('./plugins').forEach(function(dir) { +sh.ls('./plugins').forEach(function (dir) { console.log('\n\n===' + dir + '===') sh.exec('cd ./plugins/' + dir + ' && npm run build') diff --git a/scripts/plugin-check.js b/scripts/plugin-check.js index e7ab6f935..091df09ae 100644 --- a/scripts/plugin-check.js +++ b/scripts/plugin-check.js @@ -1,7 +1,7 @@ // ensure all our plugins are up-to-spec const sh = require('shelljs') -sh.ls('./plugins').forEach(function(dir) { +sh.ls('./plugins').forEach(function (dir) { console.log('\n\n===' + dir + '===') // sh.exec('cd ./plugins/' + dir + ' && npm install') // sh.exec('cd ./plugins/' + dir + ' && npm-check -u -E') diff --git a/scripts/plugins.js b/scripts/plugins.js index 5cef568e3..bc244f2da 100644 --- a/scripts/plugins.js +++ b/scripts/plugins.js @@ -9,7 +9,7 @@ const args = process.argv.slice(2) const command = args.join(' ') let shouldFail = false -sh.ls('./plugins').forEach(function(dir) { +sh.ls('./plugins').forEach(function (dir) { console.log('\n===' + dir + '===') let code = sh.exec(command, { cwd: `./plugins/${dir}` }).code if (code !== 0) { diff --git a/scripts/test/index.js b/scripts/test/index.js index b86330b7c..3e9f0c707 100644 --- a/scripts/test/index.js +++ b/scripts/test/index.js @@ -21,7 +21,7 @@ if (code !== 0) { } // run each plugin's tests: -sh.ls('./plugins').forEach(function(dir) { +sh.ls('./plugins').forEach(function (dir) { code = sh.exec(`tape "./plugins/${dir}/tests/**/*.test.js" | tap-dancer --color always`).code if (code !== 0) { console.log(dir) diff --git a/scripts/test/smoke-test/index.js b/scripts/test/smoke-test/index.js index afb10519e..943d0b0c0 100644 --- a/scripts/test/smoke-test/index.js +++ b/scripts/test/smoke-test/index.js @@ -2,7 +2,7 @@ const test = require('tape') console.log('\n 🎗️ - running smoke-test..\n') //'sanity-test' the builds -test('main build', function(t) { +test('main build', function (t) { const main = require('../../../builds/compromise.js') let doc = main('John and Joe walked to the store') t.equal(doc.people().json().length, 2, 'found-people') @@ -13,7 +13,7 @@ test('main build', function(t) { t.end() }) -test('min build', function(t) { +test('min build', function (t) { const min = require('../../../builds/compromise.min.js') let doc = min('John and Joe walked to the store') t.equal(doc.people().json().length, 2, 'found-people') @@ -24,7 +24,7 @@ test('min build', function(t) { t.end() }) -test('tokenize build', function(t) { +test('tokenize build', function (t) { const tokenize = require('../../../builds/compromise-tokenize.js') let doc = tokenize('John and Joe walked to the store') t.equal(doc.people().json().length, 0, 'found-people') diff --git a/scripts/test/speed/_fetch.js b/scripts/test/speed/_fetch.js index 7917800a5..814de6315 100644 --- a/scripts/test/speed/_fetch.js +++ b/scripts/test/speed/_fetch.js @@ -1,6 +1,6 @@ const https = require('https') -const fetch = function(url) { +const fetch = function (url) { return new Promise((resolve, reject) => { https .get(url, resp => { diff --git a/src/01-tokenizer/Pool.js b/src/01-tokenizer/Pool.js index a6ef632c6..9eea5a473 100644 --- a/src/01-tokenizer/Pool.js +++ b/src/01-tokenizer/Pool.js @@ -33,7 +33,7 @@ class Pool { } /** make a deep-copy of all terms */ -Pool.prototype.clone = function() { +Pool.prototype.clone = function () { let keys = Object.keys(this.words) let words = keys.reduce((h, k) => { let t = this.words[k].clone() diff --git a/src/01-tokenizer/fromJSON.js b/src/01-tokenizer/fromJSON.js index 77e6dbc36..345714d76 100644 --- a/src/01-tokenizer/fromJSON.js +++ b/src/01-tokenizer/fromJSON.js @@ -3,7 +3,7 @@ const Phrase = require('../Phrase/Phrase') const Pool = require('./Pool') const linkTerms = require('./_linkTerms') -const fromJSON = function(json, world) { +const fromJSON = function (json, world) { let pool = new Pool() let phrases = json.map((p, k) => { let terms = p.terms.map((o, i) => { diff --git a/src/02-tagger/01-init/01-lexicon.js b/src/02-tagger/01-init/01-lexicon.js index 5e80e3fda..4a8fdacb8 100644 --- a/src/02-tagger/01-init/01-lexicon.js +++ b/src/02-tagger/01-init/01-lexicon.js @@ -1,7 +1,7 @@ const underOver = /^(under|over)-?/ /** match a word-sequence, like 'super bowl' in the lexicon */ -const tryMultiple = function(terms, t, world) { +const tryMultiple = function (terms, t, world) { let lex = world.words //try a two-word version let txt = terms[t].reduced + ' ' + terms[t + 1].reduced @@ -35,7 +35,7 @@ const tryMultiple = function(terms, t, world) { } /** look at each word in our list of known-words */ -const checkLexicon = function(terms, world) { +const checkLexicon = function (terms, world) { let lex = world.words let hasCompound = world.hasCompound // use reduced? //go through each term, and check the lexicon diff --git a/src/02-tagger/01-init/02-punctuation.js b/src/02-tagger/01-init/02-punctuation.js index a3c018dd8..7e038b805 100644 --- a/src/02-tagger/01-init/02-punctuation.js +++ b/src/02-tagger/01-init/02-punctuation.js @@ -2,7 +2,7 @@ const apostrophes = /[\'‘’‛‵′`´]$/ const perSec = /^(m|k|cm|km|m)\/(s|h|hr)$/ // '5 k/m' // -const checkPunctuation = function(terms, i, world) { +const checkPunctuation = function (terms, i, world) { let term = terms[i] //check hyphenation diff --git a/src/02-tagger/01-init/03-prefixes.js b/src/02-tagger/01-init/03-prefixes.js index bbf9ea3db..c7f3658da 100644 --- a/src/02-tagger/01-init/03-prefixes.js +++ b/src/02-tagger/01-init/03-prefixes.js @@ -4,7 +4,7 @@ const romanNumeral = /^[IVXLCDM]{2,}$/ const 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 //try each of the ^regexes in our list -const checkRegex = function(term, world) { +const checkRegex = function (term, world) { let str = term.text // do them all! for (let r = 0; r < regex.length; r += 1) { diff --git a/src/02-tagger/02-fallbacks/01-neighbours.js b/src/02-tagger/02-fallbacks/01-neighbours.js index 72d6f94d9..f788ae56c 100644 --- a/src/02-tagger/02-fallbacks/01-neighbours.js +++ b/src/02-tagger/02-fallbacks/01-neighbours.js @@ -2,7 +2,7 @@ const markov = require('./data/markov') const afterKeys = Object.keys(markov.afterThisPos) const beforeKeys = Object.keys(markov.beforeThisPos) -const checkNeighbours = function(terms, world) { +const checkNeighbours = function (terms, world) { for (let i = 0; i < terms.length; i += 1) { let term = terms[i] //do we still need a tag? diff --git a/src/02-tagger/02-fallbacks/02-case.js b/src/02-tagger/02-fallbacks/02-case.js index b9971728c..6e9312a7f 100644 --- a/src/02-tagger/02-fallbacks/02-case.js +++ b/src/02-tagger/02-fallbacks/02-case.js @@ -2,7 +2,7 @@ const titleCase = /^[A-Z][a-z'\u00C0-\u00FF]/ const hasNumber = /[0-9]/ /** look for any grammar signals based on capital/lowercase */ -const checkCase = function(doc) { +const checkCase = function (doc) { let world = doc.world doc.list.forEach(p => { let terms = p.terms() diff --git a/src/02-tagger/02-fallbacks/03-stem.js b/src/02-tagger/02-fallbacks/03-stem.js index 059311bca..79a05192d 100644 --- a/src/02-tagger/02-fallbacks/03-stem.js +++ b/src/02-tagger/02-fallbacks/03-stem.js @@ -2,7 +2,7 @@ const hasPrefix = /^(re|un)-?[a-z\u00C0-\u00FF]/ const prefix = /^(re|un)-?/ /** check 'rewatch' in lexicon as 'watch' */ -const checkPrefix = function(terms, world) { +const checkPrefix = function (terms, world) { let lex = world.words terms.forEach(term => { // skip if we have a good tag already diff --git a/src/02-tagger/02-fallbacks/04-plurals.js b/src/02-tagger/02-fallbacks/04-plurals.js index c27b66f69..00ca31ea8 100644 --- a/src/02-tagger/02-fallbacks/04-plurals.js +++ b/src/02-tagger/02-fallbacks/04-plurals.js @@ -5,7 +5,7 @@ const notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/] const notSingular = [/i$/, /ae$/] /** turn nouns into singular/plural */ -const checkPlural = function(t, world) { +const checkPlural = function (t, world) { if (t.tags.Noun && !t.tags.Acronym) { let str = t.clean //skip existing tags, fast diff --git a/src/02-tagger/02-fallbacks/05-organizations.js b/src/02-tagger/02-fallbacks/05-organizations.js index cb7d71bbd..15a9454b8 100644 --- a/src/02-tagger/02-fallbacks/05-organizations.js +++ b/src/02-tagger/02-fallbacks/05-organizations.js @@ -1,7 +1,7 @@ let orgWords = require('./data/organizations') //could this word be an organization -const maybeOrg = function(t) { +const maybeOrg = function (t) { //must be a noun if (!t.tags.Noun) { return false @@ -17,7 +17,7 @@ const maybeOrg = function(t) { return false } -const tagOrgs = function(terms, world) { +const tagOrgs = function (terms, world) { for (let i = 0; i < terms.length; i += 1) { let t = terms[i] if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) { diff --git a/src/02-tagger/02-fallbacks/06-acronyms.js b/src/02-tagger/02-fallbacks/06-acronyms.js index d9e0e2442..f8690d5c1 100644 --- a/src/02-tagger/02-fallbacks/06-acronyms.js +++ b/src/02-tagger/02-fallbacks/06-acronyms.js @@ -6,7 +6,7 @@ const oneLetterWord = { A: true, } -const isAcronym = function(term, world) { +const isAcronym = function (term, world) { let str = term.reduced // a known acronym like fbi if (term.tags.Acronym) { @@ -23,7 +23,7 @@ const isAcronym = function(term, world) { } // F.B.I., NBC, - but not 'NO COLLUSION' -const checkAcronym = function(terms, world) { +const checkAcronym = function (terms, world) { terms.forEach(term => { //these are not acronyms if (term.tags.RomanNumeral === true) { diff --git a/src/02-tagger/02-fallbacks/data/organizations.js b/src/02-tagger/02-fallbacks/data/organizations.js index 81627d950..a0f3ac318 100644 --- a/src/02-tagger/02-fallbacks/data/organizations.js +++ b/src/02-tagger/02-fallbacks/data/organizations.js @@ -205,7 +205,7 @@ const orgWords = [ 'workers', ] -module.exports = orgWords.reduce(function(h, str) { +module.exports = orgWords.reduce(function (h, str) { h[str] = 'Noun' return h }, {}) diff --git a/src/02-tagger/02-fallbacks/index.js b/src/02-tagger/02-fallbacks/index.js index c4d67a1b4..2dad001ea 100644 --- a/src/02-tagger/02-fallbacks/index.js +++ b/src/02-tagger/02-fallbacks/index.js @@ -7,7 +7,7 @@ const step = { acronyms: require('./06-acronyms'), } // -const fallbacks = function(doc, terms) { +const fallbacks = function (doc, terms) { let world = doc.world // if it's empty, consult it's neighbours, first diff --git a/src/02-tagger/03-contractions/01-negative.js b/src/02-tagger/03-contractions/01-negative.js index d09f2b62a..e0e61e7dc 100644 --- a/src/02-tagger/03-contractions/01-negative.js +++ b/src/02-tagger/03-contractions/01-negative.js @@ -13,7 +13,7 @@ const irregulars = { } // either 'is not' or 'are not' -const doAint = function(term, phrase) { +const doAint = function (term, phrase) { let terms = phrase.terms() let index = terms.indexOf(term) let before = terms.slice(0, index) @@ -27,7 +27,7 @@ const doAint = function(term, phrase) { return ['is', 'not'] } -const checkNegative = function(term, phrase) { +const checkNegative = function (term, phrase) { //check named-ones if (irregulars.hasOwnProperty(term.clean) === true) { return irregulars[term.clean] diff --git a/src/02-tagger/03-contractions/02-simple.js b/src/02-tagger/03-contractions/02-simple.js index edacd894a..28422f595 100644 --- a/src/02-tagger/03-contractions/02-simple.js +++ b/src/02-tagger/03-contractions/02-simple.js @@ -9,7 +9,7 @@ const easy = { "n't": 'not', } // -const checkApostrophe = function(term) { +const checkApostrophe = function (term) { let parts = term.text.match(contraction) if (parts === null) { return null diff --git a/src/02-tagger/03-contractions/03-irregulars.js b/src/02-tagger/03-contractions/03-irregulars.js index 8c1274093..840122282 100644 --- a/src/02-tagger/03-contractions/03-irregulars.js +++ b/src/02-tagger/03-contractions/03-irregulars.js @@ -30,7 +30,7 @@ const irregulars = { } // -const checkIrregulars = function(term) { +const checkIrregulars = function (term) { //check white-list if (irregulars.hasOwnProperty(term.clean)) { return irregulars[term.clean] diff --git a/src/02-tagger/03-contractions/05-perfectTense.js b/src/02-tagger/03-contractions/05-perfectTense.js index aef6882e5..3823954e5 100644 --- a/src/02-tagger/03-contractions/05-perfectTense.js +++ b/src/02-tagger/03-contractions/05-perfectTense.js @@ -6,7 +6,7 @@ const useDid = { } /** split `i'd` into 'i had', or 'i would' */ -const checkPerfect = function(term, phrase) { +const checkPerfect = function (term, phrase) { if (hasPerfect.test(term.clean)) { let root = term.clean.replace(/'d$/, '') //look at the next few words diff --git a/src/02-tagger/03-contractions/07-french.js b/src/02-tagger/03-contractions/07-french.js index acd1fdb64..4ba368ab8 100644 --- a/src/02-tagger/03-contractions/07-french.js +++ b/src/02-tagger/03-contractions/07-french.js @@ -14,7 +14,7 @@ const french = { t: 'tu', // t'aime } -const checkFrench = function(term) { +const checkFrench = function (term) { let parts = term.text.match(contraction) if (parts === null || french.hasOwnProperty(parts[1]) === false) { return null diff --git a/src/02-tagger/04-correction/_unique.js b/src/02-tagger/04-correction/_unique.js index 2011326e7..c1768072a 100644 --- a/src/02-tagger/04-correction/_unique.js +++ b/src/02-tagger/04-correction/_unique.js @@ -1,4 +1,4 @@ -const unique = function(arr) { +const unique = function (arr) { let obj = {} for (let i = 0; i < arr.length; i++) { obj[arr[i]] = true diff --git a/src/02-tagger/04-correction/fixMisc.js b/src/02-tagger/04-correction/fixMisc.js index cc3f8ba00..71e830ef6 100644 --- a/src/02-tagger/04-correction/fixMisc.js +++ b/src/02-tagger/04-correction/fixMisc.js @@ -14,7 +14,7 @@ const miscCorrection = function (doc) { //exactly like let m = hasWord(doc, 'like') m.match('#Adverb like') - .notIf('(really|generally|typically|usually|sometimes|often) [like]') + .notIf('(really|generally|typically|usually|sometimes|often|just) [like]') .tag('Adverb', 'adverb-like') //the orange. @@ -32,7 +32,7 @@ const miscCorrection = function (doc) { //three trains / one train m = hasTag(doc, 'Value') - m = m.match('#Value #PresentTense') + m = m.match('#Value #PresentTense').ifNo('#Copula') if (m.found) { if (m.has('(one|1)') === true) { m.terms(1).tag('Singular', 'one-presentTense') @@ -51,7 +51,7 @@ const miscCorrection = function (doc) { // directive verb - 'use reverse' doc .match('(try|use|attempt|build|make) #Verb') - .ifNo('(@hasComma|#Negative|#Copula|will|be)') + .ifNo('(@hasComma|#Negative|#PhrasalVerb|#Copula|will|be)') .lastTerm() .tag('#Noun', 'do-verb') diff --git a/src/02-tagger/04-correction/matches/01-misc.js b/src/02-tagger/04-correction/matches/01-misc.js index 5ad6a5456..a0ef5c3e7 100644 --- a/src/02-tagger/04-correction/matches/01-misc.js +++ b/src/02-tagger/04-correction/matches/01-misc.js @@ -6,7 +6,7 @@ const list = [ { match: 'u r', tag: 'Pronoun Copula', reason: 'u r' }, //sometimes adverbs - 'pretty good','well above' { - match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)', + match: '#Copula (pretty|dead|full|well|sure) (#Adjective|#Noun)', tag: '#Copula #Adverb #Adjective', reason: 'sometimes-adverb', }, @@ -29,7 +29,7 @@ const list = [ // ==== Determiners ==== { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' }, //that car goes - { match: 'that #Noun [#Verb]', group: 0, tag: 'Determiner', reason: 'that-determiner' }, + // { match: 'that #Noun [#PresentTense]', group: 0, tag: 'Determiner', reason: 'that-determiner' }, { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' }, // ==== Propositions ==== @@ -37,7 +37,7 @@ const list = [ { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' }, //work, which has been done. { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' }, - { match: 'just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' }, + { match: '#Copula just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' }, //folks like her { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' }, //fix for busted-up phrasalVerbs diff --git a/src/02-tagger/04-correction/matches/03-adjective.js b/src/02-tagger/04-correction/matches/03-adjective.js index abc90aa7d..0345b331e 100644 --- a/src/02-tagger/04-correction/matches/03-adjective.js +++ b/src/02-tagger/04-correction/matches/03-adjective.js @@ -18,6 +18,8 @@ let list = [ { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' }, // baked onions are { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' }, + // well made + { match: 'well [#PastTense]', group: 0, tag: 'Adjective', reason: 'well-made' }, // is f*ed up { match: '#Copula [fucked up?]', tag: 'Adjective', reason: 'swears-adjective' }, diff --git a/src/02-tagger/04-correction/matches/04-noun.js b/src/02-tagger/04-correction/matches/04-noun.js index b18138305..92d256942 100644 --- a/src/02-tagger/04-correction/matches/04-noun.js +++ b/src/02-tagger/04-correction/matches/04-noun.js @@ -9,7 +9,7 @@ module.exports = [ //did a 900, paid a 20 { match: '#Verb (a|an) [#Value]', group: 0, tag: 'Singular', reason: 'did-a-value' }, //'the can' - { match: '#Determiner [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' }, + { match: 'the [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' }, // ==== Possessive ==== //spencer kelly's { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' }, @@ -19,8 +19,39 @@ module.exports = [ { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' }, // assign all tasks { match: '#Verb (all|every|each|most|some|no) [#PresentTense]', group: 0, tag: 'Noun', reason: 'all-presentTense' }, - //big dreams, critical thinking - { match: '(#Adjective && !all) [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' }, + + //the above is clear + { match: '#Determiner [#Adjective] #Copula', group: 0, tag: 'Noun', reason: 'the-adj-is' }, + //real evil is + { match: '#Adjective [#Adjective] #Copula', group: 0, tag: 'Noun', reason: 'adj-adj-is' }, + + // PresentTense/Noun ambiguities + // big dreams, critical thinking + // have big dreams + { match: '(had|have|#PastTense) #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' }, + // excellent answer spencer + { match: '^#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'start adj-presentTense' }, + // one big reason + { match: '#Value #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'one-big-reason' }, + // won widespread support + { match: '#PastTense #Adjective+ [#PresentTense]', group: 0, tag: 'Noun', reason: 'won-wide-support' }, + // many poses + { match: '(many|few|several|couple) [#PresentTense]', group: 0, tag: 'Noun', reason: 'many-poses' }, + // very big dreams + { match: '#Adverb #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'very-big-dream' }, + // good wait staff + { match: '#Adjective [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'good-wait-staff' }, + // adorable little store + { match: '#Adjective #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adorable-little-store' }, + // of basic training + { match: '#Preposition #Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'of-basic-training' }, + // early warning + { match: '#Adjective [#Gerund]', group: 0, tag: 'Noun', reason: 'early-warning' }, + // justifiying higher costs + { match: '#Gerund #Adverb? #Comparative [#PresentTense]', group: 0, tag: 'Noun', reason: 'higher-costs' }, + // do the dance + { match: '#Infinitive (this|that|the) [#Infinitive]', group: 0, tag: 'Noun', reason: 'do-this-dance' }, + //his fine { match: '(his|her|its) [#Adjective]', group: 0, tag: 'Noun', reason: 'his-fine' }, //some pressing issues @@ -45,10 +76,10 @@ module.exports = [ { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' }, //the test string { match: '#Determiner [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'determiner7' }, - //by a bear. - { match: '#Determiner #Adjective [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-inf' }, + //a nice deal + { match: '#Determiner #Adjective #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-nice-inf' }, //the wait to vote - { match: '(the|this) [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' }, + { match: 'the [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' }, //a sense of { match: '#Determiner [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' }, //next career move @@ -75,13 +106,17 @@ module.exports = [ tag: 'Noun', reason: 'technical-noun', }, + // a blown motor + { match: '(the|those|these|a|an) [#Participle] #Noun', group: 0, tag: 'Adjective', reason: 'blown-motor' }, // walk the walk - { match: '(the|those|these) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' }, - { match: '(the|those|these) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' }, - { match: '(the|those|these) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' }, + { match: '(the|those|these|a|an) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' }, + { match: '(the|those|these|a|an) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' }, + { match: '(the|those|these|a|an) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' }, // this swimming { match: '(this|that) [#Gerund]', group: 0, tag: 'Noun', reason: 'this-gerund' }, + // at some point + { match: 'at some [#Infinitive]', group: 0, tag: 'Noun', reason: 'at-some-inf' }, //air-flow { match: '(#Noun && @hasHyphen) #Verb', tag: 'Noun', reason: 'hyphen-verb' }, @@ -105,4 +140,16 @@ module.exports = [ { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' }, // what the hell { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' }, + // the staff were + { match: '(the|these) [#Singular] (were|are)', group: 0, tag: 'Plural', reason: 'singular-were' }, + // running for congress + { match: '#Gerund #Adjective? for [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-for' }, + // running to work + { match: '#Gerund #Adjective to [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-to' }, + // any questions for + { match: '(many|any|some|several) [#PresentTense] for', group: 0, tag: 'Noun', reason: 'any-verbs-for' }, + // have fun + { match: `(have|had) [#Adjective] #Preposition .`, group: 0, tag: 'Noun', reason: 'have-fun' }, + // co-founder + { match: `co #Noun`, tag: 'Actor', reason: 'co-noun' }, ] diff --git a/src/02-tagger/04-correction/matches/05-adverb.js b/src/02-tagger/04-correction/matches/05-adverb.js index 43855dba6..f9d8da1f2 100644 --- a/src/02-tagger/04-correction/matches/05-adverb.js +++ b/src/02-tagger/04-correction/matches/05-adverb.js @@ -1,3 +1,6 @@ +const ambig = require('../_ambig') +const adjectives = `(${ambig.adverbs.adjectives.join('|')})` + module.exports = [ //still good { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' }, @@ -5,14 +8,29 @@ module.exports = [ { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' }, // so hot { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' }, + // way hotter + { match: '[way] #Comparative', group: 0, tag: 'Adverb', reason: 'way-adj' }, + // way too hot + { match: '[way] #Adverb #Adjective', group: 0, tag: 'Adverb', reason: 'way-too-adj' }, // all singing { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' }, // sing like an angel - { match: '#Verb [like]', group: 0, tag: 'Adverb', reason: 'verb-like' }, + { match: '(#Verb && !#Modal) [like]', group: 0, tag: 'Adverb', reason: 'verb-like' }, //barely even walk { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' }, + //even held + { match: '[even] #Verb', group: 0, tag: 'Adverb', reason: 'even-walk' }, //cheering hard - dropped -ly's { match: '#PresentTense [(hard|quick|long|bright|slow)]', group: 0, tag: 'Adverb', reason: 'lazy-ly' }, // much appreciated { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' }, + // is well + { match: '#Copula [#Adverb]$', group: 0, tag: 'Adjective', reason: 'is-well' }, + // a bit cold + { match: 'a [(little|bit|wee) bit?] #Adjective', group: 0, tag: 'Adverb', reason: 'a-bit-cold' }, + // dark green + { match: `[${adjectives}] #Adjective`, group: 0, tag: 'Adverb', reason: 'dark-green' }, + // kinda sparkly + { match: `#Adverb [#Adverb]$`, group: 0, tag: 'Adjective', reason: 'kinda-sparkly' }, + { match: `#Adverb [#Adverb] (and|or|then)`, group: 0, tag: 'Adjective', reason: 'kinda-sparkly-and' }, ] diff --git a/src/02-tagger/04-correction/matches/07-verbs.js b/src/02-tagger/04-correction/matches/07-verbs.js index 203ccae7d..151c31003 100644 --- a/src/02-tagger/04-correction/matches/07-verbs.js +++ b/src/02-tagger/04-correction/matches/07-verbs.js @@ -9,7 +9,20 @@ let list = [ { match: '[#Adjective] (us|you)', group: 0, tag: 'Gerund', reason: 'loving-you' }, // slowly stunning { match: '(slowly|quickly) [#Adjective]', group: 0, tag: 'Gerund', reason: 'slowly-adj' }, - + // like + { match: '(#Modal|i|they|we|do) not? [like]', group: 0, tag: 'PresentTense', reason: 'modal-like' }, + // do not simply like + { + match: 'do (simply|just|really|not)+ [(#Adjective|like)]', + group: 0, + tag: 'Verb', + reason: 'do-simply-like', + }, + // does mean + { match: 'does (#Adverb|not)? [#Adjective]', group: 0, tag: 'PresentTense', reason: 'does-mean' }, + // i mean + { match: 'i (#Adverb|do)? not? [mean]', group: 0, tag: 'PresentTense', reason: 'i-mean' }, + // { match: '!are (i|you|we) (#Adverb|do)? [#Adjective]', group: 0, tag: 'PresentTense', reason: 'i-mean' }, // ==== Tense ==== //he left { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' }, @@ -39,8 +52,6 @@ let list = [ tag: 'Auxiliary', reason: 'had-been', }, - //was walking - { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' }, //support a splattering of auxillaries before a verb { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' }, // will walk @@ -49,6 +60,10 @@ let list = [ { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' }, //would be walking { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' }, + //were being run + { match: `(were|was) being [#PresentTense]`, group: 0, tag: 'PastTense', reason: 'was-being' }, + //have run + { match: `have #PresentTense`, group: 0, tag: 'PastTense', reason: 'have-vb' }, //would have had { match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`, @@ -75,6 +90,13 @@ let list = [ { match: '(#Verb && @hasHyphen) out', group: 0, tag: 'PhrasalVerb', reason: 'foo-out' }, //fall over { match: '#PhrasalVerb [#PhrasalVerb]', group: 0, tag: 'Particle', reason: 'phrasal-particle' }, + //back it up + { + match: '#Verb (him|her|it|us|himself|herself|itself|everything|something) [(up|down)]', + group: 0, + tag: 'Adverb', + reason: 'phrasal-pronoun-advb', + }, // ==== Copula ==== //will be running (not copula) diff --git a/src/02-tagger/04-correction/matches/08-place.js b/src/02-tagger/04-correction/matches/08-place.js index 740a5ef18..932aef766 100644 --- a/src/02-tagger/04-correction/matches/08-place.js +++ b/src/02-tagger/04-correction/matches/08-place.js @@ -1,5 +1,5 @@ const ambig = require('../_ambig') -const places = `(${ambig.person.verbs.join('|')})` +const places = `(${ambig.person.places.join('|')})` let list = [ // ==== Region ==== diff --git a/src/02-tagger/04-correction/matches/11-adverbs.js b/src/02-tagger/04-correction/matches/11-adverbs.js deleted file mode 100644 index 648fbb762..000000000 --- a/src/02-tagger/04-correction/matches/11-adverbs.js +++ /dev/null @@ -1,13 +0,0 @@ -const ambig = require('../_ambig') -const adjectives = `(${ambig.adverbs.adjectives.join('|')})` - -let list = [ - // a bit cold - { match: 'a [(little|bit|wee) bit?] #Adjective', group: 0, tag: 'Adverb', reason: 'a-bit-cold' }, - // dark green - { match: `[${adjectives}] #Adjective`, group: 0, tag: 'Adverb', reason: 'dark-green' }, - // kinda sparkly - { match: `#Adverb [#Adverb]$`, group: 0, tag: 'Adjective', reason: 'kinda-sparkly' }, - { match: `#Adverb [#Adverb] (and|or|then)`, group: 0, tag: 'Adjective', reason: 'kinda-sparkly-and' }, -] -module.exports = list diff --git a/src/02-tagger/04-correction/matches/index.js b/src/02-tagger/04-correction/matches/index.js index 2053cb5b0..178e5dbad 100644 --- a/src/02-tagger/04-correction/matches/index.js +++ b/src/02-tagger/04-correction/matches/index.js @@ -11,7 +11,6 @@ matches = matches.concat(require('./07-verbs')) matches = matches.concat(require('./08-place')) matches = matches.concat(require('./09-org')) matches = matches.concat(require('./10-people')) -matches = matches.concat(require('./11-adverbs')) // cache the easier conditions up-front const cacheRequired = function (reg) { diff --git a/src/02-tagger/04-correction/runner.js b/src/02-tagger/04-correction/runner.js index 581906343..67665a317 100644 --- a/src/02-tagger/04-correction/runner.js +++ b/src/02-tagger/04-correction/runner.js @@ -2,7 +2,7 @@ const matches = require('./matches') const unique = require('./_unique') // return intersection of array-of-arrays -const hasEvery = function(chances) { +const hasEvery = function (chances) { if (chances.length === 0) { return [] } @@ -20,7 +20,7 @@ const hasEvery = function(chances) { return res } -const runner = function(doc) { +const runner = function (doc) { //find phrases to try for each match matches.forEach(m => { let allChances = [] diff --git a/src/02-tagger/index.js b/src/02-tagger/index.js index e35d8e107..1fd46f55b 100644 --- a/src/02-tagger/index.js +++ b/src/02-tagger/index.js @@ -4,7 +4,7 @@ const contractions = require('./03-contractions') const corrections = require('./04-correction') /** POS-tag all terms in this document */ -const tagger = function(doc) { +const tagger = function (doc) { let terms = doc.termList() // check against any known-words doc = init(doc, terms) diff --git a/src/02-tagger/tiny.js b/src/02-tagger/tiny.js index cb1f80710..70c7a8429 100644 --- a/src/02-tagger/tiny.js +++ b/src/02-tagger/tiny.js @@ -1,7 +1,7 @@ const lexiconStep = require('./01-init/01-lexicon') //for the tokenize-only build, we want to keep -const smallTagger = function(doc) { +const smallTagger = function (doc) { let terms = doc.termList() lexiconStep(terms, doc.world) return doc diff --git a/src/Doc/Doc.js b/src/Doc/Doc.js index 754e2d924..3f20e5f87 100644 --- a/src/Doc/Doc.js +++ b/src/Doc/Doc.js @@ -61,7 +61,7 @@ class Doc { } /** create a new Document object */ -Doc.prototype.buildFrom = function(list) { +Doc.prototype.buildFrom = function (list) { list = list.map(p => p.clone(true)) // new this.constructor() let doc = new Doc(list, this, this.world) @@ -69,7 +69,7 @@ Doc.prototype.buildFrom = function(list) { } /** create a new Document from plaintext. */ -Doc.prototype.fromText = function(str) { +Doc.prototype.fromText = function (str) { let list = tokenize(str, this.world, this.pool()) return this.buildFrom(list) } diff --git a/src/Doc/match/checkCache.js b/src/Doc/match/checkCache.js index ec5c6b981..e569f2ff3 100644 --- a/src/Doc/match/checkCache.js +++ b/src/Doc/match/checkCache.js @@ -1,5 +1,5 @@ // cache the easier conditions up-front -const cacheRequired = function(reg) { +const cacheRequired = function (reg) { let needTags = [] let needWords = [] reg.forEach(obj => { @@ -16,7 +16,7 @@ const cacheRequired = function(reg) { return { tags: needTags, words: needWords } } -const failFast = function(doc, regs) { +const failFast = function (doc, regs) { if (doc._cache && doc._cache.set === true) { let { words, tags } = cacheRequired(regs) //check required words diff --git a/src/Doc/match/parseToken.js b/src/Doc/match/parseToken.js index 462e59469..537520953 100644 --- a/src/Doc/match/parseToken.js +++ b/src/Doc/match/parseToken.js @@ -23,26 +23,26 @@ const titleCase = str => { return str.charAt(0).toUpperCase() + str.substr(1) } -const end = function(str) { +const end = function (str) { return str[str.length - 1] } -const start = function(str) { +const start = function (str) { return str[0] } -const stripStart = function(str) { +const stripStart = function (str) { return str.substr(1) } -const stripEnd = function(str) { +const stripEnd = function (str) { return str.substr(0, str.length - 1) } -const stripBoth = function(str) { +const stripBoth = function (str) { str = stripStart(str) str = stripEnd(str) return str } // -const parseToken = function(w) { +const parseToken = function (w) { let obj = {} //collect any flags (do it twice) for (let i = 0; i < 2; i += 1) { diff --git a/src/Doc/match/postProcess.js b/src/Doc/match/postProcess.js index 01ef7dfe3..60098dc89 100644 --- a/src/Doc/match/postProcess.js +++ b/src/Doc/match/postProcess.js @@ -1,8 +1,8 @@ -const isNamed = function(capture) { +const isNamed = function (capture) { return typeof capture === 'string' || typeof capture === 'number' } -const fillGroups = function(tokens) { +const fillGroups = function (tokens) { let convert = false let index = -1 let current @@ -42,7 +42,7 @@ const fillGroups = function(tokens) { return tokens } -const useOneOf = function(tokens) { +const useOneOf = function (tokens) { return tokens.map(token => { if (token.choices !== undefined) { // are they all straight non-optional words? @@ -58,7 +58,7 @@ const useOneOf = function(tokens) { }) } -const postProcess = function(tokens) { +const postProcess = function (tokens) { // ensure all capture groups are filled between start and end // give all capture groups names let count = tokens.filter(t => t.groupType).length diff --git a/src/Doc/match/syntax.js b/src/Doc/match/syntax.js index f8d06335f..057d9f20f 100644 --- a/src/Doc/match/syntax.js +++ b/src/Doc/match/syntax.js @@ -1,18 +1,18 @@ const parseToken = require('./parseToken') const postProcess = require('./postProcess') -const isArray = function(arr) { +const isArray = function (arr) { return Object.prototype.toString.call(arr) === '[object Array]' } //split-up by (these things) -const byParentheses = function(str) { +const byParentheses = function (str) { let arr = str.split(/([\^\[\!]*(?:<\S+>)?\(.*?\)[?+*]*\]?\$?)/) arr = arr.map(s => s.trim()) return arr } -const byWords = function(arr) { +const byWords = function (arr) { let words = [] arr.forEach(a => { //keep brackets lumped together @@ -28,7 +28,7 @@ const byWords = function(arr) { } //turn an array into a 'choices' list -const byArray = function(arr) { +const byArray = function (arr) { return [ { choices: arr.map(s => { @@ -40,7 +40,7 @@ const byArray = function(arr) { ] } -const fromDoc = function(doc) { +const fromDoc = function (doc) { if (!doc || !doc.list || !doc.list[0]) { return [] } @@ -54,7 +54,7 @@ const fromDoc = function(doc) { } /** parse a match-syntax string into json */ -const syntax = function(input) { +const syntax = function (input) { // fail-fast if (input === null || input === undefined || input === '') { return [] diff --git a/src/Doc/methods/02-accessors.js b/src/Doc/methods/02-accessors.js index a3f39f5bc..a6702e3e4 100644 --- a/src/Doc/methods/02-accessors.js +++ b/src/Doc/methods/02-accessors.js @@ -1,5 +1,5 @@ /** use only the first result(s) */ -exports.first = function(n) { +exports.first = function (n) { if (n === undefined) { return this.get(0) } @@ -7,7 +7,7 @@ exports.first = function(n) { } /** use only the last result(s) */ -exports.last = function(n) { +exports.last = function (n) { if (n === undefined) { return this.get(this.list.length - 1) } @@ -16,13 +16,13 @@ exports.last = function(n) { } /** grab a given subset of the results*/ -exports.slice = function(start, end) { +exports.slice = function (start, end) { let list = this.list.slice(start, end) return this.buildFrom(list) } /* grab nth result */ -exports.eq = function(n) { +exports.eq = function (n) { let p = this.list[n] if (p === undefined) { return this.buildFrom([]) @@ -32,19 +32,19 @@ exports.eq = function(n) { exports.get = exports.eq /** grab term[0] for every match */ -exports.firstTerms = function() { +exports.firstTerms = function () { return this.match('^.') } exports.firstTerm = exports.firstTerms /** grab the last term for every match */ -exports.lastTerms = function() { +exports.lastTerms = function () { return this.match('.$') } exports.lastTerm = exports.lastTerms /** return a flat array of term objects */ -exports.termList = function(num) { +exports.termList = function (num) { let arr = [] //'reduce' but faster for (let i = 0; i < this.list.length; i++) { @@ -61,7 +61,7 @@ exports.termList = function(num) { } /* grab named capture group terms as object */ -const getGroups = function(doc) { +const getGroups = function (doc) { let res = {} const allGroups = {} for (let i = 0; i < doc.list.length; i++) { @@ -84,7 +84,7 @@ const getGroups = function(doc) { return res } -const getOneName = function(doc, name) { +const getOneName = function (doc, name) { const arr = [] for (let i = 0; i < doc.list.length; i++) { const phrase = doc.list[i] @@ -98,7 +98,7 @@ const getOneName = function(doc, name) { } /** grab named capture group results */ -exports.groups = function(target) { +exports.groups = function (target) { if (target === undefined) { return getGroups(this) } @@ -110,7 +110,7 @@ exports.groups = function(target) { exports.group = exports.groups /** get the full-sentence each phrase belongs to */ -exports.sentences = function(n) { +exports.sentences = function (n) { let arr = [] this.list.forEach(p => { arr.push(p.fullSentence()) diff --git a/src/Doc/methods/03-match.js b/src/Doc/methods/03-match.js index c95326272..56796b02e 100644 --- a/src/Doc/methods/03-match.js +++ b/src/Doc/methods/03-match.js @@ -2,7 +2,7 @@ const parseSyntax = require('../match/syntax') const checkCache = require('../match/checkCache') /** return a new Doc, with this one as a parent */ -exports.match = function(reg, name) { +exports.match = function (reg, name) { //parse-up the input expression let regs = parseSyntax(reg) if (regs.length === 0) { @@ -24,7 +24,7 @@ exports.match = function(reg, name) { } /** return all results except for this */ -exports.not = function(reg) { +exports.not = function (reg) { //parse-up the input expression let regs = parseSyntax(reg) //if it's empty, return them all! @@ -39,7 +39,7 @@ exports.not = function(reg) { } /** return only the first match */ -exports.matchOne = function(reg) { +exports.matchOne = function (reg) { let regs = parseSyntax(reg) //check our cache, if it exists if (checkCache(this, regs) === false) { @@ -53,7 +53,7 @@ exports.matchOne = function(reg) { } /** return each current phrase, only if it contains this match */ -exports.if = function(reg) { +exports.if = function (reg) { let regs = parseSyntax(reg) //consult our cache, if it exists if (checkCache(this, regs) === false) { @@ -64,14 +64,14 @@ exports.if = function(reg) { } /** Filter-out any current phrases that have this match*/ -exports.ifNo = function(reg) { +exports.ifNo = function (reg) { let regs = parseSyntax(reg) let found = this.list.filter(p => p.has(regs) === false) return this.buildFrom(found) } /**Return a boolean if this match exists */ -exports.has = function(reg) { +exports.has = function (reg) { let regs = parseSyntax(reg) //consult our cache, if it exists if (checkCache(this, regs) === false) { @@ -81,7 +81,7 @@ exports.has = function(reg) { } /** match any terms after our matches, within the sentence */ -exports.lookAhead = function(reg) { +exports.lookAhead = function (reg) { // find everything afterwards, by default if (!reg) { reg = '.*' @@ -97,7 +97,7 @@ exports.lookAhead = function(reg) { exports.lookAfter = exports.lookAhead /** match any terms before our matches, within the sentence */ -exports.lookBehind = function(reg) { +exports.lookBehind = function (reg) { // find everything afterwards, by default if (!reg) { reg = '.*' @@ -113,7 +113,7 @@ exports.lookBehind = function(reg) { exports.lookBefore = exports.lookBehind /** return all terms before a match, in each phrase */ -exports.before = function(reg) { +exports.before = function (reg) { let regs = parseSyntax(reg) //only the phrases we care about let phrases = this.if(regs).list @@ -133,7 +133,7 @@ exports.before = function(reg) { } /** return all terms after a match, in each phrase */ -exports.after = function(reg) { +exports.after = function (reg) { let regs = parseSyntax(reg) //only the phrases we care about let phrases = this.if(regs).list @@ -157,13 +157,13 @@ exports.after = function(reg) { } /** return only results with this match afterwards */ -exports.hasAfter = function(reg) { +exports.hasAfter = function (reg) { return this.filter(doc => { return doc.lookAfter(reg).found }) } /** return only results with this match before it */ -exports.hasBefore = function(reg) { +exports.hasBefore = function (reg) { return this.filter(doc => { return doc.lookBefore(reg).found }) diff --git a/src/Doc/methods/04-tag.js b/src/Doc/methods/04-tag.js index 5505c274a..98a4e3048 100644 --- a/src/Doc/methods/04-tag.js +++ b/src/Doc/methods/04-tag.js @@ -1,7 +1,7 @@ const setTag = require('./_setTag') /** Give all terms the given tag */ -exports.tag = function(tags, why) { +exports.tag = function (tags, why) { if (!tags) { return this } @@ -10,7 +10,7 @@ exports.tag = function(tags, why) { } /** Only apply tag to terms if it is consistent with current tags */ -exports.tagSafe = function(tags, why) { +exports.tagSafe = function (tags, why) { if (!tags) { return this } @@ -19,7 +19,7 @@ exports.tagSafe = function(tags, why) { } /** Remove this term from the given terms */ -exports.unTag = function(tags, why) { +exports.unTag = function (tags, why) { this.list.forEach(p => { p.terms().forEach(t => t.unTag(tags, why, this.world)) }) @@ -27,7 +27,7 @@ exports.unTag = function(tags, why) { } /** return only the terms that can be this tag*/ -exports.canBe = function(tag) { +exports.canBe = function (tag) { if (!tag) { return this } diff --git a/src/Doc/methods/05-loops.js b/src/Doc/methods/05-loops.js index 375013ce4..1867c44ef 100644 --- a/src/Doc/methods/05-loops.js +++ b/src/Doc/methods/05-loops.js @@ -1,5 +1,5 @@ /* run each phrase through a function, and create a new document */ -exports.map = function(fn) { +exports.map = function (fn) { if (!fn) { return this } @@ -27,7 +27,7 @@ exports.map = function(fn) { } /** run a function on each phrase */ -exports.forEach = function(fn, detachParent) { +exports.forEach = function (fn, detachParent) { if (!fn) { return this } @@ -43,7 +43,7 @@ exports.forEach = function(fn, detachParent) { } /** return only the phrases that return true */ -exports.filter = function(fn) { +exports.filter = function (fn) { if (!fn) { return this } @@ -56,7 +56,7 @@ exports.filter = function(fn) { } /** return a document with only the first phrase that matches */ -exports.find = function(fn) { +exports.find = function (fn) { if (!fn) { return this } @@ -72,7 +72,7 @@ exports.find = function(fn) { } /** return true or false if there is one matching phrase */ -exports.some = function(fn) { +exports.some = function (fn) { if (!fn) { return this } @@ -84,7 +84,7 @@ exports.some = function(fn) { } /** sample a subset of the results */ -exports.random = function(n) { +exports.random = function (n) { if (!this.found) { return this } diff --git a/src/Doc/methods/06-lookup.js b/src/Doc/methods/06-lookup.js index 6e65cd943..7e47eb2ee 100644 --- a/src/Doc/methods/06-lookup.js +++ b/src/Doc/methods/06-lookup.js @@ -8,12 +8,12 @@ const lookup = require('./_lookup') // return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str // } -const isObject = function(obj) { +const isObject = function (obj) { return obj && Object.prototype.toString.call(obj) === '[object Object]' } /** lookup an array of words or phrases */ -exports.lookup = function(arr) { +exports.lookup = function (arr) { let values = [] //is it a {key:val} object? let isObj = isObject(arr) diff --git a/src/Doc/methods/07-cache.js b/src/Doc/methods/07-cache.js index c211e84bf..acd4b1e37 100644 --- a/src/Doc/methods/07-cache.js +++ b/src/Doc/methods/07-cache.js @@ -1,5 +1,5 @@ /** freeze the current state of the document, for speed-purposes*/ -exports.cache = function(options) { +exports.cache = function (options) { options = options || {} let words = {} let tags = {} @@ -34,7 +34,7 @@ exports.cache = function(options) { } /** un-freezes the current state of the document, so it may be transformed */ -exports.uncache = function() { +exports.uncache = function () { this._cache = {} this.list.forEach(p => { p.cache = {} diff --git a/src/Doc/methods/_lookup.js b/src/Doc/methods/_lookup.js index 7c0b3d870..00fd2be88 100644 --- a/src/Doc/methods/_lookup.js +++ b/src/Doc/methods/_lookup.js @@ -1,10 +1,10 @@ // const tokenize = require('../../01-tokenizer/02-words') -const tokenize = function(str) { +const tokenize = function (str) { return str.split(/[ -]/g) } // take a list of strings // look them up in the document -const buildTree = function(termList, values = []) { +const buildTree = function (termList, values = []) { let root = {} // parse our input termList.forEach((str, i) => { @@ -32,7 +32,7 @@ const buildTree = function(termList, values = []) { return root } -const fastLookup = function(termList, values, doc) { +const fastLookup = function (termList, values, doc) { let root = buildTree(termList, values) let found = [] // each phrase diff --git a/src/Doc/methods/_setTag.js b/src/Doc/methods/_setTag.js index 71685a1ef..540e7e6cd 100644 --- a/src/Doc/methods/_setTag.js +++ b/src/Doc/methods/_setTag.js @@ -1,5 +1,5 @@ /** apply a tag, or tags to all terms */ -const tagTerms = function(tag, doc, safe, reason) { +const tagTerms = function (tag, doc, safe, reason) { let tagList = [] if (typeof tag === 'string') { tagList = tag.split(' ') diff --git a/src/Doc/methods/output/01-text.js b/src/Doc/methods/output/01-text.js index e401728fc..eae47cbfc 100644 --- a/src/Doc/methods/output/01-text.js +++ b/src/Doc/methods/output/01-text.js @@ -5,7 +5,7 @@ const shouldTrim = { } /** return the document as text */ -exports.text = function(options) { +exports.text = function (options) { options = options || {} //are we showing every phrase? let showFull = false diff --git a/src/Doc/methods/output/02-json.js b/src/Doc/methods/output/02-json.js index 3922a61cd..ed3abfcf2 100644 --- a/src/Doc/methods/output/02-json.js +++ b/src/Doc/methods/output/02-json.js @@ -2,7 +2,7 @@ const offsets = require('./_offset') const jsonDefaults = { text: true, terms: true, trim: true } //some options have dependents -const setOptions = function(options) { +const setOptions = function (options) { options = Object.assign({}, jsonDefaults, options) if (options.unique) { @@ -24,7 +24,7 @@ const setOptions = function(options) { } /** pull out desired metadata from the document */ -exports.json = function(options = {}) { +exports.json = function (options = {}) { //support json(3) format if (typeof options === 'number' && this.list[options]) { return this.list[options].json(jsonDefaults) diff --git a/src/Doc/methods/output/03-out.js b/src/Doc/methods/output/03-out.js index 8c6893596..8539de1df 100644 --- a/src/Doc/methods/output/03-out.js +++ b/src/Doc/methods/output/03-out.js @@ -2,13 +2,13 @@ const debug = require('./_debug') const topk = require('./_topk') /** pretty-print the current document and its tags */ -exports.debug = function() { +exports.debug = function () { debug(this) return this } /** some named output formats */ -exports.out = function(method) { +exports.out = function (method) { if (method === 'text') { return this.text() } diff --git a/src/Doc/methods/output/_debug.js b/src/Doc/methods/output/_debug.js index 781442184..4157a11e7 100644 --- a/src/Doc/methods/output/_debug.js +++ b/src/Doc/methods/output/_debug.js @@ -1,7 +1,7 @@ // https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color const reset = '\x1b[0m' -const padEnd = function(str, width) { +const padEnd = function (str, width) { str = str.toString() while (str.length < width) { str += ' ' @@ -24,7 +24,7 @@ const css = { black: '#303b50', } -const logClientSide = function(doc) { +const logClientSide = function (doc) { let tagset = doc.world.tags doc.list.forEach(p => { console.log('\n%c"' + p.text() + '"', 'color: #e6d7b3;') @@ -50,30 +50,30 @@ const logClientSide = function(doc) { //cheaper than requiring chalk const cli = { - green: function(str) { + green: function (str) { return '\x1b[32m' + str + reset }, - red: function(str) { + red: function (str) { return '\x1b[31m' + str + reset }, - blue: function(str) { + blue: function (str) { return '\x1b[34m' + str + reset }, - magenta: function(str) { + magenta: function (str) { return '\x1b[35m' + str + reset }, - cyan: function(str) { + cyan: function (str) { return '\x1b[36m' + str + reset }, - yellow: function(str) { + yellow: function (str) { return '\x1b[33m' + str + reset }, - black: function(str) { + black: function (str) { return '\x1b[30m' + str + reset }, } -const tagString = function(tags, world) { +const tagString = function (tags, world) { tags = tags.map(tag => { if (!world.tags.hasOwnProperty(tag)) { return tag @@ -85,7 +85,7 @@ const tagString = function(tags, world) { } //output some helpful stuff to the console -const debug = function(doc) { +const debug = function (doc) { if (isClientSide()) { logClientSide(doc) return doc diff --git a/src/Doc/methods/output/_offset.js b/src/Doc/methods/output/_offset.js index eb78e4321..ae3affa57 100644 --- a/src/Doc/methods/output/_offset.js +++ b/src/Doc/methods/output/_offset.js @@ -1,5 +1,5 @@ // get all character startings in doc -const termOffsets = function(doc) { +const termOffsets = function (doc) { let elapsed = 0 let index = 0 let offsets = {} @@ -15,7 +15,7 @@ const termOffsets = function(doc) { return offsets } -const calcOffset = function(doc, result, options) { +const calcOffset = function (doc, result, options) { // calculate offsets for each term let offsets = termOffsets(doc.all()) // add index values @@ -48,7 +48,7 @@ const calcOffset = function(doc, result, options) { o.offset = { index: o.terms[0].offset.index, start: o.terms[0].offset.start - o.text.indexOf(o.terms[0].text), - length: o.text.length + length: o.text.length, } }) } diff --git a/src/Doc/methods/output/_topk.js b/src/Doc/methods/output/_topk.js index 8d65f85da..17f73a3ac 100644 --- a/src/Doc/methods/output/_topk.js +++ b/src/Doc/methods/output/_topk.js @@ -1,4 +1,4 @@ -const topk = function(doc) { +const topk = function (doc) { let list = doc.json({ text: false, terms: false, reduced: true }) // combine them let obj = {} diff --git a/src/Doc/methods/transform/01-sort.js b/src/Doc/methods/transform/01-sort.js index fa5fd60f9..75a7f48c9 100644 --- a/src/Doc/methods/transform/01-sort.js +++ b/src/Doc/methods/transform/01-sort.js @@ -40,7 +40,7 @@ const methods = { } /** sort by # of duplicates in the document*/ -const byFreq = function(doc) { +const byFreq = function (doc) { let counts = {} const options = { case: true, @@ -69,7 +69,7 @@ const byFreq = function(doc) { } // order results 'chronologically', or document-order -const sortSequential = function(doc) { +const sortSequential = function (doc) { let order = {} doc.json({ terms: { offset: true } }).forEach(o => { order[o.terms[0].id] = o.terms[0].offset.start @@ -100,7 +100,7 @@ const seqNames = { } /** re-arrange the order of the matches (in place) */ -exports.sort = function(input) { +exports.sort = function (input) { input = input || 'alpha' //do this one up-front if (input === 'freq' || input === 'frequency' || input === 'topk') { @@ -120,14 +120,14 @@ exports.sort = function(input) { } /** reverse the order of the matches, but not the words */ -exports.reverse = function() { +exports.reverse = function () { let list = [].concat(this.list) list = list.reverse() return this.buildFrom(list) } /** remove any duplicate matches */ -exports.unique = function() { +exports.unique = function () { let list = [].concat(this.list) let obj = {} list = list.filter(p => { diff --git a/src/Doc/methods/transform/02-normalize.js b/src/Doc/methods/transform/02-normalize.js index 085d80549..63653dbf1 100644 --- a/src/Doc/methods/transform/02-normalize.js +++ b/src/Doc/methods/transform/02-normalize.js @@ -31,7 +31,7 @@ const mapping = { mapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true }) /** common ways to clean-up the document, and reduce noise */ -exports.normalize = function(options) { +exports.normalize = function (options) { options = options || {} // support named forms if (typeof options === 'string') { diff --git a/src/Doc/methods/transform/03-split.js b/src/Doc/methods/transform/03-split.js index 0508f3453..c4d1731bb 100644 --- a/src/Doc/methods/transform/03-split.js +++ b/src/Doc/methods/transform/03-split.js @@ -3,7 +3,7 @@ const parseSyntax = require('../../match/syntax') /** return a Document with three parts for every match * seperate everything before the word, as a new phrase */ -exports.splitOn = function(reg) { +exports.splitOn = function (reg) { // if there's no match, split parent, instead if (!reg) { let parent = this.parent() @@ -44,7 +44,7 @@ exports.splitOn = function(reg) { /** return a Document with two parts for every match * seperate everything after the word, as a new phrase */ -exports.splitAfter = function(reg) { +exports.splitAfter = function (reg) { // if there's no match, split parent, instead if (!reg) { let parent = this.parent() @@ -85,7 +85,7 @@ exports.splitAfter = function(reg) { exports.split = exports.splitAfter //i guess? /** return a Document with two parts for every match */ -exports.splitBefore = function(reg) { +exports.splitBefore = function (reg) { // if there's no match, split parent, instead if (!reg) { let parent = this.parent() @@ -125,7 +125,7 @@ exports.splitBefore = function(reg) { } /** split a document into labeled sections */ -exports.segment = function(regs, options) { +exports.segment = function (regs, options) { regs = regs || {} options = options || { text: true } let doc = this diff --git a/src/Doc/methods/transform/04-case.js b/src/Doc/methods/transform/04-case.js index 0cd276c70..7079a4aee 100644 --- a/src/Doc/methods/transform/04-case.js +++ b/src/Doc/methods/transform/04-case.js @@ -1,4 +1,4 @@ -const eachTerm = function(doc, fn) { +const eachTerm = function (doc, fn) { let world = doc.world doc.list.forEach(p => { p.terms().forEach(t => t[fn](world)) @@ -7,21 +7,21 @@ const eachTerm = function(doc, fn) { } /** turn every letter of every term to lower-cse */ -exports.toLowerCase = function() { +exports.toLowerCase = function () { return eachTerm(this, 'toLowerCase') } /** turn every letter of every term to upper case */ -exports.toUpperCase = function() { +exports.toUpperCase = function () { return eachTerm(this, 'toUpperCase') } /** upper-case the first letter of each term */ -exports.toTitleCase = function() { +exports.toTitleCase = function () { return eachTerm(this, 'toTitleCase') } /** remove whitespace and title-case each term */ -exports.toCamelCase = function() { +exports.toCamelCase = function () { this.list.forEach(p => { //remove whitespace let terms = p.terms() diff --git a/src/Doc/methods/transform/05-whitespace.js b/src/Doc/methods/transform/05-whitespace.js index ac1bfee3e..d37086782 100644 --- a/src/Doc/methods/transform/05-whitespace.js +++ b/src/Doc/methods/transform/05-whitespace.js @@ -1,5 +1,5 @@ /** add this punctuation or whitespace before each match: */ -exports.pre = function(str, concat) { +exports.pre = function (str, concat) { if (str === undefined) { return this.list[0].terms(0).pre } @@ -15,7 +15,7 @@ exports.pre = function(str, concat) { } /** add this punctuation or whitespace after each match: */ -exports.post = function(str, concat) { +exports.post = function (str, concat) { // return array of post strings if (str === undefined) { return this.list.map(p => { @@ -38,13 +38,13 @@ exports.post = function(str, concat) { } /** remove start and end whitespace */ -exports.trim = function() { +exports.trim = function () { this.list = this.list.map(p => p.trim()) return this } /** connect words with hyphen, and remove whitespace */ -exports.hyphenate = function() { +exports.hyphenate = function () { this.list.forEach(p => { let terms = p.terms() //remove whitespace @@ -61,7 +61,7 @@ exports.hyphenate = function() { } /** remove hyphens between words, and set whitespace */ -exports.dehyphenate = function() { +exports.dehyphenate = function () { const hasHyphen = /(-|–|—)/ this.list.forEach(p => { let terms = p.terms() @@ -77,7 +77,7 @@ exports.dehyphenate = function() { exports.deHyphenate = exports.dehyphenate /** add quotations around these matches */ -exports.toQuotations = function(start, end) { +exports.toQuotations = function (start, end) { start = start || `"` end = end || `"` this.list.forEach(p => { @@ -91,7 +91,7 @@ exports.toQuotations = function(start, end) { exports.toQuotation = exports.toQuotations /** add brackets around these matches */ -exports.toParentheses = function(start, end) { +exports.toParentheses = function (start, end) { start = start || `(` end = end || `)` this.list.forEach(p => { diff --git a/src/Doc/methods/transform/06-join.js b/src/Doc/methods/transform/06-join.js index 20ef77271..0ecc27cb2 100644 --- a/src/Doc/methods/transform/06-join.js +++ b/src/Doc/methods/transform/06-join.js @@ -1,5 +1,5 @@ /** make all phrases into one phrase */ -exports.join = function(str) { +exports.join = function (str) { // clear the cache this.uncache() // make one large phrase - 'main' diff --git a/src/Doc/methods/transform/07-contract.js b/src/Doc/methods/transform/07-contract.js index 3e5997a74..ba8f8c529 100644 --- a/src/Doc/methods/transform/07-contract.js +++ b/src/Doc/methods/transform/07-contract.js @@ -4,7 +4,7 @@ const postPunct = /[,\)"';:\-–—\.…]/ // 'i am': `i'm`, // } -const setContraction = function(m, suffix) { +const setContraction = function (m, suffix) { if (!m.found) { return } @@ -34,7 +34,7 @@ const setContraction = function(m, suffix) { } /** turn 'i am' into i'm */ -exports.contract = function() { +exports.contract = function () { let doc = this.not('@hasContraction') // we are -> we're let m = doc.match('(we|they|you) are') diff --git a/src/Doc/methods/transform/_methods.js b/src/Doc/methods/transform/_methods.js index e14583f50..76b2f3ba2 100644 --- a/src/Doc/methods/transform/_methods.js +++ b/src/Doc/methods/transform/_methods.js @@ -4,7 +4,7 @@ const quotes = /['‘’“”"′″‴]+/g const methods = { // cleanup newlines and extra spaces - whitespace: function(doc) { + whitespace: function (doc) { let termArr = doc.list.map(ts => ts.terms()) termArr.forEach((terms, o) => { terms.forEach((t, i) => { @@ -34,7 +34,7 @@ const methods = { }) }, - punctuation: function(termList) { + punctuation: function (termList) { termList.forEach(t => { // space between hyphenated words if (t.hasHyphen() === true) { @@ -57,7 +57,7 @@ const methods = { }) }, - unicode: function(termList) { + unicode: function (termList) { termList.forEach(t => { if (t.isImplicit() === true) { return @@ -66,22 +66,19 @@ const methods = { }) }, - quotations: function(termList) { + quotations: function (termList) { termList.forEach(t => { t.post = t.post.replace(quotes, '') t.pre = t.pre.replace(quotes, '') }) }, - adverbs: function(doc) { - doc - .match('#Adverb') - .not('(not|nary|seldom|never|barely|almost|basically|so)') - .remove() + adverbs: function (doc) { + doc.match('#Adverb').not('(not|nary|seldom|never|barely|almost|basically|so)').remove() }, // remove the '.' from 'Mrs.' (safely) - abbreviations: function(doc) { + abbreviations: function (doc) { doc.list.forEach(ts => { let terms = ts.terms() terms.forEach((t, i) => { diff --git a/src/Phrase/Phrase.js b/src/Phrase/Phrase.js index 261202991..b26c0d1dc 100644 --- a/src/Phrase/Phrase.js +++ b/src/Phrase/Phrase.js @@ -26,7 +26,7 @@ class Phrase { } /** create a new Phrase object from an id and length */ -Phrase.prototype.buildFrom = function(id, length, groups) { +Phrase.prototype.buildFrom = function (id, length, groups) { let p = new Phrase(id, length, this.pool) //copy-over or replace capture-groups too if (groups && Object.keys(groups).length > 0) { diff --git a/src/Phrase/insert/append.js b/src/Phrase/insert/append.js index 67d99332d..4d70a4fec 100644 --- a/src/Phrase/insert/append.js +++ b/src/Phrase/insert/append.js @@ -1,7 +1,7 @@ const endOfSentence = /[.?!]\s*$/ // replacing a 'word.' with a 'word!' -const combinePost = function(before, after) { +const combinePost = function (before, after) { //only transfer the whitespace if (endOfSentence.test(after)) { let whitespace = before.match(/\s*$/) @@ -11,7 +11,7 @@ const combinePost = function(before, after) { } //add whitespace to the start of the second bit -const addWhitespace = function(beforeTerms, newTerms) { +const addWhitespace = function (beforeTerms, newTerms) { // add any existing pre-whitespace to beginning newTerms[0].pre = beforeTerms[0].pre let lastTerm = beforeTerms[beforeTerms.length - 1] @@ -29,7 +29,7 @@ const addWhitespace = function(beforeTerms, newTerms) { } //insert this segment into the linked-list -const stitchIn = function(beforeTerms, newTerms, pool) { +const stitchIn = function (beforeTerms, newTerms, pool) { let lastBefore = beforeTerms[beforeTerms.length - 1] let lastNew = newTerms[newTerms.length - 1] let afterId = lastBefore.next @@ -52,14 +52,14 @@ const stitchIn = function(beforeTerms, newTerms, pool) { } // avoid stretching a phrase twice. -const unique = function(list) { +const unique = function (list) { return list.filter((o, i) => { return list.indexOf(o) === i }) } //append one phrase onto another. -const appendPhrase = function(before, newPhrase, doc) { +const appendPhrase = function (before, newPhrase, doc) { let beforeTerms = before.terms() let newTerms = newPhrase.terms() //spruce-up the whitespace issues diff --git a/src/Phrase/insert/delete.js b/src/Phrase/insert/delete.js index f62cc4de3..652eb7cce 100644 --- a/src/Phrase/insert/delete.js +++ b/src/Phrase/insert/delete.js @@ -1,5 +1,5 @@ //recursively decrease the length of all the parent phrases -const shrinkAll = function(doc, id, deleteLength, after) { +const shrinkAll = function (doc, id, deleteLength, after) { let arr = doc.parents() arr.push(doc) @@ -28,7 +28,7 @@ const shrinkAll = function(doc, id, deleteLength, after) { /** wrap the linked-list around these terms * so they don't appear any more */ -const deletePhrase = function(phrase, doc) { +const deletePhrase = function (phrase, doc) { let pool = doc.pool() let terms = phrase.terms() diff --git a/src/Phrase/insert/prepend.js b/src/Phrase/insert/prepend.js index df77b63b3..2ab4d260f 100644 --- a/src/Phrase/insert/prepend.js +++ b/src/Phrase/insert/prepend.js @@ -2,7 +2,7 @@ const hasSpace = / / //a new space needs to be added, either on the new phrase, or the old one // '[new] [◻old]' -or- '[old] [◻new] [old]' -const addWhitespace = function(newTerms) { +const addWhitespace = function (newTerms) { //add a space before our new text? // add a space after our text let lastTerm = newTerms[newTerms.length - 1] @@ -13,7 +13,7 @@ const addWhitespace = function(newTerms) { } //insert this segment into the linked-list -const stitchIn = function(main, newPhrase, newTerms) { +const stitchIn = function (main, newPhrase, newTerms) { // [newPhrase] → [main] let lastTerm = newTerms[newTerms.length - 1] lastTerm.next = main.start @@ -31,14 +31,14 @@ const stitchIn = function(main, newPhrase, newTerms) { main.terms(0).prev = lastTerm.id } -const unique = function(list) { +const unique = function (list) { return list.filter((o, i) => { return list.indexOf(o) === i }) } //append one phrase onto another -const joinPhrase = function(original, newPhrase, doc) { +const joinPhrase = function (original, newPhrase, doc) { const starterId = original.start let newTerms = newPhrase.terms() //spruce-up the whitespace issues diff --git a/src/Phrase/match/01-matchAll.js b/src/Phrase/match/01-matchAll.js index ed108c491..20da7e15c 100644 --- a/src/Phrase/match/01-matchAll.js +++ b/src/Phrase/match/01-matchAll.js @@ -4,7 +4,7 @@ const postProcess = require('./04-postProcess') const syntax = require('../../Doc/match/syntax') /** returns a simple array of arrays */ -const matchAll = function(p, regs, matchOne = false) { +const matchAll = function (p, regs, matchOne = false) { //if we forgot to parse it.. if (typeof regs === 'string') { regs = syntax(regs) diff --git a/src/Phrase/match/02-failFast.js b/src/Phrase/match/02-failFast.js index 5b16b1f96..727112b80 100644 --- a/src/Phrase/match/02-failFast.js +++ b/src/Phrase/match/02-failFast.js @@ -1,5 +1,5 @@ // try to avoid doing the match -const failFast = function(p, regs) { +const failFast = function (p, regs) { if (regs.length === 0) { return true } diff --git a/src/Phrase/match/04-postProcess.js b/src/Phrase/match/04-postProcess.js index 9196395cd..2cef7d3b6 100644 --- a/src/Phrase/match/04-postProcess.js +++ b/src/Phrase/match/04-postProcess.js @@ -1,4 +1,4 @@ -const postProcess = function(terms, regs, matches) { +const postProcess = function (terms, regs, matches) { if (!matches || matches.length === 0) { return matches } diff --git a/src/Phrase/match/index.js b/src/Phrase/match/index.js index 21bafc421..f3d34490d 100644 --- a/src/Phrase/match/index.js +++ b/src/Phrase/match/index.js @@ -2,7 +2,7 @@ const matchAll = require('./01-matchAll') const notMatch = require('./not') /** return an array of matching phrases */ -exports.match = function(regs, justOne = false) { +exports.match = function (regs, justOne = false) { let matches = matchAll(this, regs, justOne) //make them phrase objects matches = matches.map(({ match, groups }) => { @@ -14,13 +14,13 @@ exports.match = function(regs, justOne = false) { } /** return boolean if one match is found */ -exports.has = function(regs) { +exports.has = function (regs) { let matches = matchAll(this, regs, true) return matches.length > 0 } /** remove all matches from the result */ -exports.not = function(regs) { +exports.not = function (regs) { let matches = notMatch(this, regs) //make them phrase objects matches = matches.map(list => { @@ -30,7 +30,7 @@ exports.not = function(regs) { } /** return a list of phrases that can have this tag */ -exports.canBe = function(tag, world) { +exports.canBe = function (tag, world) { let results = [] let terms = this.terms() let previous = false diff --git a/src/Phrase/match/not.js b/src/Phrase/match/not.js index 204051f72..b0d8e5122 100644 --- a/src/Phrase/match/not.js +++ b/src/Phrase/match/not.js @@ -3,7 +3,7 @@ const matchAll = require('./01-matchAll') /** return anything that doesn't match. * returns a simple array of arrays */ -const notMatch = function(p, regs) { +const notMatch = function (p, regs) { let found = {} let arr = matchAll(p, regs) arr.forEach(({ match: ts }) => { diff --git a/src/Phrase/methods/02-text.js b/src/Phrase/methods/02-text.js index faffac721..3118d8b04 100644 --- a/src/Phrase/methods/02-text.js +++ b/src/Phrase/methods/02-text.js @@ -1,9 +1,9 @@ -const trimEnd = function(str) { +const trimEnd = function (str) { return str.replace(/ +$/, '') } /** produce output in the given format */ -exports.text = function(options = {}, isFirst, isLast) { +exports.text = function (options = {}, isFirst, isLast) { if (typeof options === 'string') { if (options === 'normal') { options = { diff --git a/src/Phrase/methods/03-change.js b/src/Phrase/methods/03-change.js index 74c176772..5248cd060 100644 --- a/src/Phrase/methods/03-change.js +++ b/src/Phrase/methods/03-change.js @@ -1,5 +1,5 @@ /** remove start and end whitespace */ -exports.trim = function() { +exports.trim = function () { let terms = this.terms() if (terms.length > 0) { //trim starting diff --git a/src/Phrase/methods/04-insert.js b/src/Phrase/methods/04-insert.js index e94d89ef5..53fd0b27f 100644 --- a/src/Phrase/methods/04-insert.js +++ b/src/Phrase/methods/04-insert.js @@ -4,24 +4,24 @@ const deletePhrase = require('../insert/delete') // const tokenize = require('../../01-tokenizer') /** put this text at the end */ -exports.append = function(newPhrase, doc) { +exports.append = function (newPhrase, doc) { append(this, newPhrase, doc) return this } /** add this text to the beginning */ -exports.prepend = function(newPhrase, doc) { +exports.prepend = function (newPhrase, doc) { prepend(this, newPhrase, doc) return this } -exports.delete = function(doc) { +exports.delete = function (doc) { deletePhrase(this, doc) return this } // stich-in newPhrase, stretch 'doc' + parents -exports.replace = function(newPhrase, doc) { +exports.replace = function (newPhrase, doc) { //add it do the end let firstLength = this.length append(this, newPhrase, doc) @@ -35,7 +35,7 @@ exports.replace = function(newPhrase, doc) { /** * Turn this phrase object into 3 phrase objects */ -exports.splitOn = function(p) { +exports.splitOn = function (p) { let terms = this.terms() let result = { before: null, diff --git a/src/Phrase/methods/06-lookahead.js b/src/Phrase/methods/06-lookahead.js index 6efbb6a0d..0e4fef1ed 100644 --- a/src/Phrase/methods/06-lookahead.js +++ b/src/Phrase/methods/06-lookahead.js @@ -1,5 +1,5 @@ /** match any terms after this phrase */ -exports.lookAhead = function(regs) { +exports.lookAhead = function (regs) { // if empty match string, return everything after if (!regs) { regs = '.*' @@ -7,7 +7,7 @@ exports.lookAhead = function(regs) { let pool = this.pool // get a list of all terms preceding our start let terms = [] - const getAfter = function(id) { + const getAfter = function (id) { let term = pool.get(id) if (!term) { return @@ -29,7 +29,7 @@ exports.lookAhead = function(regs) { } /** match any terms before this phrase */ -exports.lookBehind = function(regs) { +exports.lookBehind = function (regs) { // if empty match string, return everything before if (!regs) { regs = '.*' @@ -37,7 +37,7 @@ exports.lookBehind = function(regs) { let pool = this.pool // get a list of all terms preceding our start let terms = [] - const getBefore = function(id) { + const getBefore = function (id) { let term = pool.get(id) if (!term) { return diff --git a/src/Subset/Abbreviations.js b/src/Subset/Abbreviations.js index ca29863ec..9600905e3 100644 --- a/src/Subset/Abbreviations.js +++ b/src/Subset/Abbreviations.js @@ -1,4 +1,4 @@ -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** */ class Abbreviations extends Doc { stripPeriods() { @@ -21,7 +21,7 @@ const addMethod = function(Doc) { } Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods - Doc.prototype.abbreviations = function(n) { + Doc.prototype.abbreviations = function (n) { let match = this.match('#Abbreviation') if (typeof n === 'number') { match = match.get(n) diff --git a/src/Subset/Acronyms.js b/src/Subset/Acronyms.js index 822def31d..c1533326c 100644 --- a/src/Subset/Acronyms.js +++ b/src/Subset/Acronyms.js @@ -1,6 +1,6 @@ const hasPeriod = /\./ -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** */ class Acronyms extends Doc { stripPeriods() { @@ -26,7 +26,7 @@ const addMethod = function(Doc) { Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods Acronyms.prototype.strip = Acronyms.prototype.stripPeriods - Doc.prototype.acronyms = function(n) { + Doc.prototype.acronyms = function (n) { let match = this.match('#Acronym') if (typeof n === 'number') { match = match.get(n) diff --git a/src/Subset/Contractions.js b/src/Subset/Contractions.js index 54123ab66..16d3e87f1 100644 --- a/src/Subset/Contractions.js +++ b/src/Subset/Contractions.js @@ -1,4 +1,4 @@ -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** */ class Contractions extends Doc { constructor(list, from, world) { @@ -41,7 +41,7 @@ const addMethod = function(Doc) { // return m // } - Doc.prototype.contractions = function(n) { + Doc.prototype.contractions = function (n) { //find currently-contracted let found = this.match('@hasContraction+') //(may want to split these up) //todo: split consecutive contractions diff --git a/src/Subset/Lists.js b/src/Subset/Lists.js index d5153b211..cdeb0863f 100644 --- a/src/Subset/Lists.js +++ b/src/Subset/Lists.js @@ -1,10 +1,7 @@ -const addMethod = function(Doc) { +const addMethod = function (Doc) { //pull it apart.. - const parse = function(doc) { - let things = doc - .splitAfter('@hasComma') - .splitOn('(and|or) not?') - .not('(and|or) not?') + const parse = function (doc) { + let things = doc.splitAfter('@hasComma').splitOn('(and|or) not?').not('(and|or) not?') let beforeLast = doc.match('[.] (and|or)', 0) return { things: things, @@ -40,9 +37,7 @@ const addMethod = function(Doc) { } /** remove any matching unit from the list */ remove(match) { - return this.items() - .if(match) - .remove() + return this.items().if(match).remove() } /** return only lists that use a serial comma */ hasOxfordComma() { @@ -68,7 +63,7 @@ const addMethod = function(Doc) { // aliases Lists.prototype.things = Lists.prototype.items - Doc.prototype.lists = function(n) { + Doc.prototype.lists = function (n) { let m = this.if('@hasComma+ .? (and|or) not? .') // person-list diff --git a/src/Subset/Nouns/getArticle.js b/src/Subset/Nouns/getArticle.js index cc30a76de..cbc3ea484 100644 --- a/src/Subset/Nouns/getArticle.js +++ b/src/Subset/Nouns/getArticle.js @@ -32,7 +32,7 @@ const a_regexs = [ /^eul/i, ] -const makeArticle = function(doc) { +const makeArticle = function (doc) { //no 'the john smith', but 'a london hotel' if (doc.has('#Person') || doc.has('#Place')) { return '' diff --git a/src/Subset/Nouns/methods.js b/src/Subset/Nouns/methods.js index 9d0612bdc..b20e7c37d 100644 --- a/src/Subset/Nouns/methods.js +++ b/src/Subset/Nouns/methods.js @@ -14,7 +14,7 @@ const methods = { } options = options || { text: true, normal: true, trim: true, terms: true } let res = [] - this.forEach((doc) => { + this.forEach(doc => { let json = doc.json(options)[0] json.article = getArticle(doc) res.push(json) @@ -36,11 +36,11 @@ const methods = { return this.if('#Plural') //assume tagger has run? }, hasPlural: function () { - return this.filter((d) => hasPlural(d)) + return this.filter(d => hasPlural(d)) }, toPlural: function (agree) { let toPlural = this.world.transforms.toPlural - this.forEach((doc) => { + this.forEach(doc => { if (doc.has('#Plural') || hasPlural(doc) === false) { return } @@ -64,7 +64,7 @@ const methods = { }, toSingular: function (agree) { let toSingular = this.world.transforms.toSingular - this.forEach((doc) => { + this.forEach(doc => { if (doc.has('^#Singular+$') || hasPlural(doc) === false) { return } @@ -91,7 +91,7 @@ const methods = { return this }, toPossessive: function () { - this.forEach((d) => { + this.forEach(d => { toPossessive(d) }) return this diff --git a/src/Subset/Nouns/parse.js b/src/Subset/Nouns/parse.js index 18f4d9d98..766990506 100644 --- a/src/Subset/Nouns/parse.js +++ b/src/Subset/Nouns/parse.js @@ -1,6 +1,6 @@ // .nouns() supports some noun-phrase-ish groupings // pull these apart, if necessary -const parse = function(doc) { +const parse = function (doc) { let res = { main: doc, } diff --git a/src/Subset/Nouns/plural/hasPlural.js b/src/Subset/Nouns/plural/hasPlural.js index d5d6cdc42..d4c57bb37 100644 --- a/src/Subset/Nouns/plural/hasPlural.js +++ b/src/Subset/Nouns/plural/hasPlural.js @@ -1,8 +1,7 @@ -const noPlural = - '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)' +const noPlural = '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)' //certain words can't be plural, like 'peace' -const hasPlural = function(doc) { +const hasPlural = function (doc) { if (doc.has('#Plural') === true) { return true } diff --git a/src/Subset/Nouns/plural/isPlural/index.js b/src/Subset/Nouns/plural/isPlural/index.js index a68b56496..462e5ba37 100644 --- a/src/Subset/Nouns/plural/isPlural/index.js +++ b/src/Subset/Nouns/plural/isPlural/index.js @@ -3,7 +3,7 @@ const endS = /s$/ // double-check this term, if it is not plural, or singular. // (this is a partial copy of ./tagger/fallbacks/plural) // fallback plural if it ends in an 's'. -const isPlural = function(str) { +const isPlural = function (str) { // isSingular suffix rules if (rules.isSingular.find(reg => reg.test(str))) { return false diff --git a/src/Subset/Nouns/toPossessive.js b/src/Subset/Nouns/toPossessive.js index 1eb00951c..104fe6420 100644 --- a/src/Subset/Nouns/toPossessive.js +++ b/src/Subset/Nouns/toPossessive.js @@ -14,7 +14,7 @@ const exceptions = { } // turn "David" to "David's" -const toPossessive = function(doc) { +const toPossessive = function (doc) { let str = doc.text('text').trim() // exceptions if (exceptions.hasOwnProperty(str)) { diff --git a/src/Subset/Parentheses.js b/src/Subset/Parentheses.js index efd3249be..c1bcb6f49 100644 --- a/src/Subset/Parentheses.js +++ b/src/Subset/Parentheses.js @@ -1,7 +1,7 @@ const open = /\(/ const close = /\)/ -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** anything between (these things) */ class Parentheses extends Doc { /** remove the parentheses characters */ @@ -16,7 +16,7 @@ const addMethod = function(Doc) { } } - Doc.prototype.parentheses = function(n) { + Doc.prototype.parentheses = function (n) { let list = [] this.list.forEach(p => { let terms = p.terms() diff --git a/src/Subset/People.js b/src/Subset/People.js index c14e4c9bf..da28a5b8c 100644 --- a/src/Subset/People.js +++ b/src/Subset/People.js @@ -1,4 +1,4 @@ -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** */ class People extends Doc { // honorifics(){} @@ -9,7 +9,7 @@ const addMethod = function(Doc) { // fromPronoun(){} } - Doc.prototype.people = function(n) { + Doc.prototype.people = function (n) { let match = this.splitAfter('@hasComma') match = match.match('#Person+') diff --git a/src/Subset/Possessives.js b/src/Subset/Possessives.js index 5eeab8866..ca6ff263c 100644 --- a/src/Subset/Possessives.js +++ b/src/Subset/Possessives.js @@ -1,4 +1,4 @@ -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** */ class Possessives extends Doc { constructor(list, from, world) { @@ -28,7 +28,7 @@ const addMethod = function(Doc) { // return m // } - Doc.prototype.possessives = function(n) { + Doc.prototype.possessives = function (n) { //find currently-contracted let found = this.match('#Noun+? #Possessive') //todo: split consecutive contractions diff --git a/src/Subset/Quotations.js b/src/Subset/Quotations.js index ab4b4fd3f..aada9a245 100644 --- a/src/Subset/Quotations.js +++ b/src/Subset/Quotations.js @@ -23,7 +23,7 @@ const pairs = { const hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')') -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** "these things" */ class Quotations extends Doc { /** remove the quote characters */ @@ -32,7 +32,7 @@ const addMethod = function(Doc) { } } - Doc.prototype.quotations = function(n) { + Doc.prototype.quotations = function (n) { let list = [] this.list.forEach(p => { let terms = p.terms() diff --git a/src/Subset/Verbs/conjugate/index.js b/src/Subset/Verbs/conjugate/index.js index ce0356013..a20f71dd9 100644 --- a/src/Subset/Verbs/conjugate/index.js +++ b/src/Subset/Verbs/conjugate/index.js @@ -10,6 +10,21 @@ const conjugate = function (parsed, world) { return toBe(parsed, world) } + // special handling of 'are walking' + if (parsed.auxiliary.has('are') && verb.has('#Gerund')) { + let og = parsed.original.clone() + let past = og.clone().replace('are', 'were') + let fut = og.clone().replace('are', 'will be') + let infinitive = toInfinitive(parsed, world) + let res = { + PastTense: past.text(), + PresentTense: og.text(), + FutureTense: fut.text(), + Infinitive: infinitive, + } + return res + } + // special handling of 'he could.' if (verb.has('#Modal')) { return doModal(parsed, world) diff --git a/src/Subset/Verbs/conjugate/toBe.js b/src/Subset/Verbs/conjugate/toBe.js index fe425b318..e459b29ad 100644 --- a/src/Subset/Verbs/conjugate/toBe.js +++ b/src/Subset/Verbs/conjugate/toBe.js @@ -9,7 +9,6 @@ const toBe = parsed => { // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) { // isI = true; // } - // 'i look', not 'i looks' if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) { isI = true diff --git a/src/Subset/Verbs/index.js b/src/Subset/Verbs/index.js index 2280151ce..76458a573 100644 --- a/src/Subset/Verbs/index.js +++ b/src/Subset/Verbs/index.js @@ -37,6 +37,11 @@ const addMethod = function (Doc) { m = m.splitBefore('(is|was)$') } + //ensure it's not two verbs + if (m.has('#PresentTense #Adverb #PresentTense')) { + m = m.splitBefore('#Adverb #PresentTense') + } + //grab (n)th result if (typeof n === 'number') { m = m.get(n) diff --git a/src/Subset/Verbs/isPlural.js b/src/Subset/Verbs/isPlural.js index f8ccb7f79..881e0933c 100644 --- a/src/Subset/Verbs/isPlural.js +++ b/src/Subset/Verbs/isPlural.js @@ -2,7 +2,7 @@ // we walk -> plural // the most-recent noun-phrase, before this verb. -const findNoun = function(vb) { +const findNoun = function (vb) { let noun = vb.lookBehind('#Noun+').last() return noun } @@ -10,7 +10,7 @@ const findNoun = function(vb) { //sometimes you can tell if a verb is plural/singular, just by the verb // i am / we were // othertimes you need its subject 'we walk' vs 'i walk' -const isPlural = function(parsed) { +const isPlural = function (parsed) { let vb = parsed.verb if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) { return true diff --git a/src/Subset/_simple.js b/src/Subset/_simple.js index 6056959ee..73a8d6f5c 100644 --- a/src/Subset/_simple.js +++ b/src/Subset/_simple.js @@ -17,7 +17,7 @@ const arr = [ ['prepositions', '#Preposition'], ] arr.forEach(a => { - methods[a[0]] = function(n) { + methods[a[0]] = function (n) { let m = this.match(a[1]) if (typeof n === 'number') { m = m.get(n) @@ -31,7 +31,7 @@ methods.atmentions = methods.atMentions methods.words = methods.terms /** return anything tagged as a phone number */ -methods.phoneNumbers = function(n) { +methods.phoneNumbers = function (n) { let m = this.splitAfter('@hasComma') m = m.match('#PhoneNumber+') if (typeof n === 'number') { @@ -41,7 +41,7 @@ methods.phoneNumbers = function(n) { } /** Deprecated: please use compromise-numbers plugin */ -methods.money = function(n) { +methods.money = function (n) { let m = this.match('#Money #Currency?') if (typeof n === 'number') { m = m.get(n) @@ -50,7 +50,7 @@ methods.money = function(n) { } /** return all cities, countries, addresses, and regions */ -methods.places = function(n) { +methods.places = function (n) { // don't split 'paris, france' let keep = this.match('(#City && @hasComma) (#Region|#Country)') // but split the other commas @@ -66,7 +66,7 @@ methods.places = function(n) { } /** return all schools, businesses and institutions */ -methods.organizations = function(n) { +methods.organizations = function (n) { let m = this.clauses() m = m.match('#Organization+') if (typeof n === 'number') { @@ -76,7 +76,7 @@ methods.organizations = function(n) { } //combine them with .topics() method -methods.entities = function(n) { +methods.entities = function (n) { let r = this.clauses() // Find people, places, and organizations let yup = r.people() diff --git a/src/Term/methods/01-case.js b/src/Term/methods/01-case.js index 4642bb7aa..52e53026c 100644 --- a/src/Term/methods/01-case.js +++ b/src/Term/methods/01-case.js @@ -2,13 +2,13 @@ const titleCase = /^[A-Z][a-z'\u00C0-\u00FF]/ const upperCase = /^[A-Z]+s?$/ /** convert all text to uppercase */ -exports.toUpperCase = function() { +exports.toUpperCase = function () { this.text = this.text.toUpperCase() return this } /** convert all text to lowercase */ -exports.toLowerCase = function() { +exports.toLowerCase = function () { this.text = this.text.toLowerCase() return this } @@ -16,17 +16,17 @@ exports.toLowerCase = function() { /** only set the first letter to uppercase * leave any existing uppercase alone */ -exports.toTitleCase = function() { +exports.toTitleCase = function () { this.text = this.text.replace(/^ *[a-z\u00C0-\u00FF]/, x => x.toUpperCase()) //support unicode? return this } /** if all letters are uppercase */ -exports.isUpperCase = function() { +exports.isUpperCase = function () { return upperCase.test(this.text) } /** if the first letter is uppercase, and the rest are lowercase */ -exports.isTitleCase = function() { +exports.isTitleCase = function () { return titleCase.test(this.text) } exports.titleCase = exports.isTitleCase diff --git a/src/Term/methods/02-punctuation.js b/src/Term/methods/02-punctuation.js index 3759bf0c7..4a59ae8c9 100644 --- a/src/Term/methods/02-punctuation.js +++ b/src/Term/methods/02-punctuation.js @@ -4,73 +4,73 @@ const startQuote = /(\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2 const endQuote = /(\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E)/ /** search the term's 'post' punctuation */ -exports.hasPost = function(punct) { +exports.hasPost = function (punct) { return this.post.indexOf(punct) !== -1 } /** search the term's 'pre' punctuation */ -exports.hasPre = function(punct) { +exports.hasPre = function (punct) { return this.pre.indexOf(punct) !== -1 } /** does it have a quotation symbol? */ -exports.hasQuote = function() { +exports.hasQuote = function () { return startQuote.test(this.pre) || endQuote.test(this.post) } exports.hasQuotation = exports.hasQuote /** does it have a comma? */ -exports.hasComma = function() { +exports.hasComma = function () { return this.hasPost(',') } /** does it end in a period? */ -exports.hasPeriod = function() { +exports.hasPeriod = function () { return this.hasPost('.') === true && this.hasPost('...') === false } /** does it end in an exclamation */ -exports.hasExclamation = function() { +exports.hasExclamation = function () { return this.hasPost('!') } /** does it end with a question mark? */ -exports.hasQuestionMark = function() { +exports.hasQuestionMark = function () { return this.hasPost('?') || this.hasPost('¿') } /** is there a ... at the end? */ -exports.hasEllipses = function() { +exports.hasEllipses = function () { return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…') } /** is there a semicolon after this word? */ -exports.hasSemicolon = function() { +exports.hasSemicolon = function () { return this.hasPost(';') } /** is there a slash '/' in this word? */ -exports.hasSlash = function() { +exports.hasSlash = function () { return /\//.test(this.text) } /** a hyphen connects two words like-this */ -exports.hasHyphen = function() { - const hyphen = /(-|–|—)/ +exports.hasHyphen = function () { + const hyphen = /^(-|–|—)$/ return hyphen.test(this.post) || hyphen.test(this.pre) } /** a dash separates words - like that */ -exports.hasDash = function() { +exports.hasDash = function () { const hyphen = / (-|–|—) / return hyphen.test(this.post) || hyphen.test(this.pre) } /** is it multiple words combinded */ -exports.hasContraction = function() { +exports.hasContraction = function () { return Boolean(this.implicit) } /** try to sensibly put this punctuation mark into the term */ -exports.addPunctuation = function(punct) { +exports.addPunctuation = function (punct) { // dont add doubles if (punct === ',' || punct === ';') { this.post = this.post.replace(punct, '') diff --git a/src/Term/methods/03-misc.js b/src/Term/methods/03-misc.js index 61b9dd686..9722bab98 100644 --- a/src/Term/methods/03-misc.js +++ b/src/Term/methods/03-misc.js @@ -5,27 +5,27 @@ const isAcronym = require('../normalize/isAcronym') const boring = {} /** check a match object against this term */ -exports.doesMatch = function(reg, index, length) { +exports.doesMatch = function (reg, index, length) { return doesMatch(this, reg, index, length) } /** does this term look like an acronym? */ -exports.isAcronym = function() { +exports.isAcronym = function () { return isAcronym(this.text) } /** is this term implied by a contraction? */ -exports.isImplicit = function() { +exports.isImplicit = function () { return this.text === '' && Boolean(this.implicit) } /** does the term have at least one good tag? */ -exports.isKnown = function() { +exports.isKnown = function () { return Object.keys(this.tags).some(t => boring[t] !== true) } /** cache the root property of the term */ -exports.setRoot = function(world) { +exports.setRoot = function (world) { let transform = world.transforms let str = this.implicit || this.clean if (this.tags.Plural) { diff --git a/src/Term/methods/04-text.js b/src/Term/methods/04-text.js index d5d26aefa..d682438b4 100644 --- a/src/Term/methods/04-text.js +++ b/src/Term/methods/04-text.js @@ -7,7 +7,7 @@ const isUpperCase = /^[A-Z-]+$/ // } /** return various text formats of this term */ -exports.textOut = function(options, showPre, showPost) { +exports.textOut = function (options, showPre, showPost) { options = options || {} let word = this.text let before = this.pre diff --git a/src/Term/methods/05-json.js b/src/Term/methods/05-json.js index b10ba1980..a56b208fd 100644 --- a/src/Term/methods/05-json.js +++ b/src/Term/methods/05-json.js @@ -14,7 +14,7 @@ const jsonDefault = { } /** return various metadata for this term */ -exports.json = function(options, world) { +exports.json = function (options, world) { options = options || {} options = Object.assign({}, jsonDefault, options) let result = {} diff --git a/src/Term/methods/_bestTag.js b/src/Term/methods/_bestTag.js index 317412c7d..4e98e7a6a 100644 --- a/src/Term/methods/_bestTag.js +++ b/src/Term/methods/_bestTag.js @@ -4,7 +4,7 @@ const boringTags = { } /** a subjective ranking of tags kinda tfidf-based */ -const rankTags = function(term, world) { +const rankTags = function (term, world) { let tags = Object.keys(term.tags) const tagSet = world.tags tags = tags.sort((a, b) => { diff --git a/src/Term/methods/_doesMatch.js b/src/Term/methods/_doesMatch.js index 24499774f..c1fbdb9e5 100644 --- a/src/Term/methods/_doesMatch.js +++ b/src/Term/methods/_doesMatch.js @@ -1,8 +1,8 @@ //declare it up here -let wrapMatch = function() {} +let wrapMatch = function () {} /** ignore optional/greedy logic, straight-up term match*/ -const doesMatch = function(t, reg, index, length) { +const doesMatch = function (t, reg, index, length) { // support id matches if (reg.id === t.id) { return true @@ -69,7 +69,7 @@ const doesMatch = function(t, reg, index, length) { } // wrap result for !negative match logic -wrapMatch = function(t, reg, index, length) { +wrapMatch = function (t, reg, index, length) { let result = doesMatch(t, reg, index, length) if (reg.negative === true) { return !result diff --git a/src/Term/normalize/clean.js b/src/Term/normalize/clean.js index 028cd5cfb..bff54b821 100644 --- a/src/Term/normalize/clean.js +++ b/src/Term/normalize/clean.js @@ -3,7 +3,7 @@ const isAcronym = require('./isAcronym') const hasSlash = /[a-z\u00C0-\u00FF] ?\/ ?[a-z\u00C0-\u00FF]/ /** some basic operations on a string to reduce noise */ -const clean = function(str) { +const clean = function (str) { str = str || '' str = str.toLowerCase() str = str.trim() diff --git a/src/Term/normalize/isAcronym.js b/src/Term/normalize/isAcronym.js index f3d628540..5cbf6cb01 100644 --- a/src/Term/normalize/isAcronym.js +++ b/src/Term/normalize/isAcronym.js @@ -3,7 +3,7 @@ const oneLetterAcronym = /^[A-Z]\.,?$/ const noPeriodAcronym = /[A-Z]{2,}('s|,)?$/ const lowerCaseAcronym = /([a-z]\.){2,}[a-z]\.?$/ -const isAcronym = function(str) { +const isAcronym = function (str) { //like N.D.A if (periodAcronym.test(str) === true) { return true diff --git a/src/Term/normalize/reduce.js b/src/Term/normalize/reduce.js index 67528a301..faa46c269 100644 --- a/src/Term/normalize/reduce.js +++ b/src/Term/normalize/reduce.js @@ -1,5 +1,5 @@ /** reduced is one step further than clean */ -const reduced = function(str) { +const reduced = function (str) { // remove apostrophes str = str.replace(/['’]s$/, '') str = str.replace(/s['’]$/, 's') diff --git a/src/Term/normalize/unicode.js b/src/Term/normalize/unicode.js index 7019fcb2f..81dadfe78 100644 --- a/src/Term/normalize/unicode.js +++ b/src/Term/normalize/unicode.js @@ -38,8 +38,8 @@ let compact = { } //decompress data into two hashes let unicode = {} -Object.keys(compact).forEach(function(k) { - compact[k].split('').forEach(function(s) { +Object.keys(compact).forEach(function (k) { + compact[k].split('').forEach(function (s) { unicode[s] = k }) }) diff --git a/src/Term/tag/add.js b/src/Term/tag/add.js index 3e4c6b19d..1288009b4 100644 --- a/src/Term/tag/add.js +++ b/src/Term/tag/add.js @@ -1,7 +1,7 @@ const fns = require('./fns') /** add a tag, and its descendents, to a term */ -const addTag = function(t, tag, reason, world) { +const addTag = function (t, tag, reason, world) { let tagset = world.tags //support '.' or '-' notation for skipping the tag if (tag === '' || tag === '.' || tag === '-') { @@ -38,7 +38,7 @@ const addTag = function(t, tag, reason, world) { } /** support an array of tags */ -const addTags = function(term, tags, reason, world) { +const addTags = function (term, tags, reason, world) { if (typeof tags !== 'string') { for (let i = 0; i < tags.length; i++) { addTag(term, tags[i], reason, world) diff --git a/src/Term/tag/canBe.js b/src/Term/tag/canBe.js index 7e8cb96ca..312876ad3 100644 --- a/src/Term/tag/canBe.js +++ b/src/Term/tag/canBe.js @@ -1,7 +1,7 @@ 'use strict' //recursively-check compatibility of this tag and term -const canBe = function(term, tag, world) { +const canBe = function (term, tag, world) { const tagset = world.tags // cleanup tag if (tag[0] === '#') { diff --git a/src/Term/tag/fns.js b/src/Term/tag/fns.js index ecee6189d..b494c6032 100644 --- a/src/Term/tag/fns.js +++ b/src/Term/tag/fns.js @@ -3,7 +3,7 @@ function isClientSide() { } /** add spaces at the end */ -const padEnd = function(str, width) { +const padEnd = function (str, width) { str = str.toString() while (str.length < width) { str += ' ' @@ -12,7 +12,7 @@ const padEnd = function(str, width) { } /** output for verbose-mode */ -exports.logTag = function(t, tag, reason) { +exports.logTag = function (t, tag, reason) { if (isClientSide()) { console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;') return @@ -26,7 +26,7 @@ exports.logTag = function(t, tag, reason) { } /** output for verbose mode */ -exports.logUntag = function(t, tag, reason) { +exports.logUntag = function (t, tag, reason) { if (isClientSide()) { console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;') return @@ -39,7 +39,7 @@ exports.logUntag = function(t, tag, reason) { console.log(log) } -exports.isArray = function(arr) { +exports.isArray = function (arr) { return Object.prototype.toString.call(arr) === '[object Array]' } diff --git a/src/Term/tag/index.js b/src/Term/tag/index.js index a24a6ec81..838690221 100644 --- a/src/Term/tag/index.js +++ b/src/Term/tag/index.js @@ -6,13 +6,13 @@ const canBe = require('./canBe') * @param {string | string[]} tags - a tag or tags * @param {string?} [reason] a clue for debugging */ -exports.tag = function(tags, reason, world) { +exports.tag = function (tags, reason, world) { add(this, tags, reason, world) return this } /** only tag this term if it's consistent with it's current tags */ -exports.tagSafe = function(tags, reason, world) { +exports.tagSafe = function (tags, reason, world) { if (canBe(this, tags, world)) { add(this, tags, reason, world) } @@ -23,7 +23,7 @@ exports.tagSafe = function(tags, reason, world) { * @param {string | string[]} tags - a tag or tags * @param {string?} [reason] a clue for debugging */ -exports.unTag = function(tags, reason, world) { +exports.unTag = function (tags, reason, world) { unTag(this, tags, reason, world) return this } @@ -32,6 +32,6 @@ exports.unTag = function(tags, reason, world) { * @param {string | string[]} tags - a tag or tags * @returns {boolean} */ -exports.canBe = function(tags, world) { +exports.canBe = function (tags, world) { return canBe(this, tags, world) } diff --git a/src/Term/tag/unTag.js b/src/Term/tag/unTag.js index 4c129771e..3cc85c965 100644 --- a/src/Term/tag/unTag.js +++ b/src/Term/tag/unTag.js @@ -6,7 +6,7 @@ const titleCase = str => { } /** remove this tag, and its descentents from the term */ -const unTag = function(t, tag, reason, world) { +const unTag = function (t, tag, reason, world) { const isVerbose = world.isVerbose() //support '*' for removing all tags if (tag === '*') { @@ -42,7 +42,7 @@ const unTag = function(t, tag, reason, world) { } //handle an array of tags -const untagAll = function(term, tags, reason, world) { +const untagAll = function (term, tags, reason, world) { if (typeof tags !== 'string' && tags) { for (let i = 0; i < tags.length; i++) { unTag(term, tags[i], reason, world) diff --git a/src/World/World.js b/src/World/World.js index cec27d8a5..0e52ecf94 100644 --- a/src/World/World.js +++ b/src/World/World.js @@ -154,12 +154,12 @@ class World { } // ¯\_(:/)_/¯ -const clone = function(obj) { +const clone = function (obj) { return JSON.parse(JSON.stringify(obj)) } /** produce a deep-copy of all lingustic data */ -World.prototype.clone = function() { +World.prototype.clone = function () { let w2 = new World() // these are simple to copy: w2.words = Object.assign({}, this.words) diff --git a/src/World/_data.js b/src/World/_data.js index 57d8e1ef9..71785c711 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -7,25 +7,26 @@ module.exports={ "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,lest,unless", + "Preposition": "true¦'o,-,aLbIcHdGexcept,fFiDmidQnotwithstandiRoBpSqua,sAt6u3vi2w0;/o,hereNith0;!in,oR;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oJ;ans,ince,o that;',f0n2ut;!f;f,n0;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", "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", + "Conjunction": "true¦&,aFbBcuz,how9in caEno8o7p5supposing,t2v1wh0yet;eth9ile;ers4s;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh", + "Abbreviation": "true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Pronoun": "true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s", - "Singular": "true¦0:10;1:13;a0Zb0Nc0Ed07e04fZgUhQiPjel0kitty,lOmKnJoIpEquestion mark,rCs7t4u2womY;nc0Us 2;doll0Gst0I; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst0Z;ep3ri1u2;de0Sff;faOmoO;st0Oze;al0i1o2;om,se;a4i0Ll07r3u2;dMrpoE;erogaXobl0Q;rt,te0K;bjUceHthers;othi1umb0G;a4ee06o2;del,m2nopo0rni1th0E;!my;n,yf0;i0unch;ci1nsect;ead start,o2;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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", + "Singular": "true¦0:14;1:17;a13b0Rc0Id0Be08f03gYhUiTjel0kitty,lRmNnMoLpGquestionFrDs8t5u3w2;ay,om01;nc0Xs 2;doll0Jst0L; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;i5ky,omeone,t2uper bowl,yst12;ep3ri1u2;de0Vff;faRmoR;st0Rze;al0i1o2;om,se;! mark;a5i0Nla4r3u2;dOrpoG;erogaZobl0S;te,y0K;rt,te0L;bjVceIthers;othi1umb0H;a4ee07o2;del,m2nopo0rni1th0F;!my;n,yf0;i2unch;ly,ne;ci1nsect;ead start,o2uman right;l0me3u2;se;! run;adf0entlem5irl00laci05od,rand3u2;l0y; slam,fa2mo2;th02;an;a5ella,ly,ol0r3un2;di1;iUo2;ntiXsO;mi0thW;conomy,gg,ner6ven3x2;ampRecu8;i1t;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;ailNcientJecretary,oldiGu0;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¦a01bYcQdPeOfiJgIhon,jr,king,lHmCoffic00p7queen,r3s0taoiseach,vice6;e1fc,gt,ir,r,u0;ltRpt,rg;cond liInBrgeaJ;abbi,e0;ar1p9s,v0;!erend; admirX;astOhd,r0vt;esideDi1of0;!essM;me mini4nce0;!ss;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¦0:1F;a1Mb1Ec15d12e0Vf0Pg0Ih0Di09j08knowled1Ll03mVnews,oUpRrMsBt6vi5w1;a3ea06i2oo1;d,l;ldlife,ne;rmth,t0;neg12ol07tae;e4h3oothpaste,r1una;affQou1;ble,sers,t;ermod1Hund0;a,nnis;a9cene05eri0Sh8il7kittl0Snow,o6p4t2u1;g0Vnshi0L;ati1Ge1;am,el;ace19e1;ci0Ned;ap,cc0;k,v0;eep,ingl0K;d08fe13l1nd;m0Wt;a4e2ic1;e,ke0H;c1laxa0Dsearch;ogni0Crea0C;bi0Din;aKe2hys13last6o1ressZ;lit12rk,w0;a0YtrV;bstetr10il,xygen;a6e4ilk,o3u1;mps,s1;ic;nHo0E;a1chan0V;sl03t;chine1il,themat0T; learn09ry;aught0e3i2ogi0Qu1;ck,g0G;ce,ghtn06ngui0OteratL;a1isK;th0;ewel8usti0J;ce,mp1nformaStself;a1ortan0H;ti1;en0F;a4isto3o1;ck1mework,n1spitali09;ey;ry;ir,libut,ppiB;ene4o2r1um,ymna0B;aAound;l1ssip;d,f; 1t08;editOpo1;ol;i5lour,o2urnit1;ure;od,rgive1uri0wl;ne1;ss;c7sh;conomZduca6lectr5n3quip4thZvery1;body,o1thF;ne;joy1tertain1;ment;iciNonU;tiG;ar2iabet1raugh2;es;ts;a8elcius,h4ivPl3o1urrency;al,ld w1nfusiBttB;ar;assMoth3;aos,e1;e2w1;ing;se;r5sh;a5eef,i2lood,owls,read,utt0;er;lliar2s1;on;ds;g1ss;ga1;ge;c6dvi5ero3ir2mnes1rt,thlet8;ty;craft;b5d1naut5;ynam4;ce;id,ou1;st1;ics", - "Infinitive": "true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Ps7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3ZreseC;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr4;intaEna4rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mBnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;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,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6W;4:6V;5:5Z;6:67;7:6U;8:6Q;9:6I;A:6S;B:6P;C:6Z;D:6D;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Gm25n22o1Xp1Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tDve;n,raC;d0t;aIiGo7;eGsB;!w;l6Cry;nHpGr4se;gra4Mli3Z;dGi7lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuD;ank,reat2N;nd,st;lk,rg1Qs7;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitD;bmBck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi3;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi3;ngth2Dss,tD;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arDem,le5n1r3tt6;aHo2rG;atDew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu9fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l3rt;mb6nt,r3;e8i2;air,eHlGo3Zr0K;a9y;at;aEemb0i3Vo3;aHeGi3y;a1nt;te,x;a56r0J;act1Wer,le5u1;a11ei3k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiCoG;cGdu9greAhibBmi1te8vi2T;eAlaim;di5pa2ss,veC;iCp,rtr3ZsGur;e,t;aHead,uG;g,n4;n,y;ck,le;fo30mBsi8;ck,iCrt4Fss,u1;bJccur,ff0pera7utweIverGwe;co40lap,ta20u1wG;helm;igh;ser3taE;eHotG;e,i9;ed,gle5;aMeLiIoHuG;ltip3Crd0;nit11ve;nHrr10sreprG;eseC;d,g6us;asu2lt,n0Mr4;intaEna4rHtG;ch,t0;ch,kGry;et;aKeJiIoGu1A;aGck,ok,ve;d,n;ft,ke,mBnk,st2Vve;a2Dc0Et;b0Nck,uG;gh,nD;iGno2Z;ck,ll,ss;am,oEuG;d4mp;gno2mQnGss3C;cOdica7flu0MhNsKtIvG;eGol3;nt,st;erGrodu9;a5fe2;i8tG;aGru5;ll;abBibB;lu1Er1C;agi22pG;lemeCo20ro3;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloAove1MrIuG;arGeAi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFt,x;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua7xG;a0AcLerKi8pGte17;a16eHi2laEoGreA;rt,se;ct,riG;en9;ci1t;el,han4;abGima7;liF;ab6couXdHfor9ga4han9j03riDsu2t0vG;isi2Qy;!u2;body,er4pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeAiG;ft;g,in;d4ubt;ff0p,re5sHvG;iYor9;aKcHliGmiApl16tinguiF;ke;oGuA;uGv0;ra4;gr1TppG;ear,ro3;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er3iHtrG;oy;gn,re;a09e08i5osB;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma4n9re,te;a0Ae09h06i7l04oJrG;aHeGoAuFy;a7dB;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin9;rt,y;aEin0SrG;a8ibu7ol;iGtitu7;d0st;iHoGroC;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen4n4r4se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un9;ow;ck;ar,lHnefBtrG;ay;ie3ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waB;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia7uG;me;gn,st;mb6rt;le;chHgGri3;ue;!i3;eaJlIroG;aDve;ch;aud,y;l,r;noun9sw0tG;icipa7;ce;lHt0;er;e4ow;ee;rd;aRdIju8mBoR;it;st;!reA;ss;cJhie3knowled4tiva7;te;ge;ve;eIouCu1;se;nt;pt;on", "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;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;a1ern1Mi0;en2Hlni2Z;lenc2Uncouv0Gr2Gughn;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¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!eud;ef,o0;b,f,n;!a;ct,kla,nt,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "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:FX;1:G1;2:FQ;3:FC;4:FB;5:FR;6:EQ;7:EO;8:GE;9:EY;A:GA;B:E4;C:G7;D:FN;E:FK;F:EF;aE1bD3cB7dAHe9Ff90g8Gh82i7Rj6Tk5Zl4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7DeHol1TvG;et7onB8;le0sen3;an9endBMhiB3iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9WenG0;kCYtor3;da,l8Unus,rG;a,nGoniD1;a,iDB;leGnesEB;nDKrG;i1y;aSePhNiMoJrGu6y4;acG2iGu0E;c3na,sG;h9Lta;nHrG;a,i;i9Iya;a5HffaCFna,s5;al3eGomasi0;a,l8Fo6Wres1;g7To6VrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs5tGwa0;ia0um;a,yn;iGya;a,ka,s5;a4e4iGmC9ra;!ka;a,t5;at5it5;a05carlet2Ye04hUiSkye,oQtMuHyG;bFIlvi1;e,sHzG;an2Tet7ie,y;anGi8;!a,e,nG;aEe;aIeG;fGl3DphG;an2;cF7r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh74;dy;aKeGirlBKo0y6;ba,e0i6lIrG;iGrBOyl;!d6Z;ia,lBU;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Xre0;bMdLi9lKmIndHrGs5vannaE;aEi0;ra,y;aGi4;nt5ra;lBMome;e,ie;in1ri0;a02eXhViToHuG;by,thBJ;bQcPlOnNsHwe0xG;an93ie,y;aHeGie,lC;ann8ll1marBEtB;!lGnn1;iGyn;e,nG;a,d7V;da,i,na;an9;hel52io;bin,erByn;a,cGkki,na,ta;helBYki;ea,iannDWoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cAQkaE;chGe,i0mo0n5DquCCvDy0;aCBelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAV;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4No6rvaBAtHulG;a,et7in1;ricGsy,tA7;a,e,ia;ctav3deHfAVlGphAV;a,ga,iv3;l3t7;aQePiJoGy6;eHrG;aEeDma;ll1mi;aKcIkGla,na,s5ta;iGki;!ta;hoB1k8AolG;a,eBG;!mh;l7Sna,risF;dIi5OnHo22taG;li1s5;cy,et7;eAiCN;a01ckenz2eViLoIrignayani,uriBFyG;a,rG;a,na,tAR;i4ll9WnG;a,iG;ca,ka,qB3;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9IlG;iGy;cent,e;red;!e6;ae6el3F;ag4JgKi,lHrG;edi60isFyl;an2iGliF;nGsAL;a,da;!an,han;b08c9Dd06e,g04i03l01nZrKtJuHv6Rx86yGz2;a,bell,ra;de,rG;a,eD;h74il9t2;a,cSgOiJjor2l6Hn2s5tIyG;!aGbe5PjaAlou;m,n9R;a,ha,i0;!aIbAKeHja,lCna,sGt52;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Jueri7;!t;!ry;et3HiB;elGi60y;a,l1;dGon,ue6;akranBy;iGlo35;a,ka,n9;a,re,s2;daGg2;!l2V;alCd2elGge,isBFon0;eiAin1yn;el,le;a0He07iWoQuKyG;d3la,nG;!a,dHe9RnGsAP;!a,e9Q;a,sAN;aB0cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a29e,l24n9;is,l1FrHtt2uG;el6is1;aIeHi8na,rG;a6Yi8;lei,n1tB;!in1;aPbb82d3lLnIsHv3zG;!a,be4Jet7z2;a,et7;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Fe;!n4E;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes5na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as5is5oG;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,stD;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s5;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlCri0y;ar5Cer5Cie,leDr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelCd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lCph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et7iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lCquelG;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;aEnaE;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolC;acHetGisel9;a,chD;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et7i5T;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;d0FileDkBl00mUn4ArRsMtLuKvG;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,eDis,la,othGthy;ea,y;an09naEonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraEra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et7iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleD;en,t7;aIeoHotG;il4B;!pat4;ir8rIudG;et7iG;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,eGot7;n1t7;!sa;d4el1PtG;al,el1O;cHlG;es7i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleDrCy;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;nwCok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaEvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt5yl;adHiG;ce;et7iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes5;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t7;an19elG;le;aYdWeUgQiOja,nHtoGya;inet7n3;!aJeHiGmI;e,ka;!mGt7;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t7;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;c3is5jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naE;c5da,leDmLnslKsG;haElG;inGyW;g,n;!h;ey;ee;en;at5g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lCsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", @@ -38,15 +39,14 @@ module.exports={ "MaleName": "true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:BZ;6:AT;7:9V;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,nde7sB;!l6t1;de,lCrr5yB;l1ne;lBt3;a93y;aEiBladimir;cCha0kt5CnceBrg9Bva0;!nt;ente,t5A;lentin49n8Y;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,l6;lom1nA3uB;leyma8ta;dBl7Jm1;!n6;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;e4Qg3n6olfo,ri68;co,ky;bAe9U;cBl6;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub5x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw5;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;!e7;a78ik;house,o03t1;e,olB;aj;ah,hBk6;a4eB;al,l;hClv2rB;le,ri7v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe7;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha7tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe7;!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;a7ri4N;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;cHd5kGmFrDsCvi3yB;!d5s1;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;a43d5;an,s0;lEo4FrDuBv6;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;ffr6rge;bri4l5rBv2;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;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym5zra;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;a8dl6nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e7ie,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,iDne7rByl;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,lCro7y;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;!foBl6y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n6rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid5ja0ElZmXnPputsiOrFsaEuCveBya0ziz;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,beOd5eIfFi,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", + "PhrasalVerb": "true¦0:7B;1:6Z;2:7N;3:7D;4:6S;5:7Q;6:7F;7:6Y;8:6L;9:6M;A:5P;B:7G;C:7A;D:79;a7Rb6Bc5Kd5Ge5Ef4Cg3Uh3Eiron0j3Ak35l2Pm2Fn2Do2Bp1Tquiet70r1Hs0BtRuPvacuum 1wHyammerDzE;eroAip FonE;e0k0;by,up;aKeHhGiForErit59;d 1k2X;mp0n2Ppe0r8s8;eel Cip 7V;aFiE;gh 08rd0;n Cr 3J;it 5Sk8lk6rm 63sh 7Et6Hv4V;rgeDsE;e 9herA;aTeRhPiLoJrGuEype 60;ckArn E;d2in,o3Mup;aFiEot0y 2D;ckle6Ip 7K;ck6Hde Y;ne6Gp Es4I;d2o6Uup;ck GdFe Egh62me0p o0Gre0;aw3ba4d2in,up;e 5Ty 1;by,oB;ink Erow 64;ba4ov7up;aEe 4Nll4U;m 1r X;ckDke Flk E;ov7u4V;aEba4d2in,o36up;ba4ft7p50w3;a0Ic0He0Bh07i05l01m00nZoYpTquare StKuIwE;earGiE;ngFtch E;aw3ba4o6Y; by;ck Eit 1m 1ss0;in,up;aJe0UiIoGrEuc39;aigh1RiE;ke 67n33;p Erm1U;by,in,oB;n34r 1tc3N;c33mp0nd Er6Qve6y 1;ba4d2up;d2oBup;ar30eHiGlFrEurD;ingDuc8;a38it 3Z;l10n 1;e5Jll0;be4Hrt0;ap 4Jow C;ash 56oke0;eep FiEow 9;c3Qp 1;in,oE;ff,v7;gn 4Ong32t Ez8;d2o5up;aGoEu4L;ot Eut0w 65;aw3ba4f3BoB;c2JdeAk50ve6;e Ill0nd HtE; Etl49;d2in,o5upE;!on;aw3ba4d2in,o22up;o5to;al4Tout0rap4T;il6v8;aOeLiKoHuE;b 4Mle0n Estl8;aEba4d2in5Bo3Mt34u3K;c21w3;ot FuE;g2Ond6;a21f2Vo5;ng 4Wp6;aEel6inAnt0;c56d E;o2Xu0F;c1Zt0;aReQiPlNoLrIsyc2DuE;ll Gt E;aEba4d2in,o1Kt39up;p3Ew3;ap3Dd2in,o5t37up;attleDess FiHoE;p 1;ah1Kon;iEp 5Ar3Sur4Cwer 5A;nt0;ay46uE;gAmp 9;ck 5Ag0leDn 9p43;el 4EncilA;c3Wir 2Ln0ss GtFy E;ba4oB; d2c21;aw3ba4o15;pEw3R;e3Qt C;arrow40erd0oE;d6te3Z;aLeJiIoGuE;ddl8lE;l 3D;c19p 1uth6ve E;al3Hd2in,o5up;ss0x 1;asur8lt 9ss E;a1Cup;ke En 9r35s1Nx0;do,o44up;aRePiKoEuck0;aIc3Dg HoEse0;k Ese3B;aft7ba4d2forw2Fin42ov7uE;nd7p;in,o0L;d 9;e HghtGnFsEv1U;ten 4I;e 1k 1; 1e33;ar48d2;av1It 33velE; o3Q;c8p 1sh EtchDugh6y1W;in3Qo5;eFick6nock E;d2o3M;eEyA;l 2Mp E;aw3ba4d2fTin,o06to,up;aGoFuE;ic8mpA;ke2Xt31;c36zz 1;aQeLiIoFuE;nker2Yrry 1s0V;lEneArse2T;d Ee 1;ba4d2fast,o00up;de Ft E;ba4on,up;aw3o5;aElp0;d Gl 27r Et 1;fEof;rom;in,oSu1D;c00m 1nEve it,z22;d Eg 2CkerG;d2in,o5;aSeMive Kloss 20oGrFunE; f0N;in3Eow 28; Eof 0V;aFb1Ait,oEr3At0Pu15;ff,n,v7;bo5ft7hKw3;aw3ba4d2in,oEup,w3;ff,n,ut;a1Aek0t E;aFb14d2oEr34up;ff,n,ut,v7;cFhEl1Ur32t,w3;ead;ross;d aFnE;g 1;bo5;a09e02iSlOoKrGuE;cEel 1;k 1;eFighten EownDy 1;aw3oB;eEshe1L; 1z8;lGol E;aEwi1E;bo5r2N;d 9low 1;aFeEip0;sh0;g 9ke0mErE;e 2P;gMlKnIrGsFzzE;le0;h 2M;e Em 1;aw3ba4up;d0isE;h 1;e El 16;aw3fJ;ht ba4ure0;eJnFsE;s 1;cGd E;fEoB;or;e C;dSl 1;cIll Erm0t0T;ap01bGd2in,oFtE;hrough;ff,ut,v7;a4ehi1X;e F;at0dge0nd Ey8;oBup;oGrE;ess 9op E;aw3bQin,o1A; 0Bubl8;aUhRlean 9oEross Cut 0X;me HoFuntE; o1Q;k 1l E;d2oB;aKbJforHin,oGtFuE;nd7;ogeth7;ut,v7;th,wE;ard;a4y;pEr1Cw3;art;eEipA;ck CeE;r 1;lKncel0rHsGtch FveA; in;o19up;h Ct6;ry FvE;e Y;aw3o15;l Em05;aEba4d2o13up;r0Yw3;a0Ke0Bl04oVrKuE;bblHcklWil02lGndlWrn 08st FtEy 13zz6;t C;in,o5up;k 9;e E;ov7;anNeaLiEush6;ghIng E;aFba4d2forEin,o5up;th;bo5lEr0Mw3;ong;teE;n 1;k E;d2in,o5up;ch0;arLgKil 9n8oHssGttlFunce Ex C;aw3ba4;e 9; ar0C;k Ct 1;e 1;d2up; d2;d 1;aJeed0oEurt0;cGw E;aw3ba4d2o5up;ck;k E;in,oL;ck0nk0st6; oKaHef 1nd E;d2ov7up;er;up;r0t E;d2in,oEup;ff,ut;ff,nE;to;ck Kil0nGrgFsE;h C;ainDe C;g CkD; on;in,o5; o5;aw3d2o5up;ay;cNdJsk Guction6; oB;ff;arEo5;ouE;nd;d E;d2oEup;ff,n;own;t E;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to,a;ay,ight,ust;an,o0;uld", - "Adjective": "true¦0:7N;1:82;2:81;3:88;4:7U;5:5R;6:57;7:4N;8:4M;9:7Z;A:6G;B:7L;a6Vb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uNvKwCyear5;arp0eGholeFiEoC;man5oCu6O;d6Qzy;despr7Ks5S;!sa7;eDlCste2A;co1Nl o4W;!k5;aDiCola4M;b88ce versa,ol5H;ca3gabo6Fnilla;ltUnHpDrb5Msu4tterC;!mo7F; f3Ab1SpEsCti1M;ca7etCide dKtairs;!ti2;er,i3U;aMbeco75convin2AdeJeIfair,ivers4knHprecedWrFsDwC;iel3Oritt6A;i1YuC;pervis0spec3Z;eCu5;cognIgul6Tl6T;own;ndi2v64xpect0;cid0rC;!grou5ZsC;iz0tood;b7pp0Essu6UuthorC;iz0;i27ra;aHeFhEi6AoDrC;i1oubl0us3N;geth6p,rp6Vuc67;ough4Xril34;en60l33mpCrr2Y;o6Ati2;boo,lCn;ent0;aXcWeUhTiRmug,nobbi3MoPpOqueami3MtGuCymb6H;bEi gener5EpCrpri6D;erCre0O;! dup6b,i2D;du0seq53;anda77eHiGrCunni2y3G;aightDiC;ki2p0; fCfC;or5K;ll,r5S;aCreotyp0;dfa6Cmi2;a56ec2Hir1Ilend6Cot on; call0le,mb6phist1YrCu0Wvi49;d6Ary;gnifica3nC;ce52g7;am2Se6ocki2ut;cCda1em5lfi33ni1Xpa6Jre8;o1Fr43;at5Gient29reec5G;cr0me;aKeFiDoC;bu60tt51uRy4;ghtCv4;!-2CfA;ar,bel,condi1du6Dfres5AlFpublic43sDtard0vC;ea27;is4DoC;lu1na3;aRe1Duc4B;b5TciCllyi2;al,st;aPeMicayu8lac5Ropuli5QrDuC;bl5Jmp0n51;eHiEoC;!b08fuBmiCp6;ne3si2;mDor,sCva1;ti8;a53e;ciBmC;a0FiC;er,um;ac21rCti1;fe9ma2YpleCv39;xi2;rCst;allelEtC;-tiCi4;me;!ed;bMffKkJld fashion0nIpHrg1Fth6utGvC;al,erC;!all,niDt,wC;eiCrouC;ght;do0Uer,g2Rsi4B;en,posi1; boa5Og2Pli8;!ay; gua5MbCli8;eat;eEsC;cCer0Fole1;e8u3P;d2Yse;aKeJiIoCua4X;nGrDtC;ab7;thC;!eC;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1B;aJeHiEoCultip7;bi7derCl0Wnth5ot,st;a1n;nCx0;dblo0SiaCor;tu38;ande3Qdi4NnaCre;ci2;cCgenta,in,j02keshift,le,mmoth,ny,sculi8;ab34ho;aLeGiDoCu16;uti15vi2;mDteraC;l,te;it0;ftFgCth4;al,eDitiC;ma1;nda3K;!-0D;ngu3Zst,tt6;ap1Yind5no0B;agg0uC;niNstifi0veni7;de4gno4Klleg4mRnFpso 21rC;a1rC;eleCita0K;va3; LaKbr0corJdHfluenRiRnGsFtDviC;go0Gti2;a9enBoxC;ic3B;a8i2Vul0E;a1er,oce3;iDoC;or;re9;deq3Qppr33;fCsitu,vitro;ro3;mGpC;arEerfe9oCrop6;li1rtC;a3ed;ti4;eCi0T;d2VnB;aJeGiEoCumdr3I;ne36ok0rrCs09ur5;if2Z;ghfalut1RspC;an2X;aDlC;liZpfA;li2;lFnErC;d05roC;wi2;dy;f,low0;ainfAener2Oiga24lIoHraEuC;ilCng ho;ty;cDtC;efAis;efA;ne,od;ea2Iob4;aUeOinNlLoGrC;a1VeEoz1MustC;raC;ti2;e2Gq11tfA;oErC; keeps,eCm6tuna1;g04ign;liC;sh;aCue3;g31tte1P;al,i1;dGmDrC;ti7;a7ini8;ne;le; up;bl0i3lBr Dux,voC;ri1uri1;oCreac1E;ff;aMfficie3lLmInGre9there4veFxC;a9cess,pe1QtraDuC;be2Nl0F;!va1E;n,ryday; CcouraFti0P;rou1sui1;erDiC;ne3;gi2;abo23dNe17i1;g6sC;t,ygC;oi2;er;aSeKiEoCrea14ue;mina3ne,ubC;le,tfA;dact1Bfficu1OsDvC;erB;creEeas0gruntl0hone1FordDtC;a3ressN;er5;et; IadpHfGgene1PliErang0spe1PtDvoC;ut;ail0ermin0;be1Mca1ghC;tfA;ia3;an;facto;i5magCngeroVs0G;ed,i2;ly;ertaNhief,ivil,oErC;aCowd0u0G;mp0vZz0;loJmHnDrrCve0P;e9u1I;cre1fu0LgrEsDtC;empo0Dra0E;ta3;ue3;mer08pleC;te,x;ni4ss4;in;aNeJizarIlGoDrC;and new,isk,okN;gDna fiUttom,urgeoC;is;us;ank,indC;!i2;re;autifAhiDlov0nCst,yoD;eUt;nd;ul;ckDnkru0XrrC;en;!wards; priori,b0Nc0Kd0Afra09g05h04lZmXntiquWppTrNsJttracti07utheIvFwC;aDkC;wa0U;ke,re;ant garDerC;age;de;ntV;leep,piEsuEtonC;isC;hi2;ri2;ab,bitFroEtiC;fiC;ci4;ga3;raC;ry;are3etiOrC;oprC;ia1;at0;aKuC;si2;arFcohDeCiJl,oof;rt;olC;ic;mi2;ead;ainEgressiDoniC;zi2;ve;st;id; JeHuGvC;aDerB;se;nc0;ed;lt;pt,qC;ua1;hoc,infinitC;um;cuDtu4u1;al;ra1;erMlLoJruIsDuC;nda3;e3oDtra9;ct;lu1rbi2;ng;te;pt;aCve;rd;aze,e;ra3;nt", - "Comparable": "true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;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;e4i3;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", + "Adjective": "true¦0:7P;1:84;2:83;3:8A;4:7W;5:5S;6:58;7:4O;8:4N;9:81;A:6I;a6Wb6Gc63d5Je54f4Hg49h3Wi39j37k36l2Vm2Ln2Bo1Wp1Dquack,r12s0Ft07uMvJwByear5;arp0eFholeEiDoB;man5oBu6P;d6Rzy;despr7Ls5S;!sa7;eClBste2A;co1Nl o4W;!k5;aCiBola4M;b89ce versa,ol5H;ca3gabo6Gnilla;ltUnHpCrb5Msu4tterB;!mo7G; Eb1SpDsBti1M;ca7etBide dKtairs;!ti2;er,i3U;f36to da1;aLbeco75convin29deIeHfair,ivers4knGprecedVrEsCwB;iel3Nritt6A;i1XuB;pervis0spec3Y;eBu5;cognHgul6Tl6T;own;ndi2v64xpect0;cid0rB;!grou5ZsB;iz0tood;b7pp0Dssu6UuthorB;iz0;i26ra;aGeEhDi6AoCrB;i1oubl0us3M;geth6p,rp6Vuc67;ough4Wril33;en60l32mpBrr2X;o6Ati2;boo,lBn;ent0;aWcVeThSiQmug,nobbi3LoOpNqueami3LtFuBymb6H;bDi gener5DpBrpri6D;erBre0N;! dup6b,i2C;du0seq52;anda77eGiFrBunni2y3F;aightCiB;ki2p0; fBfB;or5K;ll,r5S;aBreotyp0;dfa6Cmi2;a55ec2Gir1Hlend6Cot on; call0le,mb6phist1XrBu0Vvi48;d6Ary;gnifica3nB;ce51g7;am2Re6ocki2ut;cBda1em5lfi32ni1Wpa6Jre8;o1Er42;at5Gient28reec5G;cr0me;aJeEiCoB;bu60tt51uQy4;ghtBv4;!-2BfA;ar,bel,condi1du6Dfres5AlEpublic42sCtard0vB;ea26;is4CoB;lu1na3;aQe1Cuc4A;b5TciBllyi2;al,st;aOeLicayu8lac5Ropuli5QrCuB;bl5Jmp0n51;eGiDoB;!b07fu5RmiBp6;ne3si2;mCor,sBva1;ti8;a53e;ci5MmB;a0EiB;er,um;ac20rBti1;fe9ma2XpleBv38;xi2;rBst;allelDtB;-tiBi4;me;!ed;bLffJkIld fashion0nHpGrg1Eth6utFvB;al,erB;!all,niCt,wB;eiBrouB;ght;do0Ter,g2Qsi4B;en,posi1; boa5Og2Oli8;!ay; gua5MbBli8;eat;eDsB;cBer0Eole1;e8u3O;d2Xse;aJeIiHoBua4X;nFrCtB;ab7;thB;!eB;rn;chala3descri58stop;ght5;arby,cessa44ighbor5xt;k0usia1A;aIeGiDoBultip7;bi7derBl0Vnth5ot,st;a1n;nBx0;dblo0RiaBor;tu37;ande3Qdi4NnaBre;ci2;cBgenta,in,j01keshift,le,mmoth,ny,sculi8;ab33ho;aKeFiCoBu15;uti14vi2;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda3K;!-0C;ngu3Zst,tt6;ap1Xind5no0A;agg0uB;niMstifi0veni7;de4gno4Klleg4mQnEpso 20rB;a1rB;eleBita0J;va3; KaJbr0corIdGfluenQiQnFsEtCviB;go0Fti2;a9en3SoxB;ic3B;a8i2Vul0D;a1er,oce3;iCoB;or;re9;deq3Qppr33;fBsitu,vitro;ro3;mFpB;arDerfe9oBrop6;li1rtB;a3ed;ti4;eBi0S;d2Vn3C;aIeFiDoBumdr3I;ne36ok0rrBs08ur5;if2Z;ghfalut1QspB;an2X;aClB;liYpfA;li2;lEnDrB;d04roB;wi2;dy;f,low0;ainfAener2Oiga24lHoGraDuB;ilBng ho;ty;cCtB;efAis;efA;ne,od;ea2Iob4;aTeNinMlKoFrB;a1VeDoz1MustB;raB;ti2;e2Gq10tfA;oDrB; keeps,eBm6tuna1;g03ign;liB;sh;aBue3;g31tte1P;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i3l27r Cux,voB;ri1uri1;oBreac1E;ff;aLfficie3lKmHnFre9there4veExB;a9cess,pe1QtraCuB;be2Nl0E;!va1E;n,ryday; BcouraEti0O;rou1sui1;erCiB;ne3;gi2;abo23dMe17i1;g6sB;t,ygB;oi2;er;aReJiDoBrea14ue;mina3ne,ubB;le,tfA;dact1Bfficu1OsCvB;er1K;creDeas0gruntl0hone1FordCtB;a3ressM;er5;et; HadpGfFgene1PliDrang0spe1PtCvoB;ut;ail0ermin0;be1Mca1ghB;tfA;ia3;an;facto;i5magBngeroUs0G;ed,i2;ly;ertaMhief,ivil,oDrB;aBowd0u0G;mp0vZz0;loImGnCrrBve0P;e9u1I;cre1fu0LgrDsCtB;empo0Dra0E;ta3;ue3;mer08pleB;te,x;ni4ss4;in;aNeIizarHlFoCrB;and new,isk,okN;gCna fiUttom,urgeoB;is;us;ank,indB;!i2;re;autifAhiDloCnBst,yoD;eUt;v0w;nd;ul;ckCnkru0WrrB;en;!wards; priori,b0Mc0Jd09fra08g04h03lYmWntiquVppSrMsIttracti06utheHvEwB;aCkB;wa0T;ke,re;ant garCerB;age;de;ntU;leep,piDsuDtonB;isB;hi2;ri2;ab,bitEroDtiB;fiB;ci4;ga3;raB;ry;are3etiNrB;oprB;ia1;at0;aJuB;si2;arEcohCeBiIl,oof;rt;olB;ic;mi2;ead;ainDgressiConiB;zi2;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda3;e3oCtra9;ct;lu1rbi2;ng;te;pt;aBve;rd;aze,e;ra3;nt", + "Comparable": "true¦0:41;1:4I;2:45;3:4B;4:3X;5:2Y;a4Ob44c3Od3De35f2Rg2Fh24i1Vj1Uk1Rl1Jm1Dn17o15p0Vqu0Tr0KsTtMuIvFw7y6za13;ell27ou3;aBe9hi1Yi7r6;o3y;ck0Ode,l6n1ry,se;d,y;a6i4Mt;k,ry;n1Tr6sK;m,y;a7e6ulgar;nge4rda2xi3;g9in,st;g0n6pco3Mse4;like0t6;i1r6;ue;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te4;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft5;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp5;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p5;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in4le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b5isy,rm15sy;ce,mb5;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt5ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b5id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te4;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t5uiY;u1y;aIeeb5iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get4mG;my;erce8n6rm;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;e4i3;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¦bOeJfDhundredNmOninAone,qu8s6t0zeroN;enMh3rNw0;e0o;l0ntD;fHve;ir0ousandKree;d,t6;e0ix8;cond,pt1ven7xt1;adr0int0;illionD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en0;!th;illion0;!s,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¦bHeEf8hundred,mHnineAone,qu6s4t0zero;en,h2rGw0;e0o;lve,n8;irt9ousandEree;e0ix5;pt1ven4xt1;adr0int0;illion;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion0;!s", "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;h1iny bit,o0wiO;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" + "Adverb": "true¦a08by 06d02eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,well,ye0;p,s; to,wards5;h1iny bit,o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hYtimes,w09;a1e0;alT;ndomSthN;ar excellDer0oint blank; Nhaps;f3n0;ce0ly;! 0;ag02moW; courIten;ewKo0; longEt 0;onIwithstanding;aybe,eanwhiAore0;!ovB;! aboU;deed,steV;en0;ce;or2u0;lArther0;!moJ; 0ev3;examp0good,suH;le;n1v0;er; mas0ough;se;e0irect1; 1finite0;ly;ju8trop;far,n0;ow; DbroCd nauseam,gBl6ny3part,s2t 0w4;be6l0mo6wor6;arge,ea5; soon,ide;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori", + "Determiner": "true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0very;!se;ch;e0u;!s;!n0;!o0y;th0;er" } \ No newline at end of file diff --git a/src/World/addIrregulars.js b/src/World/addIrregulars.js index 3a0d7f4da..51bd3b39d 100644 --- a/src/World/addIrregulars.js +++ b/src/World/addIrregulars.js @@ -1,5 +1,5 @@ // add words from plurals and conjugations data -const addIrregulars = function(world) { +const addIrregulars = function (world) { //add irregular plural nouns let nouns = world.irregulars.nouns let words = Object.keys(nouns) @@ -21,6 +21,10 @@ const addIrregulars = function(world) { //add the others Object.keys(forms).forEach(tag => { world.words[forms[tag]] = world.words[forms[tag]] || tag + // lexicon should prefer other tags, over participle + if (world.words[forms[tag]] === 'Participle') { + world.words[forms[tag]] = tag + } }) } } diff --git a/src/World/addWords.js b/src/World/addWords.js index 8ce2adc89..3e0c6977f 100644 --- a/src/World/addWords.js +++ b/src/World/addWords.js @@ -1,5 +1,5 @@ //safely add it to the lexicon -const addWord = function(word, tag, lex) { +const addWord = function (word, tag, lex) { if (lex[word] !== undefined) { if (typeof lex[word] === 'string') { lex[word] = [lex[word]] @@ -15,7 +15,7 @@ const addWord = function(word, tag, lex) { } // blast-out more forms for some given words -const addMore = function(word, tag, world) { +const addMore = function (word, tag, world) { let lexicon = world.words let transform = world.transforms diff --git a/src/World/data/conjugations.js b/src/World/data/conjugations.js index da7e3c963..e8105bbd3 100644 --- a/src/World/data/conjugations.js +++ b/src/World/data/conjugations.js @@ -15,6 +15,7 @@ const mapping = { } // '_' in conjugations is the infinitive form +// (order matters, to the lexicon) let conjugations = { act: { a: '_or', @@ -87,8 +88,8 @@ let conjugations = { pst: 'bit', }, bleed: { - prt: 'bled', pst: 'bled', + prt: 'bled', }, blow: { prt: '_n', @@ -107,8 +108,8 @@ let conjugations = { pst: 'bred', }, bring: { - prt: 'brought', pst: 'brought', + prt: 'brought', }, broadcast: { pst: '_', @@ -117,8 +118,8 @@ let conjugations = { pst: '_ed', }, build: { - prt: 'built', pst: 'built', + prt: 'built', }, burn: { prt: '_ed', @@ -127,8 +128,8 @@ let conjugations = { prt: '_', }, buy: { - prt: 'bought', pst: 'bought', + prt: 'bought', }, can: { a: '', @@ -170,8 +171,8 @@ let conjugations = { prt: '_', }, deal: { - prt: '_t', pst: '_t', + prt: '_t', }, develop: { a: '_er', @@ -184,8 +185,8 @@ let conjugations = { }, dig: { g: '_ging', - prt: 'dug', pst: 'dug', + prt: 'dug', }, dive: { prt: '_d', @@ -240,8 +241,8 @@ let conjugations = { pst: 'felt', }, fight: { - prt: 'fought', pst: 'fought', + prt: 'fought', }, find: { pst: 'found', @@ -297,18 +298,18 @@ let conjugations = { prt: '_n', }, hang: { - prt: 'hung', pst: 'hung', + prt: 'hung', }, have: { g: 'having', - prt: 'had', pst: 'had', + prt: 'had', pres: 'has', }, hear: { - prt: '_d', pst: '_d', + prt: '_d', }, hide: { prt: 'hidden', @@ -318,12 +319,12 @@ let conjugations = { prt: '_', }, hold: { - prt: 'held', pst: 'held', + prt: 'held', }, hurt: { - prt: '_', pst: '_', + prt: '_', }, ice: { g: 'icing', @@ -349,19 +350,19 @@ let conjugations = { prt: '_n', }, lay: { - prt: 'laid', pst: 'laid', + prt: 'laid', }, lead: { - prt: 'led', pst: 'led', + prt: 'led', }, leap: { prt: '_t', }, leave: { - prt: 'left', pst: 'left', + prt: 'left', }, lend: { prt: 'lent', @@ -371,8 +372,8 @@ let conjugations = { pst: 'lay', }, light: { - prt: 'lit', pst: 'lit', + prt: 'lit', }, log: { g: '_ging', @@ -386,18 +387,18 @@ let conjugations = { pst: 'lost', }, make: { - prt: 'made', pst: 'made', + prt: 'made', }, mean: { - prt: '_t', pst: '_t', + prt: '_t', }, meet: { a: '_er', g: '_ing', - prt: 'met', pst: 'met', + prt: 'met', }, miss: { pres: '_', @@ -406,8 +407,8 @@ let conjugations = { g: 'naming', }, pay: { - prt: 'paid', pst: 'paid', + prt: 'paid', }, prove: { prt: '_n', @@ -422,15 +423,15 @@ let conjugations = { prt: '_', }, read: { - prt: '_', pst: '_', + prt: '_', }, ride: { prt: 'ridden', }, ring: { - prt: 'rung', pst: 'rang', + prt: 'rung', }, rise: { fut: 'will have _n', @@ -449,11 +450,12 @@ let conjugations = { pst: 'ran', }, say: { - prt: 'said', pst: 'said', + prt: 'said', pres: '_s', }, seat: { + pst: 'sat', prt: 'sat', }, see: { @@ -465,8 +467,8 @@ let conjugations = { prt: 'sought', }, sell: { - prt: 'sold', pst: 'sold', + prt: 'sold', }, send: { prt: 'sent', @@ -489,12 +491,12 @@ let conjugations = { pres: '_s', }, shine: { - prt: 'shone', pst: 'shone', + prt: 'shone', }, shoot: { - prt: 'shot', pst: 'shot', + prt: 'shot', }, show: { pst: '_ed', @@ -523,8 +525,8 @@ let conjugations = { prt: 'slept', }, slide: { - prt: 'slid', pst: 'slid', + prt: 'slid', }, smash: { pres: '_es', @@ -551,8 +553,8 @@ let conjugations = { }, spin: { g: '_ning', - prt: 'spun', pst: 'spun', + prt: 'spun', }, spit: { prt: 'spat', @@ -580,8 +582,8 @@ let conjugations = { pst: 'stung', }, stink: { - prt: 'stunk', pst: 'stunk', + prt: 'stunk', }, stream: { a: '_er', diff --git a/src/World/data/misc.js b/src/World/data/misc.js index 112168de3..022daa41d 100644 --- a/src/World/data/misc.js +++ b/src/World/data/misc.js @@ -12,4 +12,12 @@ module.exports = { q2: 'Date', q3: 'Date', q4: 'Date', + her: ['Possessive', 'Pronoun'], + his: ['Possessive', 'Pronoun'], + their: ['Possessive', 'Pronoun'], + themselves: ['Possessive', 'Pronoun'], + your: ['Possessive', 'Pronoun'], + our: ['Possessive', 'Pronoun'], + my: ['Possessive', 'Pronoun'], + its: ['Possessive', 'Pronoun'], } diff --git a/src/World/tags/index.js b/src/World/tags/index.js index bfac2b2da..ace55166e 100644 --- a/src/World/tags/index.js +++ b/src/World/tags/index.js @@ -5,7 +5,7 @@ const misc = require('./tags/misc') const inferTags = require('./inference/index') //extend tagset with new tags -const addIn = function(obj, tags) { +const addIn = function (obj, tags) { Object.keys(obj).forEach(k => { tags[k] = obj[k] }) diff --git a/src/World/tags/inference/_color.js b/src/World/tags/inference/_color.js index 28ac055fa..9e9d36dd5 100644 --- a/src/World/tags/inference/_color.js +++ b/src/World/tags/inference/_color.js @@ -17,7 +17,7 @@ const colorMap = { } /** add a debug color to some tags */ -const addColors = function(tags) { +const addColors = function (tags) { Object.keys(tags).forEach(k => { // assigned from plugin, for example if (tags[k].color) { diff --git a/src/World/tags/inference/_isA.js b/src/World/tags/inference/_isA.js index 2ab615ddf..8452804ea 100644 --- a/src/World/tags/inference/_isA.js +++ b/src/World/tags/inference/_isA.js @@ -1,9 +1,9 @@ -const unique = function(arr) { +const unique = function (arr) { return arr.filter((v, i, a) => a.indexOf(v) === i) } //add 'downward' tags (that immediately depend on this one) -const inferIsA = function(tags) { +const inferIsA = function (tags) { Object.keys(tags).forEach(k => { let tag = tags[k] let len = tag.isA.length diff --git a/src/World/tags/inference/_lineage.js b/src/World/tags/inference/_lineage.js index 14776e2bc..0b280848c 100644 --- a/src/World/tags/inference/_lineage.js +++ b/src/World/tags/inference/_lineage.js @@ -1,5 +1,5 @@ // a lineage is all 'incoming' tags that have this as 'isA' -const inferLineage = function(tags) { +const inferLineage = function (tags) { let keys = Object.keys(tags) keys.forEach(k => { let tag = tags[k] diff --git a/src/World/tags/inference/_notA.js b/src/World/tags/inference/_notA.js index 04c2b4c5d..2cfd8088e 100644 --- a/src/World/tags/inference/_notA.js +++ b/src/World/tags/inference/_notA.js @@ -1,10 +1,10 @@ -const unique = function(arr) { +const unique = function (arr) { return arr.filter((v, i, a) => a.indexOf(v) === i) } // crawl the tag-graph and infer any conflicts // faster than doing this at tag-time -const inferNotA = function(tags) { +const inferNotA = function (tags) { let keys = Object.keys(tags) keys.forEach(k => { let tag = tags[k] diff --git a/src/World/tags/inference/index.js b/src/World/tags/inference/index.js index 1dc88a7c7..5756aa235 100644 --- a/src/World/tags/inference/index.js +++ b/src/World/tags/inference/index.js @@ -3,7 +3,7 @@ const inferIsA = require('./_isA') const inferNotA = require('./_notA') const lineage = require('./_lineage') -const validate = function(tags) { +const validate = function (tags) { // cleanup format Object.keys(tags).forEach(k => { let tag = tags[k] @@ -22,7 +22,7 @@ const validate = function(tags) { } // build-out the tag-graph structure -const inferTags = function(tags) { +const inferTags = function (tags) { // validate data tags = validate(tags) // build its 'down tags' diff --git a/src/World/tags/tags/verbs.js b/src/World/tags/tags/verbs.js index 36b2c8287..63f424e2d 100644 --- a/src/World/tags/tags/verbs.js +++ b/src/World/tags/tags/verbs.js @@ -5,7 +5,7 @@ module.exports = { // walks PresentTense: { isA: 'Verb', - notA: ['PastTense', 'Copula', 'FutureTense'], + notA: ['PastTense', 'FutureTense'], }, // neutral form - 'walk' Infinitive: { @@ -46,7 +46,7 @@ module.exports = { }, // shown Participle: { - isA: 'Verb', + isA: 'PastTense', }, // show up PhrasalVerb: { diff --git a/src/_version.js b/src/_version.js index ab374bfdf..8f4f34d43 100644 --- a/src/_version.js +++ b/src/_version.js @@ -1 +1 @@ -module.exports = '13.6.0' \ No newline at end of file +module.exports = '13.7.0' \ No newline at end of file diff --git a/src/transforms/adjectives/index.js b/src/transforms/adjectives/index.js index fc8510496..5d334bdd5 100644 --- a/src/transforms/adjectives/index.js +++ b/src/transforms/adjectives/index.js @@ -4,7 +4,7 @@ const fns = { } /** conjugate an adjective into other forms */ -const conjugate = function(w) { +const conjugate = function (w) { let res = {} // 'greatest' let sup = fns.toSuperlative(w) diff --git a/src/transforms/adjectives/toComparative.js b/src/transforms/adjectives/toComparative.js index 46d41efad..10c65ecc8 100644 --- a/src/transforms/adjectives/toComparative.js +++ b/src/transforms/adjectives/toComparative.js @@ -34,7 +34,7 @@ const transforms = [ }, ] -const to_comparative = function(str) { +const to_comparative = function (str) { //known-irregulars if (irregulars.hasOwnProperty(str)) { return irregulars[str] diff --git a/src/transforms/adjectives/toSuperlative.js b/src/transforms/adjectives/toSuperlative.js index 98da5683c..4cbc42579 100644 --- a/src/transforms/adjectives/toSuperlative.js +++ b/src/transforms/adjectives/toSuperlative.js @@ -39,7 +39,7 @@ const transforms = [ }, ] -const to_superlative = function(str) { +const to_superlative = function (str) { //irregulars if (irregulars.hasOwnProperty(str)) { return irregulars[str] diff --git a/src/transforms/toPlural/_rules.js b/src/transforms/toPlural/_rules.js index 6df27bd08..46c613705 100644 --- a/src/transforms/toPlural/_rules.js +++ b/src/transforms/toPlural/_rules.js @@ -1,6 +1,9 @@ /** patterns for turning 'bus' to 'buses'*/ const suffixes = { - a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']], + a: [ + [/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], + [/([ti])a$/i, '$1a'], + ], e: [ [/(kn|l|w)ife$/i, '$1ives'], @@ -32,7 +35,10 @@ const suffixes = { [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'], ], - x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']], + x: [ + [/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], + [/^(ox)$/i, '$1en'], + ], y: [[/([^aeiouy]|qu)y$/i, '$1ies']], diff --git a/src/transforms/toPlural/index.js b/src/transforms/toPlural/index.js index b1f18d2b3..4af0ceae2 100644 --- a/src/transforms/toPlural/index.js +++ b/src/transforms/toPlural/index.js @@ -1,7 +1,7 @@ const rules = require('./_rules') const addE = /(x|ch|sh|s|z)$/ -const trySuffix = function(str) { +const trySuffix = function (str) { let c = str[str.length - 1] if (rules.hasOwnProperty(c) === true) { for (let i = 0; i < rules[c].length; i += 1) { @@ -17,7 +17,7 @@ const trySuffix = function(str) { /** Turn a singular noun into a plural * assume the given string is singular */ -const pluralize = function(str = '', world) { +const pluralize = function (str = '', world) { let irregulars = world.irregulars.nouns // check irregulars list diff --git a/tests/_backlog/clone.ignore.js b/tests/_backlog/clone.ignore.js index 6f7ea54cb..386716073 100644 --- a/tests/_backlog/clone.ignore.js +++ b/tests/_backlog/clone.ignore.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('nlp.clone() -change original', function(t) { +test('nlp.clone() -change original', function (t) { let nlp2 = nlp.clone() t.ok(nlp('bat').has('#Noun'), 'nlp1-init') t.ok(nlp2('bat').has('#Noun'), 'nlp2-init') diff --git a/tests/_backlog/pronoun.ignore.js b/tests/_backlog/pronoun.ignore.js index 3ae62801c..9b38a67b4 100644 --- a/tests/_backlog/pronoun.ignore.js +++ b/tests/_backlog/pronoun.ignore.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('pronoun:', function(t) { +test('pronoun:', function (t) { ;[ ['John', 'he'], ['John Smith', 'he'], @@ -18,10 +18,8 @@ test('pronoun:', function(t) { ['Mrs. Tanya Danza', 'she'], // ['John G. Fishermore Institute', 'it'], // ['John Fisher & sons', 'it'], - ].forEach(function(a) { - const str = nlp(a[0]) - .people() - .pronoun()[0] + ].forEach(function (a) { + const str = nlp(a[0]).people().pronoun()[0] const msg = a[0] + ' -> ' + str t.equal(str, a[1], msg) }) @@ -33,60 +31,42 @@ test('pronoun:', function(t) { // #Pronoun, #Object - "the book belongs to him", "the book belongs to her", "the book belongs to them", and for completeness, // #Pronoun, #Subject - "he owns the book", "she owns the book", "they own the book". -test('to her:', function(t) { +test('to her:', function (t) { let doc = nlp('her book belongs to her') //Det ... Pronoun // her book... - let m = doc - .match('^her') - .match('#Determiner') - .match('#Possessive') + let m = doc.match('^her').match('#Determiner').match('#Possessive') t.ok(m.found, 'her book - det/poss') // ...to her - m = doc - .match('her$') - .match('#Pronoun') - .match('#Possessive') + m = doc.match('her$').match('#Pronoun').match('#Possessive') t.ok(m.found, 'to her - det/poss') t.end() }) -test('to him:', function(t) { +test('to him:', function (t) { let doc = nlp('his book belongs to him') //Det ... Pronoun // his book... - let m = doc - .match('^hi') - .match('#Determiner') - .match('#Possessive') + let m = doc.match('^hi').match('#Determiner').match('#Possessive') t.ok(m.found, 'him book - det/poss') // ...to him - m = doc - .match('him$') - .match('#Pronoun') - .match('#Possessive') + m = doc.match('him$').match('#Pronoun').match('#Possessive') t.ok(m.found, 'to him - det/poss') t.end() }) -test('is his forms:', function(t) { +test('is his forms:', function (t) { let doc = nlp('his book is his') //Det ... Adjective //...is his - let m = doc - .match('his$') - .match('#Adjective') - .match('#Possessive') + let m = doc.match('his$').match('#Adjective').match('#Possessive') t.ok(m.found, 'is his - adj/poss') t.end() }) -test('is his forms:', function(t) { +test('is his forms:', function (t) { let doc = nlp('her book is hers') //Det ... Adjective //...is hers - let m = doc - .match('hers$') - .match('#Adjective') - .match('#Possessive') + let m = doc.match('hers$').match('#Adjective').match('#Possessive') t.ok(m.found, 'is hers - adj/poss') t.end() }) diff --git a/tests/_backlog/toAdjective.ignore.js b/tests/_backlog/toAdjective.ignore.js index 73a6e0a34..bbfc9be5a 100644 --- a/tests/_backlog/toAdjective.ignore.js +++ b/tests/_backlog/toAdjective.ignore.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('verb-to-adjective:', function(t) { +test('verb-to-adjective:', function (t) { let arr = [ ['walk', 'walkable'], ['sing', 'singable'], @@ -9,10 +9,8 @@ test('verb-to-adjective:', function(t) { ['convert', 'convertible'], ['see', 'visible'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .verbs() - .asAdjective()[0] + arr.forEach(function (a) { + const str = nlp(a[0]).verbs().asAdjective()[0] t.equal(str, a[1], str + ' -> ' + a[1]) }) t.end() diff --git a/tests/_pennSample.js b/tests/_pennSample.js index 65f7ced8e..554484d0a 100644 --- a/tests/_pennSample.js +++ b/tests/_pennSample.js @@ -1,4 +1,7 @@ -//(very) small subset of the Penn-treebank that should always pass +// tag tests that should always pass +// combination of two datasets: +// the free subset of the Penn-treebank +// and part of the Universal Dependencies English Web Treebank v2.6 -- 2020-05-15 module.exports = [ { text: @@ -322,4 +325,7545 @@ module.exports = [ text: ' The recent rally in precious metals was a result of uncertainty and volatility in equities, he said.', tags: 'DT, JJ, NN, IN, JJ, NNS, VBD, DT, NN, IN, NN, CC, NN, IN, NNS, PRP, VBD', }, + + { + text: 'Two of them were being run by 2 officials of the Ministry of the Interior!', + tags: 'CD, IN, PRP, VBD, VBG, VBN, IN, CD, NNS, IN, DT, NNP, IN, DT, NNP', + }, + { + text: 'The cells were operating in the Ghazaliyah and al-Jihad districts of the capital.', + tags: 'DT, NNS, VBD, VBG, IN, DT, NNP, CC, NNP, NNP, NNS, IN, DT, NN', + }, + { + text: 'Al-Zaman: Guerrillas killed a member of the Kurdistan Democratic Party after kidnapping him in Mosul.', + tags: 'NNP, NNP, NNS, VBD, DT, NN, IN, DT, NNP, NNP, NNP, IN, VBG, PRP, IN, NNP', + }, + { + text: 'Guerrillas killed an engineer, Asi Ali, from Tikrit.', + tags: 'NNS, VBD, DT, NN, NNP, NNP, IN, NNP', + }, + { + text: "They also killed Shaikh Hamid 'Akkab, a clan elder of a branch of the Dulaim tribe in Tikrit.", + tags: 'PRP, RB, VBD, NNP, NNP, NNP, DT, NN, NN, IN, DT, NN, IN, DT, NNP, NN, IN, NNP', + }, + { + text: 'Two other Dulaim leaders have been killed in the past week and a half.', + tags: 'CD, JJ, NNP, NNS, VBP, VBN, VBN, IN, DT, JJ, NN, CC, DT, NN', + }, + { + text: 'One of them was from the Jubur tribe and was deputy commander of the Hawijah garrison.', + tags: 'CD, IN, PRP, VBD, IN, DT, NNP, NN, CC, VBD, NN, NN, IN, DT, NNP, NN', + }, + { + text: 'There are a wealth of references on Chernobyl.', + tags: 'EX, VBP, DT, NN, IN, NNS, IN, NNP', + }, + { + text: 'IAEA Report Lessons learned', + tags: 'NNP, NN, NNPS, VBN', + }, + { + text: 'Remember the old shoe sizing machines that was a form of radiation xray?', + tags: 'VB, DT, JJ, NN, VBG, NNS, WDT, VBD, DT, NN, IN, NN, NN', + }, + { + text: 'That too was stopped.', + tags: 'DT, RB, VBD, VBN', + }, + { + text: 'It should continue to be defanged.', + tags: 'PRP, MD, VB, TO, VB, VBN', + }, + { + text: 'George W. Bush alleged Thursday that John Edwards lacks the experience necessary to be president.', + tags: 'NNP, NNP, NNP, VBD, NNP, IN, NNP, NNP, VBZ, DT, NN, JJ, TO, VB, NNP', + }, + { + text: 'November 5, 1999', + tags: 'NNP, CD, CD', + }, + { + text: 'WASHINGTON (CNN) --', + tags: 'NNP, NNP', + }, + { + text: 'Bush', + tags: 'NNP', + }, + { + text: 'Hiller asked Bush to name the leaders of Chechnya, Taiwan, India and Pakistan.', + tags: 'NNP, VBD, NNP, TO, VB, DT, NNS, IN, NNP, NNP, NNP, CC, NNP', + }, + { + text: 'By Juan Cole', + tags: 'IN, NNP, NNP', + }, + { + text: 'Friday, June 04, 2004', + tags: 'NNP, NNP, CD, CD', + }, + { + text: 'By Ranjit Devraj', + tags: 'IN, NNP, NNP', + }, + { + text: 'NEW DELHI -', + tags: 'NNP, NNP', + }, + { + text: 'But they, too, failed.', + tags: 'CC, PRP, RB, VBD', + }, + { + text: 'Colombo, too, seems to be in an intractable position.', + tags: 'NNP, RB, VBZ, TO, VB, IN, DT, JJ, NN', + }, + { + text: 'Musharraf calls the bluff', + tags: 'NNP, VBZ, DT, NN', + }, + { + text: 'M.D. Nalapat', + tags: 'NNP, NNP', + }, + { + text: 'The F-102 saw service in the Vietnam theater between March 1962 and December 1969.', + tags: 'DT, NNP, CD, VBD, NN, IN, DT, NNP, NN, IN, NNP, CD, CC, NNP, CD', + }, + { + text: + 'During this time, F-102 squadrons were based out of Tan Son Nhut, Da Nang and Bien Hoa in Vietnam, and Udorn and Don Muang in Thailand.', + tags: + 'IN, DT, NN, NNP, CD, NNS, VBD, VBN, IN, IN, NNP, NNP, NNP, NNP, NNP, CC, NNP, NNP, IN, NNP, CC, NNP, CC, NNP, NNP, IN, NNP', + }, + { + text: 'Six weeks of basic training.', + tags: 'CD, NNS, IN, JJ, NN', + }, + { + text: 'Two years.', + tags: 'CD, NNS', + }, + { + text: 'Did you know that?', + tags: 'VBD, PRP, VB, DT', + }, + { + text: 'That’s fine.', + tags: 'DT, VBZ, JJ', + }, + { + text: 'Many voting centres have already been successfully attacked or destroyed in many areas.', + tags: 'JJ, NN, NNS, VBP, RB, VBN, RB, VBN, CC, VBN, IN, JJ, NNS', + }, + { + text: 'Fistfights, please.', + tags: 'NNS, UH', + }, + { + text: + 'The Communist party has the largest number of registered party members in the country and can be considered as the oldest popular political party in Iraq.', + tags: + 'DT, NNP, NNP, VBZ, DT, JJS, NN, IN, VBN, NN, NNS, IN, DT, NN, CC, MD, VB, VBN, IN, DT, JJS, JJ, JJ, NN, IN, NNP', + }, + { + text: "Al-Gu'ud had favoured elections and was in good terms with the government.", + tags: 'NNP, NNP, VBD, VBN, NNS, CC, VBD, IN, JJ, NNS, IN, DT, NN', + }, + { + text: 'The revolt took two weeks to be suppressed by the Republican Guard.', + tags: 'DT, NN, VBD, CD, NNS, TO, VB, VBN, IN, DT, NNP, NNP', + }, + { + text: 'Remember Luis Posada Carriles?', + tags: 'VB, NNP, NNP, NNP', + }, + { + text: '(Ask Terry Nichols about the Philippines.)', + tags: 'VB, NNP, NNP, IN, DT, NNPS', + }, + { + text: 'But will Posada be given up?', + tags: 'CC, MD, NNP, VB, VBN, RP', + }, + { + text: 'gandalf', + tags: 'NNP', + }, + { + text: 'You really got me thinking, I enjoy reading this blog.', + tags: 'PRP, RB, VBD, PRP, VBG, PRP, VBP, VBG, DT, NN', + }, + { + text: 'This is a excellent blog.', + tags: 'DT, VBZ, DT, JJ, NN', + }, + { + text: 'Keep it going.', + tags: 'VB, PRP, VBG', + }, + { + text: 'I agree totally!', + tags: 'PRP, VBP, RB', + }, + { + text: 'Paul', + tags: 'NNP', + }, + { + text: 'Ramtanu Maitra', + tags: 'NNP, NNP', + }, + { + text: 'Deteriorating security', + tags: 'VBG, NN', + }, + { + text: + 'The presence of the Sea Tigers in the area with guns, cash and drugs makes the situation extremely dangerous.', + tags: 'DT, NN, IN, DT, NNP, NNPS, IN, DT, NN, IN, NNS, NN, CC, NNS, VBZ, DT, NN, RB, JJ', + }, + { + text: 'Intelligence lapses', + tags: 'NN, NNS', + }, + { + text: 'LTTE arms-running', + tags: 'NNP, NNS, NN', + }, + { + text: 'Steady buildup', + tags: 'JJ, NN', + }, + { + text: 'Karzai, Musharraf new regional equations', + tags: 'NNP, NNP, JJ, JJ, NNS', + }, + { + text: + '"President Musharraf promised to help us and cooperate with us on curbing terrorist activity by the Taliban," says Karzai.', + tags: 'NNP, NNP, VBD, TO, VB, PRP, CC, VB, IN, PRP, IN, VBG, JJ, NN, IN, DT, NNP, VBZ, NNP', + }, + { + text: 'That too may change.', + tags: 'DT, RB, MD, VB', + }, + { + text: 'Many Taliban living in Afghanistan voted for President Karzai.', + tags: 'JJ, NNPS, VBG, IN, NNP, VBD, IN, NNP, NNP', + }, + { + text: 'For decades.', + tags: 'IN, NNS', + }, + { + text: 'Bush has a sadistic streak.', + tags: 'NNP, VBZ, DT, JJ, NN', + }, + { + text: 'He clearly enjoyed, as governor, watching executions.', + tags: 'PRP, RB, VBD, IN, NN, VBG, NNS', + }, + { + text: 'He has clearly gone on enjoying killing people on a large scale in Iraq.', + tags: 'PRP, VBZ, RB, VBN, RP, VBG, VBG, NNS, IN, DT, JJ, NN, IN, NNP', + }, + { + text: 'He would wear khaki trousers and some old jacket.', + tags: 'PRP, MD, VB, NN, NNS, CC, DT, JJ, NN', + }, + { + text: 'But he just melded with everybody.', + tags: 'CC, PRP, RB, VBD, IN, NN', + }, + { + text: 'He dated a beautiful young woman working on the campaign.', + tags: 'PRP, VBD, DT, JJ, JJ, NN, VBG, IN, DT, NN', + }, + { + text: 'Mr. ARCHIBALD: People have different ways of starting the days in any office.', + tags: 'NNP, NNP, NNS, VBP, JJ, NNS, IN, VBG, DT, NNS, IN, DT, NN', + }, + { + text: 'I thought it unusual and, frankly, inappropriate.', + tags: 'PRP, VBD, PRP, JJ, CC, RB, JJ', + }, + { + text: 'And he would always laugh about that."', + tags: 'CC, PRP, MD, RB, VB, IN, DT', + }, + { + text: 'And you search in vain to find just one law abiding citizen', + tags: 'CC, PRP, VBP, IN, JJ, TO, VB, RB, CD, NN, VBG, NN', + }, + { + text: 'But the four planeloads of arms have vanished.', + tags: 'CC, DT, CD, NNS, IN, NNS, VBP, VBN', + }, + { + text: '...', + tags: 'NFP', + }, + { + text: 'SNAP is right in part.', + tags: 'NNP, VBZ, JJ, IN, NN', + }, + { + text: 'Police and prosecutors have the tools.', + tags: 'NNS, CC, NNS, VBP, DT, NNS', + }, + { + text: 'Some do, individually.', + tags: 'DT, VBP, RB', + }, + { + text: 'But institutionally?', + tags: 'CC, RB', + }, + { + text: 'CRACKDOWN ON POLYGAMY GROUP', + tags: 'NN, IN, NN, NN', + }, + { + text: '...', + tags: 'NFP', + }, + { + text: '...', + tags: 'NFP', + }, + { + text: '...', + tags: 'NFP', + }, + { + text: 'The Raw Story', + tags: 'DT, NNP, NNP', + }, + { + text: 'Husbands marry mothers and teen daughters at the same time.', + tags: 'NNS, VBP, NNS, CC, NN, NNS, IN, DT, JJ, NN', + }, + { + text: 'Also look up the kingston family.', + tags: 'RB, VB, RP, DT, NNP, NN', + }, + { + text: "It's a good thing too.", + tags: 'PRP, VBZ, DT, JJ, NN, RB', + }, + { + text: 'As the leaders like to boast, the Mujahedeen is a family affair.', + tags: 'IN, DT, NNS, VBP, TO, VB, DT, NNP, VBZ, DT, NN, NN', + }, + { + text: 'Umm...', + tags: 'UH', + }, + { + text: 'Question Mark', + tags: 'NN, NN', + }, + { + text: 'Bush successfully makes Satan look good in comparison.', + tags: 'NNP, RB, VBZ, NNP, VB, JJ, IN, NN', + }, + { + text: "Okay, it's partly about strippers and dope.", + tags: 'UH, PRP, VBZ, RB, IN, NNS, CC, NN', + }, + { + text: 'Hmmmmmm ....................', + tags: 'UH', + }, + { + text: 'The wikipedia entry for Aerocom is just a stub .. waiting for someone to put some information into it ....', + tags: 'DT, NNP, NN, IN, NNP, VBZ, RB, DT, NN, VBG, IN, NN, TO, VB, DT, NN, IN, PRP', + }, + { + text: "That's it.", + tags: 'DT, VBZ, PRP', + }, + { + text: '- Simone Weil', + tags: 'NNP, NNP', + }, + { + text: 'Michele Tollis', + tags: 'NNP, NNP', + }, + { + text: 'They\'re inseparable," he says.', + tags: 'PRP, VBP, JJ, PRP, VBZ', + }, + { + text: 'They are doing it deliberately.', + tags: 'PRP, VBP, VBG, PRP, RB', + }, + { + text: 'Do you really think GWB, and neocons in general are representative of true followers of Jesus of Nazareth?', + tags: 'VBP, PRP, RB, VB, NNP, CC, NNS, IN, JJ, VBP, JJ, IN, JJ, NNS, IN, NNP, IN, NNP', + }, + { + text: 'Is the distinction accurate and valid?', + tags: 'VBZ, DT, NN, JJ, CC, JJ', + }, + { + text: 'Does the distinction actually exist?', + tags: 'VBZ, DT, NN, RB, VB', + }, + { + text: 'John Balance from Coil.', + tags: 'NNP, NNP, IN, NNP', + }, + { + text: '5 kg per gun, 200,000 guns means 1000 tonnes, impossible for 4 containers.', + tags: 'CD, NNS, IN, NN, CD, NNS, VBZ, CD, NNS, JJ, IN, CD, NNS', + }, + { + text: 'I was amazed at the spiel they delivered.', + tags: 'PRP, VBD, VBN, IN, DT, NN, PRP, VBD', + }, + { + text: 'Kindly young men, but utterly programmed and brain-dead.', + tags: 'JJ, JJ, NNS, CC, RB, VBN, CC, NN, JJ', + }, + { + text: 'It would have been too painful to watch.', + tags: 'PRP, MD, VB, VBN, RB, JJ, TO, VB', + }, + { + text: 'very creepy, very scary', + tags: 'RB, JJ, RB, JJ', + }, + { + text: 'by exmearden', + tags: 'IN, NNP', + }, + { + text: 'Or was it supposed to initially be a process of alchemical appropriation?', + tags: 'CC, VBD, PRP, VBN, TO, RB, VB, DT, NN, IN, JJ, NN', + }, + { + text: 'True believers are dangerous animals.', + tags: 'JJ, NNS, VBP, JJ, NNS', + }, + { + text: 'Peace.', + tags: 'NN', + }, + { + text: "It's a long but very worthwhile read.", + tags: 'PRP, VBZ, DT, JJ, CC, RB, JJ, NN', + }, + { + text: '"A View from the Eye of the Storm"', + tags: 'DT, NNP, IN, DT, NNP, IN, DT, NNP', + }, + { + text: + 'The frequent reports from Algeria about the murders of hundreds of civilians in one village or another by other Algerians have nothing to do with Israel.', + tags: + 'DT, JJ, NNS, IN, NNP, IN, DT, NNS, IN, NNS, IN, NNS, IN, CD, NN, CC, DT, IN, JJ, NNPS, VBP, NN, TO, VB, IN, NNP', + }, + { + text: 'It is a very potent psychological weapon.', + tags: 'PRP, VBZ, DT, RB, JJ, JJ, NN', + }, + { + text: 'It creates headlines.', + tags: 'PRP, VBZ, NNS', + }, + { + text: 'It is spectacular.', + tags: 'PRP, VBZ, JJ', + }, + { + text: 'And it is a war!', + tags: 'CC, PRP, VBZ, DT, NN', + }, + { + text: 'It has nothing to do with true fanatic religious beliefs.', + tags: 'PRP, VBZ, NN, TO, VB, IN, JJ, JJ, JJ, NNS', + }, + { + text: 'There are numerous desperate people in the world, in different cultures, countries and continents.', + tags: 'EX, VBP, JJ, JJ, NNS, IN, DT, NN, IN, JJ, NNS, NNS, CC, NNS', + }, + { + text: 'Russia is beginning to understand it.', + tags: 'NNP, VBZ, VBG, TO, VB, PRP', + }, + { + text: 'Words can be lethal.', + tags: 'NNS, MD, VB, JJ', + }, + { + text: 'They kill people.', + tags: 'PRP, VBP, NNS', + }, + { + text: 'They provide an emotional infrastructure for atrocities.', + tags: 'PRP, VBP, DT, JJ, NN, IN, NNS', + }, + { + text: + 'This circle operates mostly through mosques, madrasas and other religious establishments but also through inciting electronic and printed media.', + tags: 'DT, NN, VBZ, RB, IN, NNS, NNS, CC, JJ, JJ, NNS, CC, RB, IN, VBG, JJ, CC, VBN, NN', + }, + { + text: + 'Some parts of this same outer circle actually operate as a result of fear from, or blackmail by, the inner circles.', + tags: 'DT, NNS, IN, DT, JJ, JJ, NN, RB, VBP, IN, DT, NN, IN, NN, IN, CC, NN, IN, DT, JJ, NNS', + }, + { + text: 'Should there be death penalty, for deliberate multiple murders?', + tags: 'MD, EX, VB, NN, NN, IN, JJ, JJ, NNS', + }, + { + text: 'These are the old-fashioned dilemmas.', + tags: 'DT, VBP, DT, JJ, JJ, NNS', + }, + { + text: + 'It is trying to play ice hockey by sending a ballerina ice-skater into the ring or to knock out a heavyweight boxer by a chess player.', + tags: + 'PRP, VBZ, VBG, TO, VB, NN, NN, IN, VBG, DT, NN, NN, NN, IN, DT, NN, CC, TO, VB, RP, DT, NN, NN, IN, DT, NN, NN', + }, + { + text: 'In the short run, only fight and win.', + tags: 'IN, DT, JJ, NN, RB, VB, CC, VB', + }, + { + text: 'Syria is surrounded by Turkey, Iraq, Jordan and Israel.', + tags: 'NNP, VBZ, VBN, IN, NNP, NNP, NNP, CC, NNP', + }, + { + text: 'This is a significant strategic change and it applies strong pressure on the terrorist countries.', + tags: 'DT, VBZ, DT, JJ, JJ, NN, CC, PRP, VBZ, JJ, NN, IN, DT, JJ, NNS', + }, + { + text: 'Zawahiri was associated with a faction of the Egyptian Islamic Jihad known as the Vanguards of Conquest.', + tags: 'NNP, VBD, VBN, IN, DT, NN, IN, DT, NNP, NNP, NNP, VBN, IN, DT, NNPS, IN, NNP', + }, + { + text: 'Al Qaeda, Anthrax and Ayman: Means, Motive, Modus Operandi and Opportunity', + tags: 'NNP, NNP, NNP, CC, NNP, NNS, NN, NN, NN, CC, NN', + }, + { + text: 'Homeland Security', + tags: 'NN, NN', + }, + { + text: 'He had been captured the previous month in Rawalpindi, Pakistan.', + tags: 'PRP, VBD, VBN, VBN, DT, JJ, NN, IN, NNP, NNP', + }, + { + text: + 'Photographs from a computer disc included the controls and the locks on the door between the passengers and pilot.', + tags: 'NNS, IN, DT, NN, NN, VBD, DT, NNS, CC, DT, NNS, IN, DT, NN, IN, DT, NNS, CC, NN', + }, + { + text: 'This is old news.', + tags: 'DT, VBZ, JJ, NN', + }, + { + text: 'Zawahiri was associated with a faction of the Egyptian Islamic Jihad known as the Vanguards of Conquest.', + tags: 'NNP, VBD, VBN, IN, DT, NN, IN, DT, NNP, NNP, NNP, VBN, IN, DT, NNPS, IN, NNP', + }, + { + text: 'At one time, some thought he had been spotted in Iran.', + tags: 'IN, CD, NN, DT, VBD, PRP, VBD, VBN, VBN, IN, NNP', + }, + { + text: 'In the case of the anthrax used in the mailings, there was an electrostatic charge.', + tags: 'IN, DT, NN, IN, DT, NN, VBN, IN, DT, NNS, EX, VBD, DT, JJ, NN', + }, + { + text: 'Understandably, Amerithrax is a confidential investigation.', + tags: 'RB, NNP, VBZ, DT, JJ, NN', + }, + { + text: 'They would know.', + tags: 'PRP, MD, VB', + }, + { + text: 'He reportedly treated them like sons.', + tags: 'PRP, RB, VBD, PRP, IN, NNS', + }, + { + text: 'India', + tags: 'NNP', + }, + { + text: 'Philippines', + tags: 'NNPS', + }, + { + text: 'Bolivia', + tags: 'NNP', + }, + { + text: 'Jamaica', + tags: 'NNP', + }, + { + text: 'Guatemala', + tags: 'NNP', + }, + { + text: 'Venezuela', + tags: 'NNP', + }, + { + text: 'Columbia', + tags: 'NNP', + }, + { + text: 'Panama', + tags: 'NNP', + }, + { + text: 'Brazil we have current data already', + tags: 'NNP, PRP, VBP, JJ, NN, RB', + }, + { + text: 'China we have current data already', + tags: 'NNP, PRP, VBP, JJ, NN, RB', + }, + { + text: 'Cindy', + tags: 'NNP', + }, + { + text: 'Maureen', + tags: 'NNP', + }, + { + text: 'Vince Kaminski', + tags: 'NNP, NNP', + }, + { + text: 'Dear Vince', + tags: 'JJ, NNP', + }, + { + text: 'Kind regards.', + tags: 'JJ, NNS', + }, + { + text: 'Philip', + tags: 'NNP', + }, + { + text: 'Paula', + tags: 'NNP', + }, + { + text: 'Will you drive on that day?', + tags: 'MD, PRP, VB, IN, DT, NN', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Paula', + tags: 'NNP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Anne, Mike will call you regarding Sarah.', + tags: 'NNP, NNP, MD, VB, PRP, VBG, NNP', + }, + { + text: 'Please advise.', + tags: 'UH, VB', + }, + { + text: 'Anne', + tags: 'NNP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Vince -', + tags: 'NNP', + }, + { + text: 'Good news.', + tags: 'JJ, NN', + }, + { + text: 'This was (another) nice deal for Enron.', + tags: 'DT, VBD, DT, JJ, NN, IN, NNP', + }, + { + text: "I'm happy about this.", + tags: 'PRP, VBP, JJ, IN, DT', + }, + { + text: 'Clayton', + tags: 'NNP', + }, + { + text: 'Congratulations.', + tags: 'NNS', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: 'John -', + tags: 'NNP', + }, + { + text: 'Appreciate the idea.', + tags: 'VBP, DT, NN', + }, + { + text: 'John.', + tags: 'NNP', + }, + { + text: 'John -', + tags: 'NNP', + }, + { + text: 'oh god is there an agenda.', + tags: 'UH, NNP, VBZ, EX, DT, NN', + }, + { + text: 'Would dinner Thursday work instead.', + tags: 'MD, NN, NNP, VB, RB', + }, + { + text: 'oh god is there an agenda.', + tags: 'UH, NNP, VBZ, EX, DT, NN', + }, + { + text: 'i completely agree.', + tags: 'PRP, RB, VBP', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: 'i completely agree.', + tags: 'PRP, RB, VBP', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: 'This is pretty easy math for me.', + tags: 'DT, VBZ, RB, JJ, NN, IN, PRP', + }, + { + text: 'I am reviewing the request for an employment agreement renewal on Mark Dean Laurent.', + tags: 'PRP, VBP, VBG, DT, NN, IN, DT, NN, NN, NN, IN, NNP, NNP, NNP', + }, + { + text: 'Job Group: Specialist', + tags: 'NN, NN, NN', + }, + { + text: '1 Year Agreement', + tags: 'CD, NN, NN', + }, + { + text: '1 Year agreement', + tags: 'CD, NN, NN', + }, + { + text: 'Are we going to attend?', + tags: 'VBP, PRP, VBG, TO, VB', + }, + { + text: 'OVERVIEW', + tags: 'NN', + }, + { + text: 'It will examine technology options and new business models for transmission expansion.', + tags: 'PRP, MD, VB, NN, NNS, CC, JJ, NN, NNS, IN, NN, NN', + }, + { + text: 'Essie', + tags: 'NNP', + }, + { + text: 'Sonya City', + tags: 'NNP, NNP', + }, + { + text: 'Do you concur?', + tags: 'VBP, PRP, VB', + }, + { + text: 'Please let me know Monday morning.', + tags: 'UH, VB, PRP, VB, NNP, NN', + }, + { + text: 'Vicsandra', + tags: 'NNP', + }, + { + text: 'Essie', + tags: 'NNP', + }, + { + text: 'Patty', + tags: 'NNP', + }, + { + text: '18T-EI Indonesia Operations LLC', + tags: 'NNP, NNP, NNPS, NNP', + }, + { + text: '86M-Enron Net Works LLC', + tags: 'NNP, NNP, NNPS, NNP', + }, + { + text: 'Despite the name, this entity appears to be a MTM company.', + tags: 'IN, DT, NN, DT, NN, VBZ, TO, VB, DT, NNP, NN', + }, + { + text: '80Y-Enron Broadband Acquisition, Inc.', + tags: 'NNP, NNP, NNP, NNP', + }, + { + text: 'I think this entity should stay with 83N.', + tags: 'PRP, VBP, DT, NN, MD, VB, IN, NN', + }, + { + text: 'It should be 4 - easy.', + tags: 'PRP, MD, VB, CD, JJ', + }, + { + text: '1579-EBS Network Co. Division of 17H.', + tags: 'NNP, NNP, NNP, NN, IN, NN', + }, + { + text: '1691-EPI-EBS Europe', + tags: 'NNP, NNP', + }, + { + text: 'Set up last month to centralize merchant asset activities.', + tags: 'VBN, RP, JJ, NN, TO, VB, NN, NN, NNS', + }, + { + text: 'Broke out the activities of 1179.', + tags: 'VBD, RP, DT, NNS, IN, CD', + }, + { + text: '1307-EBIC-Apache, LLC', + tags: 'NNP, NNP', + }, + { + text: '1689-EPI-EBS Ventures, LLC', + tags: 'NNP, NNPS, NNP', + }, + { + text: 'Set up last month to centralize merchant asset activities.', + tags: 'VBN, RP, JJ, NN, TO, VB, NN, NN, NNS', + }, + { + text: 'Broke out the activities of 1307.', + tags: 'VBD, RP, DT, NNS, IN, CD', + }, + { + text: 'Same as 1307.', + tags: 'JJ, IN, CD', + }, + { + text: 'Do you concur?', + tags: 'VBP, PRP, VB', + }, + { + text: 'Please let me know Monday morning.', + tags: 'UH, VB, PRP, VB, NNP, NN', + }, + { + text: 'Vicsandra', + tags: 'NNP', + }, + { + text: 'Essie', + tags: 'NNP', + }, + { + text: 'Patty', + tags: 'NNP', + }, + { + text: 'Hello.', + tags: 'UH', + }, + { + text: 'I was originally inquiring about purchasing a Cross or Signac impressionist lithograph.', + tags: 'PRP, VBD, RB, VBG, IN, VBG, DT, NNP, CC, NNP, JJ, NN', + }, + { + text: 'I found them and purchased both from a gallery in London, William Weston.', + tags: 'PRP, VBD, PRP, CC, VBD, DT, IN, DT, NN, IN, NNP, NNP, NNP', + }, + { + text: 'They should be delivered this week.', + tags: 'PRP, MD, VB, VBN, DT, NN', + }, + { + text: 'I have also purchased an Appel in the last month.', + tags: 'PRP, VBP, RB, VBN, DT, NNP, IN, DT, JJ, NN', + }, + { + text: 'Lautrec', + tags: 'NNP', + }, + { + text: 'Moore', + tags: 'NNP', + }, + { + text: 'Arp', + tags: 'NNP', + }, + { + text: 'Rouault', + tags: 'NNP', + }, + { + text: 'Rothko', + tags: 'NNP', + }, + { + text: 'Kline', + tags: 'NNP', + }, + { + text: 'Motherwell', + tags: 'NNP', + }, + { + text: 'Is there 1 available?', + tags: 'VBZ, EX, CD, JJ', + }, + { + text: 'mike', + tags: 'NNP', + }, + { + text: 'Sooners rule.', + tags: 'NNP, VBP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Ken', + tags: 'NNP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Mark, I thought you would enjoy the comment about you.', + tags: 'NNP, PRP, VBD, PRP, MD, VB, DT, NN, IN, PRP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Ken', + tags: 'NNP', + }, + { + text: 'We stayed at the Menger and had a great time.', + tags: 'PRP, VBD, IN, DT, NNP, CC, VBD, DT, JJ, NN', + }, + { + text: "I'm watching for some good vacation days, also ...", + tags: 'PRP, VBP, VBG, IN, DT, JJ, NN, NNS, RB', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'I see we expect to have separate contracts for each project.', + tags: 'PRP, VBP, PRP, VBP, TO, VB, JJ, NNS, IN, DT, NN', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'I would actually send them the draft Development Agreement a couple days after the LOI.', + tags: 'PRP, MD, RB, VB, PRP, DT, NN, NN, NN, DT, NN, NNS, IN, DT, NN', + }, + { + text: 'Remarkably clear explanation.', + tags: 'RB, JJ, NN', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'That is some good stuff.', + tags: 'DT, VBZ, DT, JJ, NN', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Done!', + tags: 'JJ', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'cd', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Just a reminder to send me a currency report.', + tags: 'RB, DT, NN, TO, VB, PRP, DT, NN, NN', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'He will be in Calgary in a couple of weeks and will interview you then.', + tags: 'PRP, MD, VB, IN, NNP, IN, DT, NN, IN, NNS, CC, MD, VB, PRP, RB', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Give him a call tommorow.', + tags: 'VB, PRP, DT, NN, NN', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Paul', + tags: 'NNP', + }, + { + text: 'The deed is done.', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Sushi tonight?', + tags: 'NN, NN', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'I will be able to attend.', + tags: 'PRP, MD, VB, JJ, TO, VB', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Mike Jordan', + tags: 'NNP, NNP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Late Jan sounds great.', + tags: 'JJ, NNP, VBZ, JJ', + }, + { + text: 'Does that work for you?', + tags: 'VBZ, DT, VB, IN, PRP', + }, + { + text: 'And do you want to do it on a Saturday or Sunday?', + tags: 'CC, VBP, PRP, VB, TO, VB, PRP, IN, DT, NNP, CC, NNP', + }, + { + text: 'Hi ...', + tags: 'UH', + }, + { + text: 'She said a shower would be grand.', + tags: 'PRP, VBD, DT, NN, MD, VB, JJ', + }, + { + text: 'Am I turning into Mother?', + tags: 'VBP, PRP, VBG, IN, NN', + }, + { + text: 'Cindy', + tags: 'NNP', + }, + { + text: '-- Sally', + tags: 'NNP', + }, + { + text: 'Delainey', + tags: 'NNP', + }, + { + text: 'Jeff Dasovich', + tags: 'NNP, NNP', + }, + { + text: 'Sent by: Jeff Dasovich', + tags: 'VBN, IN, NNP, NNP', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'Jeff Dasovich', + tags: 'NNP, NNP', + }, + { + text: 'Sent by: Jeff Dasovich', + tags: 'VBN, IN, NNP, NNP', + }, + { + text: '- er', + tags: 'NNP', + }, + { + text: 'Steven J Kean', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Courtney Votaw', + tags: 'NNP, NNP', + }, + { + text: 'Mark and Steve -', + tags: 'NNP, CC, NNP', + }, + { + text: 'As you can see from the Design Document, they are pretty significant.', + tags: 'IN, PRP, MD, VB, IN, DT, NN, NN, PRP, VBP, RB, JJ', + }, + { + text: 'Courtney', + tags: 'NNP', + }, + { + text: 'calendar', + tags: 'NN', + }, + { + text: 'Pin #: 411507', + tags: 'NN, NN, CD', + }, + { + text: 'Pin # for Paul Kaufman ONLY: 362416', + tags: 'NN, NN, IN, NNP, NNP, RB, CD', + }, + { + text: 'Darla', + tags: 'NNP', + }, + { + text: 'Thank you.', + tags: 'VBP, PRP', + }, + { + text: 'Darla', + tags: 'NNP', + }, + { + text: 'Sorry about the flooding.', + tags: 'JJ, IN, DT, NN', + }, + { + text: 'Have a great day.', + tags: 'VB, DT, JJ, NN', + }, + { + text: 'Nancy', + tags: 'NNP', + }, + { + text: 'Sorry about the flooding.', + tags: 'JJ, IN, DT, NN', + }, + { + text: 'Have a great day.', + tags: 'VB, DT, JJ, NN', + }, + { + text: 'Nancy', + tags: 'NNP', + }, + { + text: 'Nancy, can you please reconfirm with Mark the price for the gas at Bondad?', + tags: 'NNP, MD, PRP, UH, VB, IN, NNP, DT, NN, IN, DT, NN, IN, NN', + }, + { + text: 'Sorry about the flooding.', + tags: 'JJ, IN, DT, NN', + }, + { + text: 'Have a great day.', + tags: 'VB, DT, JJ, NN', + }, + { + text: 'Nancy', + tags: 'NNP', + }, + { + text: 'See attached spreadsheet.', + tags: 'VB, VBN, NN', + }, + { + text: 'cool by me!', + tags: 'JJ, IN, PRP', + }, + { + text: 'Did she make it?', + tags: 'VBD, PRP, VB, PRP', + }, + { + text: "And I bet she's on the phone with Shemin too !!!", + tags: 'CC, PRP, VBP, PRP, VBZ, IN, DT, NN, IN, NNP, RB', + }, + { + text: 'Steve, everything looks good with one exception.', + tags: 'NNP, NN, VBZ, JJ, IN, CD, NN', + }, + { + text: '____________________________________________________', + tags: 'NFP', + }, + { + text: 'A heartwarming story of the advances of women in achieving equality throughout the world.', + tags: 'DT, JJ, NN, IN, DT, NNS, IN, NNS, IN, VBG, NN, IN, DT, NN', + }, + { + text: 'Maybe we can go drinking too.', + tags: 'RB, PRP, MD, VB, VBG, RB', + }, + { + text: 'That would be fun.', + tags: 'DT, MD, VB, JJ', + }, + { + text: 'I CAN HANDLE THE TRACTOR.', + tags: 'PRP, MD, VB, DT, NN', + }, + { + text: 'Funny.', + tags: 'JJ', + }, + { + text: 'No.', + tags: 'UH', + }, + { + text: 'Vince Kaminski', + tags: 'NNP, NNP', + }, + { + text: 'The eThink Team', + tags: 'DT, NNP, NN', + }, + { + text: 'The response was tremendous and, in some cases, very creative.', + tags: 'DT, NN, VBD, JJ, CC, IN, DT, NNS, RB, JJ', + }, + { + text: 'Confirmed.', + tags: 'VBN', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Dale', + tags: 'NNP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'That would be particularly convenient for me.', + tags: 'DT, MD, VB, RB, JJ, IN, PRP', + }, + { + text: 'Dale Nesbitt', + tags: 'NNP, NNP', + }, + { + text: 'Vince sold!', + tags: 'NNP, VBD', + }, + { + text: "I'll initiate the call.", + tags: 'PRP, MD, VB, DT, NN', + }, + { + text: 'Thursday works for me.', + tags: 'NNP, VBZ, IN, PRP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'A correction.', + tags: 'DT, NN', + }, + { + text: 'Can we do on another day', + tags: 'MD, PRP, VB, IN, DT, NN', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Ed', + tags: 'NNP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Ed', + tags: 'NNP', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Talk about a shotgun marriage!', + tags: 'VB, IN, DT, NN, NN', + }, + { + text: 'Ed', + tags: 'NNP', + }, + { + text: 'I shall be available on both days.', + tags: 'PRP, MD, VB, JJ, IN, DT, NNS', + }, + { + text: 'It will be nice to see you again.', + tags: 'PRP, MD, VB, JJ, TO, VB, PRP, RB', + }, + { + text: 'Vince', + tags: 'NNP', + }, + { + text: 'Joe', + tags: 'NNP', + }, + { + text: 'Joe -', + tags: 'NNP', + }, + { + text: 'Caroline', + tags: 'NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Susan Bailey', + tags: 'NNP, NNP', + }, + { + text: 'Susan S. Bailey', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Please advise.', + tags: 'UH, VB', + }, + { + text: 'Jorge', + tags: 'NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'looks fine', + tags: 'VBZ, JJ', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Carlos', + tags: 'NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Scott', + tags: 'NNP', + }, + { + text: 'Term sheet for draft contract, as requested.', + tags: 'NN, NN, IN, NN, NN, IN, VBN', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'They showed some kids on TV, and they were quite taken with it.', + tags: 'PRP, VBD, DT, NNS, IN, NN, CC, PRP, VBD, RB, VBN, IN, PRP', + }, + { + text: 'Thank You', + tags: 'VBP, PRP', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Is that ok with you?', + tags: 'VBZ, DT, JJ, IN, PRP', + }, + { + text: 'the passcode: 6871082#', + tags: 'DT, NN, CD', + }, + { + text: 'the place: EB 3143C', + tags: 'DT, NN, NNP, NN', + }, + { + text: 'the subject: Turbine 1 and Turbine 2 Purchase Agreement', + tags: 'DT, NN, NN, CD, CC, NN, CD, NN, NN', + }, + { + text: 'Lorie Leigh', + tags: 'NNP, NNP', + }, + { + text: 'Kathleen', + tags: 'NNP', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Kathleen', + tags: 'NNP', + }, + { + text: 'Paula.', + tags: 'NNP', + }, + { + text: 'Paula.', + tags: 'NNP', + }, + { + text: 'Kay --', + tags: 'NNP', + }, + { + text: '- redvepco.doc', + tags: 'NN', + }, + { + text: '- SAMPLE.DOC', + tags: 'NN', + }, + { + text: 'the passcode: 6871082#', + tags: 'DT, NN, CD', + }, + { + text: 'the place: EB 3143C', + tags: 'DT, NN, NNP, NN', + }, + { + text: 'the subject: Turbine 1 and Turbine 2 Purchase Agreement', + tags: 'DT, NN, NN, CD, CC, NN, CD, NN, NN', + }, + { + text: 'Lorie Leigh 46093', + tags: 'NNP, NNP, CD', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'JWVS', + tags: 'NNP', + }, + { + text: 'These are always difficult times.', + tags: 'DT, VBP, RB, JJ, NNS', + }, + { + text: 'He is joining an excellent company.', + tags: 'PRP, VBZ, VBG, DT, JJ, NN', + }, + { + text: 'I hope you have a great summer.', + tags: 'PRP, VBP, PRP, VBP, DT, JJ, NN', + }, + { + text: 'Hi -', + tags: 'UH', + }, + { + text: 'Rosalee', + tags: 'NNP', + }, + { + text: 'Jeff Garten', + tags: 'NNP, NNP', + }, + { + text: 'Good morning, Kitty -', + tags: 'JJ, NN, NNP', + }, + { + text: 'Rosalee', + tags: 'NNP', + }, + { + text: 'Rosalee Fleming', + tags: 'NNP, NNP', + }, + { + text: 'June 14 Reception', + tags: 'NNP, CD, NN', + }, + { + text: 'Kent Grusendorf', + tags: 'NNP, NNP', + }, + { + text: 'Thank you.', + tags: 'VBP, PRP', + }, + { + text: '===================================================', + tags: 'NFP', + }, + { + text: '====================================================', + tags: 'NFP', + }, + { + text: 'Hi Mr. Katsof -', + tags: 'UH, NNP, NNP', + }, + { + text: 'Sorry.', + tags: 'JJ', + }, + { + text: 'Rosalee', + tags: 'NNP', + }, + { + text: 'Please check Tenn contract 36647 on the Demand speadsheet.', + tags: 'UH, VB, NNP, NN, CD, IN, DT, NN, NN', + }, + { + text: 'Brenda', + tags: 'NNP', + }, + { + text: 'It is very clean and is Sandalwood, Driftwood or something of that nature in color.', + tags: 'PRP, VBZ, RB, JJ, CC, VBZ, NN, NN, CC, NN, IN, DT, NN, IN, NN', + }, + { + text: 'Just jealous.', + tags: 'RB, JJ', + }, + { + text: 'She is going to be a kinesiologist, sports injury therapist.', + tags: 'PRP, VBZ, VBG, TO, VB, DT, NN, NNS, NN, NN', + }, + { + text: 'I think she just wants to be able to touch football players legs.', + tags: 'PRP, VBP, PRP, RB, VBZ, TO, VB, JJ, TO, VB, NN, NNS, NNS', + }, + { + text: 'Bro', + tags: 'NN', + }, + { + text: 'Dow', + tags: 'NNP', + }, + { + text: + 'W. Don Germany, Jr. 2301 N Brazosport Blvd B 3611, Investment Recovery Freeport, Texas 77541 Pager 1 800 451 0491 (0448) Office 979 238 2102 Home 979 548 7034', + tags: + 'NNP, NNP, NNP, NNP, CD, NNP, NNP, NNP, NNP, CD, NN, NN, NNP, NNP, CD, NN, CD, CD, CD, CD, CD, NN, CD, CD, CD, NN, CD, CD, CD', + }, + { + text: 'I need 2 things from you.', + tags: 'PRP, VBP, CD, NNS, IN, PRP', + }, + { + text: 'Darla', + tags: 'NNP', + }, + { + text: 'Hey Ernie.', + tags: 'UH, NNP', + }, + { + text: 'Can you help out?', + tags: 'MD, PRP, VB, RP', + }, + { + text: 'Ernie Simien', + tags: 'NNP, NNP', + }, + { + text: 'Sent by: Ernie Simien', + tags: 'VBN, IN, NNP, NNP', + }, + { + text: 'I need prices for May, June, and July.', + tags: 'PRP, VBP, NNS, IN, NNP, NNP, CC, NNP', + }, + { + text: 'Jan 9.95 Feb 6.25 Mar 4.98 April 5.37', + tags: 'NNP, CD, NNP, CD, NNP, CD, NNP, CD', + }, + { + text: 'Please do me a favour and give me the subject price for Jan, Feb, Mar and Apr 2001.', + tags: 'UH, VB, PRP, DT, NN, CC, VB, PRP, DT, NN, NN, IN, NNP, NNP, NNP, CC, NNP, CD', + }, + { + text: 'Gregg Penman', + tags: 'NNP, NNP', + }, + { + text: 'Kay -', + tags: 'NNP', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Hello -', + tags: 'UH', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Gregg Penman', + tags: 'NNP, NNP', + }, + { + text: 'Kay -', + tags: 'NNP', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Mary', + tags: 'NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Kay Mann', + tags: 'NNP, NNP', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Hello -', + tags: 'UH', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Gregg Penman', + tags: 'NNP, NNP', + }, + { + text: 'Kay -', + tags: 'NNP', + }, + { + text: 'Gregg', + tags: 'NNP', + }, + { + text: 'Mary', + tags: 'NNP', + }, + { + text: 'Does that work?', + tags: 'VBZ, DT, VB', + }, + { + text: 'Kay', + tags: 'NNP', + }, + { + text: 'Are you coming for Xmas?', + tags: 'VBP, PRP, VBG, IN, NNP', + }, + { + text: 'Kyle', + tags: 'NNP', + }, + { + text: '====================================================', + tags: 'NFP', + }, + { + text: '====================================================', + tags: 'NFP', + }, + { + text: '====================================================', + tags: 'NFP', + }, + { + text: '====================================================', + tags: 'NFP', + }, + { + text: + '>----------------------------------------------------------------------------| | | >----------------------------------------------------------------------------|', + tags: 'NFP, NFP, NFP, NFP', + }, + { + text: 'Adnan Patel', + tags: 'NNP, NNP', + }, + { + text: 'bd', + tags: 'NNP', + }, + { + text: 'Richard Sage', + tags: 'NNP, NNP', + }, + { + text: "Denis O'Connell", + tags: 'NNP, NNP', + }, + { + text: 'Tana -', + tags: 'NNP', + }, + { + text: 'Denis', + tags: 'NNP', + }, + { + text: 'Russell', + tags: 'NNP', + }, + { + text: 'Things in Houston are good and definitely warm.', + tags: 'NNS, IN, NNP, VBP, JJ, CC, RB, JJ', + }, + { + text: 'Susan', + tags: 'NNP', + }, + { + text: 'Are you really?', + tags: 'VBP, PRP, RB', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: '__________________________________________________', + tags: 'NFP', + }, + { + text: "She's a very fun girl.", + tags: 'PRP, VBZ, DT, RB, JJ, NN', + }, + { + text: 'Shorty', + tags: 'NNP', + }, + { + text: 'Ted Noble', + tags: 'NNP, NNP', + }, + { + text: 'Smart girl.', + tags: 'JJ, NN', + }, + { + text: 'Ted Noble', + tags: 'NNP, NNP', + }, + { + text: '- Mary Little', + tags: 'NNP, NNP', + }, + { + text: 'Bob Bowen', + tags: 'NNP, NNP', + }, + { + text: 'Sharon', + tags: 'NNP', + }, + { + text: 'Do you know the address to send cards ??', + tags: 'VBP, PRP, VB, DT, NN, TO, VB, NNS', + }, + { + text: 'Sharon', + tags: 'NNP', + }, + { + text: 'Bobby is one of those with major injuries .?', + tags: 'NNP, VBZ, CD, IN, DT, IN, JJ, NNS', + }, + { + text: 'He is currently in the emergency room at Ben Taub Hospital .?', + tags: 'PRP, VBZ, RB, IN, DT, NN, NN, IN, NNP, NNP, NNP', + }, + { + text: 'Dave', + tags: 'NNP', + }, + { + text: 'Does it make sense for us to set up a meeting with you participating from Buenos Aires?', + tags: 'VBZ, PRP, VB, NN, IN, PRP, TO, VB, RP, DT, NN, IN, PRP, VBG, IN, NNP, NNP', + }, + { + text: 'Thank you', + tags: 'VBP, PRP', + }, + { + text: 'Dave', + tags: 'NNP', + }, + { + text: 'Leonardo Pacheco', + tags: 'NNP, NNP', + }, + { + text: 'Mark E Haedicke', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Mark', + tags: 'NNP', + }, + { + text: '9 work days', + tags: 'CD, NN, NNS', + }, + { + text: 'Enclosed is a worksheet for Ineos Acrylics.', + tags: 'VBN, VBZ, DT, NN, IN, NNP, NNPS', + }, + { + text: 'Max', + tags: 'NNP', + }, + { + text: 'I left you a voice mail on Friday.', + tags: 'PRP, VBD, PRP, DT, NN, NN, IN, NNP', + }, + { + text: 'Marie', + tags: 'NNP', + }, + { + text: 'Pat', + tags: 'NNP', + }, + { + text: 'Please find attached the Enron Master Agreement.', + tags: 'UH, VB, VBN, DT, NNP, NN, NN', + }, + { + text: 'I have inserted the company details of Uecomm as requested.', + tags: 'PRP, VBP, VBN, DT, NN, NNS, IN, NNP, IN, VBN', + }, + { + text: 'Marie x33907', + tags: 'NNP, NN', + }, + { + text: 'Marie', + tags: 'NNP', + }, + { + text: 'CONGRATULATIONS !!!!!!!', + tags: 'NNS', + }, + { + text: 'Again, congratulations.', + tags: 'RB, NNS', + }, + { + text: 'Marie', + tags: 'NNP', + }, + { + text: 'Benjamin James-at 12.45 pm-3 lbs 4 ozs', + tags: 'NNP, NNP, IN, CD, NN, CD, NNS, CD, NNS', + }, + { + text: 'Toby William-12.46 pm-4 lbs', + tags: 'NNP, NNP, CD, NN, CD, NNS', + }, + { + text: 'Hannah May-12.48 pm-3 lbs 15 ozs.', + tags: 'NNP, NNP, CD, NN, CD, NNS, CD, NNS', + }, + { + text: 'Emma is fine, too-very well !!', + tags: 'NNP, VBZ, JJ, RB, RB, JJ', + }, + { + text: 'Mark', + tags: 'NNP', + }, + { + text: 'OOPS!', + tags: 'UH', + }, + { + text: 'Marie', + tags: 'NNP', + }, + { + text: 'I have attempted to revise them to make them clearer.', + tags: 'PRP, VBP, VBN, TO, VB, PRP, TO, VB, PRP, JJR', + }, + { + text: 'Marie x33907', + tags: 'NNP, NN', + }, + { + text: 'Marie', + tags: 'NNP', + }, + { + text: 'Marie', + tags: 'NNP', + }, + { + text: 'Marie -', + tags: 'NNP', + }, + { + text: 'Patty Snyder', + tags: 'NNP, NNP', + }, + { + text: 'Hi Marie', + tags: 'UH, NNP', + }, + { + text: 'Tracy', + tags: 'NNP', + }, + { + text: 'Marie x33907', + tags: 'NNP, NN', + }, + { + text: 'Karim.', + tags: 'NNP', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: 'The post id I am looking at for Calgary is 11608.', + tags: 'DT, NN, NN, PRP, VBP, VBG, IN, IN, NNP, VBZ, CD', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: 'Karim.', + tags: 'NNP', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: 'The post id I am looking at for Calgary is 11608.', + tags: 'DT, NN, NN, PRP, VBP, VBG, IN, IN, NNP, VBZ, CD', + }, + { + text: 'John', + tags: 'NNP', + }, + { + text: "I've booked Videoconference Room # 1.", + tags: 'PRP, VBP, VBN, NN, NN, NN, CD', + }, + { + text: 'should be ok', + tags: 'MD, VB, JJ', + }, + { + text: 'Nella', + tags: 'NNP', + }, + { + text: 'Rob', + tags: 'NNP', + }, + { + text: 'Bob', + tags: 'NNP', + }, + { + text: 'NO', + tags: 'UH', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: + 'IEP will be hosting a dinner for California Governor Gray Davis on Thursday, December 7, 2000 at the historic Julia Morgan House in Sacramento.', + tags: 'NNP, MD, VB, VBG, DT, NN, IN, NNP, NNP, NNP, NNP, IN, NNP, NNP, CD, CD, IN, DT, JJ, NNP, NNP, NNP, IN, NNP', + }, + { + text: 'We have already received firm commitments from 3 companies.', + tags: 'PRP, VBP, RB, VBN, JJ, NNS, IN, CD, NNS', + }, + { + text: 'Congratulations.', + tags: 'NNS', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: "I'll be in Portland but can call you.", + tags: 'PRP, MD, VB, IN, NNP, CC, MD, VB, PRP', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'We await approval on the final tariff language and can then file at the CPUC.', + tags: 'PRP, VBP, NN, IN, DT, JJ, NN, NN, CC, MD, RB, VB, IN, DT, NNP', + }, + { + text: 'Lara', + tags: 'NNP', + }, + { + text: 'Angie Buis', + tags: 'NNP, NNP', + }, + { + text: 'The duration of the call is 3.5 hours.', + tags: 'DT, NN, IN, DT, NN, VBZ, CD, NNS', + }, + { + text: + 'You have all devoted considerable time, resources and spirit in the preparation of this document-and it shows .?', + tags: 'PRP, VBP, RB, VBN, JJ, NN, NNS, CC, NN, IN, DT, NN, IN, DT, NN, CC, PRP, VBZ', + }, + { + text: '- ld2d-#69366-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69345-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69397-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69396-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69377-1.XLS', + tags: 'NN', + }, + { + text: '- ld2d-#69381-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69366-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69336-1.XLS', + tags: 'NN', + }, + { + text: '- ld2d-#69334-1.DOC', + tags: 'NN', + }, + { + text: '- ld2d-#69345-1.DOC', + tags: 'NN', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'David Forster', + tags: 'NNP, NNP', + }, + { + text: 'Dear Justin', + tags: 'JJ, NNP', + }, + { + text: 'Jonathan Day', + tags: 'NNP, NNP', + }, + { + text: 'Justin', + tags: 'NNP', + }, + { + text: 'Paul Goddard', + tags: 'NNP, NNP', + }, + { + text: 'Can one of you give me a quick call to discuss.', + tags: 'MD, CD, IN, PRP, VB, PRP, DT, JJ, NN, TO, VB', + }, + { + text: "I'm @ X37047.", + tags: 'PRP, VBP, IN, NN', + }, + { + text: 'David Forster', + tags: 'NNP, NNP', + }, + { + text: 'Dave', + tags: 'NNP', + }, + { + text: '____________________________________________________________', + tags: 'NFP', + }, + { + text: 'This message is confidential.', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: '____________________________________________________________', + tags: 'NFP', + }, + { + text: 'Sent by: Nella Cappelletto', + tags: 'VBN, IN, NNP, NNP', + }, + { + text: 'Peter', + tags: 'NNP', + }, + { + text: 'Molly Harris', + tags: 'NNP, NNP', + }, + { + text: 'Molly', + tags: 'NNP', + }, + { + text: 'Perhaps you can give them a personal invitation ...', + tags: 'RB, PRP, MD, VB, PRP, DT, JJ, NN', + }, + { + text: 'Wow!', + tags: 'UH', + }, + { + text: 'Carol, will you handle this or Mark?', + tags: 'NNP, MD, PRP, VB, DT, CC, NNP', + }, + { + text: 'Tori Kuykendall', + tags: 'NNP, NNP', + }, + { + text: 'hi mark -', + tags: 'UH, NNP', + }, + { + text: 'Dave', + tags: 'NNP', + }, + { + text: '- ETA_revision0307.doc', + tags: 'NN', + }, + { + text: 'Molly Harris', + tags: 'NNP, NNP', + }, + { + text: 'Molly', + tags: 'NNP', + }, + { + text: 'Molly Harris', + tags: 'NNP, NNP', + }, + { + text: 'Molly', + tags: 'NNP', + }, + { + text: 'Yeah!', + tags: 'UH', + }, + { + text: 'Probably ...', + tags: 'RB', + }, + { + text: 'Molly Harris', + tags: 'NNP, NNP', + }, + { + text: 'Molly', + tags: 'NNP', + }, + { + text: 'Mike Jordan', + tags: 'NNP, NNP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Mike Jordan', + tags: 'NNP, NNP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Mike Jordan', + tags: 'NNP, NNP', + }, + { + text: 'I intend to provide weekly updates on the status of the above actions during April', + tags: 'PRP, VBP, TO, VB, JJ, NNS, IN, DT, NN, IN, DT, JJ, NNS, IN, NNP', + }, + { + text: 'Mike', + tags: 'NNP', + }, + { + text: 'Ben Rogers', + tags: 'NNP, NNP', + }, + { + text: 'Ben Rogers', + tags: 'NNP, NNP', + }, + { + text: + 'It has been a pleasure to meet with you and I hope we can continue to talk about energy and finance in the future.', + tags: 'PRP, VBZ, VBN, DT, NN, TO, VB, IN, PRP, CC, PRP, VBP, PRP, MD, VB, TO, VB, IN, NN, CC, NN, IN, DT, NN', + }, + { + text: 'Ben Rogers', + tags: 'NNP, NNP', + }, + { + text: 'Ben', + tags: 'NNP', + }, + { + text: 'Ben', + tags: 'NNP', + }, + { + text: 'Christopher', + tags: 'NNP', + }, + { + text: 'Randy, this is the issue I left you the voice mail on.', + tags: 'NNP, DT, VBZ, DT, NN, PRP, VBD, PRP, DT, NN, NN, IN', + }, + { + text: 'DF', + tags: 'NNP', + }, + { + text: 'James Centilli', + tags: 'NNP, NNP', + }, + { + text: 'DF', + tags: 'NNP', + }, + { + text: 'Susan Scott', + tags: 'NNP, NNP', + }, + { + text: 'df', + tags: 'NNP', + }, + { + text: 'MK', + tags: 'NNP', + }, + { + text: 'DF', + tags: 'NNP', + }, + { + text: 'Thank you!', + tags: 'VBP, PRP', + }, + { + text: 'DF', + tags: 'NNP', + }, + { + text: 'DENISE LAGESSE', + tags: 'NNP, NNP', + }, + { + text: 'df', + tags: 'NNP', + }, + { + text: 'Drew Fossum', + tags: 'NNP, NNP', + }, + { + text: 'DF', + tags: 'NNP', + }, + { + text: 'DENISE LAGESSE', + tags: 'NNP, NNP', + }, + { + text: 'Norma, any thoughts?', + tags: 'NNP, DT, NNS', + }, + { + text: 'DENISE LAGESSE', + tags: 'NNP, NNP', + }, + { + text: 'Please approve the purchase of two.', + tags: 'UH, VB, DT, NN, IN, CD', + }, + { + text: 'Drew Fossum', + tags: 'NNP, NNP', + }, + { + text: 'Norma, any thoughts?', + tags: 'NNP, DT, NNS', + }, + { + text: 'DENISE LAGESSE', + tags: 'NNP, NNP', + }, + { + text: 'Please approve the purchase of two.', + tags: 'UH, VB, DT, NN, IN, CD', + }, + { + text: 'DF', + tags: 'NNP', + }, + { + text: 'Evan --', + tags: 'NNP', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'Am I scheduled to attend?', + tags: 'VBP, PRP, VBN, TO, VB', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: + 'Board members are also invited to join in the substantive session of the DISCO Forum on Thursday, September 13.', + tags: 'NN, NNS, VBP, RB, VBN, TO, VB, IN, DT, JJ, NN, IN, DT, NNP, NNP, IN, NNP, NNP, CD', + }, + { + text: 'correct.', + tags: 'JJ', + }, + { + text: + 'We are receiving invoices from Ace Federal Reporters for transcripts of the recent FERC settlement conferences.', + tags: 'PRP, VBP, VBG, NNS, IN, NNP, NNP, NNPS, IN, NNS, IN, DT, JJ, NNP, NN, NNS', + }, + { + text: 'Let me know.', + tags: 'VB, PRP, VB', + }, + { + text: 'Many thanks.', + tags: 'JJ, NNS', + }, + { + text: 'Lora', + tags: 'NNP', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'Doug has been providing us with the necessary specific market information.', + tags: 'NNP, VBZ, VBN, VBG, PRP, IN, DT, JJ, JJ, NN, NN', + }, + { + text: 'Grand-standing is ignored.', + tags: 'JJ, NN, VBZ, VBN', + }, + { + text: 'Doug and I met with the Chairman of PUCT and have had subsequent conversations.', + tags: 'NNP, CC, PRP, VBD, IN, DT, NN, IN, NNP, CC, VBP, VBN, JJ, NNS', + }, + { + text: 'Thane and I also visited with him.', + tags: 'NNP, CC, PRP, RB, VBD, IN, PRP', + }, + { + text: 'We have been working with the State Affairs legislative committee and keeping them apprised.', + tags: 'PRP, VBP, VBN, VBG, IN, DT, NN, NNS, JJ, NN, CC, VBG, PRP, VBN', + }, + { + text: 'Thane is in Austin on Friday, but is available by phone.', + tags: 'NNP, VBZ, IN, NNP, IN, NNP, CC, VBZ, JJ, IN, NN', + }, + { + text: 'Can we find another time that works for us to meet?', + tags: 'MD, PRP, VB, DT, NN, WDT, VBZ, IN, PRP, TO, VB', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'You may want to discuss with Becky.', + tags: 'PRP, MD, VB, TO, VB, IN, NNP', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'Many details remain to be worked out, but we will keep you advised.', + tags: 'JJ, NNS, VBP, TO, VB, VBN, RP, CC, PRP, MD, VB, PRP, VBN', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'Peter is looking currently for a job.', + tags: 'NNP, VBZ, VBG, RB, IN, DT, NN', + }, + { + text: + 'I met him last week at the meeting of the Science and Industry Advance with Mathematics society at the University of Houston.', + tags: 'PRP, VBD, PRP, JJ, NN, IN, DT, NN, IN, DT, NNP, CC, NNP, NNP, IN, NNPS, NN, IN, DT, NNP, IN, NNP', + }, + { + text: 'I shall be glad to make arrangements for an interview.', + tags: 'PRP, MD, VB, JJ, TO, VB, NNS, IN, DT, NN', + }, + { + text: 'Vince Kaminski', + tags: 'NNP, NNP', + }, + { + text: "It's ok with me.", + tags: 'PRP, VBZ, JJ, IN, PRP', + }, + { + text: 'NK', + tags: 'NNP', + }, + { + text: 'Nasim Khan', + tags: 'NNP, NNP', + }, + { + text: 'Please see the message from Danny Jones.', + tags: 'UH, VB, DT, NN, IN, NNP, NNP', + }, + { + text: 'This is ok by me.', + tags: 'DT, VBZ, JJ, IN, PRP', + }, + { + text: 'SD', + tags: 'NNP', + }, + { + text: 'Good news.', + tags: 'JJ, NN', + }, + { + text: 'Congratulations and good luck.', + tags: 'NNS, CC, JJ, NN', + }, + { + text: 'Hello, Bill!', + tags: 'UH, NNP', + }, + { + text: 'Stan will attend in person.', + tags: 'NNP, MD, VB, IN, NN', + }, + { + text: 'Cindy', + tags: 'NNP', + }, + { + text: 'By video conference from _______', + tags: 'IN, NN, NN, IN, NFP', + }, + { + text: 'Bill Dorsey.', + tags: 'NNP, NNP', + }, + { + text: 'Thank you for the invitation.', + tags: 'VBP, PRP, IN, DT, NN', + }, + { + text: 'Stephanie', + tags: 'NNP', + }, + { + text: 'Samuel Schott', + tags: 'NNP, NNP', + }, + { + text: 'Any GCP adjustments will be highlighted in red.', + tags: 'DT, NN, NNS, MD, VB, VBN, IN, JJ', + }, + { + text: "There's a new EOL Counterparty listed in the UK.", + tags: 'EX, VBZ, DT, JJ, NNP, NN, VBN, IN, DT, NNP', + }, + { + text: 'Samuel x3-9890 ENW_GCP', + tags: 'NNP, NN, NNP', + }, + { + text: 'Please see attached.', + tags: 'UH, VB, VBN', + }, + { + text: 'Harry -', + tags: 'NNP', + }, + { + text: 'are you the right lawyer to look at this?', + tags: 'VBP, PRP, DT, JJ, NN, TO, VB, IN, DT', + }, + { + text: 'Robert B Cass', + tags: 'NNP, NNP, NNP', + }, + { + text: 'The Transaction is for hot rolled steel with a thickness of 1 " and a width of 72 inches.', + tags: 'DT, NN, VBZ, IN, JJ, VBN, NN, IN, DT, NN, IN, CD, NN, CC, DT, NN, IN, CD, NNS', + }, + { + text: 'Each calendar month during the term of the Transaction will be a Dispatch Period.', + tags: 'DT, NN, NN, IN, DT, NN, IN, DT, NN, MD, VB, DT, NN, NN', + }, + { + text: 'select PROGRAMS', + tags: 'VB, NNS', + }, + { + text: 'Bill D Hare', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Bill', + tags: 'NNP', + }, + { + text: 'Bill -', + tags: 'NNP', + }, + { + text: 'Mark', + tags: 'NNP', + }, + { + text: 'Tana Jones', + tags: 'NNP, NNP', + }, + { + text: 'Samuel Schott', + tags: 'NNP, NNP', + }, + { + text: 'Samuel', + tags: 'NNP', + }, + { + text: 'Stephanie', + tags: 'NNP', + }, + { + text: 'Samuel Schott', + tags: 'NNP, NNP', + }, + { + text: 'Any GCP adjustments will be highlighted in red.', + tags: 'DT, NN, NNS, MD, VB, VBN, IN, JJ', + }, + { + text: "There's a new EOL Counterparty listed in the UK.", + tags: 'EX, VBZ, DT, JJ, NNP, NN, VBN, IN, DT, NNP', + }, + { + text: 'Samuel x3-9890 ENW_GCP', + tags: 'NNP, NN, NNP', + }, + { + text: 'Please see attached.', + tags: 'UH, VB, VBN', + }, + { + text: 'Doc -', + tags: 'NNP', + }, + { + text: "I'll be in town through Sunday morning.", + tags: 'PRP, MD, VB, IN, NN, IN, NNP, NN', + }, + { + text: 'Mark', + tags: 'NNP', + }, + { + text: 'MHC', + tags: 'NNP', + }, + { + text: 'I am in mediation.', + tags: 'PRP, VBP, IN, NN', + }, + { + text: 'Kriste', + tags: 'NNP', + }, + { + text: 'I got this.', + tags: 'PRP, VBD, DT', + }, + { + text: '*~*~*~*~*~*~*~*~*~*', + tags: 'NFP', + }, + { + text: 'Passcode: 4153030', + tags: 'NN, CD', + }, + { + text: 'MHC', + tags: 'NNP', + }, + { + text: 'Brad', + tags: 'NNP', + }, + { + text: 'Tobias Munk', + tags: 'NNP, NNP', + }, + { + text: 'Teresa', + tags: 'NNP', + }, + { + text: 'Michelle', + tags: 'NNP', + }, + { + text: 'Michelle', + tags: 'NNP', + }, + { + text: 'Do you also have a SSD we can use?', + tags: 'VBP, PRP, RB, VB, DT, NN, PRP, MD, VB', + }, + { + text: 'Jane', + tags: 'NNP', + }, + { + text: 'Brandee', + tags: 'NNP', + }, + { + text: 'MHC', + tags: 'NNP', + }, + { + text: 'Sunjay Arya', + tags: 'NNP, NNP', + }, + { + text: 'Gary Buck', + tags: 'NNP, NNP', + }, + { + text: 'Ryan Seleznov', + tags: 'NNP, NNP', + }, + { + text: 'Mecole Brown', + tags: 'NNP, NNP', + }, + { + text: "Tim O'Rourke", + tags: 'NNP, NNP', + }, + { + text: 'Tana Cashion', + tags: 'NNP, NNP', + }, + { + text: 'Sheila Walton', + tags: 'NNP, NNP', + }, + { + text: 'Wendy Fincher', + tags: 'NNP, NNP', + }, + { + text: 'Sheila Knudsen', + tags: 'NNP, NNP', + }, + { + text: 'Karen Phillips', + tags: 'NNP, NNP', + }, + { + text: 'Neil Davies', + tags: 'NNP, NNPS', + }, + { + text: 'Noel Ryan', + tags: 'NNP, NNP', + }, + { + text: 'Cindy Skinner', + tags: 'NNP, NNP', + }, + { + text: 'Simone Scott Walker', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Shanna Funkhouser', + tags: 'NNP, NNP', + }, + { + text: 'Shanna, I spoke with Per tonight about this.', + tags: 'NNP, PRP, VBD, IN, NNP, NN, IN, DT', + }, + { + text: 'Michelle', + tags: 'NNP', + }, + { + text: 'Thank you', + tags: 'VBP, PRP', + }, + { + text: 'Paula', + tags: 'NNP', + }, + { + text: 'MHC', + tags: 'NNP', + }, + { + text: 'Sandra', + tags: 'NNP', + }, + { + text: 'Cindy', + tags: 'NNP', + }, + { + text: 'MHC', + tags: 'NNP', + }, + { + text: 'Try this.', + tags: 'VB, DT', + }, + { + text: 'bob k', + tags: 'NNP, NNP', + }, + { + text: 'Michelle', + tags: 'NNP', + }, + { + text: 'Two in one day.', + tags: 'CD, IN, CD, NN', + }, + { + text: 'Rick', + tags: 'NNP', + }, + { + text: 'Could', + tags: 'MD', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'please try to verify.', + tags: 'UH, VB, TO, VB', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Please advise.', + tags: 'UH, VB', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: '___________________________________________', + tags: 'NFP', + }, + { + text: 'Thank you.', + tags: 'VBP, PRP', + }, + { + text: 'The call was cancelled.', + tags: 'DT, NN, VBD, VBN', + }, + { + text: 'I am waiting to hear about a possible call Friday morning.', + tags: 'PRP, VBP, VBG, TO, VB, IN, DT, JJ, NN, NNP, NN', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'The draft you received has been approved by Dan.', + tags: 'DT, NN, PRP, VBD, VBZ, VBN, VBN, IN, NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Looks good.', + tags: 'VBZ, JJ', + }, + { + text: 'Dan', + tags: 'NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Please advise.', + tags: 'UH, VB', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'I will initiate the call.', + tags: 'PRP, MD, VB, DT, NN', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'I am checking on London.', + tags: 'PRP, VBP, VBG, IN, NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Janice Moore', + tags: 'NNP, NNP', + }, + { + text: 'Becky will bring you the hard copy version.', + tags: 'NNP, MD, VB, PRP, DT, JJ, NN, NN', + }, + { + text: "I'll call you shortly.", + tags: 'PRP, MD, VB, PRP, RB', + }, + { + text: 'N.O. ? Atlanta?', + tags: 'NNP, NNP', + }, + { + text: 'Memphis?', + tags: 'NNP', + }, + { + text: 'Eleuthra?', + tags: 'NNP', + }, + { + text: 'St. Petersburg?', + tags: 'NNP, NNP', + }, + { + text: 'Amelia Island Plantation?', + tags: 'NNP, NNP, NNP', + }, + { + text: "I've simply lost track!", + tags: 'PRP, VBP, RB, VBN, NN', + }, + { + text: 'Are you selling burgers up and down the east coast?', + tags: 'VBP, PRP, VBG, NNS, IN, CC, IN, DT, JJ, NN', + }, + { + text: 'In a new franchise business?', + tags: 'IN, DT, JJ, NN, NN', + }, + { + text: 'SARA', + tags: 'NNP', + }, + { + text: 'Sara -', + tags: 'NNP', + }, + { + text: 'Do you miss me?', + tags: 'VBP, PRP, VB, PRP', + }, + { + text: 'SAM', + tags: 'NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Robert Quick', + tags: 'NNP, NNP', + }, + { + text: 'tks', + tags: 'NN', + }, + { + text: 'Sara Shackleton', + tags: 'NNP, NNP', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'I will be in Sao Paulo on Monday, September 20, 1999.', + tags: 'PRP, MD, VB, IN, NNP, NNP, IN, NNP, NNP, CD, CD', + }, + { + text: 'Sara', + tags: 'NNP', + }, + { + text: 'Thank you.', + tags: 'VBP, PRP', + }, + { + text: 'Jeffrey Dasovich Director, Enron Corp', + tags: 'NNP, NNP, NN, NNP, NNP', + }, + { + text: 'Code is 80435.', + tags: 'NN, VBZ, CD', + }, + { + text: 'Jeff Dasovich', + tags: 'NNP, NNP', + }, + { + text: 'Sent by: Jeff Dasovich', + tags: 'VBN, IN, NNP, NNP', + }, + { + text: 'Code is 80435.', + tags: 'NN, VBZ, CD', + }, + { + text: 'Nice job.', + tags: 'JJ, NN', + }, + { + text: 'Going to be a wild ride.', + tags: 'VBG, TO, VB, DT, JJ, NN', + }, + { + text: "That's a very good point.", + tags: 'DT, VBZ, DT, RB, JJ, NN', + }, + { + text: "I'll make the change.", + tags: 'PRP, MD, VB, DT, NN', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'Harry Kingerski', + tags: 'NNP, NNP', + }, + { + text: 'Jeff -', + tags: 'NNP', + }, + { + text: "You're right, Sue.", + tags: 'PRP, VBP, JJ, NNP', + }, + { + text: 'Place: University of Pennsylvania', + tags: 'NN, NNP, IN, NNP', + }, + { + text: 'Day One Interviews Day Two Interviews', + tags: 'NN, CD, NNS, NN, CD, NNS', + }, + { + text: 'Shawna Johnson Recruiting Coordinator', + tags: 'NNP, NNP, NN, NN', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'Scott', + tags: 'NNP', + }, + { + text: 'have you gotten a price?', + tags: 'VBP, PRP, VBN, DT, NN', + }, + { + text: 'Doug Leach', + tags: 'NNP, NNP', + }, + { + text: 'please print', + tags: 'UH, VB', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'David Hoog', + tags: 'NNP, NNP', + }, + { + text: 'please print', + tags: 'UH, VB', + }, + { + text: 'I highlight the relevant skills in the summary.', + tags: 'PRP, VBD, DT, JJ, NNS, IN, DT, NN', + }, + { + text: 'Rina', + tags: 'NNP', + }, + { + text: '- ENRONR~1.DOC', + tags: 'NN', + }, + { + text: 'I stayed for the remainder of the lecture.', + tags: 'PRP, VBD, IN, DT, NN, IN, DT, NN', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'Jana Giovannini', + tags: 'NNP, NNP', + }, + { + text: 'Actually, Jen has volunteered for the afternoon session.', + tags: 'RB, NNP, VBZ, VBN, IN, DT, NN, NN', + }, + { + text: 'Please let me know.', + tags: 'UH, VB, PRP, VB', + }, + { + text: 'Jana Giovannini', + tags: 'NNP, NNP', + }, + { + text: 'Jana', + tags: 'NNP', + }, + { + text: 'Great job, guys.', + tags: 'JJ, NN, NNS', + }, + { + text: 'Eric Gonzales', + tags: 'NNP, NNP', + }, + { + text: 'Great job gentlemen!', + tags: 'JJ, NN, NNS', + }, + { + text: 'Eric', + tags: 'NNP', + }, + { + text: 'Finally completed tonight', + tags: 'RB, VBN, NN', + }, + { + text: 'Wayne', + tags: 'NNP', + }, + { + text: 'I would add setoff language.', + tags: 'PRP, MD, VB, NN, NN', + }, + { + text: 'Marianne', + tags: 'NNP', + }, + { + text: 'Carol St Clair', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Are you okay with that?', + tags: 'VBP, PRP, JJ, IN, DT', + }, + { + text: 'Rhonda L Denton', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Rhonda L Denton', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Just let me know and I can send you a new attachment.', + tags: 'RB, VB, PRP, VB, CC, PRP, MD, VB, PRP, DT, JJ, NN', + }, + { + text: 'Carol -', + tags: 'NNP', + }, + { + text: 'Phyllis Lemell', + tags: 'NNP, NNP', + }, + { + text: 'Rhonda L Denton', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Will fax.', + tags: 'MD, VB', + }, + { + text: 'Rhonda L Denton', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Will fax.', + tags: 'MD, VB', + }, + { + text: 'Rhonda L Denton', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Will fax.', + tags: 'MD, VB', + }, + { + text: 'Are we ready to execute?', + tags: 'VBP, PRP, JJ, TO, VB', + }, + { + text: 'Please call me.', + tags: 'UH, VB, PRP', + }, + { + text: 'Carol -', + tags: 'NNP', + }, + { + text: 'Were there any?', + tags: 'VBD, EX, DT', + }, + { + text: 'Carol', + tags: 'NNP', + }, + { + text: 'It is a fairly standard, fully reimbursable interconnect with Questar.', + tags: 'PRP, VBZ, DT, RB, JJ, RB, JJ, NN, IN, NNP', + }, + { + text: 'Robert Guthrie with the tax department has worked with us to develop this language.', + tags: 'NNP, NNP, IN, DT, NN, NN, VBZ, VBN, IN, PRP, TO, VB, DT, NN', + }, + { + text: 'We hope to execute this Agreement this week.', + tags: 'PRP, VBP, TO, VB, DT, NN, DT, NN', + }, + { + text: 'Kim', + tags: 'NNP', + }, + { + text: 'It is a fairly standard, fully reimbursable interconnect with Questar.', + tags: 'PRP, VBZ, DT, RB, JJ, RB, JJ, NN, IN, NNP', + }, + { + text: 'Robert Guthrie with the tax department has worked with us to develop this language.', + tags: 'NNP, NNP, IN, DT, NN, NN, VBZ, VBN, IN, PRP, TO, VB, DT, NN', + }, + { + text: 'We hope to execute this Agreement this week.', + tags: 'PRP, VBP, TO, VB, DT, NN, DT, NN', + }, + { + text: 'Can you and Tom join us?', + tags: 'MD, PRP, CC, NNP, VB, PRP', + }, + { + text: 'John, sorry for the late response, but I think you can implement immediately.', + tags: 'NNP, JJ, IN, DT, JJ, NN, CC, PRP, VBP, PRP, MD, VB, RB', + }, + { + text: 'Kim.', + tags: 'NNP', + }, + { + text: 'I was aware.', + tags: 'PRP, VBD, JJ', + }, + { + text: 'John Buchanan', + tags: 'NNP, NNP', + }, + { + text: 'John, sorry for the late response, but I think you can implement immediately.', + tags: 'NNP, JJ, IN, DT, JJ, NN, CC, PRP, VBP, PRP, MD, VB, RB', + }, + { + text: 'Kim.', + tags: 'NNP', + }, + { + text: 'K.', + tags: 'NNP', + }, + { + text: 'Are you comfortable with the difference?', + tags: 'VBP, PRP, JJ, IN, DT, NN', + }, + { + text: 'Any thoughts?', + tags: 'DT, NNS', + }, + { + text: 'Kim.', + tags: 'NNP', + }, + { + text: 'richard', + tags: 'NNP', + }, + { + text: 'Kim.', + tags: 'NNP', + }, + { + text: 'See you Sunday.', + tags: 'VBP, PRP, NNP', + }, + { + text: 'Tom', + tags: 'NNP', + }, + { + text: 'Kim.', + tags: 'NNP', + }, + { + text: 'Kim', + tags: 'NNP', + }, + { + text: 'These are the vendors of instrumentation required for the interconnect.', + tags: 'DT, VBP, DT, NNS, IN, NN, VBN, IN, DT, NN', + }, + { + text: 'We have worked with Daniels on a chromatograph on another project and prepayment has taken 45 days alone.', + tags: 'PRP, VBP, VBN, IN, NNP, IN, DT, NN, IN, DT, NN, CC, NN, VBZ, VBN, CD, NNS, RB', + }, + { + text: 'Kim.', + tags: 'NNP', + }, + { + text: 'Great.', + tags: 'JJ', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: "I'll get you the announcement.", + tags: 'PRP, MD, VB, PRP, DT, NN', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'September 26, 2001', + tags: 'NNP, CD, CD', + }, + { + text: 'By KIMBERLY KINDY', + tags: 'IN, NNP, NNP', + }, + { + text: 'The Orange County Register', + tags: 'DT, NNP, NNP, NNP', + }, + { + text: 'SACRAMENTO', + tags: 'NNP', + }, + { + text: 'With the price caps gone, the generators filed paperwork with federal regulators justifying higher costs.', + tags: 'IN, DT, NN, NNS, JJ, DT, NNS, VBD, NN, IN, JJ, NNS, VBG, JJR, NNS', + }, + { + text: 'Smutney-Jones also said he was unaware of anyone in the power-generating community being consulted.', + tags: 'NNP, NNP, RB, VBD, PRP, VBD, JJ, IN, NN, IN, DT, NN, NN, NN, VBG, VBN', + }, + { + text: + 'James J. Hoecker, the former Federal Energy Regulatory Commission chairman, defended making the December decision and also defended Winter.', + tags: 'NNP, NNP, NNP, DT, JJ, NNP, NNP, NNP, NNP, NN, VBD, VBG, DT, NNP, NN, CC, RB, VBD, NNP', + }, + { + text: 'Sue and Jeff --', + tags: 'NNP, CC, NNP', + }, + { + text: 'Sounds good.', + tags: 'VBZ, JJ', + }, + { + text: 'Jeff', + tags: 'NNP', + }, + { + text: 'Are you playing golf?', + tags: 'VBP, PRP, VBG, NN', + }, + { + text: 'Jim', + tags: 'NNP', + }, + { + text: 'Have they expressed any interest in negotiating?', + tags: 'VBP, PRP, VBN, DT, NN, IN, VBG', + }, + { + text: 'Particularly in the absence of any entreaty from them.', + tags: 'RB, IN, DT, NN, IN, DT, NN, IN, PRP', + }, + { + text: 'none', + tags: 'NN', + }, + { + text: 'HR-Veronica Parra, Nedre Strambler, Fran Mayes, Felicia Solis', + tags: 'NN, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP', + }, + { + text: 'Legal-Bob Carter, Travis McCullough, Lisa Mellencamp, Shelia Tweed, Richard Sanders, Michelle Cash', + tags: 'JJ, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP', + }, + { + text: 'IT-Jason Chumley', + tags: 'NN, NNP, NNP', + }, + { + text: 'Insurance-David Marshall', + tags: 'NN, NNP, NNP', + }, + { + text: 'Susan', + tags: 'NNP', + }, + { + text: 'Looks good', + tags: 'VBZ, JJ', + }, + { + text: 'Steve Van Hooser', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Steve', + tags: 'NNP', + }, + { + text: "I've read the materials you sent and agree we need to address these allegations appropriately.", + tags: 'PRP, VBP, VBN, DT, NNS, PRP, VBD, CC, VBP, PRP, VBP, TO, VB, DT, NNS, RB', + }, + { + text: 'mb', + tags: 'NNP', + }, + { + text: 'Justin', + tags: 'NNP', + }, + { + text: 'Justin', + tags: 'NNP', + }, + { + text: '____________________________________________________________', + tags: 'NFP', + }, + { + text: 'This message is confidential.', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: '____________________________________________________________', + tags: 'NFP', + }, + { + text: 'Richard -', + tags: 'NNP', + }, + { + text: 'Rob', + tags: 'NNP', + }, + { + text: '- C.DTF', + tags: 'NN', + }, + { + text: 'Call me to discuss.', + tags: 'VB, PRP, TO, VB', + }, + { + text: 'Cheryl Marshall', + tags: 'NNP, NNP', + }, + { + text: 'Richard B Sanders', + tags: 'NNP, NNP, NNP', + }, + { + text: 'Call me to discuss.', + tags: 'VB, PRP, TO, VB', + }, + { + text: 'Cheryl Marshall', + tags: 'NNP, NNP', + }, + { + text: 'Has Liz finished with gathering the documents?', + tags: 'VBZ, NNP, VBN, IN, VBG, DT, NNS', + }, + { + text: 'Hi --', + tags: 'UH', + }, + { + text: '-- Liz', + tags: 'NNP', + }, + { + text: 'Thank you.', + tags: 'VBP, PRP', + }, + { + text: 'Dear Mr. Sanders -', + tags: 'JJ, NNP, NNP', + }, + { + text: '-> Gerry', + tags: 'NFP, NNP', + }, + { + text: 'Mark', + tags: 'NNP', + }, + { + text: 'the industry of Marriage and Kids, you heard me.', + tags: 'DT, NN, IN, NN, CC, NNS, PRP, VBD, PRP', + }, + { + text: 'And you might think by reading this I blame the kids .....', + tags: 'CC, PRP, MD, VB, IN, VBG, DT, PRP, VBP, DT, NNS', + }, + { + text: 'Probably it is.', + tags: 'RB, PRP, VBZ', + }, + { + text: 'It must be stamped out.', + tags: 'PRP, MD, VB, VBN, RP', + }, + { + text: 'I hope so.', + tags: 'PRP, VBP, RB', + }, + { + text: 'NASA has some PR hurdles to overcome in the future.', + tags: 'NNP, VBZ, DT, NN, NNS, TO, VB, IN, DT, NN', + }, + { + text: 'Selah.', + tags: 'NNP', + }, + { + text: 'I see the merit in flowing with duality.', + tags: 'PRP, VBP, DT, NN, IN, VBG, IN, NN', + }, + { + text: 'In the near future collective choices will need to be made.', + tags: 'IN, DT, JJ, NN, JJ, NNS, MD, VB, TO, VB, VBN', + }, + { + text: 'November 2005', + tags: 'NNP, CD', + }, + { + text: 'Sunshine Coast, British Columbia, Canada', + tags: 'NNP, NNP, NNP, NNP, NNP', + }, + { + text: 'Independent wealth?', + tags: 'JJ, NN', + }, + { + text: 'The company has developed an entirely new category of products.', + tags: 'DT, NN, VBZ, VBN, DT, RB, JJ, NN, IN, NNS', + }, + { + text: 'Innovative Products', + tags: 'JJ, NNS', + }, + { + text: 'Agel introduces an entirely new category of products called Gelceuticals.', + tags: 'NNP, VBZ, DT, RB, JJ, NN, IN, NNS, VBN, NNS', + }, + { + text: 'The company has developed a unique and innovative delivery mechanism for nutritional products.', + tags: 'DT, NN, VBZ, VBN, DT, JJ, CC, JJ, NN, NN, IN, JJ, NNS', + }, + { + text: 'This proprietary Gel Suspension technology makes possible single serving packets of Gelceuticals.', + tags: 'DT, JJ, NN, NN, NN, VBZ, JJ, JJ, NN, NNS, IN, NNS', + }, + { + text: 'Perfect for those with difficulty swallowing tablets or capsules', + tags: 'JJ, IN, DT, IN, NN, VBG, NNS, CC, NNS', + }, + { + text: 'Revolutionary Compensation', + tags: 'JJ, NN', + }, + { + text: 'Agel has created a new compensation structure that is truly revolutionary.', + tags: 'NNP, VBZ, VBN, DT, JJ, NN, NN, WDT, VBZ, RB, JJ', + }, + { + text: 'This call will smoke!', + tags: 'DT, NN, MD, VB', + }, + { + text: 'The Passcode to participate is: 5107', + tags: 'DT, NN, TO, VB, VBZ, CD', + }, + { + text: 'LOCATION: Conference Call', + tags: 'NN, NN, NN', + }, + { + text: 'I encourage you to do this dance, as it has tremendous positive effects.', + tags: 'PRP, VBP, PRP, TO, VB, DT, NN, IN, PRP, VBZ, JJ, JJ, NNS', + }, + { + text: 'Dharma', + tags: 'NNP', + }, + { + text: 'Kaoshikii is especially good for women.', + tags: 'NN, VBZ, RB, JJ, IN, NNS', + }, + { + text: 'The Benefits', + tags: 'DT, NNS', + }, + { + text: 'Increases longevity.', + tags: 'VBZ, NN', + }, + { + text: 'Makes for easy delivery at childbirth.', + tags: 'VBZ, IN, JJ, NN, IN, NN', + }, + { + text: 'The spine will become flexible.', + tags: 'DT, NN, MD, VB, JJ', + }, + { + text: 'The mind becomes strong and sharp.', + tags: 'DT, NN, VBZ, JJ, CC, JJ', + }, + { + text: 'Irregularities in menstruation will be cured.', + tags: 'NNS, IN, NN, MD, VB, VBN', + }, + { + text: 'Troubles in the bladder and urethra will be cured.', + tags: 'NNS, IN, DT, NN, CC, NN, MD, VB, VBN', + }, + { + text: 'Removes wrinkles.', + tags: 'VBZ, NNS', + }, + { + text: 'Hopelessness will be lost.', + tags: 'NN, MD, VB, VBN', + }, + { + text: 'The Dance', + tags: 'DT, NN', + }, + { + text: 'The Ideation', + tags: 'DT, NN', + }, + { + text: 'Pittsburgh -', + tags: 'NNP', + }, + { + text: 'Dr. Fortier was one of 15 people to receive the Carnegie Medal on Monday.', + tags: 'NNP, NNP, VBD, CD, IN, CD, NNS, TO, VB, DT, NNP, NNP, IN, NNP', + }, + { + text: 'Important information of big companies', + tags: 'JJ, NN, IN, JJ, NNS', + }, + { + text: 'Apple Computers', + tags: 'NNP, NNPS', + }, + { + text: 'It was the favorite fruit of founder Steve Jobs.', + tags: 'PRP, VBD, DT, JJ, NN, IN, NN, NNP, NNP', + }, + { + text: 'CISCO', + tags: 'NNP', + }, + { + text: 'It is short for San Francisco.', + tags: 'PRP, VBZ, JJ, IN, NNP, NNP', + }, + { + text: 'Compaq', + tags: 'NNP', + }, + { + text: 'This name was formed by using COMp, for computer, and PAQ to denote a small integral object.', + tags: 'DT, NN, VBD, VBN, IN, VBG, NN, IN, NN, CC, NN, TO, VB, DT, JJ, JJ, NN', + }, + { + text: 'Corel', + tags: 'NNP', + }, + { + text: 'It stands for COwpland REsearch Laboratory.', + tags: 'PRP, VBZ, IN, NNP, NNP, NNP', + }, + { + text: 'Google', + tags: 'NNP', + }, + { + text: + 'The name started as a joke boasting about the amount of information the search-engine would be able to search.', + tags: 'DT, NN, VBD, IN, DT, NN, VBG, IN, DT, NN, IN, NN, DT, NN, NN, MD, VB, JJ, TO, VB', + }, + { + text: 'Hotmail', + tags: 'NNP', + }, + { + text: 'Hewlett Packard', + tags: 'NNP, NNP', + }, + { + text: 'Intel', + tags: 'NNP', + }, + { + text: 'Kapor used to be a teacher of Transcendental Meditation of Maharishi Mahesh Yogi.', + tags: 'NNP, VBD, TO, VB, DT, NN, IN, NNP, NNP, IN, NNP, NNP, NNP', + }, + { + text: 'Microsoft', + tags: 'NNP', + }, + { + text: 'Motorola', + tags: 'NNP', + }, + { + text: 'The popular radio company at the time was called Victrola.', + tags: 'DT, JJ, NN, NN, IN, DT, NN, VBD, VBN, NNP', + }, + { + text: 'ORACLE', + tags: 'NNP', + }, + { + text: 'The project was designed to help use the newly written SQL code by IBM.', + tags: 'DT, NN, VBD, VBN, TO, VB, VB, DT, RB, VBN, NN, NN, IN, NNP', + }, + { + text: 'They kept the name Oracle and created the RDBMS engine.', + tags: 'PRP, VBD, DT, NN, NNP, CC, VBD, DT, NNP, NN', + }, + { + text: 'Sony', + tags: 'NNP', + }, + { + text: 'SUN', + tags: 'NNP', + }, + { + text: 'Founded by 4 Stanford University buddies, SUN is the acronym for Stanford University Network.', + tags: 'VBN, IN, CD, NNP, NNP, NNS, NNP, VBZ, DT, NN, IN, NNP, NNP, NNP', + }, + { + text: 'I am on Yahoo!', + tags: 'PRP, VBP, IN, NNP', + }, + { + text: 'Humanpixel', + tags: 'NNP', + }, + { + text: 'Good Day Mate!', + tags: 'JJ, NN, NN', + }, + { + text: 'Feb 2005', + tags: 'NNP, CD', + }, + { + text: 'rumor has feb 05 on the calender.', + tags: 'NN, VBZ, NNP, CD, IN, DT, NN', + }, + { + text: 'The game is already 100 % functional.', + tags: 'DT, NN, VBZ, RB, CD, NN, JJ', + }, + { + text: 'I am Lady Kingel and I hail from the United Legit Gaming Guilds of Guild Wars.', + tags: 'PRP, VBP, NNP, NNP, CC, PRP, VBP, IN, DT, NNP, NNP, NNP, NNPS, IN, NNP, NNPS', + }, + { + text: 'You will be greeted by many members of this wonderful family.', + tags: 'PRP, MD, VB, VBN, IN, JJ, NNS, IN, DT, JJ, NN', + }, + { + text: 'Come and say hello... you will be warmly welcomed!', + tags: 'VB, CC, VB, UH, PRP, MD, VB, RB, VBN', + }, + { + text: 'Kingel', + tags: 'NNP', + }, + { + text: 'We are the children of poverty, financial and spiritual.', + tags: 'PRP, VBP, DT, NNS, IN, NN, JJ, CC, JJ', + }, + { + text: 'Please tell me there is a deeper reason.', + tags: 'UH, VB, PRP, EX, VBZ, DT, JJR, NN', + }, + { + text: 'Do you feel safer?', + tags: 'VBP, PRP, VB, JJR', + }, + { + text: 'Are you ready?', + tags: 'VBP, PRP, JJ', + }, + { + text: 'Ideas are welcome.', + tags: 'NNS, VBP, JJ', + }, + { + text: 'Groups: misc.consumers', + tags: 'NNS, NNS', + }, + { + text: + 'I am GEORGE WALKER BUSH, son of the former president of the United States of America George Herbert Walker Bush, and currently serving as President of the United States of America.', + tags: + 'PRP, VBP, NNP, NNP, NNP, NN, IN, DT, JJ, NNP, IN, DT, NNP, NNP, IN, NNP, NNP, NNP, NNP, NNP, CC, RB, VBG, IN, NNP, IN, DT, NNP, NNP, IN, NNP', + }, + { + text: 'US battles to save storm victims', + tags: 'NNP, VBZ, TO, VB, NN, NNS', + }, + { + text: 'Watch the airlift', + tags: 'VB, DT, NN', + }, + { + text: 'Hundreds of people are feared dead in Mississippi, and the Louisiana city of New Orleans is badly flooded.', + tags: 'NNS, IN, NNS, VBP, VBN, JJ, IN, NNP, CC, DT, NNP, NN, IN, NNP, NNP, VBZ, RB, VBN', + }, + { + text: 'The Superdome stadium is without power, and toilets are overflowing.', + tags: 'DT, NNP, NN, VBZ, IN, NN, CC, NNS, VBP, VBG', + }, + { + text: 'Map of central New Orleans', + tags: 'NN, IN, JJ, NNP, NNP', + }, + { + text: 'Natalie McVeigh Oakley, England', + tags: 'NNP, NNP, NNP, NNP', + }, + { + text: 'Blogging Katrina', + tags: 'VBG, NNP', + }, + { + text: 'Q: NASA IS A WASTE!', + tags: 'NN, NNP, VBZ, DT, NN', + }, + { + text: 'Subject: NASA IS A WASTE!', + tags: 'NN, NNP, VBZ, DT, NN', + }, + { + text: 'U.S. Senate Committee on Appropriations', + tags: 'NNP, NNP, NNP, IN, NNPS', + }, + { + text: 'September 21, 2004', + tags: 'NNP, CD, CD', + }, + { + text: 'I hope you have found this information helpful.', + tags: 'PRP, VBP, PRP, VBP, VBN, DT, NN, JJ', + }, + { + text: 'Googlenut', + tags: 'NNP', + }, + { + text: 'nasa funding', + tags: 'NNP, NN', + }, + { + text: 'Excellent answer googlenut.', + tags: 'JJ, NN, NNP', + }, + { + text: 'Let me add some additional info.', + tags: 'VB, PRP, VB, DT, JJ, NN', + }, + { + text: 'Also NASA has a large outreach program for education, some people believe this is important.', + tags: 'RB, NNP, VBZ, DT, JJ, NN, NN, IN, NN, DT, NNS, VBP, DT, VBZ, JJ', + }, + { + text: 'and bridges ???', + tags: 'CC, NNS', + }, + { + text: 'i find that extremely hard to believe.', + tags: 'PRP, VBP, DT, RB, JJ, TO, VB', + }, + { + text: 'Please take a moment to read this.', + tags: 'UH, VB, DT, NN, TO, VB, DT', + }, + { + text: 'Fred', + tags: 'NNP', + }, + { + text: 'I will attach the letter explaining the benefit we are sponsoring.', + tags: 'PRP, MD, VB, DT, NN, VBG, DT, NN, PRP, VBP, VBG', + }, + { + text: 'It is certainly for a good cause.', + tags: 'PRP, VBZ, RB, IN, DT, JJ, NN', + }, + { + text: 'I hope you have a huge network.', + tags: 'PRP, VBP, PRP, VBP, DT, JJ, NN', + }, + { + text: 'Fred', + tags: 'NNP', + }, + { + text: 'ADMISSION: DONATIONS AT THE DOOR', + tags: 'NN, NNS, IN, DT, NN', + }, + { + text: 'Donations can also be made through Charter One Bank.', + tags: 'NNS, MD, RB, VB, VBN, IN, NNP, NNP, NNP', + }, + { + text: 'By Richard Spencer', + tags: 'IN, NNP, NNP', + }, + { + text: 'Increased car usage in China is creating a high demand for petrol', + tags: 'VBN, NN, NN, IN, NNP, VBZ, VBG, DT, JJ, NN, IN, NN', + }, + { + text: 'Imagine the tension melting away as you continue breathing rhythmically and naturally.', + tags: 'VB, DT, NN, VBG, RB, IN, PRP, VBP, VBG, RB, CC, RB', + }, + { + text: 'It surrounds you.', + tags: 'PRP, VBZ, PRP', + }, + { + text: 'Everything around you is so vast.', + tags: 'NN, IN, PRP, VBZ, RB, JJ', + }, + { + text: 'Yet, there is warmth and a familiarity with the vastness.', + tags: 'CC, EX, VBZ, NN, CC, DT, NN, IN, DT, NN', + }, + { + text: 'Imagine yourself sitting on the beach serenely and restfully.', + tags: 'VB, PRP, VBG, IN, DT, NN, RB, CC, RB', + }, + { + text: 'You are in a state of peace and relaxation.', + tags: 'PRP, VBP, IN, DT, NN, IN, NN, CC, NN', + }, + { + text: 'Another thing you can try.', + tags: 'DT, NN, PRP, MD, VB', + }, + { + text: 'This is called ideation.', + tags: 'DT, VBZ, VBN, NN', + }, + { + text: 'The main thing is to keep practicing.', + tags: 'DT, JJ, NN, VBZ, TO, VB, VBG', + }, + { + text: 'NORTH CAROLINA RELIGIOUS COALITION FOR MARRIAGE EQUALITY', + tags: 'NNP, NNP, NNP, NNP, IN, NNP, NNP', + }, + { + text: + 'Furthermore, the Vestry voted unanimously to invite the support of members of the CHS congregation for the Declaration.', + tags: 'RB, DT, NNP, VBD, RB, TO, VB, DT, NN, IN, NNS, IN, DT, NNP, NN, IN, DT, NN', + }, + { + text: 'He has a very high intellect.', + tags: 'PRP, VBZ, DT, RB, JJ, NN', + }, + { + text: + 'He has encyclopedic knowledge of hundreds of different Supreme Court cases, and he can recite details from memory.', + tags: 'PRP, VBZ, JJ, NN, IN, NNS, IN, JJ, NNP, NNP, NNS, CC, PRP, MD, VB, NNS, IN, NN', + }, + { + text: 'President Bush loves him.', + tags: 'NNP, NNP, VBZ, PRP', + }, + { + text: '###', + tags: 'NFP', + }, + { + text: 'Reply', + tags: 'VB', + }, + { + text: 'By MARK CARREAU', + tags: 'IN, NNP, NNP', + }, + { + text: 'Copyright 2005 Houston Chronicle', + tags: 'NN, CD, NNP, NNP', + }, + { + text: 'Reuters', + tags: 'NNP', + }, + { + text: 'I am serious about doing something.', + tags: 'PRP, VBP, JJ, IN, VBG, NN', + }, + { + text: 'Any suggestions would be appreciated.', + tags: 'DT, NNS, MD, VB, VBN', + }, + { + text: 'I will.', + tags: 'PRP, MD', + }, + { + text: 'Subject: Civet Cats, James Rachels + a song', + tags: 'NN, NN, NNS, NNP, NNP, SYM, DT, NN', + }, + { + text: 'These animals have the misfortune to produce a substance that is useful in the manufacture of perfume.', + tags: 'DT, NNS, VBP, DT, NN, TO, VB, DT, NN, WDT, VBZ, JJ, IN, DT, NN, IN, NN', + }, + { + text: 'Travis Job', + tags: 'NNP, NNP', + }, + { + text: 'icq uin: 5249025', + tags: 'NN, NN, CD', + }, + { + text: 'Within seven days, I started getting money in the mail !!', + tags: 'IN, CD, NNS, PRP, VBD, VBG, NN, IN, DT, NN', + }, + { + text: "It's easy.", + tags: 'PRP, VBZ, JJ', + }, + { + text: "It's legal.", + tags: 'PRP, VBZ, JJ', + }, + { + text: 'You are requesting a legitimate service and you are paying for it !!', + tags: 'PRP, VBP, VBG, DT, JJ, NN, CC, PRP, VBP, VBG, IN, PRP', + }, + { + text: 'This is perfectly legal !!', + tags: 'DT, VBZ, RB, JJ', + }, + { + text: + 'Visit message boards and post this article as a new message by highlighting the text of this letter and selecting paste from the edit menu.', + tags: 'VB, NN, NNS, CC, VB, DT, NN, IN, DT, JJ, NN, IN, VBG, DT, NN, IN, DT, NN, CC, VBG, NN, IN, DT, NN, NN', + }, + { + text: "You're done.", + tags: 'PRP, VBP, JJ', + }, + { + text: 'Congratulations !!!!!!', + tags: 'NNS', + }, + { + text: "THAT's IT !!", + tags: 'DT, VBZ, PRP', + }, + { + text: 'By Dan Whipple', + tags: 'IN, NNP, NNP', + }, + { + text: 'Boulder, CO, Feb. 23 (UPI) --', + tags: 'NNP, NNP, NNP, CD, NNP', + }, + { + text: 'The last wolf was killed in Yellowstone National Park in 1943.', + tags: 'DT, JJ, NN, VBD, VBN, IN, NNP, NNP, NNP, IN, CD', + }, + { + text: 'This simple change has triggered a veritable ecological cascade in Yellowstone.', + tags: 'DT, JJ, NN, VBZ, VBN, DT, JJ, JJ, NN, IN, NNP', + }, + { + text: 'The plants provide shade and root strength for bank stability.', + tags: 'DT, NNS, VBP, NN, CC, NN, NN, IN, NN, NN', + }, + { + text: 'Yellowstone has a vast elk herd, one of the largest in the world.', + tags: 'NNP, VBZ, DT, JJ, NN, NN, CD, IN, DT, JJS, IN, DT, NN', + }, + { + text: 'On Jan. 31, Oregon Federal District Court Judge Robert E. Jones appeared to agree with them.', + tags: 'IN, NNP, CD, NNP, NNP, NNP, NNP, NNP, NNP, NNP, NNP, VBD, TO, VB, IN, PRP', + }, + { + text: 'Wolves can migrate considerable distances.', + tags: 'NNS, MD, VB, JJ, NNS', + }, + { + text: 'By Dan Whipple', + tags: 'IN, NNP, NNP', + }, + { + text: 'Boulder, CO, Nov. 15 (UPI) --', + tags: 'NNP, NNP, NNP, CD, NNP', + }, + { + text: + 'Important species that probably would decline include shrimp, capelin, Greenland halibut and some varieties of flatfish.', + tags: 'JJ, NNS, WDT, RB, MD, VB, VBP, NNS, NN, NNP, NN, CC, DT, NNS, IN, NNS', + }, + { + text: 'The Pew researchers tried to transcend the economic argument.', + tags: 'DT, NNP, NNS, VBD, TO, VB, DT, JJ, NN', + }, + { + text: '---->===}*{===<----', + tags: 'NFP', + }, + { + text: '---->===}*{===<----', + tags: 'NFP', + }, + { + text: 'You have seen the pictures.', + tags: 'PRP, VBP, VBN, DT, NNS', + }, + { + text: 'It is the welfare society that was New Orleans."', + tags: 'PRP, VBZ, DT, NN, NN, WDT, VBD, NNP, NNP', + }, + { + text: '-- Paul, Atlanta, USA', + tags: 'NNP, NNP, NNP', + }, + { + text: '-- Mac, Nottingham', + tags: 'NNP, NNP', + }, + { + text: '-- David, Kent', + tags: 'NNP, NNP', + }, + { + text: '-- John B, Windermere, Florida', + tags: 'NNP, NNP, NNP, NNP', + }, + { + text: 'Certainly, representation of the US in other countries will have a certain depiction.', + tags: 'RB, NN, IN, DT, NNP, IN, JJ, NNS, MD, VB, DT, JJ, NN', + }, + { + text: 'Some refused to leave, but so many were unable to.', + tags: 'DT, VBD, TO, VB, CC, RB, JJ, VBD, JJ, TO', + }, + { + text: "These are some of the things I've been wondering ...", + tags: 'DT, VBP, DT, IN, DT, NNS, PRP, VBP, VBN, VBG', + }, + { + text: 'Linna', + tags: 'NNP', + }, + { + text: 'Juggernaut', + tags: 'NNP', + }, + { + text: 'Recently, Bush addressed the nation.', + tags: 'RB, NNP, VBD, DT, NN', + }, + { + text: 'Aries in 2005 - Flexibility', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Taurus in 2005 - Tenacity', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Gemini in 2005 - Success', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Cancer in 2005 - Balance', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'The active ones will be hectic!', + tags: 'DT, JJ, NNS, MD, VB, JJ', + }, + { + text: 'Leo in 2005 - Abundance', + tags: 'NNP, IN, CD, NN', + }, + { + text: + 'Pursuing a successful career, along with the usual social and financial advantages, will be easier this year than it has in a long time for you, Leo!', + tags: + 'VBG, DT, JJ, NN, IN, IN, DT, JJ, JJ, CC, JJ, NNS, MD, VB, JJR, DT, NN, IN, PRP, VBZ, IN, DT, JJ, NN, IN, PRP, NNP', + }, + { + text: "you'll be able to create opportunities for advancement almost out of thin air.", + tags: 'PRP, MD, VB, JJ, TO, VB, NNS, IN, NN, RB, IN, IN, JJ, NN', + }, + { + text: 'Money may suddenly become tight at a very inconvenient time.', + tags: 'NN, MD, RB, VB, JJ, IN, DT, RB, JJ, NN', + }, + { + text: 'Virgo in 2005 - Perseverance', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Libra in 2005 - Expansion', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Scorpio in 2005 - Transmutation', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Sagittarius in 2005 - Empowerment', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Capricorn in 2005 - Resolution', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Aquarius in 2005 - Magic', + tags: 'NNP, IN, CD, NN', + }, + { + text: 'Pisces in 2005 - Self-confidence', + tags: 'NNP, IN, CD, NN, NN', + }, + { + text: "It's a big year for you, friend Pisces.", + tags: 'PRP, VBZ, DT, JJ, NN, IN, PRP, NN, NNP', + }, + { + text: 'ARCHILOCHUS solar eclipse: April 6, 648 BC Friday', + tags: 'NNP, JJ, NN, NNP, CD, CD, NN, NNP', + }, + { + text: 'Petrarch meets LAURA: April 6, 1327 Monday', + tags: 'NNP, VBZ, NNP, NNP, CD, CD, NNP', + }, + { + text: 'DURER dies: April 6, 1528 Monday', + tags: 'NNP, VBZ, NNP, CD, CD, NNP', + }, + { + text: 'Sir Francis Walsingham dies: April 6, 1590 Monday', + tags: 'NNP, NNP, NNP, VBZ, NNP, CD, CD, NNP', + }, + { + text: 'LAURA dies of plague: April 6, 1348 Sunday', + tags: 'NNP, VBZ, IN, NN, NNP, CD, CD, NNP', + }, + { + text: 'RAPHAEL born: April 6, 1483 Sunday', + tags: 'NNP, VBN, NNP, CD, CD, NNP', + }, + { + text: 'RAPHAEL dies: April 6, 1520 Good Friday', + tags: 'NNP, VBZ, NNP, CD, CD, NNP, NNP', + }, + { + text: 'Kent EARTHQUAKE: April 6, 1580 Wednesday', + tags: 'NNP, NNP, NNP, CD, CD, NNP', + }, + { + text: 'Historian John Stow dies: April 6, 1605 Sat / Wed.', + tags: 'JJ, NNP, NNP, VBZ, NNP, CD, CD, NNP, SYM, NNP', + }, + { + text: 'Upon the same day he conquered Darius, won a great victory at sea, & died the same day.', + tags: 'IN, DT, JJ, NN, PRP, VBD, NNP, VBD, DT, JJ, NN, IN, NN, CC, VBD, DT, JJ, NN', + }, + { + text: 'The 69 year old Dr. Lopez was found guilty and was summarily hung and quartered on June 7, 1594 at Tyburn.', + tags: 'DT, CD, NN, JJ, NNP, NNP, VBD, VBN, JJ, CC, VBD, RB, VBN, CC, VBN, IN, NNP, CD, CD, IN, NNP', + }, + { + text: '1533 Atahualpa, inca emperor of peru, imprisoned & learns chess.', + tags: 'CD, NNP, NNP, NN, IN, NNP, VBN, CC, VBZ, NN', + }, + { + text: 'Introduces the word gambit.', + tags: 'VBZ, DT, NN, NN', + }, + { + text: '1570 Gianutto della Mantia, Horatio born in Italy.', + tags: 'CD, NNP, NN, NNP, NNP, VBN, IN, NNP', + }, + { + text: '1575 Leonardo beats Ruy Lopez in Madrid.', + tags: 'CD, NNP, VBZ, NNP, NNP, IN, NNP', + }, + { + text: '1580 Catherine de Medici of France is a keen chess player.', + tags: 'CD, NNP, NNP, NNP, IN, NNP, VBZ, DT, JJ, NN, NN', + }, + { + text: '1580 Ruy lopez died.', + tags: 'CD, NNP, NN, VBD', + }, + { + text: 'Nostromo A Tale of the Seaboard', + tags: 'NNP, DT, NNP, IN, DT, NNP', + }, + { + text: 'He turned away.', + tags: 'PRP, VBD, RB', + }, + { + text: 'Wisteria Lodge', + tags: 'NNP, NNP', + }, + { + text: '"But everything went wrong with us.', + tags: 'CC, NN, VBD, JJ, IN, PRP', + }, + { + text: 'Art Neuendorffer', + tags: 'NNP, NNP', + }, + { + text: 'John Lennon entered stardom being a murderer.', + tags: 'NNP, NNP, VBD, NN, VBG, DT, NN', + }, + { + text: + 'One week after that declaration, ONLY ONE WEEK LATER, Brian Epstein, forger of the Beatle farce, died from an overdose.', + tags: 'CD, NN, IN, DT, NN, RB, CD, NN, RBR, NNP, NNP, NN, IN, DT, NNP, NN, VBD, IN, DT, NN', + }, + { + text: 'You have been warned ...', + tags: 'PRP, VBP, VBN, VBN', + }, + { + text: 'THE HIGH COURT.', + tags: 'DT, JJ, NN', + }, + { + text: 'By William Rivers Pitt', + tags: 'IN, NNP, NNP, NNP', + }, + { + text: 'Monday 09 January 2006', + tags: 'NNP, CD, NNP, CD', + }, + { + text: + '"Iran has significant capabilities for asymmetric warfare, and poses the additional threat of proliferation.', + tags: 'NNP, VBZ, JJ, NNS, IN, JJ, NN, CC, VBZ, DT, JJ, NN, IN, NN', + }, + { + text: 'In essence, Iran holds the high ground in the Gulf.', + tags: 'IN, NN, NNP, VBZ, DT, JJ, NN, IN, DT, NN', + }, + { + text: 'The Sunburn can reach Mach 3 at high altitude.', + tags: 'DT, NNP, MD, VB, NNP, CD, IN, JJ, NN', + }, + { + text: + 'Virtually every credible analysis has Syria standing as the strongest military force in the Middle East after Israel.', + tags: 'RB, DT, JJ, NN, VBZ, NNP, VBG, IN, DT, JJS, JJ, NN, IN, DT, NNP, NNP, IN, NNP', + }, + { + text: 'Iran also stands accused of aiding terrorism across the globe.', + tags: 'NNP, RB, VBZ, VBN, IN, VBG, NN, IN, DT, NN', + }, + { + text: 'Is any of this a probability?', + tags: 'VBZ, DT, IN, DT, DT, NN', + }, + { + text: 'They did it once already in Iraq.', + tags: 'PRP, VBD, PRP, RB, RB, IN, NNP', + }, + { + text: '300 - Number of Clean Water Act violations by the mountaintop-mining industry in 2003.', + tags: 'CD, NN, IN, NNP, NNP, NNP, NNS, IN, DT, NN, NN, NN, IN, CD', + }, + { + text: '100 - Percentage of those decisions that Bush then decided to allow the government to ignore indefinitely.', + tags: 'CD, NN, IN, DT, NNS, WDT, NNP, RB, VBD, TO, VB, DT, NN, TO, VB, RB', + }, + { + text: + '140 - Number of Saudis, including members of the Bin Laden family, evacuated from United States almost immediately after 11 September.', + tags: 'CD, NN, IN, NNPS, VBG, NNS, IN, DT, NNP, NNP, NN, VBN, IN, NNP, NNP, RB, RB, IN, CD, NNP', + }, + { + text: 'Ambitious warrior', + tags: 'JJ, NN', + }, + { + text: 'Saviour of Iraq', + tags: 'NN, IN, NNP', + }, + { + text: 'Making the country safer', + tags: 'VBG, DT, NN, JJR', + }, + { + text: '95 - Percentage of foreign goods that arrive in the United States by sea.', + tags: 'CD, NN, IN, JJ, NNS, WDT, VBP, IN, DT, NNP, NNP, IN, NN', + }, + { + text: '15,000 - Number of major chemical facilities in the United States.', + tags: 'CD, NN, IN, JJ, JJ, NNS, IN, DT, NNP, NNP', + }, + { + text: 'George Bush: Money manager', + tags: 'NNP, NNP, NN, NN', + }, + { + text: 'George Bush: Tax cutter', + tags: 'NNP, NNP, NN, NN', + }, + { + text: 'Employment tsar', + tags: 'NN, NN', + }, + { + text: 'George Bush: Lawman', + tags: 'NNP, NNP, NN', + }, + { + text: + "680 - Number of suspected al-Qa'ida members that the United States admits are detained at Guantánamo Bay, Cuba.", + tags: 'CD, NN, IN, VBN, NNP, NNP, NNS, WDT, DT, NNP, NNP, VBZ, VBP, VBN, IN, NNP, NNP, NNP', + }, + { + text: '42 - Number of nationalities of those detainees at Guantanamo.', + tags: 'CD, NN, IN, NNS, IN, DT, NNS, IN, NNP', + }, + { + text: 'A health-conscious president', + tags: 'DT, NN, JJ, NN', + }, + { + text: 'Image booster for the US', + tags: 'NN, NN, IN, DT, NNP', + }, + { + text: '13 - Number of vacation days the average American receives each Year.', + tags: 'CD, NN, IN, NN, NNS, DT, JJ, NNP, VBZ, DT, NN', + }, + { + text: 'I think just living in a house with so many girls is making him go crazy?', + tags: 'PRP, VBP, RB, VBG, IN, DT, NN, IN, RB, JJ, NNS, VBZ, VBG, PRP, VB, JJ', + }, + { + text: 'I am sorry for him, he is a good dad', + tags: 'PRP, VBP, JJ, IN, PRP, PRP, VBZ, DT, JJ, NN', + }, + { + text: 'Moreton Morrell in Coventry, Warwickshire', + tags: 'NNP, NNP, IN, NNP, NNP', + }, + { + text: 'Cheap hookers', + tags: 'JJ, NNS', + }, + { + text: 'Would you recommend living in Limerick as a student?', + tags: 'MD, PRP, VB, VBG, IN, NNP, IN, DT, NN', + }, + { + text: 'and would you recommend it as a student?', + tags: 'CC, MD, PRP, VB, PRP, IN, DT, NN', + }, + { + text: 'Orla got it in one.', + tags: 'NNP, VBD, PRP, IN, CD', + }, + { + text: 'Can that be fixed?', + tags: 'MD, DT, VB, VBN', + }, + { + text: 'cynangon mod should work.', + tags: 'NNP, NNP, MD, VB', + }, + { + text: 'Have you tried using clockwork recovery?', + tags: 'VBP, PRP, VBN, VBG, NN, NN', + }, + { + text: 'Get the older version of Cynagon mod.', + tags: 'VB, DT, JJR, NN, IN, NNP, NNP', + }, + { + text: 'Those roms focus on speed and stability.', + tags: 'DT, NNS, VBP, IN, NN, CC, NN', + }, + { + text: 'Or you could just use a home screen launcher replacement.', + tags: 'CC, PRP, MD, RB, VB, DT, NN, NN, NN, NN', + }, + { + text: 'Hope you read through this.', + tags: 'VBP, PRP, VBD, IN, DT', + }, + { + text: 'are the moors and penines in Yorkshire a lonely eerie place?', + tags: 'VBP, DT, NNS, CC, NNS, IN, NNP, DT, JJ, JJ, NN', + }, + { + text: 'I am VERY satisfied.', + tags: 'PRP, VBP, RB, JJ', + }, + { + text: 'lens?', + tags: 'NN', + }, + { + text: 'or it is normal?', + tags: 'CC, PRP, VBZ, JJ', + }, + { + text: 'Cure is to get the sensor cleaned', + tags: 'NN, VBZ, TO, VB, DT, NN, VBN', + }, + { + text: 'Chris', + tags: 'NNP', + }, + { + text: 'Downtown Chicago, Loop, North', + tags: 'NN, NNP, NNP, NNP', + }, + { + text: 'Is there any cure for mouse poison?', + tags: 'VBZ, EX, DT, NN, IN, NN, NN', + }, + { + text: 'Crayola Air-Dry Clay?', + tags: 'NNP, NN, NN, NN', + }, + { + text: 'She loves giraffes and homemade things!', + tags: 'PRP, VBZ, NNS, CC, JJ, NNS', + }, + { + text: 'good idea?', + tags: 'JJ, NN', + }, + { + text: 'she is also good in a carrier.', + tags: 'PRP, VBZ, RB, JJ, IN, DT, NN', + }, + { + text: 'He loved it.', + tags: 'PRP, VBD, PRP', + }, + { + text: 'NO!', + tags: 'UH', + }, + { + text: 'I have had parakeets for a VERY long time, and I use pledge.', + tags: 'PRP, VBP, VBN, NNS, IN, DT, RB, JJ, NN, CC, PRP, VBP, NNP', + }, + { + text: 'LOL Callum', + tags: 'UH, NNP', + }, + { + text: 'no no no no no no', + tags: 'UH, UH, UH, UH, UH, UH', + }, + { + text: 'no', + tags: 'UH', + }, + { + text: 'Please HELP !!!!!!!!!!!!!!!!!!!!!', + tags: 'UH, VB', + }, + { + text: 'TEN POINTS !!!!!!!!!!?', + tags: 'CD, NNS', + }, + { + text: 'PLEASE !!!!!!', + tags: 'UH', + }, + { + text: 'PLEASE HELP !!!!!!!!!!!', + tags: 'UH, VB', + }, + { + text: '- 20 piece Chicken McNuggets', + tags: 'CD, NN, NNP, NNPS', + }, + { + text: '- Large fries', + tags: 'JJ, NNS', + }, + { + text: '- 10 piece Chicken McNuggets', + tags: 'CD, NN, NNP, NNPS', + }, + { + text: '- Medium Fountain Drink', + tags: 'JJ, NN, NN', + }, + { + text: '- McCAFE Drink', + tags: 'NNP, NN', + }, + { + text: '- Hash Browns', + tags: 'NN, NNS', + }, + { + text: '- Egg McMuffin, Sausage', + tags: 'NNP, NNP, NN', + }, + { + text: 'becca is right.', + tags: 'NNP, VBZ, JJ', + }, + { + text: 'Beardies are actually quite delicate.', + tags: 'NNS, VBP, RB, RB, JJ', + }, + { + text: + 'The lower the reins, the stronger the action and the lower the reins the stronger the action on the poll too.', + tags: 'DT, JJR, DT, NNS, DT, JJR, DT, NN, CC, DT, JJR, DT, NNS, DT, JJR, DT, NN, IN, DT, NN, RB', + }, + { + text: 'For horses that are strong pullers.', + tags: 'IN, NNS, WDT, VBP, JJ, NNS', + }, + { + text: 'It just gives you a little leverage and curb pressure.', + tags: 'PRP, RB, VBZ, PRP, DT, JJ, NN, CC, NN, NN', + }, + { + text: "I know that's vague, but it depends on the horse.", + tags: 'PRP, VBP, DT, VBZ, JJ, CC, PRP, VBZ, IN, DT, NN', + }, + { + text: 'christmas ~ 100', + tags: 'NNP, SYM, CD', + }, + { + text: 'hey kido u made me smile', + tags: 'UH, NN, PRP, VBD, PRP, VB', + }, + { + text: 'Plaster of Paris does two things', + tags: 'NN, IN, NNP, VBZ, CD, NNS', + }, + { + text: 'That might work', + tags: 'DT, MD, VB', + }, + { + text: 'wheels are relatively noiseless -', + tags: 'NNS, VBP, RB, JJ', + }, + { + text: 'petsmart application?', + tags: 'NNP, NN', + }, + { + text: 'It makes a huge difference.', + tags: 'PRP, VBZ, DT, JJ, NN', + }, + { + text: 'Nope', + tags: 'UH', + }, + { + text: 'I applied to get a student visa to study in Canada, I received one that is valid until October of 2015.', + tags: 'PRP, VBD, TO, VB, DT, NN, NN, TO, VB, IN, NNP, PRP, VBD, CD, WDT, VBZ, JJ, IN, NNP, IN, CD', + }, + { + text: 'Hi', + tags: 'UH', + }, + { + text: 'Rachel', + tags: 'NNP', + }, + { + text: 'I dislike this urban society and want to leave this whole enviroment.', + tags: 'PRP, VBP, DT, JJ, NN, CC, VBP, TO, VB, DT, JJ, NN', + }, + { + text: 'I live in London.', + tags: 'PRP, VBP, IN, NNP', + }, + { + text: 'I want to go travelling.', + tags: 'PRP, VBP, TO, VB, VBG', + }, + { + text: 'Hotels for travelling will be expensive.', + tags: 'NNS, IN, NN, MD, VB, JJ', + }, + { + text: 'Hit the road.', + tags: 'VB, DT, NN', + }, + { + text: 'Should the statue of David be censored?', + tags: 'MD, DT, NN, IN, NNP, VB, VBN', + }, + { + text: "no, it's only a body of a young man", + tags: 'UH, PRP, VBZ, RB, DT, NN, IN, DT, JJ, NN', + }, + { + text: 'No, it was guys.', + tags: 'UH, PRP, VBD, NNS', + }, + { + text: 'Better Steakhouse in Philadelphia?', + tags: 'JJ, NN, IN, NNP', + }, + { + text: 'Many thanks.', + tags: 'JJ, NNS', + }, + { + text: 'or would the steam from the shower be a problem?', + tags: 'CC, MD, DT, NN, IN, DT, NN, VB, DT, NN', + }, + { + text: 'Is normal bird food fine?', + tags: 'VBZ, JJ, NN, NN, JJ', + }, + { + text: 'or buy small bait worms.', + tags: 'CC, VB, JJ, NN, NNS', + }, + { + text: 'that should work', + tags: 'DT, MD, VB', + }, + { + text: 'i have two options', + tags: 'PRP, VBP, CD, NNS', + }, + { + text: 'using the metro or the air france bus', + tags: 'VBG, DT, NNP, CC, DT, NNP, NNP, NN', + }, + { + text: 'Buy a ticket for Paris.', + tags: 'VB, DT, NN, IN, NNP', + }, + { + text: 'Buy a ticket from the driver.', + tags: 'VB, DT, NN, IN, DT, NN', + }, + { + text: 'You could also try this in gimp.', + tags: 'PRP, MD, RB, VB, DT, IN, NNP', + }, + { + text: 'Hope this helps.', + tags: 'VB, DT, VBZ', + }, + { + text: 'Only a fool would base a decision using the cheapest surgeon to perform an operation.', + tags: 'RB, DT, NN, MD, VB, DT, NN, VBG, DT, JJS, NN, TO, VB, DT, NN', + }, + { + text: "I've had cats for 35 years and I only feed them dry food.", + tags: 'PRP, VBP, VBN, NNS, IN, CD, NNS, CC, PRP, RB, VBP, PRP, JJ, NN', + }, + { + text: 'Read the labels for contents.', + tags: 'VB, DT, NNS, IN, NNS', + }, + { + text: 'They would be too scared and spooky.', + tags: 'PRP, MD, VB, RB, JJ, CC, JJ', + }, + { + text: 'YOU have to spend the time training.', + tags: 'PRP, VBP, TO, VB, DT, NN, VBG', + }, + { + text: '10 gallon nano reef ideas?', + tags: 'CD, NN, NN, NN, NNS', + }, + { + text: 'I am aware of the maintenance involved in keeping a tank this size.', + tags: 'PRP, VBP, JJ, IN, DT, NN, VBN, IN, VBG, DT, NN, DT, NN', + }, + { + text: 'I am currently maintaining a gravity level of 1.024.', + tags: 'PRP, VBP, RB, VBG, DT, NN, NN, IN, CD', + }, + { + text: 'Do I need a protein skimmer or any other equipment?', + tags: 'VBP, PRP, VB, DT, NN, NN, CC, DT, JJ, NN', + }, + { + text: 'NOOK Color or NOOK Tablet?', + tags: 'NNP, NNP, CC, NNP, NNP', + }, + { + text: 'Or just purchase the Color?', + tags: 'CC, RB, VB, DT, NNP', + }, + { + text: 'Pubs in Philadelphia?', + tags: 'NNP, IN, NNP', + }, + { + text: 'You add the water and put water conditioner into the water.', + tags: 'PRP, VBP, DT, NN, CC, VBP, NN, NN, IN, DT, NN', + }, + { + text: 'And do you get charged for it?', + tags: 'CC, VBP, PRP, VB, VBN, IN, PRP', + }, + { + text: 'Hope I helped!', + tags: 'VB, PRP, VBD', + }, + { + text: "He's probably still scared and unsure.", + tags: 'PRP, VBZ, RB, RB, JJ, CC, JJ', + }, + { + text: 'Is Fujairah a nice place to live in?', + tags: 'VBZ, NNP, DT, JJ, NN, TO, VB, IN', + }, + { + text: 'Things to do in Fujairah ..', + tags: 'NNS, TO, VB, IN, NNP', + }, + { + text: 'Are there any new Gaming console?', + tags: 'VBP, EX, DT, JJ, NN, NN', + }, + { + text: 'Anything after 12 is a bonus.', + tags: 'NN, IN, CD, VBZ, DT, NN', + }, + { + text: 'But then again he could be!', + tags: 'CC, RB, RB, PRP, MD, VB', + }, + { + text: 'Pictures would help!', + tags: 'NNS, MD, VB', + }, + { + text: "Do you think he's teething?", + tags: 'VBP, PRP, VB, PRP, VBZ, VBG', + }, + { + text: 'You always want to go higher rather than wider for rats.', + tags: 'PRP, RB, VBP, TO, VB, RBR, RB, IN, RBR, IN, NNS', + }, + { + text: 'Both are equal length so go for the taller one.', + tags: 'DT, VBP, JJ, NN, RB, VB, IN, DT, JJR, CD', + }, + { + text: 'good luck!', + tags: 'JJ, NN', + }, + { + text: 'put the heater on the snake he will love it and the the next day you will have dinner', + tags: 'VB, DT, NN, IN, DT, NN, PRP, MD, VB, PRP, CC, DT, DT, JJ, NN, PRP, MD, VB, NN', + }, + { + text: 'You can definately plan on a great meal with reasonable prices.', + tags: 'PRP, MD, RB, VB, IN, DT, JJ, NN, IN, JJ, NNS', + }, + { + text: 'Just relax and enjoy.', + tags: 'RB, VB, CC, VB', + }, + { + text: "We're at the corner of Hubbard and Noble.", + tags: 'PRP, VBP, IN, DT, NN, IN, NNP, CC, NNP', + }, + { + text: '1381 W. Hubbard', + tags: 'CD, NNP, NNP', + }, + { + text: 'Chicago, IL 60622', + tags: 'NNP, NNP, CD', + }, + { + text: 'Monday thru Friday', + tags: 'NNP, IN, NNP', + }, + { + text: 'Happy Hour', + tags: 'JJ, NN', + }, + { + text: 'Monday thru Friday', + tags: 'NNP, IN, NNP', + }, + { + text: 'Or you can visit temples or shrines in Okinawa.', + tags: 'CC, PRP, MD, VB, NNS, CC, NNS, IN, NNP', + }, + { + text: 'Eat at a conveyor-belt sushi restaurant.', + tags: 'VB, IN, DT, NN, NN, NN, NN', + }, + { + text: 'As a result there was a problem with the weapon jamming.', + tags: 'IN, DT, NN, EX, VBD, DT, NN, IN, DT, NN, VBG', + }, + { + text: 'Rotorua is fine.', + tags: 'NNP, VBZ, JJ', + }, + { + text: 'Nothing wrong with rotorua', + tags: 'NN, JJ, IN, NNP', + }, + { + text: 'louise', + tags: 'NNP', + }, + { + text: 'But I would go for the base number of 15 hh.', + tags: 'CC, PRP, MD, VB, IN, DT, NN, NN, IN, CD, NNS', + }, + { + text: 'Iguazu Falls', + tags: 'NNP, NNPS', + }, + { + text: 'definitely London -', + tags: 'RB, NNP', + }, + { + text: "you'll need to have intermediate French to have a good time in Paris.", + tags: 'PRP, MD, VB, TO, VB, JJ, NNP, TO, VB, DT, JJ, NN, IN, NNP', + }, + { + text: "It's beautiful and the people are extremely friendly.", + tags: 'PRP, VBZ, JJ, CC, DT, NNS, VBP, RB, JJ', + }, + { + text: 'Everything about the place is magical and the people are mostly friendly.', + tags: 'NN, IN, DT, NN, VBZ, JJ, CC, DT, NNS, VBP, RB, JJ', + }, + { + text: 'That is a term invented by online romance scammers', + tags: 'DT, VBZ, DT, NN, VBN, IN, JJ, NN, NNS', + }, + { + text: 'This is an invention of the scammers."', + tags: 'DT, VBZ, DT, NN, IN, DT, NNS', + }, + { + text: 'No.', + tags: 'UH', + }, + { + text: 'BTA only exists in the mind of SCAMMERS.', + tags: 'NNP, RB, VBZ, IN, DT, NN, IN, NNS', + }, + { + text: '100 % SCAM.', + tags: 'CD, NN, NN', + }, + { + text: 'Then the environment.', + tags: 'RB, DT, NN', + }, + { + text: 'Ian', + tags: 'NNP', + }, + { + text: 'Then add the other mate.', + tags: 'RB, VB, DT, JJ, NN', + }, + { + text: 'I want to apply for canada skilled immigeration program.', + tags: 'PRP, VBP, TO, VB, IN, NNP, VBN, NN, NN', + }, + { + text: 'Can i apply with 63 points?', + tags: 'MD, PRP, VB, IN, CD, NNS', + }, + { + text: 'The pass mark could change.', + tags: 'DT, NN, NN, MD, VB', + }, + { + text: 'Read the full answer at that web page for conditions.', + tags: 'VB, DT, JJ, NN, IN, DT, NN, NN, IN, NNS', + }, + { + text: 'Jim B', + tags: 'NNP, NNP', + }, + { + text: 'Toronto.', + tags: 'NNP', + }, + { + text: 'Please help !?', + tags: 'UH, VB', + }, + { + text: 'Can someone please make me feel better about this trip !!!!', + tags: 'MD, NN, UH, VB, PRP, VB, JJR, IN, DT, NN', + }, + { + text: 'Hope it helps!', + tags: 'VBP, PRP, VBZ', + }, + { + text: 'It is free.', + tags: 'PRP, VBZ, JJ', + }, + { + text: 'Feather Type.', + tags: 'NN, NN', + }, + { + text: 'Sussexs have soft feathers.', + tags: 'NNS, VBP, JJ, NNS', + }, + { + text: 'Five Toes: Silkies have five toes.', + tags: 'CD, NNS, NNS, VBP, CD, NNS', + }, + { + text: 'Sussex have four toes.', + tags: 'NN, VBP, CD, NNS', + }, + { + text: 'But only really in the countryside.', + tags: 'CC, RB, RB, IN, DT, NN', + }, + { + text: 'Barn brack and the ring.', + tags: 'NN, NN, CC, DT, NN', + }, + { + text: 'christmas cake for christmas day.', + tags: 'NNP, NN, IN, NNP, NN', + }, + { + text: 'Do animals see images on a TV screen like humans do?', + tags: 'VBP, NNS, VB, NNS, IN, DT, NN, NN, IN, NNS, VBP', + }, + { + text: 'Do animals see images on a TV screen like humans do?', + tags: 'VBP, NNS, VB, NNS, IN, DT, NN, NN, IN, NNS, VBP', + }, + { + text: 'Do dogs enjoy watching T.V.?', + tags: 'VBP, NNS, VB, VBG, NN', + }, + { + text: 'Do they have this anywhere?', + tags: 'VBP, PRP, VB, DT, RB', + }, + { + text: 'I want to take a cruise around the world.', + tags: 'PRP, VBP, TO, VB, DT, NN, IN, DT, NN', + }, + { + text: 'Good luck!', + tags: 'JJ, NN', + }, + { + text: 'No.', + tags: 'UH', + }, + { + text: 'The whole Western Addition and a large portion of the Haight was black.', + tags: 'DT, JJ, NNP, NNP, CC, DT, JJ, NN, IN, DT, NNP, VBD, JJ', + }, + { + text: 'It was an evolution.', + tags: 'PRP, VBD, DT, NN', + }, + { + text: 'Good luck!', + tags: 'JJ, NN', + }, + { + text: 'rabbits are delicate and can get diseases so watch out for that.', + tags: 'NNS, VBP, JJ, CC, MD, VB, NNS, RB, VB, RP, IN, DT', + }, + { + text: 'No.', + tags: 'UH', + }, + { + text: 'Switzerland is one, and the Netherlands are passing the same law.', + tags: 'NNP, VBZ, CD, CC, DT, NNPS, VBP, VBG, DT, JJ, NN', + }, + { + text: 'It will become EU law in a couple of years.', + tags: 'PRP, MD, VB, NNP, NN, IN, DT, NN, IN, NNS', + }, + { + text: 'Lay some knowledge on them dude.', + tags: 'VB, DT, NN, IN, PRP, NN', + }, + { + text: 'Good luck!', + tags: 'JJ, NN', + }, + { + text: 'Good luck!', + tags: 'JJ, NN', + }, + { + text: 'Any suggestions?', + tags: 'DT, NNS', + }, + { + text: 'Being gay and living in Toronto is just fine.', + tags: 'VBG, JJ, CC, VBG, IN, NNP, VBZ, RB, JJ', + }, + { + text: 'But, can you immigrate?', + tags: 'CC, MD, PRP, VB', + }, + { + text: 'Do it properly, and legally, and you will be OK.', + tags: 'VB, PRP, RB, CC, RB, CC, PRP, MD, VB, JJ', + }, + { + text: 'Jim B', + tags: 'NNP, NNP', + }, + { + text: 'Toronto.', + tags: 'NNP', + }, + { + text: "Recently I'm having trouble training him.", + tags: 'RB, PRP, VBP, VBG, NN, VBG, PRP', + }, + { + text: 'Hi, I am a dog trainer for 25 yrs.', + tags: 'UH, PRP, VBP, DT, NN, NN, IN, CD, NNS', + }, + { + text: 'Do this repeatedly and frequently and he will learn to walk on a leash.', + tags: 'VB, DT, RB, CC, RB, CC, PRP, MD, VB, TO, VB, IN, DT, NN', + }, + { + text: 'Hey guys.', + tags: 'UH, NNS', + }, + { + text: "In Delhi I'd recommend Ajay Guesthouse.", + tags: 'IN, NNP, PRP, MD, VB, NNP, NNP', + }, + { + text: 'Those ones are quite small.', + tags: 'DT, NNS, VBP, RB, JJ', + }, + { + text: 'But in general, Delhi is the hardest place to find a nice clean hotel for that price.', + tags: 'CC, IN, JJ, NNP, VBZ, DT, JJS, NN, TO, VB, DT, JJ, JJ, NN, IN, DT, NN', + }, + { + text: 'It was quite easy to find something.', + tags: 'PRP, VBD, RB, JJ, TO, VB, NN', + }, + { + text: 'it is in karol bagh.', + tags: 'PRP, VBZ, IN, NNP, NNP', + }, + { + text: 'a degu, a rat, a mouse, a hamster or a guinea pig?', + tags: 'DT, NN, DT, NN, DT, NN, DT, NN, CC, DT, NN, NN', + }, + { + text: 'Get a guinea pig.', + tags: 'VB, DT, NN, NN', + }, + { + text: "They're incredibly social, highly trainable, and very clean.", + tags: 'PRP, VBP, RB, JJ, RB, JJ, CC, RB, JJ', + }, + { + text: 'Get a guinea pig.', + tags: 'VB, DT, NN, NN', + }, + { + text: 'We have two.', + tags: 'PRP, VBP, CD', + }, + { + text: 'They are social and like to be handled.', + tags: 'PRP, VBP, JJ, CC, VBP, TO, VB, VBN', + }, + { + text: 'They love leaf or romaine lettuce and tomatos, celery, cucumbers, carrots.', + tags: 'PRP, VBP, NN, CC, NN, NN, CC, NNS, NN, NNS, NNS', + }, + { + text: 'Need Advice !?', + tags: 'VBP, NN', + }, + { + text: 'I find the adults are much easier.', + tags: 'PRP, VBP, DT, NNS, VBP, RB, JJR', + }, + { + text: 'Good luck', + tags: 'JJ, NN', + }, + { + text: '- better food', + tags: 'JJR, NN', + }, + { + text: 'Are there any major differences between them?', + tags: 'VBP, EX, DT, JJ, NNS, IN, PRP', + }, + { + text: 'They both had pools for kids and adults.', + tags: 'PRP, DT, VBD, NNS, IN, NNS, CC, NNS', + }, + { + text: 'Spa We tried the spa on the Liberty and loved it.', + tags: 'NN, PRP, VBD, DT, NN, IN, DT, NNP, CC, VBD, PRP', + }, + { + text: 'Leave High School?', + tags: 'VB, NNP, NNP', + }, + { + text: 'In the United States?', + tags: 'IN, DT, NNP, NNP', + }, + { + text: 'Lots of places.', + tags: 'NNS, IN, NNS', + }, + { + text: 'Big Cities like New York, Boston, Philadelphia on the East Coast.', + tags: 'JJ, NNS, IN, NNP, NNP, NNP, NNP, IN, DT, NNP, NNP', + }, + { + text: 'The federal sites of Washington, DC.', + tags: 'DT, JJ, NNS, IN, NNP, NNP', + }, + { + text: 'Southern charm of Nashville, Birmingham, New Orleans or Charlotte.', + tags: 'JJ, NN, IN, NNP, NNP, NNP, NNP, CC, NNP', + }, + { + text: 'Europe?', + tags: 'NNP', + }, + { + text: 'Do you speak a foreign language?', + tags: 'VBP, PRP, VB, DT, JJ, NN', + }, + { + text: 'I could spend a year in Spain alone.', + tags: 'PRP, MD, VB, DT, NN, IN, NNP, RB', + }, + { + text: 'Amount of time could be dependent on so many things.', + tags: 'NN, IN, NN, MD, VB, JJ, IN, RB, JJ, NNS', + }, + { + text: 'Good luck.', + tags: 'JJ, NN', + }, + { + text: 'Nigeria, a lovely country.', + tags: 'NNP, DT, JJ, NN', + }, + { + text: 'Obudu cattle ranch.', + tags: 'NNP, NN, NN', + }, + { + text: 'he will feel much safer in that one room, than in a huge unknown house.', + tags: 'PRP, MD, VB, RB, JJR, IN, DT, CD, NN, IN, IN, DT, JJ, JJ, NN', + }, + { + text: 'It s very frustrating.', + tags: 'PRP, VBZ, RB, JJ', + }, + { + text: 'I would start with a leash.', + tags: 'PRP, MD, VB, IN, DT, NN', + }, + { + text: 'He will learn to really like this.', + tags: 'PRP, MD, VB, TO, RB, VB, DT', + }, + { + text: 'Try obedience classes.', + tags: 'VB, NN, NNS', + }, + { + text: 'Thank you!', + tags: 'VBP, PRP', + }, + { + text: 'I have taken this tour and it was great.', + tags: 'PRP, VBP, VBN, DT, NN, CC, PRP, VBD, JJ', + }, + { + text: 'tele # 84838389593', + tags: 'NN, NN, CD', + }, + { + text: + 'You take a boat across the river, then spend a day biking, eating at a local restaurant, buying souvenirs and doing other things that are geared towards tourists.', + tags: + 'PRP, VBP, DT, NN, IN, DT, NN, RB, VB, DT, NN, VBG, VBG, IN, DT, JJ, NN, VBG, NNS, CC, VBG, JJ, NNS, WDT, VBP, VBN, IN, NNS', + }, + { + text: "It's called Kiwi Heaven and it's across the river from Cho Ben Tre.", + tags: 'PRP, VBZ, VBN, NNP, NNP, CC, PRP, VBZ, IN, DT, NN, IN, NNP, NNP, NNP', + }, + { + text: 'yoga and horses .....?', + tags: 'NN, CC, NNS', + }, + { + text: 'But there are just so many poses and programs!', + tags: 'CC, EX, VBP, RB, RB, JJ, NNS, CC, NNS', + }, + { + text: 'Then the same thing with the other leg.', + tags: 'RB, DT, JJ, NN, IN, DT, JJ, NN', + }, + { + text: 'and will these antibiotics help?', + tags: 'CC, MD, DT, NNS, VB', + }, + { + text: 'Thank you for the help.', + tags: 'VBP, PRP, IN, DT, NN', + }, + { + text: 'He could also have Parvovirus, a GI foreign body, or any number of things.', + tags: 'PRP, MD, RB, VB, NNP, DT, NN, JJ, NN, CC, DT, NN, IN, NNS', + }, + { + text: 'Boiled WHITE rice and boiled chicken breast.', + tags: 'VBN, JJ, NN, CC, VBN, NN, NN', + }, + { + text: 'Bland food.', + tags: 'JJ, NN', + }, + { + text: 'Did they do any x-rays?', + tags: 'VBD, PRP, VB, DT, NN, NNS', + }, + { + text: 'They are also very secretive about being in a relationship.', + tags: 'PRP, VBP, RB, RB, JJ, IN, VBG, IN, DT, NN', + }, + { + text: 'Is it true?', + tags: 'VBZ, PRP, JJ', + }, + { + text: 'Have I just fallen victim in a cultural trap?', + tags: 'VBP, PRP, RB, VBN, NN, IN, DT, JJ, NN', + }, + { + text: 'Christiane gave you a good answer.', + tags: 'NNP, VBD, PRP, DT, JJ, NN', + }, + { + text: "it's very logical.", + tags: 'PRP, VBZ, RB, JJ', + }, + { + text: "I also wish I'd applied for a scholarship.", + tags: 'PRP, RB, VBP, PRP, VBD, VBN, IN, DT, NN', + }, + { + text: 'Lol.', + tags: 'UH', + }, + { + text: "Are you saying I'm bad in bed?", + tags: 'VBP, PRP, VBG, PRP, VBP, JJ, IN, NN', + }, + { + text: 'Joking.', + tags: 'VBG', + }, + { + text: 'Get an education!', + tags: 'VB, DT, NN', + }, + { + text: 'i have tried EVERYTHING i can to get him to eat but he refuses.', + tags: 'PRP, VBP, VBN, NN, PRP, MD, TO, VB, PRP, TO, VB, CC, PRP, VBZ', + }, + { + text: "I've only tried to feed him one at a time.", + tags: 'PRP, VBP, RB, VBN, TO, VB, PRP, CD, IN, DT, NN', + }, + { + text: "he's just a tiny baby, about the width of a pencil.", + tags: 'PRP, VBZ, RB, DT, JJ, NN, IN, DT, NN, IN, DT, NN', + }, + { + text: 'They have a natural instinct to hibernate.', + tags: 'PRP, VBP, DT, JJ, NN, TO, VB', + }, + { + text: 'hope this helped.', + tags: 'VBP, DT, VBD', + }, + { + text: 'help !?', + tags: 'VB', + }, + { + text: 'or were they actually fighting?', + tags: 'CC, VBD, PRP, RB, VBG', + }, + { + text: 'she will be able to sleep without being afraid.', + tags: 'PRP, MD, VB, JJ, TO, VB, IN, VBG, JJ', + }, + { + text: 'good luck!', + tags: 'JJ, NN', + }, + { + text: 'That means they are fighting.', + tags: 'DT, VBZ, PRP, VBP, VBG', + }, + { + text: 'Thing is, it worked.', + tags: 'NN, VBZ, PRP, VBD', + }, + { + text: 'The Communists agreed.', + tags: 'DT, NNPS, VBD', + }, + { + text: 'THAT WAS THE PLAN.', + tags: 'DT, VBD, DT, NN', + }, + { + text: + 'The Americans detected the attempt to infiltrate the urban areas and were already redeploying troops from the rural areas.', + tags: 'DT, NNPS, VBD, DT, NN, TO, VB, DT, JJ, NNS, CC, VBD, RB, VBG, NNS, IN, DT, JJ, NNS', + }, + { + text: 'There is a very good book on the subject that was written by General Vo Nguyen Giap.', + tags: 'EX, VBZ, DT, RB, JJ, NN, IN, DT, NN, WDT, VBD, VBN, IN, NNP, NNP, NNP, NNP', + }, + { + text: 'Any advice would be greatly appreciated.', + tags: 'DT, NN, MD, VB, RB, VBN', + }, + { + text: 'UVB on the other hand can only be reproduced by a fluorescent source.', + tags: 'NN, IN, DT, JJ, NN, MD, RB, VB, VBN, IN, DT, JJ, NN', + }, + { + text: 'As for the heat, just be sure to use a thermometer.', + tags: 'IN, IN, DT, NN, RB, VB, JJ, TO, VB, DT, NN', + }, + { + text: 'Also try green leafy veggies, like kale and spinach.', + tags: 'RB, VB, JJ, NN, NNS, IN, NN, CC, NN', + }, + { + text: 'Is a finch or a parakeet better?', + tags: 'VBZ, DT, NN, CC, DT, NN, JJR', + }, + { + text: 'Please help me!', + tags: 'UH, VB, PRP', + }, + { + text: 'Please choose the parakeet ...', + tags: 'UH, VB, DT, NN', + }, + { + text: 'After a couple of weeks I got tired of them.', + tags: 'IN, DT, NN, IN, NNS, PRP, VBD, JJ, IN, PRP', + }, + { + text: 'They are adorable they have beautiful colors and personality.', + tags: 'PRP, VBP, JJ, PRP, VBP, JJ, NNS, CC, NN', + }, + { + text: 'I love them.', + tags: 'PRP, VBP, PRP', + }, + { + text: 'I tamed them in 4 days.', + tags: 'PRP, VBD, PRP, IN, CD, NNS', + }, + { + text: 'The whole family loves them.', + tags: 'DT, JJ, NN, VBZ, PRP', + }, + { + text: 'I have one yellow girl and a green and yellow boy.', + tags: 'PRP, VBP, CD, JJ, NN, CC, DT, JJ, CC, JJ, NN', + }, + { + text: 'These are the steps I used.', + tags: 'DT, VBP, DT, NNS, PRP, VBD', + }, + { + text: 'Hopefully they will work for you.', + tags: 'RB, PRP, MD, VB, IN, PRP', + }, + { + text: 'You have patience.', + tags: 'PRP, VBP, NN', + }, + { + text: 'Good luck!', + tags: 'JJ, NN', + }, + { + text: 'They worked for me and I hope they worked for you!', + tags: 'PRP, VBD, IN, PRP, CC, PRP, VBP, PRP, VBD, IN, PRP', + }, + { + text: 'They are awesome !!!!!!!!!!!!!!!', + tags: 'PRP, VBP, JJ', + }, + { + text: 'a parakeet is friendlier', + tags: 'DT, NN, VBZ, JJR', + }, + { + text: 'Parakeet.', + tags: 'NN', + }, + { + text: 'They are also friendly.', + tags: 'PRP, VBP, RB, JJ', + }, + { + text: 'And then there’s the rain.', + tags: 'CC, RB, EX, VBZ, DT, NN', + }, + { + text: 'You do realise it is quite expensive to visit Ireland?', + tags: 'PRP, VBP, VB, PRP, VBZ, RB, JJ, TO, VB, NNP', + }, + { + text: 'Golden Wonder KilliFish Breeding Help?', + tags: 'NN, NN, NN, NN, NN', + }, + { + text: 'I have 4 Golden Wonder Killifish.', + tags: 'PRP, VBP, CD, NN, NN, NNS', + }, + { + text: 'Wow!', + tags: 'UH', + }, + { + text: 'You also may need to treat the incubation water.', + tags: 'PRP, RB, MD, VB, TO, VB, DT, NN, NN', + }, + { + text: 'In time the eggs can suffocate in the shipping container.', + tags: 'IN, NN, DT, NNS, MD, VB, IN, DT, NN, NN', + }, + { + text: 'Should I get a balcony?', + tags: 'MD, PRP, VB, DT, NN', + }, + { + text: 'Any tips or advice to make this a great experience ??', + tags: 'DT, NNS, CC, NN, TO, VB, DT, DT, JJ, NN', + }, + { + text: 'It is vacation time.', + tags: 'PRP, VBZ, NN, NN', + }, + { + text: 'It has got very spacious rooms, furnished completely and neatly.', + tags: 'PRP, VBZ, VBN, RB, JJ, NNS, VBN, RB, CC, RB', + }, + { + text: 'These are decorated uniquely and marvelously.', + tags: 'DT, VBP, VBN, RB, CC, RB', + }, + { + text: 'The ship offers variety of eatables, deliciously made.', + tags: 'DT, NN, VBZ, NN, IN, NNS, RB, VBN', + }, + { + text: 'There are special regions uniquely and imposingly designed for the children.', + tags: 'EX, VBP, JJ, NNS, RB, CC, RB, VBN, IN, DT, NNS', + }, + { + text: 'It is really an entertainment for the kids.', + tags: 'PRP, VBZ, RB, DT, NN, IN, DT, NNS', + }, + { + text: 'The amusing world of cartoons and stories will be a memorable experience for the children.', + tags: 'DT, JJ, NN, IN, NNS, CC, NNS, MD, VB, DT, JJ, NN, IN, DT, NNS', + }, + { + text: 'There are other amnesties also.', + tags: 'EX, VBP, JJ, NNS, RB', + }, + { + text: 'There are many online sites offering the booking facility with affordable rates.', + tags: 'EX, VBP, JJ, JJ, NNS, VBG, DT, NN, NN, IN, JJ, NNS', + }, + { + text: 'You may also want to avoid Thanksgiving week and the Christmas holidays.', + tags: 'PRP, MD, RB, VB, TO, VB, NNP, NN, CC, DT, NNP, NNS', + }, + { + text: 'Any time would be great.', + tags: 'DT, NN, MD, VB, JJ', + }, + { + text: 'We had a ball.', + tags: 'PRP, VBD, DT, NN', + }, + { + text: 'The range of activities can be illustrated by describing the water activities.', + tags: 'DT, NN, IN, NNS, MD, VB, VBN, IN, VBG, DT, NN, NNS', + }, + { + text: 'but food is always available and it is consistently good.', + tags: 'CC, NN, VBZ, RB, JJ, CC, PRP, VBZ, RB, JJ', + }, + { + text: "It's a father and son business.", + tags: 'PRP, VBZ, DT, NN, CC, NN, NN', + }, + { + text: 'Or are you undecided?', + tags: 'CC, VBP, PRP, JJ', + }, + { + text: 'He had this Habit of telling you Everything ..', + tags: 'PRP, VBD, DT, NN, IN, VBG, PRP, NN', + }, + { + text: 'Might be something different?', + tags: 'MD, VB, NN, JJ', + }, + { + text: 'Think I should do it?', + tags: 'VB, PRP, MD, VB, PRP', + }, + { + text: "He's dropping we", + tags: 'PRP, VBZ, VBG, NN', + }, + { + text: 'I know this is going to be expensive.', + tags: 'PRP, VBP, DT, VBZ, VBG, TO, VB, JJ', + }, + { + text: "It's actually one of the alternative therapies for EPM", + tags: 'PRP, VBZ, RB, CD, IN, DT, JJ, NNS, IN, NN', + }, + { + text: 'Is that something you are up for?', + tags: 'VBZ, DT, NN, PRP, VBP, IN, IN', + }, + { + text: 'Or a difficult birth?', + tags: 'CC, DT, JJ, NN', + }, + { + text: 'Extremely bad customer service', + tags: 'RB, JJ, NN, NN', + }, + { + text: 'Rude, insensitive, discourteous people !!!!!', + tags: 'JJ, JJ, JJ, NNS', + }, + { + text: 'Great Doc', + tags: 'JJ, NN', + }, + { + text: 'Mark', + tags: 'NNP', + }, + { + text: 'Excellent Tattoo Shop', + tags: 'JJ, NN, NN', + }, + { + text: 'The shop was great, the service was excellent and the employees were fun guys.', + tags: 'DT, NN, VBD, JJ, DT, NN, VBD, JJ, CC, DT, NNS, VBD, JJ, NNS', + }, + { + text: 'But I found the location wonderful and the neighbors very kind.', + tags: 'CC, PRP, VBD, DT, NN, JJ, CC, DT, NNS, RB, JJ', + }, + { + text: 'Loved the pool and BBQ.', + tags: 'VBD, DT, NN, CC, NN', + }, + { + text: 'Lynda is professional and has great compassion for animals.', + tags: 'NNP, VBZ, JJ, CC, VBZ, JJ, NN, IN, NNS', + }, + { + text: 'these guys were fantastic!', + tags: 'DT, NNS, VBD, JJ', + }, + { + text: 'GREAT JOB GUYS!', + tags: 'JJ, NN, NNS', + }, + { + text: 'David', + tags: 'NNP', + }, + { + text: 'This office is awesome!', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: 'Criminal Attorney Dallas', + tags: 'JJ, NN, NNP', + }, + { + text: 'Food was cold', + tags: 'NN, VBD, JJ', + }, + { + text: 'KB', + tags: 'NNP', + }, + { + text: 'We love Little Farmer', + tags: 'PRP, VBP, NNP, NNP', + }, + { + text: 'Fantastic, quick and efficient service.', + tags: 'JJ, JJ, CC, JJ, NN', + }, + { + text: 'They were beautiful and lasted forever!', + tags: 'PRP, VBD, JJ, CC, VBD, RB', + }, + { + text: 'Excellent bagels and excellent service!', + tags: 'JJ, NNS, CC, JJ, NN', + }, + { + text: 'They are friendly and fast.', + tags: 'PRP, VBP, JJ, CC, JJ', + }, + { + text: 'They are great!', + tags: 'PRP, VBP, JJ', + }, + { + text: 'Great Doctor!', + tags: 'JJ, NN', + }, + { + text: 'Dr. Faris is a great doctor!', + tags: 'NNP, NNP, VBZ, DT, JJ, NN', + }, + { + text: 'happy customer', + tags: 'JJ, NN', + }, + { + text: 'Affordable pricing.', + tags: 'JJ, NN', + }, + { + text: 'Friendly responses.', + tags: 'JJ, NNS', + }, + { + text: 'You will find the same to be true for you.', + tags: 'PRP, MD, VB, DT, JJ, TO, VB, JJ, IN, PRP', + }, + { + text: "This is car number 3 we 've purchased through them.", + tags: 'DT, VBZ, NN, NN, CD, PRP, VBP, VBN, IN, PRP', + }, + { + text: 'Thank you again for great customer service!', + tags: 'VBP, PRP, RB, IN, JJ, NN, NN', + }, + { + text: 'Highly recommended !!', + tags: 'RB, VBN', + }, + { + text: 'Great pub', + tags: 'JJ, NN', + }, + { + text: 'awful awful awful', + tags: 'JJ, JJ, JJ', + }, + { + text: 'They have unbeatable price in town and deliver on time.', + tags: 'PRP, VBP, JJ, NN, IN, NN, CC, VBP, IN, NN', + }, + { + text: 'Great Surgeon', + tags: 'JJ, NN', + }, + { + text: 'Dr. Wallen and staff was excellent.', + tags: 'NNP, NNP, CC, NN, VBD, JJ', + }, + { + text: 'Staff explained insurance procedures and was very helpful.', + tags: 'NN, VBD, NN, NNS, CC, VBD, RB, JJ', + }, + { + text: 'Everyone was very nice.', + tags: 'NN, VBD, RB, JJ', + }, + { + text: 'The artwork is excellent and the prices are very reasonable.', + tags: 'DT, NN, VBZ, JJ, CC, DT, NNS, VBP, RB, JJ', + }, + { + text: 'Good job, Lake Forest Tots!', + tags: 'JJ, NN, NNP, NNP, NNPS', + }, + { + text: 'This place is so great!', + tags: 'DT, NN, VBZ, RB, JJ', + }, + { + text: 'Excellent customer service and honest feedback.', + tags: 'JJ, NN, NN, CC, JJ, NN', + }, + { + text: 'Needs to go out of business', + tags: 'VBZ, TO, VB, IN, IN, NN', + }, + { + text: "I've only had good experiences at Adorn, I was greeted and offered a refreshment.", + tags: 'PRP, VBP, RB, VBN, JJ, NNS, IN, NNP, PRP, VBD, VBN, CC, VBN, DT, NN', + }, + { + text: 'Pure Pilates !!', + tags: 'JJ, NN', + }, + { + text: 'Thoroughly recommended', + tags: 'RB, VBN', + }, + { + text: 'Definitely recommend!', + tags: 'RB, VBP', + }, + { + text: 'and it works!', + tags: 'CC, PRP, VBZ', + }, + { + text: 'Thank you Comfort Zone', + tags: 'VBP, PRP, NNP, NNP', + }, + { + text: 'Absolutely great!', + tags: 'RB, JJ', + }, + { + text: 'Clean, updated room, friendly staff, safe location.', + tags: 'JJ, VBN, NN, JJ, NNS, JJ, NN', + }, + { + text: 'CHANGE THE PROCESS, PPL!', + tags: 'VB, DT, NN, NNS', + }, + { + text: 'Home made product', + tags: 'NN, VBN, NN', + }, + { + text: 'I love the people, the product and the service!', + tags: 'PRP, VBP, DT, NNS, DT, NN, CC, DT, NN', + }, + { + text: 'Awesome !!!!', + tags: 'JJ', + }, + { + text: 'they save me from having to deal with Tmobile ...', + tags: 'PRP, VBD, PRP, IN, VBG, TO, VB, IN, NNP', + }, + { + text: 'Great service.', + tags: 'JJ, NN', + }, + { + text: 'But service is very poor.', + tags: 'CC, NN, VBZ, RB, JJ', + }, + { + text: 'Attitude of staff very bad.', + tags: 'NN, IN, NNS, RB, JJ', + }, + { + text: 'And then wait again.', + tags: 'CC, RB, VB, RB', + }, + { + text: 'Everything is delicous and cooked perfectly.', + tags: 'NN, VBZ, JJ, CC, VBN, RB', + }, + { + text: 'I love it for discounted beauty items and household appliances.', + tags: 'PRP, VBP, PRP, IN, VBN, NN, NNS, CC, NN, NNS', + }, + { + text: 'The service at Instep was great !!', + tags: 'DT, NN, IN, NNP, VBD, JJ', + }, + { + text: 'This place is top notch and highly affordable!', + tags: 'DT, NN, VBZ, JJ, NN, CC, RB, JJ', + }, + { + text: 'Tried Crust on Broad on 3 occasions.', + tags: 'VBD, NNP, IN, NNP, IN, CD, NNS', + }, + { + text: 'Great help!', + tags: 'JJ, NN', + }, + { + text: 'I have nothing bad to say.', + tags: 'PRP, VBP, NN, JJ, TO, VB', + }, + { + text: 'I got a coupon from Pennysaver for this station.', + tags: 'PRP, VBD, DT, NN, IN, NNP, IN, DT, NN', + }, + { + text: 'Are you kidding me?', + tags: 'VBP, PRP, VBG, PRP', + }, + { + text: 'Good location', + tags: 'JJ, NN', + }, + { + text: 'Rcommended by bees, too!', + tags: 'VBN, IN, NNS, RB', + }, + { + text: 'Highly recommended.', + tags: 'RB, VBN', + }, + { + text: 'Very professional.', + tags: 'RB, JJ', + }, + { + text: 'Reasonable rate.', + tags: 'JJ, NN', + }, + { + text: 'Suzanne, Vancouver', + tags: 'NNP, NNP', + }, + { + text: 'GREAT SERVICE AND PEOPLE !!', + tags: 'JJ, NN, CC, NNS', + }, + { + text: 'Deb Watson is the contact person and she and the rest of the staff were great !!!', + tags: 'NNP, NNP, VBZ, DT, NN, NN, CC, PRP, CC, DT, NN, IN, DT, NN, VBD, JJ', + }, + { + text: 'I love it.', + tags: 'PRP, VBP, PRP', + }, + { + text: 'Pedicures are also great.', + tags: 'NNS, VBP, RB, JJ', + }, + { + text: 'Rendy is totally amazing.', + tags: 'NNP, VBZ, RB, JJ', + }, + { + text: 'She is amazing.', + tags: 'PRP, VBZ, JJ', + }, + { + text: 'Excellent!', + tags: 'JJ', + }, + { + text: 'Too bad they were out of the Chocolate Lava Cake.', + tags: 'RB, JJ, PRP, VBD, IN, IN, DT, NN, NN, NN', + }, + { + text: 'Service was excellent!', + tags: 'NN, VBD, JJ', + }, + { + text: 'Sandy', + tags: 'NNP', + }, + { + text: 'Excellent Physiotherapists!', + tags: 'JJ, NNS', + }, + { + text: 'They must have read these reviews and improved!', + tags: 'PRP, MD, VB, VBN, DT, NNS, CC, VBN', + }, + { + text: 'This was a flavorful, enjoyable meal for both of us.', + tags: 'DT, VBD, DT, JJ, JJ, NN, IN, DT, IN, PRP', + }, + { + text: 'she needs to develop a personality!', + tags: 'PRP, VBZ, TO, VB, DT, NN', + }, + { + text: 'The nurses are sweet as pie and the doctor is wonderful.', + tags: 'DT, NNS, VBP, JJ, IN, NN, CC, DT, NN, VBZ, JJ', + }, + { + text: 'THANK YOU !!', + tags: 'VBP, PRP', + }, + { + text: "I choose Console Pros and I'm happy I did.", + tags: 'PRP, VBP, NNP, NNPS, CC, PRP, VBP, JJ, PRP, VBD', + }, + { + text: 'This place is bad.', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: 'Oh no !!', + tags: 'UH, UH', + }, + { + text: 'Great', + tags: 'JJ', + }, + { + text: 'Real pros', + tags: 'JJ, NNS', + }, + { + text: 'Antique Lighting, Fixtures, Chicago', + tags: 'JJ, NN, NNS, NNP', + }, + { + text: 'I think they have the largest collection for Chandeliers Chicago.', + tags: 'PRP, VBP, PRP, VBP, DT, JJS, NN, IN, NNS, NNP', + }, + { + text: 'I wanted to try someplace new again.', + tags: 'PRP, VBD, TO, VB, NN, JJ, RB', + }, + { + text: 'This place rocked.', + tags: 'DT, NN, VBD', + }, + { + text: 'We also had the BBQ Spare Ribs .. good also.', + tags: 'PRP, RB, VBD, DT, NN, NN, NNS, JJ, RB', + }, + { + text: 'I ordered the MOO SHU pork and it was great ..', + tags: 'PRP, VBD, DT, NN, NN, NN, CC, PRP, VBD, JJ', + }, + { + text: 'Tiger Heating is awesome.', + tags: 'NNP, NNP, VBZ, JJ', + }, + { + text: 'These guys were absolutely professional.', + tags: 'DT, NNS, VBD, RB, JJ', + }, + { + text: 'Absolutely a wonderful company.', + tags: 'RB, DT, JJ, NN', + }, + { + text: 'Cute place also', + tags: 'JJ, NN, RB', + }, + { + text: 'They fixed the queso!', + tags: 'PRP, VBD, DT, NN', + }, + { + text: 'Thank you thank you', + tags: 'VBP, PRP, VBP, PRP', + }, + { + text: 'I had the morelias enchiladas.', + tags: 'PRP, VBD, DT, NN, NNS', + }, + { + text: 'James Bateman came the day I called and fixed the problem quickly and efficiently.', + tags: 'NNP, NNP, VBD, DT, NN, PRP, VBD, CC, VBD, DT, NN, RB, CC, RB', + }, + { + text: 'tricky short guy', + tags: 'JJ, JJ, NN', + }, + { + text: 'The service is poor ...', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: 'Learn from a Cesar Gracie black belt and former ufc fighter!', + tags: 'VB, IN, DT, NNP, NNP, JJ, NN, CC, JJ, NNP, NN', + }, + { + text: 'Good Pizza at a good price', + tags: 'JJ, NN, IN, DT, JJ, NN', + }, + { + text: 'this is a good place', + tags: 'DT, VBZ, DT, JJ, NN', + }, + { + text: 'The salesperson refused!', + tags: 'DT, NN, VBD', + }, + { + text: 'Good place to be on a Sunday Night.', + tags: 'JJ, NN, TO, VB, IN, DT, NNP, NN', + }, + { + text: 'Perfect Location plus', + tags: 'JJ, NN, CC', + }, + { + text: 'I used to live at Meadowrun and that was a nightmare.', + tags: 'PRP, VBD, TO, VB, IN, NNP, CC, DT, VBD, DT, NN', + }, + { + text: 'Another great business bites the dust!', + tags: 'DT, JJ, NN, VBZ, DT, NN', + }, + { + text: 'Enjoyed this cozy little spot with a group of 8 folks.', + tags: 'VBD, DT, JJ, JJ, NN, IN, DT, NN, IN, CD, NNS', + }, + { + text: 'Service was excellent.', + tags: 'NN, VBD, JJ', + }, + { + text: 'Food was excellent.', + tags: 'NN, VBD, JJ', + }, + { + text: 'Wine was excellent.', + tags: 'NN, VBD, JJ', + }, + { + text: 'A perfect place for a romantic dinner.', + tags: 'DT, JJ, NN, IN, DT, JJ, NN', + }, + { + text: 'Great staff.', + tags: 'JJ, NNS', + }, + { + text: 'Very helpful !!!!', + tags: 'RB, JJ', + }, + { + text: "I'm really thankful for the folks at HR Office.", + tags: 'PRP, VBP, RB, JJ, IN, DT, NNS, IN, NNP, NNP', + }, + { + text: 'Food good, service poor', + tags: 'NN, JJ, NN, JJ', + }, + { + text: 'Con Garage', + tags: 'NN, NN', + }, + { + text: 'Rude service', + tags: 'JJ, NN', + }, + { + text: 'Manson?', + tags: 'NNP', + }, + { + text: 'Fantastic food served without pretense, very reasonably priced wine selections.', + tags: 'JJ, NN, VBN, IN, NN, RB, RB, VBN, NN, NNS', + }, + { + text: 'Will definitely return.', + tags: 'MD, RB, VB', + }, + { + text: 'Consistantly poor', + tags: 'RB, JJ', + }, + { + text: 'Drinks were awesome, prices reasonable, and staff friendly.', + tags: 'NNS, VBD, JJ, NNS, JJ, CC, NN, JJ', + }, + { + text: 'Amazing!', + tags: 'JJ', + }, + { + text: 'Excellent food, fantastic wait staff', + tags: 'JJ, NN, JJ, NN, NN', + }, + { + text: 'I was saddened to see the reviews that claimed World Hats Mart has poor service.', + tags: 'PRP, VBD, VBN, TO, VB, DT, NNS, WDT, VBD, NNP, NNPS, NNP, VBZ, JJ, NN', + }, + { + text: 'I recommend them highly!', + tags: 'PRP, VBP, PRP, RB', + }, + { + text: 'And they THRIVE to get a customer.', + tags: 'CC, PRP, VBP, TO, VB, DT, NN', + }, + { + text: 'Horrible', + tags: 'JJ', + }, + { + text: 'The worst Burger King restaurant !!!', + tags: 'DT, JJS, NNP, NNP, NN', + }, + { + text: 'It actually had a hole in one of the slices.', + tags: 'PRP, RB, VBD, DT, NN, IN, CD, IN, DT, NNS', + }, + { + text: 'There was minimal cheese and sauce and it completely lacked flavor.', + tags: 'EX, VBD, JJ, NN, CC, NN, CC, PRP, RB, VBD, NN', + }, + { + text: 'This was nothing like New York style pizza !!!.', + tags: 'DT, VBD, NN, IN, NNP, NNP, NN, NN', + }, + { + text: 'I love pizza and this was a complete and utter disappointment !!', + tags: 'PRP, VBP, NN, CC, DT, VBD, DT, JJ, CC, JJ, NN', + }, + { + text: 'Easiest Time I ever had purchasing a car!', + tags: 'JJS, NN, PRP, RB, VBD, VBG, DT, NN', + }, + { + text: 'Extremely helpful and professional', + tags: 'RB, JJ, CC, JJ', + }, + { + text: 'Great Barber', + tags: 'JJ, NN', + }, + { + text: 'UGH !!!', + tags: 'UH', + }, + { + text: 'Took a bite, it tasted odd.', + tags: 'VBD, DT, NN, PRP, VBD, JJ', + }, + { + text: 'Ugh !!', + tags: 'UH', + }, + { + text: 'She also refused to get a manager.', + tags: 'PRP, RB, VBD, TO, VB, DT, NN', + }, + { + text: 'Same clerk had considerable difficulty taking down a number.', + tags: 'JJ, NN, VBD, JJ, NN, VBG, RP, DT, NN', + }, + { + text: 'Amazing Experience!', + tags: 'JJ, NN', + }, + { + text: 'Jana made me feel very comfortable.', + tags: 'NNP, VBD, PRP, VB, RB, JJ', + }, + { + text: 'Provided me with warm blanket and has soft music playing.', + tags: 'VBD, PRP, IN, JJ, NN, CC, VBZ, JJ, NN, VBG', + }, + { + text: 'I really enjoyed the staff at Wessex, also the manager Sherri was always very nice and helpful.', + tags: 'PRP, RB, VBD, DT, NN, IN, NNP, RB, DT, NN, NNP, VBD, RB, RB, JJ, CC, JJ', + }, + { + text: 'The fitness center was GREAT!', + tags: 'DT, NN, NN, VBD, JJ', + }, + { + text: 'Everyone was pleasant and very helpful.', + tags: 'NN, VBD, JJ, CC, RB, JJ', + }, + { + text: 'HEAVEN ON EARTHHHHHHH !!!!', + tags: 'NN, IN, NNP', + }, + { + text: 'MUST TRY !!!', + tags: 'MD, VB', + }, + { + text: 'friendly, fine food', + tags: 'JJ, JJ, NN', + }, + { + text: 'The food continues to be very good -- deli sandwiches, homemade soups, fresh salads.', + tags: 'DT, NN, VBZ, TO, VB, RB, JJ, NN, NNS, JJ, NNS, JJ, NNS', + }, + { + text: 'Love the soups.', + tags: 'VBP, DT, NNS', + }, + { + text: + 'The auto mechanics that work for Auto Towing are very friendly and informative and answered any question I had.', + tags: 'DT, NN, NNS, WDT, VBP, IN, NNP, NNP, VBP, RB, JJ, CC, JJ, CC, VBD, DT, NN, PRP, VBD', + }, + { + text: 'A very satisfied new customer!', + tags: 'DT, RB, JJ, JJ, NN', + }, + { + text: 'As a very satisfied new customer, I wholeheartedly recommend United Air Duct Cleaning.', + tags: 'IN, DT, RB, JJ, JJ, NN, PRP, RB, VBP, NNP, NNP, NNP, NNP', + }, + { + text: 'Great Dude Cut!', + tags: 'JJ, NN, NN', + }, + { + text: 'Great service, cool vibe, impeccable style.', + tags: 'JJ, NN, JJ, NN, JJ, NN', + }, + { + text: 'I rated it 5 stars.', + tags: 'PRP, VBD, PRP, CD, NNS', + }, + { + text: 'We prefer the layout of rooms and it is always clean.', + tags: 'PRP, VBP, DT, NN, IN, NNS, CC, PRP, VBZ, RB, JJ', + }, + { + text: 'Luv always ..', + tags: 'NN, RB', + }, + { + text: 'I purchased a nissan from this dealship.', + tags: 'PRP, VBD, DT, NNP, IN, DT, NN', + }, + { + text: 'The sales men were very knowledgeable about every aspect of every car we looked at.', + tags: 'DT, NNS, NNS, VBD, RB, JJ, IN, DT, NN, IN, DT, NN, PRP, VBD, IN', + }, + { + text: 'The paperwork was a very easy and smooth.', + tags: 'DT, NN, VBD, DT, RB, JJ, CC, JJ', + }, + { + text: 'They have a huge inventory.', + tags: 'PRP, VBP, DT, JJ, NN', + }, + { + text: 'As a nurse I know about drug seekers.', + tags: 'IN, DT, NN, PRP, VBP, IN, NN, NNS', + }, + { + text: 'Wonderful Experience', + tags: 'JJ, NN', + }, + { + text: + 'He was incredibly informative about the options I had, giving me opinions on different treatments to choose from.', + tags: 'PRP, VBD, RB, JJ, IN, DT, NNS, PRP, VBD, VBG, PRP, NNS, IN, JJ, NNS, TO, VB, IN', + }, + { + text: + "There's holes everywhere in the ceiling, sewage constantly leaks through the ceiling, and the whole condition of the school is horrible.", + tags: 'EX, VBZ, NNS, RB, IN, DT, NN, NN, RB, VBZ, IN, DT, NN, CC, DT, JJ, NN, IN, DT, NN, VBZ, JJ', + }, + { + text: 'We both kept trying to find something we liked.', + tags: 'PRP, DT, VBD, VBG, TO, VB, NN, PRP, VBD', + }, + { + text: 'Hino Dealer of the Year', + tags: 'NNP, NNP, IN, DT, NNP', + }, + { + text: 'Congratulations Prestige Hino!', + tags: 'NNS, NNP, NNP', + }, + { + text: 'Bronze award service excellence, metro.', + tags: 'NN, NN, NN, NN, NNP', + }, + { + text: 'Gold award parts excellence, metro.', + tags: 'NN, NN, NNS, NN, NNP', + }, + { + text: 'simple but perfect', + tags: 'JJ, CC, JJ', + }, + { + text: 'David is amazing', + tags: 'NNP, VBZ, JJ', + }, + { + text: 'But just this week a peddle broke.', + tags: 'CC, RB, DT, NN, DT, NN, VBD', + }, + { + text: "It's pretty ridiculous!", + tags: 'PRP, VBZ, RB, JJ', + }, + { + text: 'Terrible service !!!', + tags: 'JJ, NN', + }, + { + text: 'EVER !!!', + tags: 'RB', + }, + { + text: 'Internet Department is rude and insulting', + tags: 'NN, NN, VBZ, JJ, CC, JJ', + }, + { + text: 'Stay away from this dealership !!!', + tags: 'VB, RB, IN, DT, NN', + }, + { + text: 'This place is a Rip-Off', + tags: 'DT, NN, VBZ, DT, NN, NN', + }, + { + text: 'I am a mental health counselor and I work with variety of mental health problems.', + tags: 'PRP, VBP, DT, JJ, NN, NN, CC, PRP, VBP, IN, NN, IN, JJ, NN, NNS', + }, + { + text: 'Fantastic for kids', + tags: 'JJ, IN, NNS', + }, + { + text: 'WOW !!!', + tags: 'UH', + }, + { + text: 'The staff is incredibly friendly and helpful and the owner, Mimmy, is an absolute angel.', + tags: 'DT, NN, VBZ, RB, JJ, CC, JJ, CC, DT, NN, NNP, VBZ, DT, JJ, NN', + }, + { + text: 'From the moment you enter the restaurant, you know you are some place special.', + tags: 'IN, DT, NN, PRP, VBP, DT, NN, PRP, VBP, PRP, VBP, DT, NN, JJ', + }, + { + text: 'I have lived in Buckingham Condominiums townhouse for 2 years.', + tags: 'PRP, VBP, VBN, IN, NNP, NNPS, NN, IN, CD, NNS', + }, + { + text: 'I love the location and the apartment !!', + tags: 'PRP, VBP, DT, NN, CC, DT, NN', + }, + { + text: 'The maintenance people are AWESOME !!!!', + tags: 'DT, NN, NNS, VBP, JJ', + }, + { + text: 'And the exterminator is very nice, also.', + tags: 'CC, DT, NN, VBZ, RB, JJ, RB', + }, + { + text: 'She is a pure b**** !!!', + tags: 'PRP, VBZ, DT, JJ, NN', + }, + { + text: 'I would give the Wildernest inn ten stars of five!', + tags: 'PRP, MD, VB, DT, NNP, NNP, CD, NNS, IN, CD', + }, + { + text: 'There were occasional bears on the deck in the morning.', + tags: 'EX, VBD, JJ, NNS, IN, DT, NN, IN, DT, NN', + }, + { + text: 'Kathy and Stewart, the proprietors were the epitome of perfection.', + tags: 'NNP, CC, NNP, DT, NNS, VBD, DT, NN, IN, NN', + }, + { + text: 'Delightful, hospitable, superb, cozy and comfortable.', + tags: 'JJ, JJ, JJ, JJ, CC, JJ', + }, + { + text: 'junkie lube ?!', + tags: 'NN, NN', + }, + { + text: 'WOW!', + tags: 'UH', + }, + { + text: 'a great vacation!', + tags: 'DT, JJ, NN', + }, + { + text: 'Excellent chefs are in the kitchen preparing memorable breakfasts.', + tags: 'JJ, NNS, VBP, IN, DT, NN, VBG, JJ, NNS', + }, + { + text: 'The food was finger licking the bowel fantastic ..', + tags: 'DT, NN, VBD, NN, VBG, DT, NN, JJ', + }, + { + text: 'I got highlights, haircut, and a blowdry.', + tags: 'PRP, VBD, NNS, NN, CC, DT, NN', + }, + { + text: 'She did a great job!', + tags: 'PRP, VBD, DT, JJ, NN', + }, + { + text: 'I would call it the Taj Mahal of the east coast!', + tags: 'PRP, MD, VB, PRP, DT, NNP, NNP, IN, DT, JJ, NN', + }, + { + text: 'Pho-nomenal !!', + tags: 'NN, JJ', + }, + { + text: 'hope this helps !!', + tags: 'VBP, DT, VBZ', + }, + { + text: 'That said, I hated this restaurant.', + tags: 'DT, VBN, PRP, VBD, DT, NN', + }, + { + text: 'Bramen Honda was a bit of a hassle.', + tags: 'NNP, NNP, VBD, DT, NN, IN, DT, NN', + }, + { + text: 'Mr. Guerra gave me a better deal without any hassles nor any type of problems.', + tags: 'NNP, NNP, VBD, PRP, DT, JJR, NN, IN, DT, NNS, CC, DT, NN, IN, NNS', + }, + { + text: 'Excellent customer service !!!', + tags: 'JJ, NN, NN', + }, + { + text: 'I have finally found a mechanic I trust !!', + tags: 'PRP, VBP, RB, VBN, DT, NN, PRP, VBP', + }, + { + text: 'Dr. Shady', + tags: 'NNP, NNP', + }, + { + text: 'Kelly hit the nail on the head.', + tags: 'NNP, VBD, DT, NN, IN, DT, NN', + }, + { + text: 'Poor Experience', + tags: 'JJ, NN', + }, + { + text: "It's pretty combative actually.", + tags: 'PRP, VBZ, RB, JJ, RB', + }, + { + text: "you'll love it", + tags: 'PRP, MD, VB, PRP', + }, + { + text: 'Quaint, lovely, small salon with BIG personality.', + tags: 'JJ, JJ, JJ, NN, IN, JJ, NN', + }, + { + text: 'The service is fast.', + tags: 'DT, NN, VBZ, JJ', + }, + { + text: 'Horrible Service!', + tags: 'JJ, NN', + }, + { + text: 'Superb Arrangements', + tags: 'JJ, NNS', + }, + { + text: 'Oh!', + tags: 'UH', + }, + { + text: 'I think 90 percent of the tenants are smokers!', + tags: 'PRP, VBP, CD, NN, IN, DT, NNS, VBP, NNS', + }, + { + text: 'Chicken salad salad is great too.', + tags: 'NNP, NN, NN, VBZ, JJ, RB', + }, + { + text: 'Rate a church?', + tags: 'VB, DT, NN', + }, + { + text: "It's a bloody church, for chrisssake!", + tags: 'PRP, VBZ, DT, JJ, NN, IN, NN', + }, + { + text: 'The pastor at this church is cool, I met him after some holiday service.', + tags: 'DT, NN, IN, DT, NN, VBZ, JJ, PRP, VBD, PRP, IN, DT, NN, NN', + }, + { + text: 'The repair went quickly and the price was extremely fair.', + tags: 'DT, NN, VBD, RB, CC, DT, NN, VBD, RB, JJ', + }, + { + text: 'Roger M., Woodinville', + tags: 'NNP, NNP, NNP', + }, + { + text: 'I had a conversation with the woman running this place in April 2010.', + tags: 'PRP, VBD, DT, NN, IN, DT, NN, VBG, DT, NN, IN, NNP, CD', + }, + { + text: 'Wow, really?', + tags: 'UH, RB', + }, + { + text: 'Excellent service', + tags: 'JJ, NN', + }, + { + text: 'Tiffany is fabulous!', + tags: 'NNP, VBZ, JJ', + }, + { + text: 'The atmosphere was nice and very clean.', + tags: 'DT, NN, VBD, JJ, CC, RB, JJ', + }, + { + text: 'To start we tried the guacamole and salsa verde, it was completly flavorless.', + tags: 'TO, VB, PRP, VBD, DT, NN, CC, NN, NN, PRP, VBD, RB, JJ', + }, + { + text: 'Everything was bland, completely void of any spice or flavor.', + tags: 'NN, VBD, JJ, RB, JJ, IN, DT, NN, CC, NN', + }, + { + text: 'I recommend La Hacienda', + tags: 'PRP, VBP, NNP, NNP', + }, + { + text: 'Might try again', + tags: 'MD, VB, RB', + }, + { + text: 'the people at Fidelity Leasing were very friendly and helpful.', + tags: 'DT, NNS, IN, NNP, NNP, VBD, RB, JJ, CC, JJ', + }, + { + text: 'Fantastic Service!', + tags: 'JJ, NN', + }, + { + text: 'It also came with free balance and rotation for the life of the tires!', + tags: 'PRP, RB, VBD, IN, JJ, NN, CC, NN, IN, DT, NN, IN, DT, NNS', + }, + { + text: 'Pam Gillies', + tags: 'NNP, NNP', + }, + { + text: 'They actually itemized it as a DISPOSAL fee.', + tags: 'PRP, RB, VBD, PRP, IN, DT, NN, NN', + }, + { + text: 'One of the worst places', + tags: 'CD, IN, DT, JJS, NNS', + }, + { + text: 'I used to LOVE this place.', + tags: 'PRP, VBD, TO, VB, DT, NN', + }, + { + text: 'Wife and I attempted to adopt a dog and was nothing but frustrating.', + tags: 'NN, CC, PRP, VBD, TO, VB, DT, NN, CC, VBD, NN, CC, JJ', + }, + { + text: 'They refused.', + tags: 'PRP, VBD', + }, + { + text: 'Huge ammount of time wasted time and elevated blood pressure.', + tags: 'JJ, NN, IN, NN, VBN, NN, CC, VBN, NN, NN', + }, + { + text: 'College is a Joke and the Salon is a JOKE!', + tags: 'NN, VBZ, DT, NN, CC, DT, NN, VBZ, DT, NN', + }, + { + text: 'You can fool people', + tags: 'PRP, MD, VB, NNS', + }, + { + text: 'Very nice work and friendly guys too.', + tags: 'RB, JJ, NN, CC, JJ, NNS, RB', + }, + { + text: 'New training Centre is excellent', + tags: 'JJ, NN, NN, VBZ, JJ', + }, + { + text: 'I walked away.', + tags: 'PRP, VBD, RB', + }, + { + text: 'Perfect Practice', + tags: 'JJ, NN', + }, + { + text: 'Peter', + tags: 'NNP', + }, + { + text: 'Wonderful service for large group', + tags: 'JJ, NN, IN, JJ, NN', + }, + { + text: 'We were also served salad and soda.', + tags: 'PRP, VBD, RB, VBN, NN, CC, NN', + }, + { + text: 'wonderful', + tags: 'JJ', + }, + { + text: 'I decided it was time to grow up and made an appointment.', + tags: 'PRP, VBD, PRP, VBD, NN, TO, VB, RP, CC, VBD, DT, NN', + }, + { + text: 'One night was too much.', + tags: 'CD, NN, VBD, RB, JJ', + }, + { + text: 'We were having a major problem in maintaining cash.', + tags: 'PRP, VBD, VBG, DT, JJ, NN, IN, VBG, NN', + }, + { + text: 'Being a grocery shop, maintaining 5000 different products was a challenging job.', + tags: 'VBG, DT, NN, NN, VBG, CD, JJ, NNS, VBD, DT, JJ, NN', + }, + { + text: 'Managing POS counter without barcoding was really a tough time.', + tags: 'VBG, NN, NN, IN, NN, VBD, RB, DT, JJ, NN', + }, + { + text: 'The other ladies had a similar experience, both had nail polish on a couple of toes.', + tags: 'DT, JJ, NNS, VBD, DT, JJ, NN, DT, VBD, NN, NN, IN, DT, NN, IN, NNS', + }, + { + text: 'I worked with Andrew for 2 months and did acupuncture and herbs.', + tags: 'PRP, VBD, IN, NNP, IN, CD, NNS, CC, VBD, NN, CC, NNS', + }, + { + text: 'Friendly, clean and excellent location', + tags: 'JJ, JJ, CC, JJ, NN', + }, + { + text: 'The staff was very helpful, and gave us good advice on day and night time activities.', + tags: 'DT, NN, VBD, RB, JJ, CC, VBD, PRP, JJ, NN, IN, NN, CC, NN, NN, NNS', + }, + { + text: 'The location is really stellar!', + tags: 'DT, NN, VBZ, RB, JJ', + }, + { + text: 'I left with a case of BRAWLER !!!!!', + tags: 'PRP, VBD, IN, DT, NN, IN, NNP', + }, + { + text: 'Oil Change Disaster', + tags: 'NN, NN, NN', + }, + { + text: 'Liars, negative stars!', + tags: 'NNS, JJ, NNS', + }, + { + text: 'Great Job', + tags: 'JJ, NN', + }, + { + text: 'The Peterson Family', + tags: 'DT, NNP, NN', + }, + { + text: 'Poor service', + tags: 'JJ, NN', + }, + { + text: 'Really ??', + tags: 'RB', + }, + { + text: 'I beg to differ.', + tags: 'PRP, VBP, TO, VB', + }, + { + text: 'Again, a great outing for the kids, a frustration for an out of town climber.', + tags: 'RB, DT, JJ, NN, IN, DT, NNS, DT, NN, IN, DT, IN, IN, NN, NN', + }, + { + text: 'Wow!', + tags: 'UH', + }, + { + text: 'Thank you Doctor Gonzales, Doctor Stout, Eva Marie and the entire staff!', + tags: 'VBP, PRP, NNP, NNP, NNP, NNP, NNP, NNP, CC, DT, JJ, NN', + }, + { + text: 'Texas Roadhouse is WAY better !!', + tags: 'NNP, NNP, VBZ, RB, JJR', + }, + { + text: 'Spay and neuter service.', + tags: 'NN, CC, NN, NN', + }, + { + text: 'They recently surprised me a larger order.', + tags: 'PRP, RB, VBD, PRP, DT, JJR, NN', + }, + { + text: 'They have a customer for life in us!', + tags: 'PRP, VBP, DT, NN, IN, NN, IN, PRP', + }, + { + text: 'sheisters', + tags: 'NNS', + }, + { + text: 'I paid 2 k cash for a truck with a bad motor.', + tags: 'PRP, VBD, CD, NN, NN, IN, DT, NN, IN, DT, JJ, NN', + }, + { + text: 'Grimy work you guys do.', + tags: 'JJ, NN, PRP, NNS, VBP', + }, + { + text: "It's an adorable little store filled with lots of stationery goodness.", + tags: 'PRP, VBZ, DT, JJ, JJ, NN, VBN, IN, NNS, IN, NN, NN', + }, + { + text: 'Believe me.', + tags: 'VB, PRP', + }, + { + text: 'This is THE premier university in Virginia.', + tags: 'DT, VBZ, DT, JJ, NN, IN, NNP', + }, + { + text: 'It is also the largest.', + tags: 'PRP, VBZ, RB, DT, JJS', + }, + { + text: 'VCU has the # 1 art school in America, and EXCELS in healthcare and medical schooling.', + tags: 'NNP, VBZ, DT, NN, CD, NN, NN, IN, NNP, CC, VBZ, IN, NN, CC, JJ, NN', + }, + { + text: 'The U of R is also recommended, too!', + tags: 'DT, NNP, IN, NNP, VBZ, RB, VBN, RB', + }, + { + text: 'A slice of heaven in winter park off forsyth!', + tags: 'DT, NN, IN, NN, IN, NNP, NNP, IN, NNP', + }, + { + text: 'Nice selection, very clean, friendly staff!', + tags: 'JJ, NN, RB, JJ, JJ, NN', + }, + { + text: 'The staff are very friendly and conscientious.', + tags: 'DT, NNS, VBP, RB, JJ, CC, JJ', + }, + { + text: 'The selection of meats, veggies and sauces is awesome too!', + tags: 'DT, NN, IN, NNS, NNS, CC, NNS, VBZ, JJ, RB', + }, + { + text: 'Meats are kept VERY cold, seafood smells fresh and the serving bar is VERY clean.', + tags: 'NNS, VBP, VBN, RB, JJ, NN, VBZ, JJ, CC, DT, NN, NN, VBZ, RB, JJ', + }, + { + text: 'Great Cookies, Cakes, and Customer Service', + tags: 'JJ, NNS, NNS, CC, NN, NN', + }, + { + text: 'I am a college student.', + tags: 'PRP, VBP, DT, NN, NN', + }, + { + text: 'I can tell she really cares and wants to help.', + tags: 'PRP, MD, VB, PRP, RB, VBZ, CC, VBZ, TO, VB', + }, + { + text: 'I am SO GLAD to have found Dr. Liau.', + tags: 'PRP, VBP, RB, JJ, TO, VB, VBN, NNP, NNP', + }, + { + text: 'Bowtie has filled that role nicely.', + tags: 'NNP, VBZ, VBN, DT, NN, RB', + }, + { + text: 'A great cinema in a great location.', + tags: 'DT, JJ, NN, IN, DT, JJ, NN', + }, + { + text: 'Thank you, Bowtie!', + tags: 'VBP, PRP, NNP', + }, + { + text: 'Craft Wonderland with History', + tags: 'NN, NN, IN, NN', + }, + { + text: 'Great name for a great store!', + tags: 'JJ, NN, IN, DT, JJ, NN', + }, + { + text: 'Definitely go see them!', + tags: 'RB, VB, VB, PRP', + }, + { + text: 'Will look beautiful.', + tags: 'MD, VB, JJ', + }, + { + text: 'Are they serious?', + tags: 'VBP, PRP, JJ', + }, + { + text: 'Thank you!', + tags: 'VBP, PRP', + }, + { + text: 'The food is excellent, the serivce is horrible.', + tags: 'DT, NN, VBZ, JJ, DT, NN, VBZ, JJ', + }, + { + text: 'I was booked for 2 nights at this hotel in Oct 2007.', + tags: 'PRP, VBD, VBN, IN, CD, NNS, IN, DT, NN, IN, NNP, CD', + }, + { + text: 'Worst Apartments EVER', + tags: 'JJS, NNS, RB', + }, + { + text: 'I have worked with Ted Jurek at Decor and You, and it started out as a decent experience.', + tags: 'PRP, VBP, VBN, IN, NNP, NNP, IN, NNP, CC, NNP, CC, PRP, VBD, RP, IN, DT, JJ, NN', + }, + { + text: 'I figure I would give this company a chance.', + tags: 'PRP, VBP, PRP, MD, VB, DT, NN, DT, NN', + }, + { + text: 'This company is way too expensive with nothing to show for it.', + tags: 'DT, NN, VBZ, RB, RB, JJ, IN, NN, TO, VB, IN, PRP', + }, + { + text: 'Horrible.', + tags: 'JJ', + }, + { + text: 'Horrible.', + tags: 'JJ', + }, + { + text: 'Imagine a hotel having problems with people.', + tags: 'VB, DT, NN, VBG, NNS, IN, NNS', + }, + { + text: "He said he's had a long and bad day.", + tags: 'PRP, VBD, PRP, VBZ, VBN, DT, JJ, CC, JJ, NN', + }, + { + text: 'I came to find out the person was the hotel OWNER also.', + tags: 'PRP, VBD, TO, VB, RP, DT, NN, VBD, DT, NN, NN, RB', + }, + { + text: 'I thought the UK was completely devoid of good NYC style pizza.', + tags: 'PRP, VBD, DT, NNP, VBD, RB, JJ, IN, JJ, NNP, NN, NN', + }, + { + text: 'Good food, good wait staff, poor management', + tags: 'JJ, NN, JJ, NN, NN, JJ, NN', + }, + { + text: 'Sorry for interrupting I guess.', + tags: 'JJ, IN, VBG, PRP, VBP', + }, + { + text: 'IT HAS VERY GOOD PRICES.', + tags: 'PRP, VBZ, RB, JJ, NNS', + }, + { + text: 'Identity Theft', + tags: 'NN, NN', + }, + { + text: 'A girl would show up, then a guy in a nice car would show up.', + tags: 'DT, NN, MD, VB, RP, RB, DT, NN, IN, DT, JJ, NN, MD, VB, RP', + }, + { + text: 'Short time later the guy would leave, then the girl.', + tags: 'JJ, NN, RBR, DT, NN, MD, VB, RB, DT, NN', + }, + { + text: 'It sucked having an SUV.', + tags: 'PRP, VBD, VBG, DT, NN', + }, + { + text: 'Bugs were a small problem, nothing too bad.', + tags: 'NNS, VBD, DT, JJ, NN, NN, RB, JJ', + }, + { + text: 'I hope I can return the favor in the future!', + tags: 'PRP, VBP, PRP, MD, VB, DT, NN, IN, DT, NN', + }, + { + text: 'Alan Grissom', + tags: 'NNP, NNP', + }, + { + text: 'Room ok.', + tags: 'NN, JJ', + }, + { + text: 'THIS STORY IS 100 % TRUE.', + tags: 'DT, NN, VBZ, CD, NN, JJ', + }, + { + text: 'Unlike Saratoga.', + tags: 'IN, NNP', + }, + { + text: '- R. Morris.', + tags: 'NNP, NNP', + }, + { + text: 'Favorite place in Tampa.', + tags: 'JJ, NN, IN, NNP', + }, + { + text: 'AMAZING!', + tags: 'JJ', + }, + { + text: 'I frequent this resturant on a weekly basis but usally only for lunch.', + tags: 'PRP, VBP, DT, NN, IN, DT, JJ, NN, CC, RB, RB, IN, NN', + }, + { + text: 'We were greeted again and sat promptly.', + tags: 'PRP, VBD, VBN, RB, CC, VBD, RB', + }, + { + text: 'AMAZING!', + tags: 'JJ', + }, + { + text: 'I have to say the value of this place always amazes me.', + tags: 'PRP, VBP, TO, VB, DT, NN, IN, DT, NN, RB, VBZ, PRP', + }, + { + text: 'Great work and honest establishment!', + tags: 'JJ, NN, CC, JJ, NN', + }, + { + text: 'The service was excellent and personable.', + tags: 'DT, NN, VBD, JJ, CC, JJ', + }, + { + text: 'We made the decision for a couple of reasons.', + tags: 'PRP, VBD, DT, NN, IN, DT, NN, IN, NNS', + }, + { + text: 'Excellent service and quality', + tags: 'JJ, NN, CC, NN', + }, + { + text: 'Friendly staff, but definitely some problems', + tags: 'JJ, NN, CC, RB, DT, NNS', + }, + { + text: 'May, 2009.', + tags: 'NNP, CD', + }, + { + text: 'Next day got moved into another room, on the same floor with other wedding guests.', + tags: 'JJ, NN, VBD, VBN, IN, DT, NN, IN, DT, JJ, NN, IN, JJ, NN, NNS', + }, + { + text: 'The service stunk.', + tags: 'DT, NN, VBD', + }, + { + text: 'We were standing in the store for 20 minutes to simply pick up an order.', + tags: 'PRP, VBD, VBG, IN, DT, NN, IN, CD, NNS, TO, RB, VB, RP, DT, NN', + }, + { + text: 'Terrible Service', + tags: 'JJ, NN', + }, + { + text: "One of the worst experiences I've ever had with a auto repair shop.", + tags: 'CD, IN, DT, JJS, NNS, PRP, VBP, RB, VBN, IN, DT, NN, NN, NN', + }, + { + text: 'Bad for business.', + tags: 'JJ, IN, NN', + }, + { + text: 'The Salon Experience from Hell', + tags: 'DT, NN, NN, IN, NNP', + }, + { + text: 'Absolute Nightmare!', + tags: 'JJ, NN', + }, + { + text: 'STAY AWAY!', + tags: 'VB, RB', + }, + { + text: 'Very unhappy ...', + tags: 'RB, JJ', + }, + { + text: 'Sketchy, right?', + tags: 'JJ, JJ', + }, + { + text: 'I waited.', + tags: 'PRP, VBD', + }, + { + text: 'And waited.', + tags: 'CC, VBD', + }, + { + text: 'Poor Service', + tags: 'JJ, NN', + }, + { + text: 'Excellent Driving School', + tags: 'JJ, NN, NN', + }, + { + text: '....... the rest was history!', + tags: 'DT, NN, VBD, NN', + }, + { + text: 'And every entree we have ordered is perfect.', + tags: 'CC, DT, NN, PRP, VBP, VBN, VBZ, JJ', + }, + { + text: 'The staff is also just so pleasant to deal with.', + tags: 'DT, NN, VBZ, RB, RB, RB, JJ, TO, VB, IN', + }, + { + text: 'Karla Ferguson-Granger', + tags: 'NNP, NNP, NNP', + }, + { + text: 'I had a surgery date of July 17, 2008.', + tags: 'PRP, VBD, DT, NN, NN, IN, NNP, CD, CD', + }, + { + text: 'He said it sarcastically.', + tags: 'PRP, VBD, PRP, RB', + }, + { + text: "Dumbest F'ers ever", + tags: 'JJS, NNS, RB', + }, + { + text: "And he says: You're at Warwick in Pennsylvania?", + tags: 'CC, PRP, VBZ, PRP, VBP, IN, NNP, IN, NNP', + }, + { + text: 'I say, NO, I am at the RADISON WARWICK HOTEL in Rittenhouse Square.', + tags: 'PRP, VBP, UH, PRP, VBP, IN, DT, NNP, NNP, NNP, IN, NNP, NNP', + }, + { + text: 'He says, I have to have an exact ADDRESS.', + tags: 'PRP, VBZ, PRP, VBP, TO, VB, DT, JJ, NN', + }, + { + text: 'We heard nothing.', + tags: 'PRP, VBD, NN', + }, + { + text: 'I WAS calling about one board !!', + tags: 'PRP, VBD, VBG, IN, CD, NN', + }, + { + text: 'STAY AWAY !!!', + tags: 'VB, RB', + }, + { + text: 'Then she was gone.', + tags: 'RB, PRP, VBD, JJ', + }, + { + text: 'I put the coffee thing in hot water and settled for a cup of weak coffee.', + tags: 'PRP, VBD, DT, NN, NN, IN, JJ, NN, CC, VBD, IN, DT, NN, IN, JJ, NN', + }, + { + text: 'Free parking.', + tags: 'JJ, NN', + }, + { + text: 'Quit with the overstatements!', + tags: 'VB, IN, DT, NNS', + }, + { + text: 'Do other brides fall for this ???', + tags: 'VBP, JJ, NNS, VB, IN, DT', + }, ] diff --git a/tests/abbreviation.test.js b/tests/abbreviation.test.js index ad4ca726b..9317be2e0 100644 --- a/tests/abbreviation.test.js +++ b/tests/abbreviation.test.js @@ -1,21 +1,18 @@ const test = require('tape') const nlp = require('./_lib') -test('abbreviations', function(t) { +test('abbreviations', function (t) { let doc = nlp(`mr. and Mrs. Kelly live on Shoreditch st.`) doc.abbreviations().stripPeriods() t.equal(doc.text(), 'mr and Mrs Kelly live on Shoreditch st.', 'no-periods') - doc - .abbreviations() - .addPeriods() - .addPeriods() + doc.abbreviations().addPeriods().addPeriods() t.equal(doc.text(), 'mr. and Mrs. Kelly live on Shoreditch st.', 'one-period') t.end() }) -test('abbreviations', function(t) { +test('abbreviations', function (t) { let doc = nlp("i live on Main St. and it's fine.") doc.abbreviations().stripPeriods() t.equal(doc.text(), "i live on Main St and it's fine.") diff --git a/tests/acronym.test.js b/tests/acronym.test.js index c34cbcdd1..3e20e680a 100644 --- a/tests/acronym.test.js +++ b/tests/acronym.test.js @@ -1,23 +1,18 @@ const test = require('tape') const nlp = require('./_lib') -test('acronyms', function(t) { +test('acronyms', function (t) { let doc = nlp(`mr. and Mrs. Smith are in the FBI and the c.i.a.`) doc.acronyms().stripPeriods() t.equal(doc.text(), 'mr. and Mrs. Smith are in the FBI and the cia', 'no-periods') - doc - .acronyms() - .addPeriods() - .addPeriods() - .addPeriods() - .addPeriods() + doc.acronyms().addPeriods().addPeriods().addPeriods().addPeriods() t.equal(doc.text(), 'mr. and Mrs. Smith are in the F.B.I. and the c.i.a.', 'one-period') t.end() }) -test('acronyms-more', function(t) { +test('acronyms-more', function (t) { let doc = nlp('i work for the F.B.I. in Kansas.') doc.acronyms().stripPeriods() t.equal(doc.text(), 'i work for the FBI in Kansas.', 'strip-period') diff --git a/tests/append.test.js b/tests/append.test.js index 23d65c972..c6cbce594 100644 --- a/tests/append.test.js +++ b/tests/append.test.js @@ -1,14 +1,14 @@ const test = require('tape') const nlp = require('./_lib') -test('append parent', function(t) { +test('append parent', function (t) { let doc = nlp(`one two three`) doc.append('four five') t.equal(doc.text(), 'one two three four five', 'appended in parent') t.end() }) -test('append one child', function(t) { +test('append one child', function (t) { let doc = nlp(`one two three`) let m = doc.match('three') m.append('four five') @@ -16,14 +16,14 @@ test('append one child', function(t) { t.end() }) -test('append multi', function(t) { +test('append multi', function (t) { let doc = nlp('one two. three four') doc.append('oooo') t.equal(doc.text(), 'one two oooo. three four oooo') t.end() }) -test('append two children', function(t) { +test('append two children', function (t) { let doc = nlp(`one two three`) let m = doc.match('two three') let m2 = m.match('three') @@ -34,7 +34,7 @@ test('append two children', function(t) { t.end() }) -test('append in middle', function(t) { +test('append in middle', function (t) { let doc = nlp(`one two three six`) let m = doc.match('three').append('four five') t.equal(m.text('normal'), 'three four five', 'append in child 1') @@ -42,20 +42,16 @@ test('append in middle', function(t) { t.end() }) -test('append in middle many children', function(t) { +test('append in middle many children', function (t) { let doc = nlp(`one two three six`) - let mx = doc - .match('one two three') - .match('three') - .match('.') - .match('three') + let mx = doc.match('one two three').match('three').match('.').match('three') mx.append('four five') t.equal(mx.text('normal'), 'three four five', 'append in child n') t.equal(doc.text(), 'one two three four five six', 'inserted in parent') t.end() }) -test('append check false-positives', function(t) { +test('append check false-positives', function (t) { let doc = nlp(`one two three five`) let one = doc.match('one') let twoThree = doc.match('two three') diff --git a/tests/bestTag.test.js b/tests/bestTag.test.js index 0f19d7ba7..8a53f270b 100644 --- a/tests/bestTag.test.js +++ b/tests/bestTag.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('bestTag', function(t) { +test('bestTag', function (t) { let str = 'john smith was really working' let m = nlp(str) let have = m diff --git a/tests/cache.test.js b/tests/cache.test.js index 228ab7d6c..e053cea38 100644 --- a/tests/cache.test.js +++ b/tests/cache.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('ensure cache is off', function(t) { +test('ensure cache is off', function (t) { let doc = nlp('i am a modern major general') t.ok(doc._cache.set !== true, 'cache is off') doc.match('modern').tag('Person') @@ -12,7 +12,7 @@ test('ensure cache is off', function(t) { t.end() }) -test('new cache is on', function(t) { +test('new cache is on', function (t) { let doc = nlp('i am a modern major general') doc.cache() t.ok(doc._cache.set === true, 'cache is on now') diff --git a/tests/canBe.test.js b/tests/canBe.test.js index ceb96e673..a6189264a 100644 --- a/tests/canBe.test.js +++ b/tests/canBe.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('canBe', function(t) { +test('canBe', function (t) { let doc = nlp(`spencer was going crazy. He walks quickly.`) let canBeNoun = doc.canBe('Noun') diff --git a/tests/case.test.js b/tests/case.test.js index a1d16ee11..85b95d1e3 100644 --- a/tests/case.test.js +++ b/tests/case.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('sanity-check case:', function(t) { +test('sanity-check case:', function (t) { let str = 'John xoo, John fredman' let r = nlp(str) str = r.toUpperCase().out('text') @@ -15,14 +15,14 @@ test('sanity-check case:', function(t) { t.end() }) -test('camel case:', function(t) { +test('camel case:', function (t) { let doc = nlp('and check this out! a walk-in microwave.') doc.hyphenated().toCamelCase() t.equal(doc.text(), 'and check this out! a walkIn microwave.', 'hyphenated-camelcase') t.end() }) -test('tricky case:', function(t) { +test('tricky case:', function (t) { let str = 'i am spencer kelly here with Amy Adams.' let r = nlp(str) r.match('#Person').toUpperCase() @@ -37,7 +37,7 @@ test('tricky case:', function(t) { t.end() }) -test('unicode case:', function(t) { +test('unicode case:', function (t) { let doc = nlp(`ümasdfs`) doc.toTitleCase() t.equal(doc.text(), 'Ümasdfs', 'unicode-titlecase') diff --git a/tests/celebrity-names.test.js b/tests/celebrity-names.test.js index 5ccf94610..97eda57e1 100644 --- a/tests/celebrity-names.test.js +++ b/tests/celebrity-names.test.js @@ -147,11 +147,9 @@ const tests = { 'Slobodan Milosevic': 'Male', } -test('celebrity names:', function(t) { - Object.keys(tests).forEach(function(k) { - const str = nlp(k) - .people() - .text() +test('celebrity names:', function (t) { + Object.keys(tests).forEach(function (k) { + const str = nlp(k).people().text() const msg = "'" + k + "' is a person - - have: '" + str + "'" t.equal(str, k, msg) }) diff --git a/tests/clause.test.js b/tests/clause.test.js index cecbba8ee..dd6718526 100644 --- a/tests/clause.test.js +++ b/tests/clause.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('clauses-parentheses:', function(t) { +test('clauses-parentheses:', function (t) { let m = nlp("i said, 'did you have to do that' and then left, like nothing happened (which it didn't).").clauses() t.equal(m.length, 5, 'found 5 clauses') t.equal(m.eq(0).text(), 'i said', 'clause 1') @@ -12,7 +12,7 @@ test('clauses-parentheses:', function(t) { t.end() }) -test('clauses-commas:', function(t) { +test('clauses-commas:', function (t) { let doc = nlp(`in Toronto, Canada`).clauses() t.equal(doc.length, 1, 'place-comma') @@ -24,7 +24,7 @@ test('clauses-commas:', function(t) { t.end() }) -test('clauses-condition:', function(t) { +test('clauses-condition:', function (t) { let m = nlp('if you must, go to the basement').clauses() t.equal(m.length, 2, 'found 2 clauses2') t.equal(m.eq(0).text(), 'if you must', 'clause 1') @@ -32,7 +32,7 @@ test('clauses-condition:', function(t) { t.end() }) -test('clauses-conjunction:', function(t) { +test('clauses-conjunction:', function (t) { let m = nlp(`it is cool but it is not`).clauses() t.equal(m.length, 2, 'found 2 clauses3') t.equal(m.eq(0).text(), 'it is cool', 'clause 1') @@ -40,14 +40,14 @@ test('clauses-conjunction:', function(t) { t.end() }) -test('clauses-list:', function(t) { +test('clauses-list:', function (t) { let m = nlp('he is nice, cool and fun.').clauses() t.equal(m.length, 1, 'found 1 clause') t.equal(m.eq(0).text(), 'he is nice, cool and fun.', 'clause 1') t.end() }) -test('clauses-find:', function(t) { +test('clauses-find:', function (t) { let doc = nlp(`...and my butt smells, and i like to kiss my own butt`) let m = doc.clauses().find(d => d.has('@hasEllipses')) let str = m.text('reduced') diff --git a/tests/contractions/contract.test.js b/tests/contractions/contract.test.js index b7e84eb5e..9c253adbb 100644 --- a/tests/contractions/contract.test.js +++ b/tests/contractions/contract.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('contract basic', function(t) { +test('contract basic', function (t) { let r = nlp(`he is cool.`) r.contract() t.equal(r.out('text'), `he's cool.`, 'expanded-contract') @@ -34,16 +34,13 @@ test('contract basic', function(t) { r.contract() t.equal(r.out('text'), `i'm good`, 'contract-2') - r.contractions() - .contract() - .contract() - .contract() + r.contractions().contract().contract().contract() t.equal(r.out('text'), `i'm good`, 'contract-n') t.end() }) -test('avoid contraction messes', function(t) { +test('avoid contraction messes', function (t) { let doc = nlp('Tony, is').contract() t.equal(doc.text('reduced'), 'tony is', 'avoid-contraction 1') diff --git a/tests/contractions/contraction.test.js b/tests/contractions/contraction.test.js index 6e1c37803..5c02d2a70 100644 --- a/tests/contractions/contraction.test.js +++ b/tests/contractions/contraction.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('tricky contractions', function(t) { +test('tricky contractions', function (t) { let doc = nlp(`I’m `) doc.contractions().expand() t.equal(doc.text(), 'I am ', '') @@ -29,25 +29,19 @@ test('tricky contractions', function(t) { t.end() }) -test('contractions v possessive', function(t) { - let str = nlp("spencer's not cool") - .normalize({ contractions: true }) - .text() +test('contractions v possessive', function (t) { + let str = nlp("spencer's not cool").normalize({ contractions: true }).text() t.equal(str, 'spencer is not cool', 'adj contraction') - str = nlp("spencer's walk") - .normalize({ contractions: true }) - .text() + str = nlp("spencer's walk").normalize({ contractions: true }).text() t.equal(str, "spencer's walk", 'noun not contraction') - str = nlp("spencer's runs") - .normalize({ contractions: true }) - .text() + str = nlp("spencer's runs").normalize({ contractions: true }).text() t.equal(str, "spencer's runs", 'present-tense not contraction') t.end() }) -test('match contractions/possessives', function(t) { +test('match contractions/possessives', function (t) { let doc = nlp(`i think it's spencer's`) t.equal(doc.has('it'), true, 'has it') t.equal(doc.has('spencer'), true, 'has spencer') @@ -57,7 +51,7 @@ test('match contractions/possessives', function(t) { t.end() }) -test('contraction whitespace', function(t) { +test('contraction whitespace', function (t) { let doc = nlp(`i didn't know.`) t.equal(doc.text(), `i didn't know.`, 'init-whitespace') @@ -73,14 +67,14 @@ test('contraction whitespace', function(t) { t.end() }) -test('number-range', function(t) { +test('number-range', function (t) { let doc = nlp(`between 5-7.`) t.equal(doc.has('5 to 7'), true, 'range-preposition-match') t.equal(doc.has('#NumberRange'), true, 'has NumberRange tag') t.end() }) -test('french-contraction', function(t) { +test('french-contraction', function (t) { let doc = nlp(`oh j'aime ca`) t.equal(doc.has('aime'), true, 'has verb') t.equal(doc.has('je'), true, 'has je') diff --git a/tests/contractions/expand.test.js b/tests/contractions/expand.test.js index 04d3e7171..4e1128464 100644 --- a/tests/contractions/expand.test.js +++ b/tests/contractions/expand.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('basic is contractions', function(t) { +test('basic is contractions', function (t) { let r = nlp(`he is cool.`) r.contractions().expand() t.equal(r.out('text'), `he is cool.`, 'expanded-expand') @@ -32,7 +32,7 @@ test('basic is contractions', function(t) { t.end() }) -test('do-not contractions', function(t) { +test('do-not contractions', function (t) { let r = nlp(`please do not eat the marshmellow`) r.contractions().expand() t.equal(r.out('text'), `please do not eat the marshmellow`, 'expanded-expand') @@ -44,7 +44,7 @@ test('do-not contractions', function(t) { t.end() }) -test('have contractions', function(t) { +test('have contractions', function (t) { let r = nlp(`i have stood`) r.contractions().expand() t.equal(r.out('text'), `i have stood`, 'expanded-expand') @@ -56,19 +56,16 @@ test('have contractions', function(t) { t.end() }) -test('repeated contract-expand', function(t) { +test('repeated contract-expand', function (t) { let r = nlp(`i'm good`) r.contractions().expand() - r.contractions() - .expand() - .expand() - .expand() + r.contractions().expand().expand().expand() t.equal(r.out('text'), `i am good`, 'expand-n') t.end() }) -test('contracted', function(t) { +test('contracted', function (t) { let r = nlp(`I'll go to Toronto. I will see.`) let m = r.contractions() let str = m.out('text') @@ -78,21 +75,13 @@ test('contracted', function(t) { t.end() }) -test('would-or-did', function(t) { +test('would-or-did', function (t) { let r = nlp(`i'd contemplate`) - let str = r - .contractions() - .expand() - .all() - .out('text') + let str = r.contractions().expand().all().out('text') t.equal(str, `i would contemplate`, 'i-would') r = nlp(`i'd contemplated`) - str = r - .contractions() - .expand() - .all() - .out('text') + str = r.contractions().expand().all().out('text') t.equal(str, `i had contemplated`, 'i-had') t.end() }) diff --git a/tests/emoji.test.js b/tests/emoji.test.js index ddd667372..3f1b1ea01 100644 --- a/tests/emoji.test.js +++ b/tests/emoji.test.js @@ -1,40 +1,35 @@ const test = require('tape') const nlp = require('./_lib') -test('keyword emojis', function(t) { +test('keyword emojis', function (t) { ;[ ['he is so nice :heart:', ':heart:'], [':cool: :wine_glass: yeah party', ':cool: :wine_glass:'], ['to be or not to be: this is a question :cookie:', ':cookie:'], - ].forEach(function(a) { - const have = nlp(a[0]) - .match('#Emoji') - .text() - .trim() + ].forEach(function (a) { + const have = nlp(a[0]).match('#Emoji').text().trim() const msg = "have: '" + have + "' want: '" + a[1] + "'" t.equal(have, a[1], msg) }) t.end() }) -test('unicode emojis', function(t) { +test('unicode emojis', function (t) { ;[ ['nice job 💯 ❤️', '💯 ❤️'], ['💚 good job 🎇', '💚 🎇'], ['visit Brunei', ''], ['visit Brunei 🇧🇳', '🇧🇳'], ['visit Brunei 🇧🇳🇧🇳🇧🇳', '🇧🇳🇧🇳🇧🇳'], - ].forEach(function(a) { - const have = nlp(a[0]) - .match('#Emoji') - .out('normal') + ].forEach(function (a) { + const have = nlp(a[0]).match('#Emoji').out('normal') const msg = "have: '" + have + "' want: '" + a[1] + "'" t.equal(have, a[1], msg) }) t.end() }) -test('emoticon emojis', function(t) { +test('emoticon emojis', function (t) { ;[ ['nice job :)', ':)'], [';) good work', ';)'], @@ -42,17 +37,15 @@ test('emoticon emojis', function(t) { ['to be: that is th3 question', ''], ['{ nlp.tokenize("you\'re sure you haven\'t just made thousands of mistakes?") }', extend: "()=>{ nlp.extend((Doc, world)=>world.addWords({bort:'FirstName'})) }", @@ -17,7 +17,7 @@ test('constructor api', function(t) { t.end() }) -test('utils api', function(t) { +test('utils api', function (t) { const fns = { all: "()=>{ nlp('this is yelling').match('#Verb').toTitleCase().all().text() }", found: "()=>{ nlp('oh say can you see?').match('see').found }", @@ -36,7 +36,7 @@ test('utils api', function(t) { t.end() }) -test('accessors api', function(t) { +test('accessors api', function (t) { const fns = { first: '()=>{ }', last: '()=>{ }', @@ -52,7 +52,7 @@ test('accessors api', function(t) { t.end() }) -test('match api', function(t) { +test('match api', function (t) { const fns = { match: "()=>{ nlp('we understand, we are from the land of chocolate.').match('land of #Noun').text() }", not: "()=>{ nlp('wait, there’s a new mexico?').match('#Place').not('new').text() }", @@ -72,7 +72,7 @@ test('match api', function(t) { t.end() }) -test('case api', function(t) { +test('case api', function (t) { const fns = { toUpperCase: "()=>{ nlp('Dental plan. Lisa needs braces.').match('dental .').toUpperCase().text() }", toLowerCase: "()=>{ nlp('Careful! They’re RUFFLED!!').toLowerCase().text() }", @@ -85,7 +85,7 @@ test('case api', function(t) { t.end() }) -test('whitespace api', function(t) { +test('whitespace api', function (t) { const fns = { pre: '()=>{ nlp("we\'re here. we\'re clear. we don\'t want anymore bears.").pre(" ") }', post: "()=>{ nlp(\"we're here. we're clear. we don't want anymore bears.\").post('!') }", @@ -99,7 +99,7 @@ test('whitespace api', function(t) { t.end() }) -test('tag api', function(t) { +test('tag api', function (t) { const fns = { tag: "()=>{ nlp('Michael Apple ate a delicious apple.').match('#FirstName apple').tag('Person').all().match('#Person+').text() }", @@ -114,7 +114,7 @@ test('tag api', function(t) { t.end() }) -test('loops api', function(t) { +test('loops api', function (t) { const fns = { map: "()=>{ nlp('yahoo serious festival').terms().map((m)=> m.toUpperCase()).text() }", forEach: "()=>{ nlp('Oh, no! Bette Midler!').match('#Person+').forEach((m,i)=> m.text()) }", @@ -130,7 +130,7 @@ test('loops api', function(t) { t.end() }) -test('insert api', function(t) { +test('insert api', function (t) { const fns = { replaceWith: "()=>{ nlp('it was the worst of times').match('worst').replaceWith('blurst', true).all().text() }", replace: "()=>{ nlp('trust me folks, big league.').replace('big league','bigly').all().text() }", @@ -145,7 +145,7 @@ test('insert api', function(t) { t.end() }) -test('transform api', function(t) { +test('transform api', function (t) { const fns = { sort: "()=>{ nlp('Larry, Curly, Moe').terms().sort('alphabetical').out('array') }", reverse: '()=>{ }', @@ -164,7 +164,7 @@ test('transform api', function(t) { t.end() }) -test('out api', function(t) { +test('out api', function (t) { const fns = { text: "()=>{ nlp('you might say there’s a little Uter in all of us').match('#Adjective uter').out('array') }", debug: '()=>{ }', @@ -180,7 +180,7 @@ test('out api', function(t) { t.end() }) -test('selectors api', function(t) { +test('selectors api', function (t) { const fns = { terms: "()=>{ nlp('we should all be more like little Ruttiger').terms().json() }", clauses: @@ -205,7 +205,7 @@ test('selectors api', function(t) { t.end() }) -test('subsets api', function(t) { +test('subsets api', function (t) { const fns = { contractions: '()=>{ }', parentheses: "()=>{ nlp('Use a pointed stick (a pencil) or a similar tool').parentheses().data() }", diff --git a/tests/fuzz.test.js b/tests/fuzz.test.js index 23161efe6..8e5292574 100644 --- a/tests/fuzz.test.js +++ b/tests/fuzz.test.js @@ -33,11 +33,11 @@ const subsets = [ 'entities', ] -const isArray = function(arr) { +const isArray = function (arr) { return Object.prototype.toString.call(arr) === '[object Array]' } -test('try all json methods', function(t) { +test('try all json methods', function (t) { let str = ` . diff --git a/tests/hyphens.test.js b/tests/hyphens.test.js index 870d539f7..6332d3860 100644 --- a/tests/hyphens.test.js +++ b/tests/hyphens.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('hyphen-tokenize', function(t) { +test('hyphen-tokenize', function (t) { let r = nlp('super-cool work') t.equal(r.terms().length, 3, 'super, cool') t.equal(r.out('text'), 'super-cool work', 'preserve hyphen') @@ -29,7 +29,7 @@ test('hyphen-tokenize', function(t) { t.end() }) -test('hyphenate', function(t) { +test('hyphenate', function (t) { let str = 'it is cool. he is nice' let m = nlp(str) m.hyphenate() @@ -51,7 +51,7 @@ test('hyphenate', function(t) { t.end() }) -test('hasHyphen', function(t) { +test('hasHyphen', function (t) { let doc = nlp(`super-cool and hunky-dory. Connected with-a-dash.`) let arr = doc.match('@hasHyphen+ .').out('array') t.equal(arr.length, 3, 'three found') diff --git a/tests/instance.test.js b/tests/instance.test.js index 94af51dac..ad46dacf7 100644 --- a/tests/instance.test.js +++ b/tests/instance.test.js @@ -13,7 +13,7 @@ const plugin = (Doc, world) => { world.test = 'test' } -test('nlp-global', function(t) { +test('nlp-global', function (t) { const instance = nlp.clone().extend(plugin) const instance2 = nlp.clone() @@ -24,7 +24,7 @@ test('nlp-global', function(t) { t.end() }) -test('nlp-instance', function(t) { +test('nlp-instance', function (t) { const instance = nlp.clone().extend(plugin) const instance2 = nlp.clone() @@ -34,7 +34,7 @@ test('nlp-instance', function(t) { t.end() }) -test('original nlp changes', function(t) { +test('original nlp changes', function (t) { const nlpBefore = nlp.clone() nlp.extend((Doc, world) => { world.addWords({ blahblah: 'Yes' }) @@ -48,7 +48,7 @@ test('original nlp changes', function(t) { t.end() }) -test('new nlp changes', function(t) { +test('new nlp changes', function (t) { const nlpChange = nlp.clone() nlpChange.extend((Doc, world) => { world.addWords({ foofoo: 'Yes' }) @@ -63,7 +63,7 @@ test('new nlp changes', function(t) { t.end() }) -test('new nlp changes twice', function(t) { +test('new nlp changes twice', function (t) { const nlpChange = nlp.clone().extend((Doc, world) => { world.addWords({ foofoo: 'Yes' }) }) diff --git a/tests/lists.test.js b/tests/lists.test.js index f591abc20..0cd328765 100644 --- a/tests/lists.test.js +++ b/tests/lists.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('comma-remove', function(t) { +test('comma-remove', function (t) { let doc = nlp('i saw red, blue, and green.') doc.lists().removeOxfordComma() t.equal(doc.text(), 'i saw red, blue and green.', 'remove comma') @@ -21,7 +21,7 @@ test('comma-remove', function(t) { t.end() }) -test('list-remove', function(t) { +test('list-remove', function (t) { let doc = nlp('i saw red, blue and green.') doc.lists().remove('asdf') t.equal(doc.text(), 'i saw red, blue and green.', 'missing remove match') @@ -32,31 +32,23 @@ test('list-remove', function(t) { t.end() }) -test('list-parse', function(t) { - let arr = nlp('i saw red, blue, and silver') - .lists() - .items() +test('list-parse', function (t) { + let arr = nlp('i saw red, blue, and silver').lists().items() t.equal(arr.length, 3, 'found three colors, oxfort-comma') - arr = nlp('i saw red, blue and silver') - .lists() - .items() + arr = nlp('i saw red, blue and silver').lists().items() t.equal(arr.length, 3, 'found three colors, no-comma') - arr = nlp('i saw the Eiffel Tower, the pyramids, and the Louvre') - .lists() - .items() + arr = nlp('i saw the Eiffel Tower, the pyramids, and the Louvre').lists().items() t.equal(arr.length, 3, 'found three places, with article') - arr = nlp('i saw Eiffel Tower, pyramids, and not Louvre') - .lists() - .items() + arr = nlp('i saw Eiffel Tower, pyramids, and not Louvre').lists().items() t.equal(arr.length, 3, 'found three places, without article') t.end() }) -test('list-types', function(t) { +test('list-types', function (t) { let doc = nlp('he is nice, cool, and really fun.').lists() t.equal(doc.length, 1, 'found adj list') t.equal(doc.things().length, 3, 'three adjs') @@ -83,7 +75,7 @@ test('list-types', function(t) { // t.end() // }) -test('muti-word things', function(t) { +test('muti-word things', function (t) { const doc = nlp('spencer is nice, quite warm, and tired.') let m = doc.lists() t.equal(m.length, 1, 'has one list') @@ -91,14 +83,14 @@ test('muti-word things', function(t) { t.end() }) -test('add', function(t) { +test('add', function (t) { const doc = nlp('spencer is nice, warm and tired.') doc.lists().add('CRAAZY') t.equal(doc.text(), 'spencer is nice, warm, CRAAZY and tired.', 'without no-oxford') t.end() }) -test('hasOxfordComma', function(t) { +test('hasOxfordComma', function (t) { const doc = nlp('spencer is cool, fun, and great. He is nice, tired and not smart.') let m = doc.lists().hasOxfordComma() t.equal(m.length, 1, 'only one has oxford-comma') diff --git a/tests/lookahead.test.js b/tests/lookahead.test.js index d9fbc4c1e..8a1697a61 100644 --- a/tests/lookahead.test.js +++ b/tests/lookahead.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('look-ahead', function(t) { +test('look-ahead', function (t) { let doc = nlp(`i walked to a store today. the store was very nice`) let m = doc.match('store').lookAhead('#Adjective') t.deepEqual(m.out('array'), ['nice'], 'found all upcoming adjectives') @@ -15,20 +15,16 @@ test('look-ahead', function(t) { let m4 = doc.match('nice').lookAhead('.') t.equal(m4.found, false, 'lookahead on edge empty') - let m5 = nlp('it is raining') - .match('raining') - .lookAhead() + let m5 = nlp('it is raining').match('raining').lookAhead() t.equal(m5.found, false, 'lookahead at end empty') - let m6 = nlp('it is raining today and tomorrow') - .match('raining') - .lookAhead() + let m6 = nlp('it is raining today and tomorrow').match('raining').lookAhead() t.equal(m6.text(), 'today and tomorrow', 'lookahead blank finds all') t.end() }) -test('lookahead from parent is blank', function(t) { +test('lookahead from parent is blank', function (t) { let doc = nlp('it is raining') t.equal(doc.lookAhead('.').found, false, 'no after 1') @@ -37,7 +33,7 @@ test('lookahead from parent is blank', function(t) { t.end() }) -test('look-behind', function(t) { +test('look-behind', function (t) { let doc = nlp(`i walked to a store. the store was very nice`) let m = doc.match('store').lookBehind('#Determiner') t.deepEqual(m.out('array'), ['a', 'the'], 'found previous determiners') @@ -51,20 +47,15 @@ test('look-behind', function(t) { let m4 = doc.match('i').lookBehind('.') t.equal(m4.found, false, 'lookbehind on edge empty') - let m6 = nlp('it is raining today and tomorrow') - .match('raining') - .lookBehind() + let m6 = nlp('it is raining today and tomorrow').match('raining').lookBehind() t.equal(m6.text(), 'it is', 'lookbehind blank finds all') t.end() }) -test('look-behind-last', function(t) { +test('look-behind-last', function (t) { let doc = nlp(`a priest walked into a bar`) - let m = doc - .match('bar') - .lookBehind('a') - .last() + let m = doc.match('bar').lookBehind('a').last() m.replace('the') t.equal(doc.text(), `a priest walked into the bar`, 'lookbehind most-recent') t.end() diff --git a/tests/lookup.test.js b/tests/lookup.test.js index dbb046838..f0f0752d6 100644 --- a/tests/lookup.test.js +++ b/tests/lookup.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('lookup array', function(t) { +test('lookup array', function (t) { let doc = nlp("he isn't AT Spencer's house of pain. The haunted house of not pain. Third sentence spencer.") let m = doc.lookup(['house of pain', 'house of']) t.equal(m.length, 3, 'found redundant match') @@ -19,7 +19,7 @@ test('lookup array', function(t) { t.end() }) -test('lookup object', function(t) { +test('lookup object', function (t) { let doc = nlp('spencer kelly is working here') let res = doc.lookup({ 'spencer kelly': 'Cool', @@ -40,7 +40,7 @@ test('lookup object', function(t) { t.end() }) -test('lookup backtrack', function(t) { +test('lookup backtrack', function (t) { let doc = nlp('first one one one two.') let res = doc.lookup(['two three', 'one', 'blah']) t.equal(res.length, 3, 'found multi single match') diff --git a/tests/loop-mutate.test.js b/tests/loop-mutate.test.js index e86883791..e81771394 100644 --- a/tests/loop-mutate.test.js +++ b/tests/loop-mutate.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('foreach replace', function(t) { +test('foreach replace', function (t) { let doc = nlp('guns and roses') doc.match('guns').forEach(p => { p.replaceWith('flowers') diff --git a/tests/loops.test.js b/tests/loops.test.js index 02d2c3d1e..4e8315e07 100644 --- a/tests/loops.test.js +++ b/tests/loops.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('map-stuff', function(t) { +test('map-stuff', function (t) { let doc = nlp('and').map(d => { return d.replaceWith('or') }) @@ -16,7 +16,7 @@ test('map-stuff', function(t) { t.end() }) -test('foreach-stuff', function(t) { +test('foreach-stuff', function (t) { let doc = nlp('one two three. three four five.').forEach(p => { p.toUpperCase() }) @@ -24,7 +24,7 @@ test('foreach-stuff', function(t) { t.end() }) -test('filter-stuff', function(t) { +test('filter-stuff', function (t) { let doc = nlp('one two three. three four five.').filter(p => { return p.has('four') }) @@ -46,7 +46,7 @@ test('filter-stuff', function(t) { t.end() }) -test('find-stuff', function(t) { +test('find-stuff', function (t) { let doc = nlp('one two three. three four five.').find(m => m.has('four')) t.equal(doc && doc.out('normal') === 'three four five.', true, 'found four') @@ -55,7 +55,7 @@ test('find-stuff', function(t) { t.end() }) -test('some-stuff', function(t) { +test('some-stuff', function (t) { let bool = nlp('one two three. three four five.').some(m => m.has('three')) t.equal(bool, true, 'found-three') @@ -64,7 +64,7 @@ test('some-stuff', function(t) { t.end() }) -test('map array return', function(t) { +test('map array return', function (t) { let doc = nlp('Larry, Curly, and Moe') let people = doc.match('#Noun') // (any one noun) people.sort('alpha') diff --git a/tests/match/and-operand.test.js b/tests/match/and-operand.test.js index 7fa041e20..143547e3f 100644 --- a/tests/match/and-operand.test.js +++ b/tests/match/and-operand.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('and-match', function(t) { +test('and-match', function (t) { let doc = nlp('june and july cool') let m = doc.match('(#Date && july)') t.equal(m.out(), 'july', 'found july') @@ -15,7 +15,7 @@ test('and-match', function(t) { t.end() }) -test('and-match-more', function(t) { +test('and-match-more', function (t) { let doc = nlp('toronto and montreal. Sydney and Paris.') let m = doc.match('(#Place && .)') t.equal(m.length, 4, 'found all four') diff --git a/tests/match/before-after.test.js b/tests/match/before-after.test.js index 866393c25..1c5c6dabe 100644 --- a/tests/match/before-after.test.js +++ b/tests/match/before-after.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('before-basic', function(t) { +test('before-basic', function (t) { let doc = nlp('one two three four five. one three four') let arr = doc.before('three four').out('array') t.equal(arr.length, 2, 'two-matches') @@ -16,7 +16,7 @@ test('before-basic', function(t) { t.end() }) -test('before-match:', function(t) { +test('before-match:', function (t) { let r = nlp('one two three four five').before('two') t.equal(r.out('normal'), 'one', 'before-two') @@ -40,7 +40,7 @@ test('before-match:', function(t) { t.end() }) -test('after-match:', function(t) { +test('after-match:', function (t) { let r = nlp('one two three four five').after('two') t.equal(r.out('normal'), 'three four five', 'after-one') diff --git a/tests/match/doc-match.test.js b/tests/match/doc-match.test.js index 99a4dcc9e..b9f2429c0 100644 --- a/tests/match/doc-match.test.js +++ b/tests/match/doc-match.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('doc-as-input', function(t) { +test('doc-as-input', function (t) { let doc = nlp('if so, he is the best, that i see. he is the greatest') let m = doc.match('he is the .') let found = doc.match(m) @@ -11,7 +11,7 @@ test('doc-as-input', function(t) { t.end() }) -test('doc-sibling-as-input', function(t) { +test('doc-sibling-as-input', function (t) { let doc = nlp('he is the best, that i see. he is the greatest') let childA = doc.if('greatest') let childB = doc.match('he is') @@ -25,7 +25,7 @@ test('doc-sibling-as-input', function(t) { t.end() }) -test('split-doc-input', function(t) { +test('split-doc-input', function (t) { let doc = nlp('he is the best, that i see. he is the greatest') let childA = doc.if('greatest') let childB = doc.match('he is') diff --git a/tests/match/encoding.test.js b/tests/match/encoding.test.js index 728dac883..7323c4862 100644 --- a/tests/match/encoding.test.js +++ b/tests/match/encoding.test.js @@ -1,12 +1,9 @@ const test = require('tape') const nlp = require('../_lib') -test('encoding-match:', function(t) { +test('encoding-match:', function (t) { const r = nlp('it is * nice') - const str = r - .match('is \\*') - .trim() - .out() + const str = r.match('is \\*').trim().out() t.equal(str, 'is *', 'encode asterix') // r = nlp('it is + nice'); @@ -16,7 +13,7 @@ test('encoding-match:', function(t) { t.end() }) -test('reserved-word-in-src:', function(t) { +test('reserved-word-in-src:', function (t) { const r = nlp('buy eggs constructor yeah prototype') t.equal(r.has(`backburner`), false, 'single') t.equal(r.has(`#Foo`), false, 'tag') @@ -26,7 +23,7 @@ test('reserved-word-in-src:', function(t) { t.end() }) -test('reserved-word-in-match:', function(t) { +test('reserved-word-in-match:', function (t) { const r = nlp('fo foo fulala repeat') t.equal(r.has(`constructor`), false, 'single') t.equal(r.has(`#constructor`), false, 'tag') @@ -36,7 +33,7 @@ test('reserved-word-in-match:', function(t) { t.end() }) -test('test-infinite-loop', function(t) { +test('test-infinite-loop', function (t) { const weirdDoc = nlp('^ ? * . + $') weirdDoc.match('is?') weirdDoc.match('.?') @@ -55,15 +52,11 @@ test('test-infinite-loop', function(t) { t.ok(true, 'didnt regress') let str = 'And you are?. Marshal' - let have = nlp(str) - .all() - .out() + let have = nlp(str).all().out() t.equal(have, str, 'regression #1') str = `- where is she.Oh. you guys don't know?` - have = nlp(str) - .all() - .out() + have = nlp(str).all().out() t.equal(have, str, 'regression #2') t.end() diff --git a/tests/match/fancy-match.test.js b/tests/match/fancy-match.test.js index 1fa1b504f..12bcd0664 100644 --- a/tests/match/fancy-match.test.js +++ b/tests/match/fancy-match.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('matchOne', function(t) { +test('matchOne', function (t) { let doc = nlp('one two three four five. one three four') let arr = doc.matchOne('three four').out('array') t.equal(arr.length, 1, 'one-match') @@ -9,7 +9,7 @@ test('matchOne', function(t) { t.end() }) -test('match-from-array :', function(t) { +test('match-from-array :', function (t) { let m = nlp('spencer is really cool').match(['spencer']) t.equal(m.out('normal'), 'spencer', 'just-spencer') t.equal(m.length, 1, 'one-result') @@ -28,7 +28,7 @@ test('match-from-array :', function(t) { t.end() }) -test('greedy-capture', function(t) { +test('greedy-capture', function (t) { let m = nlp('so ralf and really eats the glue').match('* [eats] the', 0) t.equal(m.out('normal'), 'eats', 'one-captures') diff --git a/tests/match/has.test.js b/tests/match/has.test.js index ee0218d66..acb42e88d 100644 --- a/tests/match/has.test.js +++ b/tests/match/has.test.js @@ -35,8 +35,8 @@ let arr = [ ['tuesday march 5th, 2015', 'Date'], ] -test('has-test', function(t) { - arr.forEach(function(a) { +test('has-test', function (t) { + arr.forEach(function (a) { let doc = nlp(a[0]) t.equal(doc.has('#' + a[1]), true, a[0]) }) diff --git a/tests/match/if.test.js b/tests/match/if.test.js index d6648b08a..803c747cb 100644 --- a/tests/match/if.test.js +++ b/tests/match/if.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('if-basic:', function(t) { +test('if-basic:', function (t) { let r = nlp('spencer is here') let m = r.if('asdf') t.equal(m.out('text'), '', 'if-negative') @@ -16,7 +16,7 @@ test('if-basic:', function(t) { t.end() }) -test('ifNo:', function(t) { +test('ifNo:', function (t) { let r = nlp('spencer is here') let m = r.ifNo('spencer') t.equal(m.out('text'), '', 'ifNo-positive') diff --git a/tests/match/insert.test.js b/tests/match/insert.test.js index a64627d46..77989baeb 100644 --- a/tests/match/insert.test.js +++ b/tests/match/insert.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('insert-basic :', function(t) { +test('insert-basic :', function (t) { let m = nlp('the dog sat').insertBefore('and') t.equal(m.out('text'), 'and the dog sat', 'and-dog') @@ -27,7 +27,7 @@ test('insert-basic :', function(t) { t.end() }) -test('insert-subset-include :', function(t) { +test('insert-subset-include :', function (t) { let m = nlp('the dog is nice') let sub = m.match('is') sub.insertAfter('really') diff --git a/tests/match/match-method.test.js b/tests/match/match-method.test.js index 0ba2ce969..612a2d23c 100644 --- a/tests/match/match-method.test.js +++ b/tests/match/match-method.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('match-methods:', function(t) { +test('match-methods:', function (t) { let arr = [ ['@hasComma bravery', 'truth, bravery'], ['spencer @hasPeriod', 'spencer did.'], @@ -24,7 +24,7 @@ test('match-methods:', function(t) { t.end() }) -test('match @functions', function(t) { +test('match @functions', function (t) { let doc = nlp(`jamie's much, much better.`) let m = doc.match('@hasComma') diff --git a/tests/match/match-tricky.test.js b/tests/match/match-tricky.test.js index 0a761295e..a8871d459 100644 --- a/tests/match/match-tricky.test.js +++ b/tests/match/match-tricky.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('fancy match', function(t) { +test('fancy match', function (t) { let arr = [ //misc ['doug is good', '', 0], @@ -100,18 +100,15 @@ test('fancy match', function(t) { ['the canadian senate', 'the (united states|canadian) senate', 3], ['the canadian senate', '(canadian|united states|british)', 1], ] - arr.forEach(function(a) { - const r = - nlp(a[0]) - .match(a[1]) - .terms() || [] + arr.forEach(function (a) { + const r = nlp(a[0]).match(a[1]).terms() || [] const msg = "'" + a[0] + "' - - - '" + a[1] + "' - - got:" + r.length + ' want:' + a[2] t.equal(r.length, a[2], msg) }) t.end() }) -test('consecutive greedy cases', function(t) { +test('consecutive greedy cases', function (t) { let doc = nlp('one two') let m = doc.match('#Value #Value') t.equal(m.length, 1, 'consecutive-found one') @@ -137,13 +134,13 @@ test('consecutive greedy cases', function(t) { t.end() }) -test('tricky-case', function(t) { +test('tricky-case', function (t) { t.equal(nlp('Number II').has('Number II'), true, 'uppercase-match') t.equal(nlp('Number I').has('Number I'), true, 'uppercase-match') t.end() }) -test('post-process', function(t) { +test('post-process', function (t) { let doc = nlp(`jack is guarded end`) let m = doc.match('is guarded foo?$') t.equal(m.found, false, 'no end') @@ -154,7 +151,7 @@ test('post-process', function(t) { t.end() }) -test('text-as-input', function(t) { +test('text-as-input', function (t) { const doc = nlp('he is from Phoenix AZ') const m = doc.match('#City') const matchWith = doc.match(m).out('normal') @@ -164,7 +161,7 @@ test('text-as-input', function(t) { t.end() }) -test('anchor-with-greedy', function(t) { +test('anchor-with-greedy', function (t) { const doc = nlp.tokenize('a a b b') let m = doc.match('^a a b b$') t.equal(m.found, true, 'simple anchors not found') diff --git a/tests/match/match.test.js b/tests/match/match.test.js index e94d2088e..348572a9d 100644 --- a/tests/match/match.test.js +++ b/tests/match/match.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('term-match :', function(t) { +test('term-match :', function (t) { let arr = [ ['quick', 'quick', true], ['Quick', 'Quick', true], @@ -11,7 +11,7 @@ test('term-match :', function(t) { ['quick', '(fun|nice|quick|cool)', true], ['quick', '(fun|nice|good)', false], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const m = nlp(a[0]).match(a[1]) const msg = a[0] + ' matches ' + a[1] + ' ' + a[2] t.equal(m.found, a[2], msg) @@ -19,7 +19,7 @@ test('term-match :', function(t) { t.end() }) -test('sentence-match:', function(t) { +test('sentence-match:', function (t) { let arr = [ ['the dog played', 'the dog', 'the dog'], ['the dog played', 'the dog played', 'the dog played'], @@ -71,7 +71,7 @@ test('sentence-match:', function(t) { //bugs // [`really remind me to buy`, '#Adverb? #Infinitive (me|us) (to|for)', `really remind me to`], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const m = nlp(a[0]).match(a[1]) if (!m.found) { t.equal(a[2], '', 'no-match: ' + a[0] + ' - -' + a[1]) @@ -83,7 +83,7 @@ test('sentence-match:', function(t) { t.end() }) -test('tag-match-tag :', function(t) { +test('tag-match-tag :', function (t) { const m = nlp('apple is cool') m.match(['apple', 'susan']).tag('Person') const p = m.match('#Person') diff --git a/tests/match/min-max.test.js b/tests/match/min-max.test.js index bf2d84866..1fe116337 100644 --- a/tests/match/min-max.test.js +++ b/tests/match/min-max.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('match min-max', function(t) { +test('match min-max', function (t) { let doc = nlp('hello1 one hello2').match('#Value{7,9}') t.equal(doc.out(), '', 'match was too short') diff --git a/tests/match/named-match.test.js b/tests/match/named-match.test.js index 11a69d72a..10912d15b 100644 --- a/tests/match/named-match.test.js +++ b/tests/match/named-match.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('named-match-overlap', function(t) { +test('named-match-overlap', function (t) { let doc = nlp('june the 5th, july the 7th, and sept the 12th.') let m = doc.match('[#Month]', 'month') @@ -13,7 +13,7 @@ test('named-match-overlap', function(t) { t.end() }) -test('named-match-or:', function(t) { +test('named-match-or:', function (t) { let arr = [ ['the dog played again', 'the [(#Noun|#Verb)] played [<0>(#Adverb)]', 'dog'], ['the dog played again', 'the [(#Noun|#Verb)] played [(#Adverb)]', 'dog'], @@ -21,10 +21,8 @@ test('named-match-or:', function(t) { ['the dog played', 'the [(#Noun)] played', 'dog'], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups('target') + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups('target') const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) @@ -33,7 +31,7 @@ test('named-match-or:', function(t) { t.end() }) -test('named-match-auto:', function(t) { +test('named-match-auto:', function (t) { let arr = [ ['the dog played', 'the [#Noun] played', 'dog'], ['the dog played', 'the [dog] played', 'dog'], @@ -44,7 +42,7 @@ test('named-match-auto:', function(t) { ['the big dog played', 'the big dog [played]', 'played'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]).match(a[1]) const res = doc.groups(0) @@ -56,14 +54,14 @@ test('named-match-auto:', function(t) { t.end() }) -test('named-match-auto-multi:', function(t) { +test('named-match-auto-multi:', function (t) { let arr = [ ['the dog played', 'the [#Noun] [played]', 'dog'], ['the dog played lots', 'the [dog] played [<0>lots]', 'dog lots'], ['the big dog played', 'the [big dog] [played]', 'big dog'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]).match(a[1]) const res = doc.groups(0) @@ -75,10 +73,8 @@ test('named-match-auto-multi:', function(t) { t.end() }) -test('named-match-group', function(t) { - const res = nlp('the dog played') - .match('the [#Noun] played') - .groups() +test('named-match-group', function (t) { + const res = nlp('the dog played').match('the [#Noun] played').groups() t.equal(res['type'].text(), 'dog') @@ -91,7 +87,7 @@ test('named-match-group', function(t) { t.end() }) -test('named-match-to-json:', function(t) { +test('named-match-to-json:', function (t) { let arr = [ [ 'the dog played', @@ -130,7 +126,7 @@ test('named-match-to-json:', function(t) { ], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]).match(a[1]) const res = doc.groups() @@ -146,7 +142,7 @@ test('named-match-to-json:', function(t) { t.end() }) -test('named-match-overlap', function(t) { +test('named-match-overlap', function (t) { const arr = [ { input: 'the big dog played', @@ -158,25 +154,19 @@ test('named-match-overlap', function(t) { }, ] - arr.forEach(a => - a.run( - nlp(a.input) - .match(a.match) - .groups() - ) - ) + arr.forEach(a => a.run(nlp(a.input).match(a.match).groups())) t.end() }) -test('named-object-match-quick:', function(t) { +test('named-object-match-quick:', function (t) { let arr = [ ['the dog played', [{ word: 'the' }, { tag: 'Noun', named: 'target' }, { word: 'played' }], 'dog'], ['the dog played', [{ word: 'dog', named: 'target' }], 'dog'], ['the dog played', [{ tag: 'Verb', named: 'target' }], 'played'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]).match(a[1], 'target') const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] @@ -186,17 +176,15 @@ test('named-object-match-quick:', function(t) { t.end() }) -test('named-object-match:', function(t) { +test('named-object-match:', function (t) { let arr = [ ['the dog played', [{ word: 'the' }, { tag: 'Noun', named: 'target' }, { word: 'played' }], 'dog'], ['the dog played', [{ word: 'dog', named: 'target' }], 'dog'], ['the dog played', [{ tag: 'Verb', named: 'target' }], 'played'], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups('target') + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups('target') const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) @@ -205,7 +193,7 @@ test('named-object-match:', function(t) { t.end() }) -test('named-object-match-target:', function(t) { +test('named-object-match-target:', function (t) { let arr = [ ['the dog played', [{ word: 'the' }, { tag: 'Noun', named: 'target' }, { word: 'played' }], 'dog'], ['the dog played', [{ word: 'dog', named: 'target' }], 'dog'], @@ -216,10 +204,8 @@ test('named-object-match-target:', function(t) { ['the dog played', [{ tag: 'Verb', named: 'not-target' }], ''], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups('target') + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups('target') const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) @@ -228,7 +214,7 @@ test('named-object-match-target:', function(t) { t.end() }) -test('named-object-match-number:', function(t) { +test('named-object-match-number:', function (t) { let arr = [ ['the dog played', [{ word: 'the' }, { tag: 'Noun', named: '0' }, { word: 'played' }], 'dog'], ['the dog played', [{ word: 'the' }, { tag: 'Noun', named: 0 }, { word: 'played' }], 'dog'], @@ -240,10 +226,8 @@ test('named-object-match-number:', function(t) { ['the dog played', [{ tag: 'Verb', named: 1 }], ''], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups(0) + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups(0) const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) @@ -252,7 +236,7 @@ test('named-object-match-number:', function(t) { t.end() }) -test('named-match:', function(t) { +test('named-match:', function (t) { let arr = [ ['the dog played', 'the [#Noun] played', 'dog'], ['the dog played', 'the [dog] played', 'dog'], @@ -261,10 +245,8 @@ test('named-match:', function(t) { ['the dog played', 'the dog [#Verb]', 'played'], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups('target') + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups('target') const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) @@ -273,7 +255,7 @@ test('named-match:', function(t) { t.end() }) -test('named-match-target:', function(t) { +test('named-match-target:', function (t) { let arr = [ ['the dog played', 'the [#Noun] played', 'dog'], ['the dog played', 'the [dog] played', 'dog'], @@ -284,10 +266,8 @@ test('named-match-target:', function(t) { ['the big dog played', 'the [big dog] played', ''], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups('target') + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups('target') const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) @@ -296,7 +276,7 @@ test('named-match-target:', function(t) { t.end() }) -test('named-match-number:', function(t) { +test('named-match-number:', function (t) { let arr = [ ['the dog played', 'the [<0>#Noun] played', 'dog'], ['the dog played', 'the [<0>dog] played', 'dog'], @@ -307,10 +287,8 @@ test('named-match-number:', function(t) { ['the big dog played', 'the [<1>big dog] played', ''], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .match(a[1]) - .groups(0) + arr.forEach(function (a) { + const doc = nlp(a[0]).match(a[1]).groups(0) const msg = a[0] + ' matches ' + JSON.stringify(a[1]) + ' ' + a[2] t.equal(doc.text(), a[2], msg) diff --git a/tests/match/named-multi.test.js b/tests/match/named-multi.test.js index 9bd75fe1d..c117e8211 100644 --- a/tests/match/named-multi.test.js +++ b/tests/match/named-multi.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('two named matches', function(t) { +test('two named matches', function (t) { let m = nlp('the big dog played').match('the [#Adjective] [#Noun] played') t.equal(m.groups('size').text(), 'big', 'one-size') t.equal(m.groups('animal').text(), 'dog', 'one-animal') @@ -20,7 +20,7 @@ test('two named matches', function(t) { t.end() }) -test('two named - two results', function(t) { +test('two named - two results', function (t) { let doc = nlp('june the 5th and july the 7th') let m = doc.match('[#Month] the [#Value]') //by object @@ -44,7 +44,7 @@ test('two named - two results', function(t) { t.end() }) -test('one named - three results', function(t) { +test('one named - three results', function (t) { let doc = nlp('june the 5th, july the 7th, and sept the 12th.') let m = doc.match('[#Month]') //by object diff --git a/tests/match/named-silent.test.js b/tests/match/named-silent.test.js index 74c2b9f97..f7232695f 100644 --- a/tests/match/named-silent.test.js +++ b/tests/match/named-silent.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('capture groups silent by default', function(t) { +test('capture groups silent by default', function (t) { let m = nlp('one two three four five six seven').match('one [two] [three four five] six [seven]') t.equal(m.group(0).text(), 'two', 'group of 1') @@ -13,7 +13,7 @@ test('capture groups silent by default', function(t) { // same behaviour as regex capture-groups: // 'one two three four'.match(/one (?two) three/) -test('capture groups silent by default', function(t) { +test('capture groups silent by default', function (t) { let doc = nlp.tokenize('one two three four') let m = doc.match('one [two] three') t.equal(m.text(), 'one two three', 'full-response-1') @@ -23,7 +23,7 @@ test('capture groups silent by default', function(t) { t.end() }) -test('named groups silent by default', function(t) { +test('named groups silent by default', function (t) { let doc = nlp.tokenize('one two three four') let m = doc.match('one [two] three') t.equal(m.text(), 'one two three', 'full-response-named-1') @@ -33,7 +33,7 @@ test('named groups silent by default', function(t) { t.end() }) -test('unnamed capture groups found', function(t) { +test('unnamed capture groups found', function (t) { let doc = nlp.tokenize('one two three four') let m = doc.match('one [two] three') t.equal(m.groups(0).text(), 'two', 'unnamed-found-single-0') @@ -50,7 +50,7 @@ test('unnamed capture groups found', function(t) { t.end() }) -test('capture groups match-shorthand', function(t) { +test('capture groups match-shorthand', function (t) { let doc = nlp.tokenize('one two three four') let m = doc.match('one [two] three', 0) t.equal(m.text(), 'two', 'match-0') diff --git a/tests/match/not.test.js b/tests/match/not.test.js index 98fd3c725..95c27f323 100644 --- a/tests/match/not.test.js +++ b/tests/match/not.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('not-basic :', function(t) { +test('not-basic :', function (t) { let m = nlp('spencer is really cool').not('brown') t.equal(m.out('text'), 'spencer is really cool', 'missing-not') t.equal(m.length, 1, 'one-result') @@ -33,7 +33,7 @@ test('not-basic :', function(t) { t.end() }) -test('not-from-array :', function(t) { +test('not-from-array :', function (t) { let m = nlp('spencer is really cool').not(['spencer']) t.equal(m.out('normal'), 'is really cool', 'not-spencer') t.equal(m.length, 1, 'one-results') diff --git a/tests/match/or-operand.test.js b/tests/match/or-operand.test.js index ebdb8d45c..c0fe95a21 100644 --- a/tests/match/or-operand.test.js +++ b/tests/match/or-operand.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('or-match-basic', function(t) { +test('or-match-basic', function (t) { let doc = nlp('toronto and montreal. Sydney and Paris') let m = doc.match('(#Place | and )') t.equal(m.out(), 'toronto and montreal. Sydney and Paris', 'whitespace-or') diff --git a/tests/match/prefix.test.js b/tests/match/prefix.test.js index c6f61d3a0..df125db9d 100644 --- a/tests/match/prefix.test.js +++ b/tests/match/prefix.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('prefix/infix/suffix basic', function(t) { +test('prefix/infix/suffix basic', function (t) { let r = nlp('it is funny and weird') let m = r.match('/nny$/') t.equal(m.out('normal'), 'funny', 'suffix-match') diff --git a/tests/match/regex.test.js b/tests/match/regex.test.js index 1ea81af72..312bd4ce2 100644 --- a/tests/match/regex.test.js +++ b/tests/match/regex.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('regex-match:', function(t) { +test('regex-match:', function (t) { let doc = nlp('it is waaaay cool') let m = doc.match('/aaa/') t.equal(m.out('normal'), 'waaaay', 'basic-match') diff --git a/tests/match/remove.test.js b/tests/match/remove.test.js index 5b64e391e..b8c39a942 100644 --- a/tests/match/remove.test.js +++ b/tests/match/remove.test.js @@ -1,35 +1,23 @@ const test = require('tape') const nlp = require('../_lib') -test('remove-basic :', function(t) { - let m = nlp('the brown cat played') - .match('brown') - .delete() - .all() +test('remove-basic :', function (t) { + let m = nlp('the brown cat played').match('brown').delete().all() t.equal(m.out('text'), 'the cat played', 'brown-cat') - m = nlp('the nice brown cat played') - .match('nice brown') - .delete() - .all() + m = nlp('the nice brown cat played').match('nice brown').delete().all() t.equal(m.out('text'), 'the cat played', 'nice-brown') - m = nlp('the nice brown cat played') - .match('#Adjective') - .delete() - .all() + m = nlp('the nice brown cat played').match('#Adjective').delete().all() t.equal(m.out('text'), 'the cat played', 'adj-each') - m = nlp('the nice brown cat played') - .match('#Adjective+') - .delete() - .all() + m = nlp('the nice brown cat played').match('#Adjective+').delete().all() t.equal(m.out('text'), 'the cat played', 'adj-consecutive') t.end() }) -test('remove-match :', function(t) { +test('remove-match :', function (t) { let m = nlp('the brown cat played').delete('brown') t.equal(m.out('text'), 'the cat played', 'brown-cat') @@ -48,21 +36,14 @@ test('remove-match :', function(t) { t.end() }) -test('remove-logic :', function(t) { - let m = nlp('spencer kelly is here') - .match('spencer kelly') - .delete('spencer') +test('remove-logic :', function (t) { + let m = nlp('spencer kelly is here').match('spencer kelly').delete('spencer') t.equal(m.out('normal'), 'kelly', 'remove(reg) returns this') - m = nlp('spencer kelly is here') - .match('spencer kelly') - .delete() - .all() + m = nlp('spencer kelly is here').match('spencer kelly').delete().all() t.equal(m.out('normal'), 'is here', 'remove() returns parent') - m = nlp('spencer kelly is here') - .match('spencer kelly') - .delete('notfound') + m = nlp('spencer kelly is here').match('spencer kelly').delete('notfound') t.equal(m.out('normal'), 'spencer kelly', 'remove(notfound) returns this') t.end() }) diff --git a/tests/match/soft-match.test.js b/tests/match/soft-match.test.js index 33b19b7f4..1a5f8bf9c 100644 --- a/tests/match/soft-match.test.js +++ b/tests/match/soft-match.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('soft-match', function(t) { +test('soft-match', function (t) { let doc = nlp(`a priest walked into the bars`) doc.cache({ root: true }) t.equal(doc.match('bars').found, true, 'found bars') diff --git a/tests/match/syntax.test.js b/tests/match/syntax.test.js index 0e02798dc..630eefa95 100644 --- a/tests/match/syntax.test.js +++ b/tests/match/syntax.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('negative parentheses', function(t) { +test('negative parentheses', function (t) { let doc = nlp.tokenize('if he does. does he?') let m = doc.if('!^(if|cool)') t.equals(m.out('normal'), 'does he?', 'negative-start') @@ -20,7 +20,7 @@ test('negative parentheses', function(t) { t.end() }) -test('start-end parentheses', function(t) { +test('start-end parentheses', function (t) { let doc = nlp("matt does but matthew doesn't") let m = doc.match('^(/matt/|frank) .') t.equals(m.out('normal'), 'matt does', 'choice-start') diff --git a/tests/multiTag.test.js b/tests/multiTag.test.js index 93ccc46ba..8b92534e5 100644 --- a/tests/multiTag.test.js +++ b/tests/multiTag.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('tag-sequence:', function(t) { +test('tag-sequence:', function (t) { const doc = nlp('it was cold') doc.tag('#One #Two #Three') t.equal(doc.match('#One').text(), 'it', 'one') @@ -10,7 +10,7 @@ test('tag-sequence:', function(t) { t.end() }) -test('multiple-tags:', function(t) { +test('multiple-tags:', function (t) { const doc = nlp('it was cold') doc.tag(['#One', '#Two', '#Three']) t.equal(doc.match('#One').text(), 'it was cold', 'multi- all have #One') @@ -19,7 +19,7 @@ test('multiple-tags:', function(t) { t.end() }) -test('tag-sequence-skip:', function(t) { +test('tag-sequence-skip:', function (t) { const doc = nlp('it was cold') doc.tag('#One . #Three') t.equal(doc.match('#One').text(), 'it', 'one') @@ -29,7 +29,7 @@ test('tag-sequence-skip:', function(t) { t.end() }) -test('multiple-tags-skip:', function(t) { +test('multiple-tags-skip:', function (t) { const doc = nlp('it was cold') doc.tag(['.', '#Two', '.']) t.equal(doc.match('#One').found, false, 'skip - none have #One') diff --git a/tests/nouns/adjectives.test.js b/tests/nouns/adjectives.test.js index fe1d18ed2..744c64db7 100644 --- a/tests/nouns/adjectives.test.js +++ b/tests/nouns/adjectives.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('.adjectives():', function(t) { +test('.adjectives():', function (t) { let doc = nlp('the really cute cat') let m = doc.nouns().adjectives() t.equal(m.text(), 'cute', 'cute .') @@ -15,15 +15,9 @@ test('.adjectives():', function(t) { t.equal(m.text(), 'mean', 'who was really .') doc = nlp('the cat that was mean attacked the cute dog') - m = doc - .nouns(0) - .nouns() - .adjectives() + m = doc.nouns(0).nouns().adjectives() t.equal(m.text(), 'mean', 'first-noun') - m = doc - .nouns(1) - .nouns() - .adjectives() + m = doc.nouns(1).nouns().adjectives() t.equal(m.text(), 'cute', 'second-noun') t.end() diff --git a/tests/nouns/article.test.js b/tests/nouns/article.test.js index 3afad7ea6..e0317a1a1 100644 --- a/tests/nouns/article.test.js +++ b/tests/nouns/article.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('.article():', function(t) { +test('.article():', function (t) { let arr = [ ['duck', 'a'], ['eavesdropper', 'an'], @@ -16,25 +16,22 @@ test('.article():', function(t) { ['John Smith', ''], ['Tony Danza', ''], ] - arr.forEach(function(a) { - const o = nlp(a[0]) - .tag('Noun') - .nouns() - .json()[0] + arr.forEach(function (a) { + const o = nlp(a[0]).tag('Noun').nouns().json()[0] const msg = a[0] + ' -> ' + o.article t.equal(o.article, a[1], msg) }) t.end() }) -test('remove article', function(t) { +test('remove article', function (t) { let doc = nlp(`i ate a red apple`) doc.nouns().toPlural(true) t.equal(doc.text(), 'i ate red apples', 'remove article') t.end() }) -test('add article', function(t) { +test('add article', function (t) { let doc = nlp(`i ate red apples`) doc.nouns().toSingular(true) t.equal(doc.text(), 'i ate a red apple', 'add article') diff --git a/tests/nouns/misc.test.js b/tests/nouns/misc.test.js index df936d3bf..6848c564f 100644 --- a/tests/nouns/misc.test.js +++ b/tests/nouns/misc.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('misc nouns', function(t) { +test('misc nouns', function (t) { let doc = nlp(`quickly, suddenly`) t.equal(doc.nouns().length, 0, 'found no nouns') diff --git a/tests/nouns/possessive.test.js b/tests/nouns/possessive.test.js index 4ec3a0977..a661cd4cf 100644 --- a/tests/nouns/possessive.test.js +++ b/tests/nouns/possessive.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('.toPossessive():', function(t) { +test('.toPossessive():', function (t) { let arr = [ ['duck', `duck's`], ['eavesdropper', `eavesdropper's`], @@ -14,10 +14,8 @@ test('.toPossessive():', function(t) { // ['she', 'hers'], ['peaches', `peaches'`], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .nouns() - .toPossessive() + arr.forEach(function (a) { + const doc = nlp(a[0]).nouns().toPossessive() t.equal(doc.out(), a[1], a[0]) }) t.end() diff --git a/tests/output/fromJSON.test.js b/tests/output/fromJSON.test.js index 0572831b5..c64477821 100644 --- a/tests/output/fromJSON.test.js +++ b/tests/output/fromJSON.test.js @@ -2,7 +2,7 @@ const test = require('tape') const nlp = require('../_lib') // do an elaborate comparison between json objects -const isEqual = function(a, b, t) { +const isEqual = function (a, b, t) { let jsonA = a.json() let jsonB = b.json() t.equal(a.length, b.length, 'same length') @@ -19,7 +19,7 @@ const isEqual = function(a, b, t) { }) } -test('fromJSON - minimum', function(t) { +test('fromJSON - minimum', function (t) { let json = [ { terms: [ @@ -40,21 +40,21 @@ test('fromJSON - minimum', function(t) { t.end() }) -test('fromJSON - basic', function(t) { +test('fromJSON - basic', function (t) { let a = nlp('All my life I’ve had one dream - to accomplish my many goals.') let b = nlp.fromJSON(a.json()) isEqual(a, b, t) t.end() }) -test('fromJSON() contraction', function(t) { +test('fromJSON() contraction', function (t) { let a = nlp('I’ve had one dream.') let b = nlp.fromJSON(a.json()) isEqual(a, b, t) t.end() }) -test('fromJSON output - longer', function(t) { +test('fromJSON output - longer', function (t) { let str = `OK... First I'll access the secret military spy satelite that is in geosynchronous orbit over the midwest. Then I'll ID the limo by the vanity plate "MR. BIGGG" and get his approximate position. Then I'll reposition the transmission dish on the remote truck to 17.32 degrees east, hit WESTAR 4 over the Atlantic, bounce the signal back into the aerosphere up to COMSAT 6, beam it back to SATCOM 2 transmitter number 137 and down on the dish on the back of Mr. Big's limo... It's almost too easy.` let a = nlp(str) let b = nlp.fromJSON(a.json()) diff --git a/tests/output/json.test.js b/tests/output/json.test.js index fc6474704..1ea0af5f9 100644 --- a/tests/output/json.test.js +++ b/tests/output/json.test.js @@ -47,7 +47,7 @@ test('json out implicit', function (t) { }) test('json terms out', function (t) { - let doc = nlp(`she is not`) + let doc = nlp(`she was not`) let json = doc.json({ text: false, terms: { clean: true, id: true, bestTag: true, whitespace: true } }) t.equal(json.length, 1, 'json-len') t.equal(json[0].text, undefined, 'json-text') diff --git a/tests/output/offset.test.js b/tests/output/offset.test.js index fa475ec76..034b288c3 100644 --- a/tests/output/offset.test.js +++ b/tests/output/offset.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('offset-whitespace', function(t) { +test('offset-whitespace', function (t) { let doc = nlp(`one two two more `) let m = doc.match('two') @@ -22,7 +22,7 @@ test('offset-whitespace', function(t) { t.end() }) -test('offset-punctuation', function(t) { +test('offset-punctuation', function (t) { let doc = nlp(`one (two two) more `) let m = doc.match('two two') let obj = m.json({ offset: true, terms: false })[0] @@ -38,8 +38,7 @@ test('offset-punctuation', function(t) { t.end() }) - -test('offset-terms', function(t) { +test('offset-terms', function (t) { let doc = nlp(`hello world`) let obj = doc.json({ offset: true, terms: true })[0] @@ -55,7 +54,7 @@ test('offset-terms', function(t) { t.end() }) -test('offset-terms-whitespace', function(t) { +test('offset-terms-whitespace', function (t) { let doc = nlp(` hello world`) let obj = doc.json({ offset: true, terms: true })[0] @@ -71,7 +70,7 @@ test('offset-terms-whitespace', function(t) { t.end() }) -test('offset-terms-punctuation', function(t) { +test('offset-terms-punctuation', function (t) { let doc = nlp(`"hello world`) let obj = doc.json({ offset: true, terms: true })[0] diff --git a/tests/output/out.test.js b/tests/output/out.test.js index 696923fad..60da8766f 100644 --- a/tests/output/out.test.js +++ b/tests/output/out.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('out-tags', function(t) { +test('out-tags', function (t) { let out = nlp(`he's cool.`).out('tags') t.equal(out.length, 1, 'one sentence') t.equal(out[0].he.indexOf('Pronoun') !== -1, true, 'has he:Pronoun') @@ -9,7 +9,7 @@ test('out-tags', function(t) { t.equal(out[0].cool.indexOf('Adjective') !== -1, true, 'has cool:Adjective') t.end() }) -test('out-topk', function(t) { +test('out-topk', function (t) { let doc = nlp(`What'd I say? Monorail. What's it called? Monorail.`) let out = doc.out('freq') t.equal(out.length, 3, 'three results') diff --git a/tests/output/text.test.js b/tests/output/text.test.js index f469fd770..e3d51a971 100644 --- a/tests/output/text.test.js +++ b/tests/output/text.test.js @@ -1,13 +1,13 @@ const test = require('tape') const nlp = require('../_lib') -test('text-formats', function(t) { +test('text-formats', function (t) { let doc = nlp(`Toronto's citizens LOVE toronto! they come here for food.`) t.equal(doc.text('normal'), `toronto's citizens love toronto! they come here for food.`, 'normal') t.end() }) -test('text(normal):', function(t) { +test('text(normal):', function (t) { let arr = [ ['he is good', 'he is good'], ['Jack and Jill went up the hill.', 'jack and jill went up the hill.'], @@ -23,14 +23,14 @@ test('text(normal):', function(t) { ['Dr. John Smith-McDonald', 'dr john smith mcdonald'], ['Contains no fruit juice. \n\n All rights reserved', 'contains no fruit juice. all rights reserved'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const str = nlp(a[0]).text('normal') t.equal(str, a[1], a[0]) }) t.end() }) -test('text-text', function(t) { +test('text-text', function (t) { const str = `My dog LOVES pizza, and grapes!!` let doc = nlp(str) @@ -41,7 +41,7 @@ test('text-text', function(t) { t.end() }) -test('text-normal', function(t) { +test('text-normal', function (t) { let doc = nlp(`My dog LOVES pizza, and grapes!!`) const str = 'my dog loves pizza, and grapes!' @@ -55,7 +55,7 @@ test('text-normal', function(t) { t.end() }) -test('text-reduced', function(t) { +test('text-reduced', function (t) { let doc = nlp(`My dog LOVES pizza, and grapes!!`) const str = 'my dog loves pizza and grapes' @@ -71,7 +71,7 @@ test('text-reduced', function(t) { t.end() }) -test('text-root', function(t) { +test('text-root', function (t) { let doc = nlp(`My dog LOVES pizza, and grapes!!`) const str = 'my dog love pizza and grape' diff --git a/tests/places.test.js b/tests/places.test.js index a7cec26c7..99412ae2d 100644 --- a/tests/places.test.js +++ b/tests/places.test.js @@ -1,22 +1,20 @@ const test = require('tape') const nlp = require('./_lib') -test('known-regions:', function(t) { +test('known-regions:', function (t) { let arr = [ ['i want to go to Ohio to see George Harrison', 'ohio'], ['we are visiting Gloucestershire, before we leave', 'gloucestershire'], ['manitoba is nice this time of year', 'manitoba'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .match('#Region') - .text('normal') + arr.forEach(function (a) { + const str = nlp(a[0]).match('#Region').text('normal') t.equal(str, a[1], a[0]) }) t.end() }) -test('unknown-places:', function(t) { +test('unknown-places:', function (t) { let arr = [ ['live in the Rekcjd Province', 'rekcjd province'], ['live in the Lekfjs District', 'lekfjs district'], @@ -26,16 +24,14 @@ test('unknown-places:', function(t) { ['see you in western Hunan', 'western hunan'], ['see you in Northern Hunan province', 'northern hunan province'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .places(0) - .text('normal') + arr.forEach(function (a) { + const str = nlp(a[0]).places(0).text('normal') t.equal(str, a[1], a[0]) }) t.end() }) -test('mixed continents-places:', function(t) { +test('mixed continents-places:', function (t) { const doc = nlp('in north africa, eastern asia, guatemala, europe, north america, and japan') t.equal(doc.places().length, 6, '6-places') t.end() diff --git a/tests/plugin/addTags.test.js b/tests/plugin/addTags.test.js index d23ee83d5..09aa26d88 100644 --- a/tests/plugin/addTags.test.js +++ b/tests/plugin/addTags.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('tagset-change-isA-basic', function(t) { +test('tagset-change-isA-basic', function (t) { nlp.extend((Doc, world) => { world.addTags({ Doctor: { @@ -32,7 +32,7 @@ test('tagset-change-isA-basic', function(t) { t.end() }) -test('tagset-change-isA', function(t) { +test('tagset-change-isA', function (t) { nlp.extend((Doc, world) => { world.addTags({ Doctor: { @@ -54,7 +54,7 @@ test('tagset-change-isA', function(t) { t.end() }) -test('tagset-remove-downward', function(t) { +test('tagset-remove-downward', function (t) { nlp.extend((Doc, world) => { world.addTags({ Doctor: { @@ -80,7 +80,7 @@ test('tagset-remove-downward', function(t) { t.end() }) -test('tagset-remove-half-downward', function(t) { +test('tagset-remove-half-downward', function (t) { nlp.extend((Doc, world) => { world.addTags({ Doctor: { @@ -101,3 +101,39 @@ test('tagset-remove-half-downward', function(t) { t.ok(doc.has('#Surgeon') === false, 'Surgeon-tag-gone') t.end() }) + +test('tagset-tree', function (t) { + nlp.extend((_, world) => { + world.addTags({ + One: {}, + Two: {}, + Three: { isA: 'Two' }, + }) + }) + let doc = nlp(`have fun in toronto`, { toronto: 'Three' }) + let m = doc.match('toronto') + t.ok(m.has('#Three'), 'three') + t.ok(m.has('#Two'), 'two') + t.equal(m.has('#One'), false, 'no one') + t.equal(m.has('#Adjective'), false, 'no Adjective') + t.end() +}) + +test('tagset-tree-array', function (t) { + nlp.extend((_, world) => { + world.addTags({ + One: {}, + Two: {}, + Three: { isA: ['Two', 'One', 'FirstName'] }, + }) + }) + let doc = nlp(`have fun in toronto`, { toronto: 'Three' }) + let m = doc.match('toronto') + t.ok(m.has('#Three'), 'three') + t.ok(m.has('#Two'), 'two') + t.ok(m.has('#One'), 'one') + t.ok(m.has('#FirstName'), 'FirstName') + t.ok(m.has('#Person'), 'Person') + t.ok(m.has('#Noun'), 'Noun') + t.end() +}) diff --git a/tests/plugin/addWords.test.js b/tests/plugin/addWords.test.js index ac5857e26..845b14609 100644 --- a/tests/plugin/addWords.test.js +++ b/tests/plugin/addWords.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('persistent-lexicon-change', function(t) { +test('persistent-lexicon-change', function (t) { let nlp2 = nlp.clone() let doc = nlp('he is marko') t.equal(doc.match('#Place+').length, 0, 'default-no-place') diff --git a/tests/plugin/clone.test.js b/tests/plugin/clone.test.js index 73e989783..0b30b0bde 100644 --- a/tests/plugin/clone.test.js +++ b/tests/plugin/clone.test.js @@ -1,29 +1,23 @@ const test = require('tape') const nlp = require('../_lib') -test('clone:', function(t) { +test('clone:', function (t) { const arr = [ 'he eats the alligator', 'Jumanji is the best move. He eats cheese.', 'Uperman is wayyyy better than batman!', ] - arr.forEach(function(str) { + arr.forEach(function (str) { let m = nlp(str) t.equal(m.out(), str, 'equals input - ' + m.out()) let up = m.clone().toUpperCase() t.notEqual(str, up.out(), 'neg not equal - ' + str) - let adv = m - .clone() - .match('#Verb') - .append('really') + let adv = m.clone().match('#Verb').append('really') t.notEqual(str, adv.out(), 'adv not equal - ' + str) - let rm = m - .clone() - .match('#Verb') - .delete('#Verb') + let rm = m.clone().match('#Verb').delete('#Verb') t.notEqual(str, rm.out(), 'rm not equal - ' + str) let tag = m.clone().tag('#Verb') diff --git a/tests/plugin/plugin.test.js b/tests/plugin/plugin.test.js index c9cbe1ef7..947bace81 100644 --- a/tests/plugin/plugin.test.js +++ b/tests/plugin/plugin.test.js @@ -1,9 +1,9 @@ const test = require('tape') const nlp = require('../_lib') -const myPlugin = function(Doc, world) { +const myPlugin = function (Doc, world) { /** add a method */ - Doc.prototype.beNice = function() { + Doc.prototype.beNice = function () { this.match('#Infinitive').prepend('kindly') return this } @@ -36,14 +36,14 @@ nlp.extend(myPlugin) // t.end() // }) -test('plugin adds a method', function(t) { +test('plugin adds a method', function (t) { let doc = nlp(`wash the floor`) doc.beNice() t.equal(doc.text(), 'kindly wash the floor', 'beNice method worked') t.end() }) -test('plugin adds a tag', function(t) { +test('plugin adds a tag', function (t) { let doc = nlp(`goofy`) t.equal(doc.has('#Adjective'), true, 'starts adjective') // random unknown tag @@ -57,7 +57,7 @@ test('plugin adds a tag', function(t) { t.end() }) -test('plugin adds words', function(t) { +test('plugin adds words', function (t) { let doc = nlp(`gonzo, minnie mouse and kermit the frog`) t.equal(doc.match('gonzo').has('#MaleName'), true, 'new word existing tag') t.equal(doc.match('gonzo').has('#Person'), true, 'new word implied tag') @@ -84,7 +84,7 @@ test('plugin adds words', function(t) { // t.end() // }) -test('extend-tagset-nested', function(t) { +test('extend-tagset-nested', function (t) { const tagSet = { Color: {}, OffWhite: { @@ -104,7 +104,7 @@ test('extend-tagset-nested', function(t) { t.end() }) -test('word-array to lex-string', function(t) { +test('word-array to lex-string', function (t) { nlp.extend((Doc, world) => { world.addWords({ mi: ['Possessive'], @@ -115,7 +115,7 @@ test('word-array to lex-string', function(t) { t.end() }) -test('basic-plugin', function(t) { +test('basic-plugin', function (t) { nlp.extend((Doc, world) => { world.addWords({ trex: 'Dinosaur', diff --git a/tests/possessives.test.js b/tests/possessives.test.js index f8712d660..a7d6d3317 100644 --- a/tests/possessives.test.js +++ b/tests/possessives.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('possessives tagger', function(t) { +test('possessives tagger', function (t) { const arr = [`Spencer's`, `Spencer Kelly's`, `Spencer C. Kelly's`, `Union Corp's`, `Los Angeles's`] arr.forEach(a => { const doc = nlp(a) @@ -12,7 +12,7 @@ test('possessives tagger', function(t) { t.end() }) -test('possessives strip', function(t) { +test('possessives strip', function (t) { const arr = [ [`Spencer's`, 'Spencer'], [`Corey Hart's`, 'Corey Hart'], diff --git a/tests/punctuation.test.js b/tests/punctuation.test.js index bededbb5e..ffd3dd358 100644 --- a/tests/punctuation.test.js +++ b/tests/punctuation.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('normalize elipses', function(t) { +test('normalize elipses', function (t) { const str = `[hello] spencęr…` const doc = nlp(str) t.equal(doc.text(), str, 'text out-1') @@ -9,7 +9,7 @@ test('normalize elipses', function(t) { t.end() }) -test('normalize question mark', function(t) { +test('normalize question mark', function (t) { const str = `hello, Spencęr???` const doc = nlp(str) t.equal(doc.text(), str, 'text out-2') @@ -17,14 +17,14 @@ test('normalize question mark', function(t) { t.end() }) -test('hyphenated', function(t) { +test('hyphenated', function (t) { let doc = nlp('and check this out! a walk-in microwave.') doc.hyphenated().deHyphenate() t.equal(doc.text(), 'and check this out! a walk in microwave.', 'dehyphenate') t.end() }) -test('normalize unicode', function(t) { +test('normalize unicode', function (t) { // const str = `• Spencęr & JOhn™ ⟨lmt⟩.` const str = ` Spencęr & JOhn™ ⟨lmt⟩.` const doc = nlp(str) @@ -33,7 +33,7 @@ test('normalize unicode', function(t) { t.end() }) -test('normalize quotes ', function(t) { +test('normalize quotes ', function (t) { const str = `،one’ «two» ‘three’ “four” 'five' "six."` const doc = nlp(str) t.equal(doc.text(), str, 'text out-3') @@ -41,21 +41,21 @@ test('normalize quotes ', function(t) { t.end() }) -test('toParentheses', function(t) { +test('toParentheses', function (t) { let doc = nlp(`you could still go to McGill, the Harvard of Canada!`) doc.match('the harvard of #Place').toParentheses() t.equal(doc.text(), 'you could still go to McGill, (the Harvard of Canada)!', 'toparentheses') t.end() }) -test('toQuotation', function(t) { +test('toQuotation', function (t) { let doc = nlp(`you could still go to McGill, the Harvard of Canada!`) doc.match('harvard of #Place').toQuotation() t.equal(doc.text(), 'you could still go to McGill, the "Harvard of Canada"!', 'toparentheses') t.end() }) -test('hasQuotation', function(t) { +test('hasQuotation', function (t) { let m = nlp(`seems to scream 'silence'`).match('@hasQuotation') t.equal(m.text(), 'silence', 'hasQuotation') diff --git a/tests/quotation-tag.test.js b/tests/quotation-tag.test.js index 5e513c5aa..5da2a2fed 100644 --- a/tests/quotation-tag.test.js +++ b/tests/quotation-tag.test.js @@ -2,13 +2,11 @@ const test = require('tape') const nlp = require('./_lib') function testAllQuotes(a, t) { - const str = nlp(a[0]) - .quotations() - .out('normal') + const str = nlp(a[0]).quotations().out('normal') t.equal(str, a[1], a[0]) } -test('quotation test:', function(t) { +test('quotation test:', function (t) { ;[ [`he is "really good"`, `really good`], [`he is "really good" i guess`, `really good`], @@ -16,16 +14,14 @@ test('quotation test:', function(t) { [`he is "completely and utterly great" i guess`, `completely and utterly great`], [`“quote”`, `quote`], [`“quote is here”`, `quote is here`], - ].forEach(function(a) { - const str = nlp(a[0]) - .quotations() - .out('normal') + ].forEach(function (a) { + const str = nlp(a[0]).quotations().out('normal') t.equal(str, a[1], a[0]) }) t.end() }) -test('Quotations - U+0022 to U+0022', function(t) { +test('Quotations - U+0022 to U+0022', function (t) { ;[ ['he is \u0022really good\u0022', 'really good'], ['he is \u0022really good\u0022 i guess', 'really good'], @@ -36,7 +32,7 @@ test('Quotations - U+0022 to U+0022', function(t) { t.end() }) -test('Quotations - U+FF02 to U+FF02', function(t) { +test('Quotations - U+FF02 to U+FF02', function (t) { ;[ ['he is \uFF02really good\uFF02', 'really good'], ['he is \uFF02really good\uFF02 i guess', 'really good'], @@ -47,7 +43,7 @@ test('Quotations - U+FF02 to U+FF02', function(t) { t.end() }) -test('Quotations - U+0027 to U+0027', function(t) { +test('Quotations - U+0027 to U+0027', function (t) { ;[ ['he is \u0027really good\u0027', 'really good'], ['he is \u0027really good\u0027 i guess', 'really good'], @@ -58,7 +54,7 @@ test('Quotations - U+0027 to U+0027', function(t) { t.end() }) // -test('Quotations - U+201C to U+201D', function(t) { +test('Quotations - U+201C to U+201D', function (t) { ;[ ['he is \u201Creally good\u201D', 'really good'], ['he is \u201Creally good\u201D i guess', 'really good'], @@ -69,7 +65,7 @@ test('Quotations - U+201C to U+201D', function(t) { t.end() }) -test('Quotations - U+2018 to U+2019', function(t) { +test('Quotations - U+2018 to U+2019', function (t) { ;[ ['he is \u2018really good\u2019', 'really good'], ['he is \u2018really good\u2019 i guess', 'really good'], @@ -80,7 +76,7 @@ test('Quotations - U+2018 to U+2019', function(t) { t.end() }) -test('Quotations - U+201F to U+201D', function(t) { +test('Quotations - U+201F to U+201D', function (t) { ;[ ['he is \u201Freally good\u201D', 'really good'], ['he is \u201Freally good\u201D i guess', 'really good'], @@ -91,7 +87,7 @@ test('Quotations - U+201F to U+201D', function(t) { t.end() }) -test('Quotations - U+201B to U+2019', function(t) { +test('Quotations - U+201B to U+2019', function (t) { ;[ ['he is \u201Breally good\u2019', 'really good'], ['he is \u201Breally good\u2019 i guess', 'really good'], @@ -102,7 +98,7 @@ test('Quotations - U+201B to U+2019', function(t) { t.end() }) -test('Quotations - U+201E to U+201D', function(t) { +test('Quotations - U+201E to U+201D', function (t) { ;[ ['he is \u201Ereally good\u201D', 'really good'], ['he is \u201Ereally good\u201D i guess', 'really good'], @@ -113,7 +109,7 @@ test('Quotations - U+201E to U+201D', function(t) { t.end() }) -test('Quotations - U+2E42 to U+201D', function(t) { +test('Quotations - U+2E42 to U+201D', function (t) { ;[ ['he is \u2E42really good\u201D', 'really good'], ['he is \u2E42really good\u201D i guess', 'really good'], @@ -124,7 +120,7 @@ test('Quotations - U+2E42 to U+201D', function(t) { t.end() }) -test('Quotations - U+201A to U+2019', function(t) { +test('Quotations - U+201A to U+2019', function (t) { ;[ ['he is \u201Areally good\u2019', 'really good'], ['he is \u201Areally good\u2019 i guess', 'really good'], @@ -135,7 +131,7 @@ test('Quotations - U+201A to U+2019', function(t) { t.end() }) -test('Quotations - U+00AB to U+00BB', function(t) { +test('Quotations - U+00AB to U+00BB', function (t) { ;[ ['he is \u00ABreally good\u00BB', 'really good'], ['he is \u00ABreally good\u00BB i guess', 'really good'], @@ -146,7 +142,7 @@ test('Quotations - U+00AB to U+00BB', function(t) { t.end() }) -test('Quotations - U+2039 to U+203A', function(t) { +test('Quotations - U+2039 to U+203A', function (t) { ;[ ['he is \u2039really good\u203A', 'really good'], ['he is \u2039really good\u203A i guess', 'really good'], @@ -157,7 +153,7 @@ test('Quotations - U+2039 to U+203A', function(t) { t.end() }) -test('Quotations - U+2035 to U+2032', function(t) { +test('Quotations - U+2035 to U+2032', function (t) { ;[ ['he is \u2035really good\u2032', 'really good'], ['he is \u2035really good\u2032 i guess', 'really good'], @@ -168,7 +164,7 @@ test('Quotations - U+2035 to U+2032', function(t) { t.end() }) -test('Quotations - U+2036 to U+2033', function(t) { +test('Quotations - U+2036 to U+2033', function (t) { ;[ ['he is \u2036really good\u2033', 'really good'], ['he is \u2036really good\u2033 i guess', 'really good'], @@ -179,7 +175,7 @@ test('Quotations - U+2036 to U+2033', function(t) { t.end() }) -test('Quotations - U+2037 to U+2034', function(t) { +test('Quotations - U+2037 to U+2034', function (t) { ;[ ['he is \u2037really good\u2034', 'really good'], ['he is \u2037really good\u2034 i guess', 'really good'], @@ -190,7 +186,7 @@ test('Quotations - U+2037 to U+2034', function(t) { t.end() }) -test('Quotations - U+301D to U+301E', function(t) { +test('Quotations - U+301D to U+301E', function (t) { ;[ ['he is \u301Dreally good\u301E', 'really good'], ['he is \u301Dreally good\u301E i guess', 'really good'], @@ -201,7 +197,7 @@ test('Quotations - U+301D to U+301E', function(t) { t.end() }) -test('Quotations - U+0060 to U+00B4', function(t) { +test('Quotations - U+0060 to U+00B4', function (t) { ;[ ['he is \u0060really good\u00B4', 'really good'], ['he is \u0060really good\u00B4 i guess', 'really good'], @@ -212,7 +208,7 @@ test('Quotations - U+0060 to U+00B4', function(t) { t.end() }) -test('Quotations - U+301F to U+301E', function(t) { +test('Quotations - U+301F to U+301E', function (t) { ;[ ['he is \u301Freally good\u301E', 'really good'], ['he is \u301Freally good\u301E i guess', 'really good'], diff --git a/tests/quotations.test.js b/tests/quotations.test.js index 3bc781a7d..b68a5ce00 100644 --- a/tests/quotations.test.js +++ b/tests/quotations.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('quotation test', function(t) { +test('quotation test', function (t) { const arr = [ ['so I said "nah forget it"', 'nah forget it'], ['so I said "nah, forget it" go home to bel-air!', 'nah, forget it'], @@ -18,7 +18,7 @@ test('quotation test', function(t) { // ["'twas 'good cookin'", 'twas good cookin'], [`and "Dig Your own grave and Save".`, 'dig your own grave and save'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const r = nlp(a[0]) const str = r.quotations().out('normal') const msg = a[0] + ' - ' + str diff --git a/tests/random.test.js b/tests/random.test.js index 4e58b5e61..67e6a1949 100644 --- a/tests/random.test.js +++ b/tests/random.test.js @@ -1,71 +1,41 @@ const test = require('tape') const nlp = require('./_lib') -test('random', function(t) { +test('random', function (t) { const r = nlp('one two three four five six') - let arr = r - .terms() - .random() - .out('array') + let arr = r.terms().random().out('array') t.equal(arr.length, 1, 'default is size 1') - arr = r - .terms() - .random(2) - .out('array') + arr = r.terms().random(2).out('array') t.equal(arr.length, 2, 'size 2') - arr = r - .terms() - .random(3) - .out('array') + arr = r.terms().random(3).out('array') t.equal(arr.length, 3, 'size 3') - arr = r - .terms() - .random(4) - .out('array') + arr = r.terms().random(4).out('array') t.equal(arr.length, 4, 'size 4') - arr = r - .terms() - .random(5) - .out('array') + arr = r.terms().random(5).out('array') t.equal(arr.length, 5, 'size 5') - arr = r - .terms() - .random(6) - .out('array') + arr = r.terms().random(6).out('array') t.equal(arr.length, 6, 'size 6') - arr = r - .terms() - .random(7) - .out('array') + arr = r.terms().random(7).out('array') t.equal(arr.length, 6, '7 is too big') - arr = r - .terms() - .random(17) - .out('array') + arr = r.terms().random(17).out('array') t.equal(arr.length, 6, '17 is too big') t.end() }) -test('random-null', function(t) { +test('random-null', function (t) { const r = nlp('toronto') - let arr = r - .match('#Person') - .random(5) - .out('array') + let arr = r.match('#Person').random(5).out('array') t.equal(arr.length, 0, 'random can be empty') - arr = r - .match('#Place+') - .random(5) - .out('array') + arr = r.match('#Place+').random(5).out('array') t.equal(arr.length, 1, 'random can be full-match') t.end() }) diff --git a/tests/reduced.test.js b/tests/reduced.test.js index a708c3069..e4d8ec4f5 100644 --- a/tests/reduced.test.js +++ b/tests/reduced.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('reduced matches', function(t) { +test('reduced matches', function (t) { let doc = nlp(`the donkey's hotel`) t.equals(doc.has('donkey'), true, 'apostrophe-s') diff --git a/tests/remove.test.js b/tests/remove.test.js index 2d25adf54..da95ed264 100644 --- a/tests/remove.test.js +++ b/tests/remove.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('remove-everything-basic', function(t) { +test('remove-everything-basic', function (t) { let doc = nlp(`2pm`) doc.remove('#Time') t.equal(doc.text(), '', 'empty-text') @@ -13,7 +13,7 @@ test('remove-everything-basic', function(t) { t.end() }) -test('remove-everything-nested', function(t) { +test('remove-everything-nested', function (t) { let doc = nlp(`see term. term. term after.`) t.equal(doc.length, 3, 'start-3') diff --git a/tests/reservedwords.test.js b/tests/reservedwords.test.js index a808359db..51480b85d 100644 --- a/tests/reservedwords.test.js +++ b/tests/reservedwords.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('reserved words:', function(t) { +test('reserved words:', function (t) { const reserved = [ 'abstract', 'boolean', @@ -103,7 +103,7 @@ test('reserved words:', function(t) { t.end() }) -test('co-erce reserved words', function(t) { +test('co-erce reserved words', function (t) { const r = nlp('constructor prototype') r.tag('Verb') t.ok(r.match('#Verb').data(), 'runs tag/match') diff --git a/tests/sentence.test.js b/tests/sentence.test.js index 3d8b7466d..c040748b6 100644 --- a/tests/sentence.test.js +++ b/tests/sentence.test.js @@ -1,33 +1,24 @@ const test = require('tape') const nlp = require('./_lib') -test('get full sentence:', function(t) { +test('get full sentence:', function (t) { let doc = nlp('one two foo four five. i saw foo house. I ate a sandwhich. Foo was nice') let m = doc.match('foo') - let str = m - .eq(0) - .sentence() - .text() + let str = m.eq(0).sentence().text() t.equal(str, doc.sentences(0).text(), 'first-full-sentence') - str = m - .eq(1) - .sentence() - .text() + str = m.eq(1).sentence().text() t.equal(str, doc.sentences(1).text(), 'second-full-sentence') - str = m - .eq(2) - .sentence() - .text() + str = m.eq(2).sentence().text() t.equal(str, doc.sentences(3).text(), 'third-full-sentence') t.end() }) -test('get multiple-copies of one sentence:', function(t) { +test('get multiple-copies of one sentence:', function (t) { let doc = nlp('John Smith was cool. I am missing. Cindy Lauper and Carl Sagan here. I am also missing.') let m = doc.match('#Person+') let matches = m.sentences() diff --git a/tests/setTag.test.js b/tests/setTag.test.js index 1ecc6dd8b..976a35dad 100644 --- a/tests/setTag.test.js +++ b/tests/setTag.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('custom-tags-persist', function(t) { +test('custom-tags-persist', function (t) { let r = nlp('i am two years older now') let two = r.match('#Value').tag('#FunTag') two.replaceWith('never') @@ -40,7 +40,7 @@ test('custom-tags-persist', function(t) { t.end() }) -test('untag-soft', function(t) { +test('untag-soft', function (t) { let doc = nlp('$5.32') t.equal(doc.has('#Money'), true, 'had-money') doc.untag('#money') diff --git a/tests/slash.test.js b/tests/slash.test.js index 7611c16f4..d2425d9f9 100644 --- a/tests/slash.test.js +++ b/tests/slash.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('slash whitespace', function(t) { +test('slash whitespace', function (t) { let str = 'left his / her backpack ' let doc = nlp(str) t.equal(doc.out(), str, 'slash with normal spaces') @@ -16,7 +16,7 @@ test('slash whitespace', function(t) { t.end() }) -test('slash match', function(t) { +test('slash match', function (t) { let str = 'left his / her backpack ' let doc = nlp(str) t.equal(doc.has('his'), true, 'slash with normal spaces - his') diff --git a/tests/slashes.test.js b/tests/slashes.test.js index 119f54fee..6bbe069ae 100644 --- a/tests/slashes.test.js +++ b/tests/slashes.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('slashes-basic', function(t) { +test('slashes-basic', function (t) { let doc = nlp(`spencer is/was trying.`) t.equal(doc.terms().length, 3, 'three terms') t.equal(doc.match('#Person #Verb trying').found, true, 'verb trying') @@ -9,7 +9,7 @@ test('slashes-basic', function(t) { t.end() }) -test('slashes-complex', function(t) { +test('slashes-complex', function (t) { // doc = nlp(`spencer is/was trying`) // 1. doc.has('#PresentTense') == true (choose first) // 2. doc.has('#Verb') (only common tags) diff --git a/tests/smoke.test.js b/tests/smoke.test.js index 29733a0b5..6a1bc1f99 100644 --- a/tests/smoke.test.js +++ b/tests/smoke.test.js @@ -2,9 +2,9 @@ const test = require('tape') const nlp = require('./_lib') //make sure it can handle garbage inputs -test('garbage-inputs', function(t) { +test('garbage-inputs', function (t) { const garbage = ['', ' ', null, '\n\n', []] //{} - garbage.forEach(function(g, i) { + garbage.forEach(function (g, i) { let num = nlp(g).list.length let msg = typeof g + ' text input #' + i + ' ' + g t.equal(num, 0, msg) @@ -23,7 +23,7 @@ test('garbage-inputs', function(t) { t.end() }) -test('test-regex-safety', function(t) { +test('test-regex-safety', function (t) { let doc = nlp( '-5,999,666,454,234,523,233,234,234,234,234,234,234,234,999,929,838,234,234,234,234,234,234,234.00282828282838383838383838383838383838380' ) @@ -39,9 +39,9 @@ test('test-regex-safety', function(t) { t.end() }) -test('only-punctuation', function(t) { +test('only-punctuation', function (t) { const garbage = ['.', ' - ', '...', '?', '&', '?,', '\n. \n', '🎵', '\n🇵🇷\n', '🇵🇷.', `🇷 %`] - garbage.forEach(function(str) { + garbage.forEach(function (str) { let doc = nlp(str) t.equal(doc.text(), str, "text-'" + str + "'") }) diff --git a/tests/tagger/inline.test.js b/tests/tagger/inline.test.js index 03ccbfc75..e480c5d6d 100644 --- a/tests/tagger/inline.test.js +++ b/tests/tagger/inline.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('inline tagging linear:', function(t) { +test('inline tagging linear:', function (t) { let r = nlp('one two three four') r.match('one two three').tag('. #Person .') @@ -12,15 +12,15 @@ test('inline tagging linear:', function(t) { found = r.match('#FooBar').out('normal') t.equal(found, 'one', 'tag-skip-null') - r.match('two three').tag('#Two #Three #Four') - t.equal(r.match('#Two').out('normal'), 'two', 'two-is-two') - t.equal(r.match('#Three').out('normal'), 'three', 'three-is-three') - t.equal(r.match('#Four').out('normal'), '', 'four is ignored') + r.match('two three').tag('#TwoTag #ThreeTag #FourTag') + t.equal(r.match('#TwoTag').out('normal'), 'two', 'two-is-two') + t.equal(r.match('#ThreeTag').out('normal'), 'three', 'three-is-three') + t.equal(r.match('#FourTag').out('normal'), '', 'four is ignored') t.end() }) -test('compound tags from lexicon:', function(t) { +test('compound tags from lexicon:', function (t) { const doc = nlp('it was cold') const arr = doc.match('#Verb+') t.equal(arr.length, 1, 'one verb') diff --git a/tests/tagger/lexicon.test.js b/tests/tagger/lexicon.test.js index eba60544f..44265b945 100644 --- a/tests/tagger/lexicon.test.js +++ b/tests/tagger/lexicon.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('default lexicon:', function(t) { +test('default lexicon:', function (t) { let arr = [ ['great', 'Adjective'], ['walked', 'PastTense'], @@ -16,14 +16,14 @@ test('default lexicon:', function(t) { ['shanghai', 'City'], ['google', 'Organization'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]) t.equal(doc.has('#' + a[1]), true, a[0]) }) t.end() }) -test('root-in-lexicon:', function(t) { +test('root-in-lexicon:', function (t) { let arr = [ ['wash', 'Infinitive'], ['rewash', 'Infinitive'], @@ -44,14 +44,14 @@ test('root-in-lexicon:', function(t) { ['reconcile', 'Infinitive'], ['repeat', 'Infinitive'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]) t.equal(doc.has('#' + a[1]), true, a[0]) }) t.end() }) -test('adjusted lexicon:', function(t) { +test('adjusted lexicon:', function (t) { //place new words let lexicon = { geneva: 'Person', @@ -64,7 +64,7 @@ test('adjusted lexicon:', function(t) { ['he is lkjj', '#Pronoun #Copula #Adjective'], ['donkey kong wins the award', '#City #City #Verb #Determiner #Noun'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0], lexicon) t.equal(doc.has(a[1]), true, a[0]) }) @@ -86,7 +86,7 @@ test('adjusted lexicon:', function(t) { t.end() }) -test('tricky lexicon:', function(t) { +test('tricky lexicon:', function (t) { let lexicon = { 'bed bath and beyond': 'Organization', } diff --git a/tests/tagger/multi.test.js b/tests/tagger/multi.test.js index 336896972..6fdca1fd5 100644 --- a/tests/tagger/multi.test.js +++ b/tests/tagger/multi.test.js @@ -7,7 +7,7 @@ const lexicon = { Tobruk: 'Place', } -test('user-lex-with-hyphenation:', function(t) { +test('user-lex-with-hyphenation:', function (t) { const sentence = 'A suicide attack hit the centre of Jardas-al-Abid killing one person (and the attacker) and injuring more than twenty.' const found = nlp(sentence, lexicon).match('#Place+') @@ -16,7 +16,7 @@ test('user-lex-with-hyphenation:', function(t) { t.end() }) -test('user-lex-with-possessive form:', function(t) { +test('user-lex-with-possessive form:', function (t) { const sentence = "A suicide attack hit Jardas al Abid's center killing one person (and the attacker) and injuring more than twenty." const found = nlp(sentence, lexicon).match('#Place+') @@ -25,7 +25,7 @@ test('user-lex-with-possessive form:', function(t) { t.end() }) -test('user-lex-with-proper name in front:', function(t) { +test('user-lex-with-proper name in front:', function (t) { const sentence = "A suicide attack hit Lybia's Jardas al Abid city killing one person (and the attacker) and injuring more than twenty." const found = nlp(sentence, lexicon).match('#Place+') @@ -34,7 +34,7 @@ test('user-lex-with-proper name in front:', function(t) { t.end() }) -test('user-lex-with-punctuation:', function(t) { +test('user-lex-with-punctuation:', function (t) { const sentence = 'A suicide attack hit Jardas al Abid, which killed one person (and the attacker) and injured more than twenty.' const found = nlp(sentence, lexicon).match('#Place+') diff --git a/tests/tagger/number.test.js b/tests/tagger/number.test.js index 92ccb9f6c..dbeee21fd 100644 --- a/tests/tagger/number.test.js +++ b/tests/tagger/number.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('number-tag:', function(t) { +test('number-tag:', function (t) { let arr = [ ['16.125', 'Cardinal'], ['+160.125', 'Cardinal'], @@ -39,7 +39,7 @@ test('number-tag:', function(t) { ['$47.5bn', 'Money'], // ['1,000,000p', 'Cardinal'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { let doc = nlp(a[0]) t.equal(doc.has('#' + a[1]), true, a[0] + ' is #' + a[1]) }) diff --git a/tests/tagger/organization.test.js b/tests/tagger/organization.test.js index 472e1b617..ed0907782 100644 --- a/tests/tagger/organization.test.js +++ b/tests/tagger/organization.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('organization test', function(t) { +test('organization test', function (t) { const arr = [ 'google', 'google inc', @@ -15,7 +15,7 @@ test('organization test', function(t) { 'Johnson & Johnson', // 'Johnson & Johnson LLC', ] - arr.forEach(function(str) { + arr.forEach(function (str) { const r = nlp(str) const orgs = r.match('#Organization+') const msg = orgs.out('text') + ' - ' + str diff --git a/tests/tagger/penn.test.js b/tests/tagger/penn.test.js index f76be0f46..1be4a1ed3 100644 --- a/tests/tagger/penn.test.js +++ b/tests/tagger/penn.test.js @@ -6,20 +6,22 @@ const softMapping = { CC: 'Conjunction', CD: 'Cardinal', DT: 'Determiner', + EX: 'Noun', //'there' FW: 'Expression', IN: 'Preposition', JJ: 'Adjective', JJR: 'Comparative', JJS: 'Superlative', - MD: 'Verb', + MD: 'Modal', NN: 'Noun', - NNS: 'Noun', + NNS: 'Noun', //'Plural', NNP: 'Noun', NNPS: 'Noun', POS: 'Possessive', PRP: 'Pronoun', - PRP$: 'Pronoun', + PRP$: 'Possessive', RB: 'Adverb', + RP: 'Verb', //phrasal particle RBR: 'Comparative', RBS: 'Superlative', TO: 'Conjunction', @@ -32,30 +34,43 @@ const softMapping = { VBZ: 'Verb', // 3rd person singular present WDT: 'Determiner', WP: 'Pronoun', - WP$: 'Noun', + WP$: 'Possessive', WRB: 'Adverb', + PDT: 'Noun', //predeterminer + SYM: 'Noun', //symbol + NFP: 'Noun', // } -test('pennTreebank-test:', function(t) { +test('pennTreebank-test:', function (t) { penn.forEach((sentence, index) => { sentence.tags = sentence.tags.split(', ') let doc = nlp(sentence.text) - t.equal(doc.length, 1, 'one sentence #' + index) + let perfect = true + let msg = `'` + sentence.text.substr(0, 35) + `.. - ` + let terms = doc.json(0).terms - t.equal(terms.length, sentence.tags.length, 'tokenize#' + index) + if (doc.length !== 1) { + perfect = false + msg = 'one sentence #' + index + } + if (terms.length !== sentence.tags.length) { + perfect = false + msg = 'tokenize#' + index + } + // t.equal(doc.length, 1, 'one sentence #' + index) + // t.equal(terms.length, sentence.tags.length, 'tokenize#' + index) for (let i = 0; i < sentence.tags.length; i++) { const want = softMapping[sentence.tags[i]] - if (!terms[i]) { - t.ok(false, sentence.text) - return - } let found = terms[i].tags.some(tag => tag === want) - let msg = `'` + sentence.text.substr(0, 20) + `'.. - ` - msg += `'${terms[i].text}' missing #${want}` - t.equal(found, true, msg) + if (!found) { + perfect = false + msg += `'${terms[i].text}' has #${want}` + break + } } + t.ok(perfect, msg) }) t.end() }) diff --git a/tests/tagger/swears.test.js b/tests/tagger/swears.test.js index 7ef5198f9..73bab7784 100644 --- a/tests/tagger/swears.test.js +++ b/tests/tagger/swears.test.js @@ -2,7 +2,7 @@ const test = require('tape') const nlp = require('../_lib') //nsfw! -test('swears:', function(t) { +test('swears:', function (t) { let m = nlp('shit, i am tired').match('^#Expression') t.ok(m.found, 'swear-1') diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 8f9de7315..0db80c124 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -217,6 +217,12 @@ test('pos-basic-tag:', function (t) { [`slowly stunning`, ['Adverb', 'Verb']], [`quite awfully stunning`, ['Adverb', 'Adverb', 'Adjective']], [`quite awfully swimming`, ['Adverb', 'Adverb', 'Verb']], + ['is doing well', ['Copula', 'Gerund', 'Adverb']], + ['well, no.', ['Expression', 'Negative']], + ['he is well', ['Pronoun', 'Copula', 'Adjective']], + ['is well made', ['Copula', 'Adverb', 'Adjective']], + ['at some point', ['Preposition', 'Determiner', 'Noun']], + ['to a point', ['Conjunction', 'Determiner', 'Noun']], ] arr.forEach(function (a) { let terms = nlp(a[0]).json(0).terms diff --git a/tests/tagger/tense.test.js b/tests/tagger/tense.test.js index e95773188..e8d5bc957 100644 --- a/tests/tagger/tense.test.js +++ b/tests/tagger/tense.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('verb-tense-tag:', function(t) { +test('verb-tense-tag:', function (t) { let arr = [ //-ced ['lanced', 'PastTense'], @@ -81,7 +81,7 @@ test('verb-tense-tag:', function(t) { ['implied', 'PastTense'], ['rallied', 'PastTense'], ] - arr.forEach(function(a) { + arr.forEach(function (a) { let doc = nlp(a[0]) t.equal(doc.has('#' + a[1]), true, a[0]) }) diff --git a/tests/tagger/topics.test.js b/tests/tagger/topics.test.js index cdda8c892..b089df9b6 100644 --- a/tests/tagger/topics.test.js +++ b/tests/tagger/topics.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('proper-nouns', function(t) { +test('proper-nouns', function (t) { const arr = [ ['I met John Smith in Toronto', ['john smith', 'toronto']], ['Toronto and Vancouver Canada', ['toronto', 'vancouver canada']], @@ -10,17 +10,14 @@ test('proper-nouns', function(t) { ['the doctor and his brother see the mayor of france', ['france']], ] arr.forEach(a => { - const out = nlp(a[0]) - .match('#ProperNoun+') - .toLowerCase() - .out('array') + const out = nlp(a[0]).match('#ProperNoun+').toLowerCase().out('array') t.deepEqual(out, a[1], a[0]) }) t.end() }) //after we change pos, untag propernoun -test('remove-proper-nouns', function(t) { +test('remove-proper-nouns', function (t) { const doc = nlp('do what Theresa May') t.equal(doc.match('may').has('#ProperNoun'), true, 'propernoun-init') doc.match('may').tag('Verb') diff --git a/tests/tagger/untag.test.js b/tests/tagger/untag.test.js index 3d8a115c5..d6762f12a 100644 --- a/tests/tagger/untag.test.js +++ b/tests/tagger/untag.test.js @@ -1,10 +1,8 @@ const test = require('tape') const nlp = require('../_lib') -test('tag inference:', function(t) { - let m = nlp('aasdf2') - .unTag('Noun') - .unTag('NounPhrase') +test('tag inference:', function (t) { + let m = nlp('aasdf2').unTag('Noun').unTag('NounPhrase') let term = m.list[0].terms(0) t.equal(Object.keys(term.tags).length, 0, 'aasdf2 has no tags') //give it a specific tag- @@ -20,7 +18,7 @@ test('tag inference:', function(t) { t.end() }) -test('untag inference:', function(t) { +test('untag inference:', function (t) { let m = nlp('aasdf') m.tag('FemaleName') let term = m.list[0].terms(0) @@ -35,7 +33,7 @@ test('untag inference:', function(t) { t.end() }) -test('tag idempodence:', function(t) { +test('tag idempodence:', function (t) { const m = nlp('walk').tag('Verb') const term = m.list[0].terms(0) t.equal(term.tags.Verb, true, 'walk has Verb') @@ -50,19 +48,17 @@ test('tag idempodence:', function(t) { t.end() }) -test('tags are self-removing', function(t) { +test('tags are self-removing', function (t) { const terms = ['Person', 'Place', 'PastTense', 'FemaleName', 'Infinitive', 'HashTag', 'Month'] - terms.forEach(function(tag) { - const m = nlp('aasdf') - .tag(tag) - .unTag(tag) + terms.forEach(function (tag) { + const m = nlp('aasdf').tag(tag).unTag(tag) const t0 = m.list[0].terms(0) t.equal(t0.tags[tag], undefined, 'tag removes self ' + tag) }) t.end() }) -test('untag wildcard', function(t) { +test('untag wildcard', function (t) { const r = nlp('we live in Toronto Canada and it is cold') r.match('#Place+').unTag('*') t.equal(r.match('#Place').found, false, 'place-tag-is-gone') diff --git a/tests/tagger/web.test.js b/tests/tagger/web.test.js index 502e95e86..712435281 100644 --- a/tests/tagger/web.test.js +++ b/tests/tagger/web.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('is-email:', function(t) { +test('is-email:', function (t) { ;[ [`s@s.com`, true], [`sasdf@sasdf.com`, true], @@ -14,7 +14,7 @@ test('is-email:', function(t) { [`_@_._`], [`sas df@sasdf.com`], [`sasdf@sa sdf.com`], - ].forEach(function(a) { + ].forEach(function (a) { const term = nlp(a[0]).list[0].terms(0) const msg = a[0] + ' is email: ' + a[1] t.equal(term.tags['Email'], a[1], msg) @@ -22,7 +22,7 @@ test('is-email:', function(t) { t.end() }) -test('is-hashtag:', function(t) { +test('is-hashtag:', function (t) { ;[ [`#lkjsdf`, true], [`#ll`, true], @@ -31,7 +31,7 @@ test('is-hashtag:', function(t) { // [`#l`,], [`# l`], [`l#l`], - ].forEach(function(a) { + ].forEach(function (a) { const term = nlp(a[0]).list[0].terms(0) const msg = a[0] + ' is hashtag: ' + a[1] t.equal(term.tags['HashTag'], a[1], msg) @@ -39,7 +39,7 @@ test('is-hashtag:', function(t) { t.end() }) -test('is-url:', function(t) { +test('is-url:', function (t) { ;[ [`http://cool.com/fun`, true], [`https://cool.com`, true], @@ -57,7 +57,7 @@ test('is-url:', function(t) { [`http://woop.org/news?foo=bar`, true], [`http:subdomain.cool.com/`], [`coolcom`], - ].forEach(function(a) { + ].forEach(function (a) { const term = nlp(a[0]).list[0].terms(0) const msg = a[0] + ' is url: ' + a[1] t.equal(term.tags['Url'], a[1], msg) diff --git a/tests/tokenize.test.js b/tests/tokenize.test.js index b5dc1575f..7fc2a3959 100644 --- a/tests/tokenize.test.js +++ b/tests/tokenize.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('em-dash, en-dash', function(t) { +test('em-dash, en-dash', function (t) { // '-': //dash // '–': //en-dash // '—': //em-dash @@ -30,7 +30,7 @@ test('em-dash, en-dash', function(t) { t.end() }) -test('emoji-only sentence', function(t) { +test('emoji-only sentence', function (t) { let doc = nlp('good night! 💋') t.equal(doc.length, 2, 'boemojith sentence') t.end() diff --git a/tests/topics.test.js b/tests/topics.test.js index 1ea074283..eb317be47 100644 --- a/tests/topics.test.js +++ b/tests/topics.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('topics:', function(t) { +test('topics:', function (t) { let list = [ ['Tony Hawk lives in Toronto. Tony Hawk is cool.', 'tony hawk'], ['I live Toronto. I think Toronto is cool.', 'toronto'], @@ -9,16 +9,14 @@ test('topics:', function(t) { // ['The Elkjsdflkjsdf sells hamburgers. I think the Elkjsdflkjsdf eats turky.', 'elkjsdflkjsdf'], ["Toronto's citizens love toronto!", 'toronto'], ] - list.forEach(function(a) { - const arr = nlp(a[0]) - .topics() - .out('freq') + list.forEach(function (a) { + const arr = nlp(a[0]).topics().out('freq') t.equal(arr[0].reduced, a[1], a[0]) }) t.end() }) -test('topics-false-positives:', function(t) { +test('topics-false-positives:', function (t) { const arr = [ 'somone ate her lunch', 'everybody is dancing all night', @@ -29,21 +27,21 @@ test('topics-false-positives:', function(t) { ` She's it! She could be a soap opera.`, `she's a little dare-devil!`, ] - arr.forEach(function(str, i) { + arr.forEach(function (str, i) { const doc = nlp(str).topics() t.equal(doc.length, 0, 'topics #' + i + ' -> ' + doc.out()) }) t.end() }) -test('topics-basic', function(t) { +test('topics-basic', function (t) { let doc = nlp('i went to Gloop University in Paris, France, with John H. Smith') let arr = doc.topics().out('array') t.deepEqual(arr, ['Gloop University', 'Paris, France,', 'John H. Smith'], 'found all three topics') t.end() }) -test('misc entities', function(t) { +test('misc entities', function (t) { let doc = nlp('The Children are right to laugh at you, Ralph') let m = doc.people() t.equal(m.length, 1, 'one person') @@ -59,7 +57,7 @@ test('misc entities', function(t) { t.end() }) -test('topics concat:', function(t) { +test('topics concat:', function (t) { const things = nlp('spencer and danny are in Paris France and germany for Google Inc and IBM') .topics() .json({ normal: true, trim: true }) diff --git a/tests/transform/delete.test.js b/tests/transform/delete.test.js index 5b64e391e..b8c39a942 100644 --- a/tests/transform/delete.test.js +++ b/tests/transform/delete.test.js @@ -1,35 +1,23 @@ const test = require('tape') const nlp = require('../_lib') -test('remove-basic :', function(t) { - let m = nlp('the brown cat played') - .match('brown') - .delete() - .all() +test('remove-basic :', function (t) { + let m = nlp('the brown cat played').match('brown').delete().all() t.equal(m.out('text'), 'the cat played', 'brown-cat') - m = nlp('the nice brown cat played') - .match('nice brown') - .delete() - .all() + m = nlp('the nice brown cat played').match('nice brown').delete().all() t.equal(m.out('text'), 'the cat played', 'nice-brown') - m = nlp('the nice brown cat played') - .match('#Adjective') - .delete() - .all() + m = nlp('the nice brown cat played').match('#Adjective').delete().all() t.equal(m.out('text'), 'the cat played', 'adj-each') - m = nlp('the nice brown cat played') - .match('#Adjective+') - .delete() - .all() + m = nlp('the nice brown cat played').match('#Adjective+').delete().all() t.equal(m.out('text'), 'the cat played', 'adj-consecutive') t.end() }) -test('remove-match :', function(t) { +test('remove-match :', function (t) { let m = nlp('the brown cat played').delete('brown') t.equal(m.out('text'), 'the cat played', 'brown-cat') @@ -48,21 +36,14 @@ test('remove-match :', function(t) { t.end() }) -test('remove-logic :', function(t) { - let m = nlp('spencer kelly is here') - .match('spencer kelly') - .delete('spencer') +test('remove-logic :', function (t) { + let m = nlp('spencer kelly is here').match('spencer kelly').delete('spencer') t.equal(m.out('normal'), 'kelly', 'remove(reg) returns this') - m = nlp('spencer kelly is here') - .match('spencer kelly') - .delete() - .all() + m = nlp('spencer kelly is here').match('spencer kelly').delete().all() t.equal(m.out('normal'), 'is here', 'remove() returns parent') - m = nlp('spencer kelly is here') - .match('spencer kelly') - .delete('notfound') + m = nlp('spencer kelly is here').match('spencer kelly').delete('notfound') t.equal(m.out('normal'), 'spencer kelly', 'remove(notfound) returns this') t.end() }) diff --git a/tests/transform/join.test.js b/tests/transform/join.test.js index 793640f09..f3afa8655 100644 --- a/tests/transform/join.test.js +++ b/tests/transform/join.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('join-basic', function(t) { +test('join-basic', function (t) { let str = `What's with these homies dissin' my girl? Why do they gotta front? What did we ever do to these guys that made them so violent? @@ -15,7 +15,7 @@ test('join-basic', function(t) { t.end() }) -test('join-parents', function(t) { +test('join-parents', function (t) { let str = `left side. middle part one. two middle part two. right side.` let doc = nlp(str) doc.if('middle').join() diff --git a/tests/transform/normalize-light.test.js b/tests/transform/normalize-light.test.js index 5937fd189..fdc2374e2 100644 --- a/tests/transform/normalize-light.test.js +++ b/tests/transform/normalize-light.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('normalize - light', function(t) { +test('normalize - light', function (t) { let arr = [ [ ' so... you like donuts? have all the donuts in the world!!!', @@ -15,16 +15,14 @@ test('normalize - light', function(t) { // ['the so-called ❛group of seven❜', 'the so called \'group of 7\''], ['Director of the F.B.I.', 'Director of the FBI'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .normalize() - .out('text') + arr.forEach(function (a) { + const str = nlp(a[0]).normalize().out('text') t.equal(str, a[1], a[0]) }) t.end() }) -test('normalize - medium', function(t) { +test('normalize - medium', function (t) { let arr = [ [ ' so... you like DONUTS? have all the donuts in the WORLD!!!', @@ -34,16 +32,14 @@ test('normalize - medium', function(t) { ['Björk, the singer-songwriter...', 'bjork the singer songwriter'], ['Director of the F.B.I.', 'director of the fbi'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .normalize('medium') - .out('text') + arr.forEach(function (a) { + const str = nlp(a[0]).normalize('medium').out('text') t.equal(str, a[1], a[0]) }) t.end() }) -test('normalize - heavy', function(t) { +test('normalize - heavy', function (t) { let arr = [ [ ' so... you like DONUTS? have all the donuts in the WORLD!!!', @@ -53,10 +49,8 @@ test('normalize - heavy', function(t) { ['Björk, the singer-songwriter...', 'bjork the singer songwriter'], ['Director of the F.B.I.', 'director of the fbi'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .normalize('heavy') - .out('text') + arr.forEach(function (a) { + const str = nlp(a[0]).normalize('heavy').out('text') t.equal(str, a[1], a[0]) }) t.end() diff --git a/tests/transform/normalize-more.test.js b/tests/transform/normalize-more.test.js index 6918f8acd..c06107c89 100644 --- a/tests/transform/normalize-more.test.js +++ b/tests/transform/normalize-more.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('possessives', function(t) { +test('possessives', function (t) { let doc = nlp(`Corey Hart's pudding and Google's advertising`) doc = doc.normalize({ possessives: true, @@ -11,7 +11,7 @@ test('possessives', function(t) { t.end() }) -test('optional params', function(t) { +test('optional params', function (t) { const doc = nlp(`John Smith bought automobiles (for us)`).normalize({ case: true, possessives: true, @@ -23,7 +23,7 @@ test('optional params', function(t) { t.end() }) -test('optional param - verbs and plurals together', function(t) { +test('optional param - verbs and plurals together', function (t) { const plurals = [['batmobiles', 'batmobile']] const verbs = [['I was walking', 'I walk']] @@ -58,7 +58,7 @@ test('optional param - verbs and plurals together', function(t) { t.end() }) -test('honorifics', function(t) { +test('honorifics', function (t) { const tests = [ ['rear admiral Smith', 'smith'], ['Lieutenant John Smith', 'john smith'], @@ -90,14 +90,14 @@ test('honorifics', function(t) { t.end() }) -test('hyphen-whitespace:', function(t) { +test('hyphen-whitespace:', function (t) { let doc = nlp(`the so-called “fascist dictator”`) doc.normalize({ whitespace: true, punctuation: false }) t.equal(doc.text(), `the so-called “fascist dictator”`, 'keep hyphen') t.end() }) -test('dash-whitespace:', function(t) { +test('dash-whitespace:', function (t) { let str = `a dash seperates words - like that` let doc = nlp(str) doc.normalize({ whitespace: true, punctuation: false }) @@ -105,7 +105,7 @@ test('dash-whitespace:', function(t) { t.end() }) -test('elipses-whitespace:', function(t) { +test('elipses-whitespace:', function (t) { let doc = nlp('about this ...').normalize() t.equal(doc.out('text'), 'about this', 'normalize seperate elipses') @@ -117,7 +117,7 @@ test('elipses-whitespace:', function(t) { t.end() }) -test('more-normalize:', function(t) { +test('more-normalize:', function (t) { let doc = nlp(`i saw first lady michelle obama`) doc.normalize({ honorifics: true, diff --git a/tests/transform/normalize-one.test.js b/tests/transform/normalize-one.test.js index 83fdfa783..c0be9ce2b 100644 --- a/tests/transform/normalize-one.test.js +++ b/tests/transform/normalize-one.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -const only = function(options) { +const only = function (options) { const none = { case: false, whitespace: false, @@ -12,14 +12,14 @@ const only = function(options) { return Object.assign({}, none, options) } -test('normalize defaults', function(t) { +test('normalize defaults', function (t) { let doc = nlp.tokenize(` it's coöl, (i think) . He is cool; i said .`) doc.normalize() t.equal(doc.text(), `it's cool (i think). He is cool i said.`, 'normalize-defaults') t.end() }) -test('normalize unicode', function(t) { +test('normalize unicode', function (t) { let doc = nlp.tokenize(` it's coöl, (i think) . He is cool; i said .`) let options = only({ unicode: true }) doc.normalize(options) @@ -27,7 +27,7 @@ test('normalize unicode', function(t) { t.end() }) -test('normalize punctuation', function(t) { +test('normalize punctuation', function (t) { let doc = nlp.tokenize(` it's coöl, (i think) . He is cool; i said .`) let options = only({ punctuation: true }) doc.normalize(options) @@ -35,7 +35,7 @@ test('normalize punctuation', function(t) { t.end() }) -test('normalize whitespace', function(t) { +test('normalize whitespace', function (t) { let doc = nlp.tokenize(` it's coöl, (i think) . He is cool; i said .`) let options = only({ whitespace: true }) doc.normalize(options) @@ -43,7 +43,7 @@ test('normalize whitespace', function(t) { t.end() }) -test('normalize parentheses', function(t) { +test('normalize parentheses', function (t) { let doc = nlp(` it's coöl, (i think) . He is cool; i said .`) let options = only({ parentheses: true }) doc.normalize(options) @@ -51,7 +51,7 @@ test('normalize parentheses', function(t) { t.end() }) -test('normalize contractions', function(t) { +test('normalize contractions', function (t) { let doc = nlp(` it's coöl, (i think) . He is cool; i said .`) let options = only({ contractions: true }) doc.normalize(options) diff --git a/tests/transform/prepend.test.js b/tests/transform/prepend.test.js index 328d9d2a5..f78cbf533 100644 --- a/tests/transform/prepend.test.js +++ b/tests/transform/prepend.test.js @@ -1,14 +1,14 @@ const test = require('tape') const nlp = require('../_lib') -test('prepend parent start', function(t) { +test('prepend parent start', function (t) { let doc = nlp(`one two three`) doc.prepend('zero') t.equal(doc.text(), 'zero one two three', 'prepended in parent') t.end() }) -test('prepend middle', function(t) { +test('prepend middle', function (t) { let doc = nlp(`one two four five`) let m = doc.match('four').prepend('three') t.equal(m.text().trim(), 'three four', 'prepended in child') @@ -16,14 +16,14 @@ test('prepend middle', function(t) { t.end() }) -test('prepend multi', function(t) { +test('prepend multi', function (t) { let doc = nlp('one two. three four') doc.prepend('oooo') t.equal(doc.text(), 'oooo one two. oooo three four') t.end() }) -test('prepend children', function(t) { +test('prepend children', function (t) { let doc = nlp(`one four five six.`) let m1 = doc.match('one four') let m2 = m1.match('four') @@ -35,21 +35,16 @@ test('prepend children', function(t) { t.end() }) -test('prepend start child', function(t) { +test('prepend start child', function (t) { let doc = nlp(`one two three four`) doc.match('one').prepend('zero') t.equal(doc.text(), 'zero one two three four', 'prepended in parent') t.end() }) -test('prepend many children', function(t) { +test('prepend many children', function (t) { let doc = nlp(`one two three four`) - doc - .match('one two three') - .match('one two') - .match('.') - .match('one') - .prepend('zero') + doc.match('one two three').match('one two').match('.').match('one').prepend('zero') t.equal(doc.text(), 'zero one two three four', 'prepended in parent') t.end() }) diff --git a/tests/transform/replace.test.js b/tests/transform/replace.test.js index 147ebfa88..bb9cbba1d 100644 --- a/tests/transform/replace.test.js +++ b/tests/transform/replace.test.js @@ -1,51 +1,34 @@ const test = require('tape') const nlp = require('../_lib') -test('replace-basic :', function(t) { - let m = nlp('the dog played') - .match('dog') - .replace('cat') - .all() +test('replace-basic :', function (t) { + let m = nlp('the dog played').match('dog').replace('cat').all() t.equal(m.out('text'), 'the cat played', 'dog-cat') - m = nlp('the dog played') - .match('the dog') - .replace('a cat') - .all() + m = nlp('the dog played').match('the dog').replace('a cat').all() t.equal(m.out('text'), 'a cat played', 'a-cat') - m = nlp('the dog played') - .match('#Noun') - .replace('snake') - .all() + m = nlp('the dog played').match('#Noun').replace('snake').all() t.equal(m.out('text'), 'the snake played', 'snake') - m = nlp('the pit bull played') - .match('#Noun+') - .replace('snake') - .all() + m = nlp('the pit bull played').match('#Noun+').replace('snake').all() t.equal(m.out('text'), 'the snake played', 'pit bull') - m = nlp('the pit bull dog played') - .match('#Noun+') - .replace('grey snake') - .all() + m = nlp('the pit bull dog played').match('#Noun+').replace('grey snake').all() t.equal(m.out('text'), 'the grey snake played', 'pit bull dog') t.end() }) -test('match-replace :', function(t) { +test('match-replace :', function (t) { ;[ ['the dog played', 'the dog', 'the cat', 'the cat played'], ['the dog played', 'the #Noun', 'the cat', 'the cat played'], ['the dog played', 'the (dog|hamster|pet-snake)', 'the cat', 'the cat played'], ['the boy and the girl', 'the #Noun', 'the house', 'the house and the house'], ['the boy and the girl', 'the cat', 'the house', 'the boy and the girl'], - ].forEach(function(a) { - const str = nlp(a[0]) - .replace(a[1], a[2]) - .out('text') + ].forEach(function (a) { + const str = nlp(a[0]).replace(a[1], a[2]).out('text') const msg = str + ' -- ' + a[3] t.equal(str, a[3], msg) }) @@ -53,18 +36,14 @@ test('match-replace :', function(t) { t.end() }) -test('replace-with-punctuation', function(t) { +test('replace-with-punctuation', function (t) { const doc = nlp('Simon, how is Pamela and Jason?') - const str = doc - .match('#Person') - .replace('PERSON') - .all() - .out() + const str = doc.match('#Person').replace('PERSON').all().out() t.equal(str, 'PERSON, how is PERSON and PERSON?', 'replace-with-punctuation') t.end() }) -test('structured-object-replace :', function(t) { +test('structured-object-replace :', function (t) { let r = nlp('fun times in cool town') const term = r.match('times') r.replace(term, 'day') @@ -77,7 +56,7 @@ test('structured-object-replace :', function(t) { t.end() }) -test('replace-keep some punctuation', function(t) { +test('replace-keep some punctuation', function (t) { let doc = nlp('two weeks').tag('Cool') doc.replace('two', '2', true) t.equal(doc.match('#Cool+').text(), '2 weeks', 'replace-keep-tags') @@ -89,14 +68,14 @@ test('replace-keep some punctuation', function(t) { t.end() }) -test('replace over implict', function(t) { +test('replace over implict', function (t) { let doc = nlp("i'm good") doc.match('am').replaceWith('was') t.equal(doc.text(), 'i was good', 'replace over implicit') t.end() }) -test('replace-with-Doc', function(t) { +test('replace-with-Doc', function (t) { let b = nlp('sneaks').tag('Cool') let doc = nlp(`john walks quickly`) @@ -107,7 +86,7 @@ test('replace-with-Doc', function(t) { t.end() }) -test('replace-with-function', function(t) { +test('replace-with-function', function (t) { const repl = p => { if (p.has('john')) { return 'johnny' @@ -125,7 +104,7 @@ test('replace-with-function', function(t) { t.end() }) -test('replace-tags-param', function(t) { +test('replace-tags-param', function (t) { let doc = nlp('Spencer is very cool.') doc.match('spencer').replaceWith('jogging') t.equal(doc.has('(jogging && #Gerund)'), true, 'tags not-kept - default') @@ -143,7 +122,7 @@ test('replace-tags-param', function(t) { t.end() }) -test('replace-case-param', function(t) { +test('replace-case-param', function (t) { let doc = nlp('Spencer is very cool.') doc.match('spencer').replaceWith('jogging') t.equal(doc.text(), 'Jogging is very cool.', 'case kept - default') diff --git a/tests/transform/split.test.js b/tests/transform/split.test.js index 21cd838ee..f50069296 100644 --- a/tests/transform/split.test.js +++ b/tests/transform/split.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('splitAfter', function(t) { +test('splitAfter', function (t) { ;[ ['doug and nancy', 'and', ['doug and', 'nancy']], ['doug and also nancy', 'and also', ['doug and also', 'nancy']], @@ -18,17 +18,15 @@ test('splitAfter', function(t) { ['john paul george ringo', '.', ['john', 'paul', 'george', 'ringo']], ['doug is really nice', 'is', ['doug is', 'really nice']], - ].forEach(function(a) { + ].forEach(function (a) { const want = a[2] - const got = nlp(a[0]) - .splitAfter(a[1]) - .out('array') + const got = nlp(a[0]).splitAfter(a[1]).out('array') t.deepEqual(got, want, a[0]) }) t.end() }) -test('splitOn', function(t) { +test('splitOn', function (t) { ;[ ['doug and nancy', 'and', ['doug', 'and', 'nancy']], ['doug and also nancy', 'and also', ['doug', 'and also', 'nancy']], @@ -41,17 +39,15 @@ test('splitOn', function(t) { ['x a b x c', 'x', ['x', 'a b', 'x', 'c']], ['x x a b c', 'x', ['x', 'x', 'a b c']], ['a x b x', 'x', ['a', 'x', 'b', 'x']], - ].forEach(function(a) { + ].forEach(function (a) { const want = a[2] - const got = nlp(a[0]) - .splitOn(a[1]) - .out('array') + const got = nlp(a[0]).splitOn(a[1]).out('array') t.deepEqual(got, want, a[0]) }) t.end() }) -test('splitBefore', function(t) { +test('splitBefore', function (t) { ;[ ['doug and nancy', 'and', ['doug', 'and nancy']], ['doug and also nancy', 'and also', ['doug', 'and also nancy']], @@ -64,17 +60,15 @@ test('splitBefore', function(t) { ['x a b x c', 'x', ['x a b', 'x c']], ['x x a b c', 'x', ['x', 'x a b c']], ['a x b x', 'x', ['a', 'x b', 'x']], - ].forEach(function(a) { + ].forEach(function (a) { const want = a[2] - const got = nlp(a[0]) - .splitBefore(a[1]) - .out('array') + const got = nlp(a[0]).splitBefore(a[1]).out('array') t.deepEqual(got, want, a[0]) }) t.end() }) -test('multi splitBefore, multi sentence', function(t) { +test('multi splitBefore, multi sentence', function (t) { let doc = nlp('before before match1, match2 after after. then a match3 over here. none found') let m = doc.splitBefore('/^match/') t.equal(m.length, 6, 'found 6') @@ -87,7 +81,7 @@ test('multi splitBefore, multi sentence', function(t) { t.end() }) -test('multi splitAfter, multi sentence', function(t) { +test('multi splitAfter, multi sentence', function (t) { let doc = nlp('before before match1, match2 after after. then a match3 over here. none found') let m = doc.splitAfter('/^match/') t.equal(m.length, 6, 'found 6') diff --git a/tests/transform/splitOn.test.js b/tests/transform/splitOn.test.js index 2f93f2763..dd64a8819 100644 --- a/tests/transform/splitOn.test.js +++ b/tests/transform/splitOn.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('one split, one sentence', function(t) { +test('one split, one sentence', function (t) { let doc = nlp('before before match, after after.') let m = doc.splitOn('@hasComma') t.equal(m.length, 3, 'found 3') @@ -11,7 +11,7 @@ test('one split, one sentence', function(t) { t.end() }) -test('multi split, one sentence', function(t) { +test('multi split, one sentence', function (t) { let doc = nlp('before before match, then a match, after after.') let m = doc.splitOn('@hasComma') t.equal(m.length, 5, 'found 5') @@ -23,7 +23,7 @@ test('multi split, one sentence', function(t) { t.end() }) -test('one split, multi sentence', function(t) { +test('one split, multi sentence', function (t) { let doc = nlp('before before match, after after. then over here') let m = doc.splitOn('match') t.equal(m.length, 4, 'found 4') @@ -34,7 +34,7 @@ test('one split, multi sentence', function(t) { t.end() }) -test('multi split, multi sentence', function(t) { +test('multi split, multi sentence', function (t) { let doc = nlp('before before match1, match2 after after. then a match3 over here') let m = doc.splitOn('/^match/') t.equal(m.length, 7, 'found 7') @@ -48,7 +48,7 @@ test('multi split, multi sentence', function(t) { t.end() }) -test('greedy split', function(t) { +test('greedy split', function (t) { let doc = nlp('match match middle middle match. then over here') let m = doc.splitOn('match+') t.equal(m.length, 4, 'found 4') @@ -59,7 +59,7 @@ test('greedy split', function(t) { t.end() }) -test('split skip sentence', function(t) { +test('split skip sentence', function (t) { let doc = nlp('before match. nothing found here. two match after') let m = doc.splitOn('match') t.equal(m.length, 6, 'found 6') @@ -72,7 +72,7 @@ test('split skip sentence', function(t) { t.end() }) -test('no match split', function(t) { +test('no match split', function (t) { let doc = nlp('nothing found here. none here either') let m = doc.splitOn('match') t.equal(m.length, 2, 'found 2') @@ -81,7 +81,7 @@ test('no match split', function(t) { t.end() }) -test('split-parent', function(t) { +test('split-parent', function (t) { let doc = nlp('if so, he is the best, that i see. he is the greatest in the world') t.equal(doc.length, 2, 'init parent is 2 sentence') diff --git a/tests/unicode.test.js b/tests/unicode.test.js index bf839e499..d0b33b839 100644 --- a/tests/unicode.test.js +++ b/tests/unicode.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('many-unicode', function(t) { +test('many-unicode', function (t) { let str = `✐✠✰❀❐❞❰➀➐➠➰✁✑✡✱❁❑❡❱➁➑➡➱✂✒✢✲❂❒❢❲➂➒➢➲✃✓✣✳❃❓❣❳➃➓➣➳✄✔✤✴❄❔❤❴➄➔➤➴✅✕✥✵❅❕❥❵➅➕➥➵✆✖✦✶❆❖❦❶➆➖➦➶✇✗✧✷❇❗❧❷➇➗➧➷✈✘✨✸❈❘❨❸➈➘➨➸✉✙✩✹❉❙❩❹➉➙➩➹✊✚✪✺❊❚❪❺➊➚➪➺✋✛✫✻❋❛❫❻➋➛➫➻✌✜✬✼❌❜❬❼➌➜➬➼✍✝✭✽❍❝❭❽➍➝➭➽✎✞✮✾❎❞❮❾➎➞➮➾✏✟✯✿❏❜❯❿➏➟➯➿😀😐😠😰🙀😁😑😡😱🙁😂😒😢😲🙂😃😓😣😳🙃😄😔😤😴🙄😅😕😥😵🙅😆😖😦😶🙆😇😗😧😷🙇😈😘😨😸🙈😉😙😩😹🙉😊😚😪😺🙊😋😛😫😻🙋😌😜😬😼🙌😍😝😭😽🙍😎😞😮😾🙎😏😟😯😿🙏,&、*.+-;<:>?=!—\($)%{@}〔〕₠₰₡₱₢₲₣₳₤₴₥₵₦₶₧₷₸₩₹₪₺₫₻€₼₭₽₮₾₯₿` let doc = nlp(str) t.equal(doc.text(), str, 'identical-text') @@ -10,7 +10,7 @@ test('many-unicode', function(t) { t.end() }) -test('em-dashes', function(t) { +test('em-dashes', function (t) { let str = 'text—text' let doc = nlp(str) t.equal(doc.text() === str, true, 'emdash') diff --git a/tests/unique.test.js b/tests/unique.test.js index 2789863ce..941e60cb7 100644 --- a/tests/unique.test.js +++ b/tests/unique.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('term-unique', function(t) { +test('term-unique', function (t) { let doc = nlp(`him and her and him`) let m = doc.terms().unique() t.equal(m.text(), 'him and her', 'terms-unique') @@ -9,7 +9,7 @@ test('term-unique', function(t) { t.end() }) -test('sentence-unique', function(t) { +test('sentence-unique', function (t) { let str = `him and her. in toronto. him and her. him.` let doc = nlp(str) let uniq = doc.unique() @@ -18,7 +18,7 @@ test('sentence-unique', function(t) { t.end() }) -test('unique-normalize', function(t) { +test('unique-normalize', function (t) { let doc = nlp(`SPENCER's house (spencer)`) doc = doc.terms().unique() t.equal(doc.text(), "SPENCER's house", 'normalize-posessive') diff --git a/tests/verbs/conjugate.test.js b/tests/verbs/conjugate.test.js index 696849f83..69d7338bf 100644 --- a/tests/verbs/conjugate.test.js +++ b/tests/verbs/conjugate.test.js @@ -231,20 +231,17 @@ const arr = [ Gerund: 'egging', }, ] -test('conjugation:', function(t) { - const test_conjugation = function(inf, o, form, original) { +test('conjugation:', function (t) { + const test_conjugation = function (inf, o, form, original) { const msg = 'from ' + original + ' to ' + form + ': [' + o[original] + '] -> [' + inf[form] + ']' t.equal(inf[form], o[form], msg) } - arr.forEach(function(o) { + arr.forEach(function (o) { const forms = ['Infinitive', 'PastTense', 'PresentTense', 'Gerund'] for (let i = 0; i < forms.length; i++) { const from = forms[i] - const inf = nlp(o[from]) - .tag('Verb') - .verbs() - .conjugate()[0] + const inf = nlp(o[from]).tag('Verb').verbs().conjugate()[0] test_conjugation(inf, o, 'Infinitive', from) test_conjugation(inf, o, 'PastTense', from) test_conjugation(inf, o, 'PresentTense', from) diff --git a/tests/verbs/parts.test.js b/tests/verbs/parts.test.js index a53f520d7..c8845ee2a 100644 --- a/tests/verbs/parts.test.js +++ b/tests/verbs/parts.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('verb-parts:', function(t) { +test('verb-parts:', function (t) { const tests = [ ['john is walking', '', 'is', ''], ['john was walking', '', 'was', ''], @@ -26,7 +26,7 @@ test('verb-parts:', function(t) { ['john would have had not been walking', 'not', 'would have had been', ''], ['john would have had been not walking', 'not', 'would have had been', ''], //adverbs + negatives combinations - ['john is really walking', '', 'is', 'really'], + // ['john is really walking', '', 'is', 'really'], ['john really is walking', '', 'is', ''], ['john is walking really', '', 'is', ''], ['john is not really walking', 'not', 'is', 'really'], @@ -45,11 +45,9 @@ test('verb-parts:', function(t) { ['john would not have had been really walking', 'not', 'would have had been', 'really'], ['john would not have had been walking really', 'not', 'would have had been', ''], ] - tests.forEach(function(a) { - const arr = nlp(a[0]) - .verbs() - .json() - t.equal(arr.length, 1, '#verbs - ' + arr.length) + tests.forEach(function (a) { + const arr = nlp(a[0]).verbs().json() + t.equal(arr.length, 1, '#verbs - ' + arr.length + ' ' + a[0]) t.equal(arr[0].parts.negative || '', a[1], "neg-test - '" + a[0] + "'") t.equal(arr[0].parts.auxiliary || '', a[2], "aux-test - '" + a[0] + "'") t.equal(arr[0].parts.verb || '', 'walking', "verb-test - '" + a[0] + "'") @@ -59,55 +57,35 @@ test('verb-parts:', function(t) { }) //dont take it too-far -test('verb-greedy:', function(t) { - let arr = nlp('he would be, had he survived') - .verbs() - .json() +test('verb-greedy:', function (t) { + let arr = nlp('he would be, had he survived').verbs().json() t.equal(arr.length, 2, 'split-on-clause') - arr = nlp('we walked, talked, and sang') - .verbs() - .json() + arr = nlp('we walked, talked, and sang').verbs().json() t.equal(arr.length, 3, 'split-on-list') - arr = nlp('we walked, talked, and quickly sang') - .verbs() - .json() + arr = nlp('we walked, talked, and quickly sang').verbs().json() t.equal(arr.length, 3, 'split-on-list2') - arr = nlp('we suddenly walked, talked, and abruptly sang') - .verbs() - .json() + arr = nlp('we suddenly walked, talked, and abruptly sang').verbs().json() t.equal(arr.length, 3, 'split-on-list3') - arr = nlp('we really') - .verbs() - .json() + arr = nlp('we really').verbs().json() t.equal(arr.length, 0, 'adverb-isnt-a-verb') - arr = nlp('we really really') - .verbs() - .json() + arr = nlp('we really really').verbs().json() t.equal(arr.length, 0, 'two-adverbs-isnt-a-verb') - arr = nlp('not good') - .verbs() - .json() + arr = nlp('not good').verbs().json() t.equal(arr.length, 0, 'not-isnt-a-verb') - let str = nlp('we must not') - .verbs() - .out('normal') + let str = nlp('we must not').verbs().out('normal') t.equal(str, 'must not', 'verb-not') - str = nlp('we must really') - .verbs() - .out('normal') + str = nlp('we must really').verbs().out('normal') t.equal(str, 'must', 'verb-adverb') - str = nlp('we must really not') - .verbs() - .out('normal') + str = nlp('we must really not').verbs().out('normal') t.equal(str, 'must really not', 'verb-adverb-not') t.end() diff --git a/tests/verbs/phrasal.test.js b/tests/verbs/phrasal.test.js index 8087e613f..4523feac9 100644 --- a/tests/verbs/phrasal.test.js +++ b/tests/verbs/phrasal.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('phrasal-verbs:', function(t) { +test('phrasal-verbs:', function (t) { ;[ [`he is really good`, ['he', 'is', 'really', 'good']], [`he is upset about it`, ['he', 'is', 'upset', 'about', 'it']], @@ -13,7 +13,7 @@ test('phrasal-verbs:', function(t) { [`frighten back`, ['frighten', 'back']], [`frighten away`, ['frighten away']], - ].forEach(function(a) { + ].forEach(function (a) { const terms = nlp(a[0]).out('array') const msg = terms.join(' ') + ' -- ' + a[1].join(' ') t.equal(terms.join(' '), a[1].join(' '), msg) diff --git a/tests/verbs/plural.test.js b/tests/verbs/plural.test.js index fec91ee84..86c760da0 100644 --- a/tests/verbs/plural.test.js +++ b/tests/verbs/plural.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('plural-verbs:', function(t) { +test('plural-verbs:', function (t) { let r = nlp('i look at') let len = r.verbs().isPlural().length t.equal(len, 0, 'i singular') @@ -11,24 +11,15 @@ test('plural-verbs:', function(t) { t.equal(len, 2, 'they plural') r = nlp('lkjsdf are cool') - let str = r - .verbs() - .isPlural() - .out('normal') + let str = r.verbs().isPlural().out('normal') t.equal(str, 'are', 'are plural') r = nlp('lkjsdf does eat bugs') - str = r - .verbs() - .isPlural() - .out('normal') + str = r.verbs().isPlural().out('normal') t.equal(str, 'does eat', 'does plural') r = nlp('lkjsdf is cool') - str = r - .verbs() - .isPlural() - .out('normal') + str = r.verbs().isPlural().out('normal') t.equal(str, '', 'is singular') t.end() }) diff --git a/tests/verbs/toGerund.test.js b/tests/verbs/toGerund.test.js index 213dfd3c3..e18286303 100644 --- a/tests/verbs/toGerund.test.js +++ b/tests/verbs/toGerund.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('verb-to-gerund:', function(t) { +test('verb-to-gerund:', function (t) { let arr = [ ['walk', 'walking'], ['sing', 'singing'], @@ -12,11 +12,8 @@ test('verb-to-gerund:', function(t) { ['was', 'being'], ['am', 'being'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .verbs() - .toGerund() - .out('normal') + arr.forEach(function (a) { + const str = nlp(a[0]).verbs().toGerund().out('normal') t.equal(str, a[1], a[0] + ' -> ' + str) }) t.end() diff --git a/tests/verbs/toInfinitive.test.js b/tests/verbs/toInfinitive.test.js index 62ebdba23..03189feee 100644 --- a/tests/verbs/toInfinitive.test.js +++ b/tests/verbs/toInfinitive.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('gerund -> infinitive:', function(t) { +test('gerund -> infinitive:', function (t) { let arr = [ ['coming', 'come'], ['moving', 'move'], @@ -14,17 +14,14 @@ test('gerund -> infinitive:', function(t) { //phrasal ['hazing-over', 'haze-over'], ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .verbs() - .toInfinitive() - .out('text') + arr.forEach(function (a) { + const str = nlp(a[0]).verbs().toInfinitive().out('text') t.equal(str, a[1], a[0] + ' -> ' + str) }) t.end() }) -test('pastTense -> infinitive:', function(t) { +test('pastTense -> infinitive:', function (t) { let arr = [ ['came', 'come'], ['named', 'name'], @@ -39,10 +36,8 @@ test('pastTense -> infinitive:', function(t) { //phrasal ['hazed-over', 'haze-over'], ] - arr.forEach(function(a) { - const doc = nlp(a[0]) - .verbs() - .toInfinitive() + arr.forEach(function (a) { + const doc = nlp(a[0]).verbs().toInfinitive() let str = doc.out('text') t.equal(str, a[1], a[0] + ' -> ' + str) }) diff --git a/tests/verbs/toNegative.test.js b/tests/verbs/toNegative.test.js index a05c781de..2862e1183 100644 --- a/tests/verbs/toNegative.test.js +++ b/tests/verbs/toNegative.test.js @@ -18,7 +18,7 @@ test('negative-verb-phrase:', function (t) { //phrasals [`he would come forward`, 'would not come forward'], - [`we come together`, 'do not come together'], + // [`we come together`, 'do not come together'], [`i didn't want to`, "didn't want"], //===singular diff --git a/tests/whitespace.test.js b/tests/whitespace.test.js index 1cf22a3e4..5adfc3ad7 100644 --- a/tests/whitespace.test.js +++ b/tests/whitespace.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('whitespace-out', function(t) { +test('whitespace-out', function (t) { let str = 'one, two three. One, two, four?' const doc = nlp(str) @@ -24,7 +24,7 @@ test('whitespace-out', function(t) { t.end() }) -test('pre/post concat', function(t) { +test('pre/post concat', function (t) { let doc = nlp(`Getting ready for whacking day? What's whacking day?`) doc.post(' ', true) t.equal(doc.text(), `Getting ready for whacking day? What's whacking day? `) diff --git a/tests/wordcount.test.js b/tests/wordcount.test.js index f9f0b7c7a..4a83811bb 100644 --- a/tests/wordcount.test.js +++ b/tests/wordcount.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('==WordCount==', function(t) { +test('==WordCount==', function (t) { let arr = [ ['he is good', 3], ['jack and jill went up the hill.', 7], @@ -14,14 +14,14 @@ test('==WordCount==', function(t) { ['Bill Clinton will go walking', 5], [`is not isn't. it sure is.`, 6], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const doc = nlp(a[0]) t.equal(doc.wordCount(), a[1], a[0]) }) t.end() }) -test('match-wordcount', function(t) { +test('match-wordcount', function (t) { let doc = nlp("he is cool. she is nice. it isn't here.") t.equal(doc.eq(1).wordCount(), 3, 'middle-sentence') t.equal(doc.match('(he|she)').wordCount(), 2, 'he/she match')