From e35b6c9dee5691a8c8ba7519c64ade15e0a99f2b Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 18 Dec 2019 11:56:37 -0500 Subject: [PATCH 01/59] update deps --- builds/compromise.min.js | 2 +- package-lock.json | 218 ++++++++++++++++++++++++--------------- package.json | 8 +- scratch.js | 26 +---- 4 files changed, 145 insertions(+), 109 deletions(-) diff --git a/builds/compromise.min.js b/builds/compromise.min.js index ec21f6fe6..a7066f72b 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},N,B,T,H,L);function W(){return"undefined"!=typeof window&&window.document}var _=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=E(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Be(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),we(a,t,i)}for(var s=0;sa.length);s+=1){var u=Ae(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return we(a,t,i)}return we(a,t,i)},De=function(e,t){var n={};je(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},xe={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=je(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return je(this,e,!0).length>0},not:function(e){var t=this,n=De(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,xe),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,We=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,_e=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===We.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Re=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&t.length>0&&(t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Re(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=kt(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},Wt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],_t=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Rt=[{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"}],Kt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),An={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},wn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},kn=F((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Gn=F((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Nn=(Fn.json,Fn.data,["Person","Place","Organization"]),Bn={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:Nn},Actor:{isA:"Noun",notA:Nn},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:Nn},Demonym:{isA:["Noun","ProperNoun"],notA:Nn},Possessive:{isA:"Noun"}},jn={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"}},Dn={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"}},xn=["Noun","Verb","Adjective","Adverb","Value"],On={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:xn},Conjunction:{notA:xn},Preposition:{notA:xn},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"]}},Tn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},Vn=function(e){return Object.keys(e).forEach((function(t){Tn[t]?e[t].color=Tn[t]:e[t].isA.some((function(n){return!!Tn[n]&&(e[t].color=Tn[n],!0)}))})),e},zn=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;at.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=qn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},Kn={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};Kn.alphabetical=Kn.alpha,Kn.wordcount=Kn.wordCount;var Qn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Un={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Qn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},gr=/[\'‘’‛‵′`´]$/,vr=/^[A-Z]('s|,)?$/,br={I:!0,A:!0},yr=function(e,t,n){var r=e[t];if(gr.test(r.text)&&!gr.test(r.pre)&&!gr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!br.hasOwnProperty(r.text)&&vr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},Ar=[[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/,["Money","Value"]],[/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w\.\/]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[\-\+]?[0-9]+(\.[0-9])*$/,["Cardinal","NumericValue"]],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(.[0-9]+)?$/,["Cardinal","NumericValue"]],[/^[0-9\.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/,"NumericValue"],[/^.?[0-9]+([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][0-9,\.]*(st|nd|rd|r?th)$/,["NumericValue","Ordinal"]],[/[0-9]\+$/,["Cardinal","NumericValue"]],[/^[0-9]+(st|nd|rd|th)$/,"Ordinal"],[/^[0-9\.]+([a-z]{1,4})$/,"Value"]],wr=/^[IVXLCDM]{2,}$/,kr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,$r="Adjective",Pr="Infinitive",Gr="Singular",Cr="PastTense",Er="Expression",Fr="LastName",Nr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,Fr],[/.[^aeiou]ica$/,Gr],[/^([hyj]a)+$/,Er]],c:[[/.[^aeiou]ic$/,$r]],d:[[/.[ia]sed$/,$r],[/.[gt]led$/,$r],[/.[td]ed$/,Cr],[/.[aeiou]red$/,Cr],[/.[^aeiou]led$/,Cr],[/[^aeiou]ard$/,Gr],[/[aeiou][^aeiou]id$/,$r],[/[aeiou]c?ked$/,Cr],[/[^aeiou][aeiou][tvx]ed$/,Cr],[/.[vrl]id$/,$r]],e:[[/.[lnr]ize$/,Pr],[/.[^aeiou]ise$/,Pr],[/.[aeiou]te$/,Pr],[/.[^aeiou][ai]ble$/,$r],[/.[^aeiou]eable$/,$r],[/.[ts]ive$/,$r]],h:[[/.[^aeiouf]ish$/,$r],[/.v[iy]ch$/,Fr],[/^ug?h+$/,Er],[/^uh[ -]?oh$/,Er]],i:[[/.[oau][wvl]ski$/,Fr]],k:[[/^(k)+$/,Er]],l:[[/.[gl]ial$/,$r],[/.[^aeiou]ful$/,$r],[/.[nrtumcd]al$/,$r],[/.[^aeiou][ei]al$/,$r]],m:[[/.[^aeiou]ium$/,Gr],[/[^aeiou]ism$/,Gr],[/^h*u*m+$/,Er],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,$r],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,Er],[/^(yo)+$/,Er],[/^woo+[pt]?$/,Er]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,Gr],[/[^i]fer$/,Pr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,$r],[/[aeiou].*ist$/,$r],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,Gr],[/[aeiou][^aeiou]is$/,Gr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,Er]],v:[[/.[^aeiou][ai][kln]ov$/,Fr]],y:[[/.[cts]hy$/,$r],[/.[st]ty$/,$r],[/.[gk]y$/,$r],[/.[tnl]ary$/,$r],[/.[oe]ry$/,Gr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,$r],[/.(gg|bb|zz)ly$/,$r],[/.[aeiou]my$/,$r],[/[ea]{2}zy$/,$r],[/.[^aeiou]ity$/,Gr]]},Br="Adjective",jr="Infinitive",Dr="PresentTense",xr="Singular",Or="PastTense",Tr="Adverb",Vr="Plural",zr="Verb",Hr="LastName",Ir=[null,null,{ea:xr,ia:"Noun",ic:Br,ly:Tr,"'n":zr,"'t":zr},{que:Br,lar:Br,ffy:Br,nny:Br,rmy:Br,azy:Br,oid:Br,mum:Br,ous:Br,end:zr,sis:xr,rol:xr,ize:jr,ify:jr,zes:Dr,nes:Dr,ing:"Gerund"," so":Tr,"'ll":"Modal","'re":"Copula"},{teen:"Value",tors:"Noun",amed:Or,ched:Or,ends:zr,oses:Dr,fies:Dr,ects:Dr,nded:Or,cede:jr,tage:jr,gate:jr,vice:xr,tion:xr,cted:Or,ette:xr,some:Br,llen:Br,ried:Br,gone:Br,made:Br,fore:Tr,less:Tr,ices:Vr,ions:Vr,ints:Vr,aped:Or,lked:Or,ould:"Modal",tive:"Actor",sson:Hr,czyk:Hr,chuk:Hr,enko:Hr,akis:Hr,nsen:Hr},{fully:Tr,where:Tr,wards:Tr,urned:Or,tized:Or,eased:Or,ances:Vr,tures:Vr,ports:Vr,ettes:Vr,ities:Vr,rough:Br,ology:"Noun",bound:Br,tieth:"Ordinal",ishes:Dr,tches:Dr,nssen:Hr,marek:Hr},{keeper:"Actor",logist:"Actor",auskas:Hr,teenth:"Value"},{sdottir:Hr,opoulos:Hr}],Mr={":(":!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&&wr.test(n)&&kr.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Ir[i.length].hasOwnProperty(i)){var o=Ir[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===Nr.hasOwnProperty(r))for(var a=Nr[r],i=0;i35)))}(r=r.trim())&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Sr)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Mr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Jr=function(e,t){var n=e.world;Lr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},ea={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]},ta=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],na=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],ra=[/i$/,/ae$/],aa=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(ta.find((function(t){return e.tags[t]})))return;if(ea.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(ea.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(na.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(ra.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},ia=["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}),{}),oa=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()))},sa={neighbours:Rr,case:Ur,stem:Yr,plural:aa,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Za=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Ra(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Ni.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Ni(e,this,this.world)},Ni.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Ni.prototype,Fi.misc),Object.assign(Ni.prototype,Fi.selections),Ei(Ni);var Bi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Bi).forEach((function(e){return Ni.prototype[e]=Ni.prototype[Bi[e]]}));var ji=Ni,Di=new pn,xi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Di.addWords(t);var n=rt(e,Di),r=new ji(n,null,Di);return r.tagger(),r};return xi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Di.addWords(t);var n=rt(e,Di),r=new ji(n,null,Di);return r},xi.extend=function(e){return e(ji,Di),this},xi.clone=function(){return Di=Di.clone(),this},xi.load=function(e){var t=at(e,Di);return new ji(t,null,Di)},xi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return Di.verbose(e),this},xi.version="12.2.1",xi.import=xi.load,xi})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},N,B,T,H,L);function W(){return"undefined"!=typeof window&&window.document}var _=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=E(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Be(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),we(a,t,i)}for(var s=0;sa.length);s+=1){var u=Ae(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return we(a,t,i)}return we(a,t,i)},De=function(e,t){var n={};je(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},xe={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=je(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return je(this,e,!0).length>0},not:function(e){var t=this,n=De(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,xe),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,We=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,_e=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===We.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Re=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&t.length>0&&(t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Re(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=kt(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},Wt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],_t=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Rt=[{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"}],Kt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),An={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},wn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},kn=F((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Gn=F((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Nn=(Fn.json,Fn.data,["Person","Place","Organization"]),Bn={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:Nn},Actor:{isA:"Noun",notA:Nn},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:Nn},Demonym:{isA:["Noun","ProperNoun"],notA:Nn},Possessive:{isA:"Noun"}},jn={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"}},Dn={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"}},xn=["Noun","Verb","Adjective","Adverb","Value"],On={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:xn},Conjunction:{notA:xn},Preposition:{notA:xn},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"]}},Tn={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},Vn=function(e){return Object.keys(e).forEach((function(t){Tn[t]?e[t].color=Tn[t]:e[t].isA.some((function(n){return!!Tn[n]&&(e[t].color=Tn[n],!0)}))})),e},zn=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;at.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=qn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},Kn={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};Kn.alphabetical=Kn.alpha,Kn.wordcount=Kn.wordCount;var Qn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Un={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Qn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},gr=/[\'‘’‛‵′`´]$/,vr=/^[A-Z]('s|,)?$/,br={I:!0,A:!0},yr=function(e,t,n){var r=e[t];if(gr.test(r.text)&&!gr.test(r.pre)&&!gr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!br.hasOwnProperty(r.text)&&vr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},Ar=[[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/,["Money","Value"]],[/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w\.\/]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[\-\+]?[0-9]+(\.[0-9])*$/,["Cardinal","NumericValue"]],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(.[0-9]+)?$/,["Cardinal","NumericValue"]],[/^[0-9\.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/,"NumericValue"],[/^.?[0-9]+([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][0-9,\.]*(st|nd|rd|r?th)$/,["NumericValue","Ordinal"]],[/[0-9]\+$/,["Cardinal","NumericValue"]],[/^[0-9]+(st|nd|rd|th)$/,"Ordinal"],[/^[0-9\.]+([a-z]{1,4})$/,"Value"]],wr=/^[IVXLCDM]{2,}$/,kr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,$r="Adjective",Pr="Infinitive",Gr="Singular",Cr="PastTense",Er="Expression",Fr="LastName",Nr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,Fr],[/.[^aeiou]ica$/,Gr],[/^([hyj]a)+$/,Er]],c:[[/.[^aeiou]ic$/,$r]],d:[[/.[ia]sed$/,$r],[/.[gt]led$/,$r],[/.[td]ed$/,Cr],[/.[aeiou]red$/,Cr],[/.[^aeiou]led$/,Cr],[/[^aeiou]ard$/,Gr],[/[aeiou][^aeiou]id$/,$r],[/[aeiou]c?ked$/,Cr],[/[^aeiou][aeiou][tvx]ed$/,Cr],[/.[vrl]id$/,$r]],e:[[/.[lnr]ize$/,Pr],[/.[^aeiou]ise$/,Pr],[/.[aeiou]te$/,Pr],[/.[^aeiou][ai]ble$/,$r],[/.[^aeiou]eable$/,$r],[/.[ts]ive$/,$r]],h:[[/.[^aeiouf]ish$/,$r],[/.v[iy]ch$/,Fr],[/^ug?h+$/,Er],[/^uh[ -]?oh$/,Er]],i:[[/.[oau][wvl]ski$/,Fr]],k:[[/^(k)+$/,Er]],l:[[/.[gl]ial$/,$r],[/.[^aeiou]ful$/,$r],[/.[nrtumcd]al$/,$r],[/.[^aeiou][ei]al$/,$r]],m:[[/.[^aeiou]ium$/,Gr],[/[^aeiou]ism$/,Gr],[/^h*u*m+$/,Er],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,$r],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,Er],[/^(yo)+$/,Er],[/^woo+[pt]?$/,Er]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,Gr],[/[^i]fer$/,Pr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,$r],[/[aeiou].*ist$/,$r],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,Gr],[/[aeiou][^aeiou]is$/,Gr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,Er]],v:[[/.[^aeiou][ai][kln]ov$/,Fr]],y:[[/.[cts]hy$/,$r],[/.[st]ty$/,$r],[/.[gk]y$/,$r],[/.[tnl]ary$/,$r],[/.[oe]ry$/,Gr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,$r],[/.(gg|bb|zz)ly$/,$r],[/.[aeiou]my$/,$r],[/[ea]{2}zy$/,$r],[/.[^aeiou]ity$/,Gr]]},Br="Adjective",jr="Infinitive",Dr="PresentTense",xr="Singular",Or="PastTense",Tr="Adverb",Vr="Plural",zr="Verb",Hr="LastName",Ir=[null,null,{ea:xr,ia:"Noun",ic:Br,ly:Tr,"'n":zr,"'t":zr},{que:Br,lar:Br,ffy:Br,nny:Br,rmy:Br,azy:Br,oid:Br,mum:Br,ous:Br,end:zr,sis:xr,rol:xr,ize:jr,ify:jr,zes:Dr,nes:Dr,ing:"Gerund"," so":Tr,"'ll":"Modal","'re":"Copula"},{teen:"Value",tors:"Noun",amed:Or,ched:Or,ends:zr,oses:Dr,fies:Dr,ects:Dr,nded:Or,cede:jr,tage:jr,gate:jr,vice:xr,tion:xr,cted:Or,ette:xr,some:Br,llen:Br,ried:Br,gone:Br,made:Br,fore:Tr,less:Tr,ices:Vr,ions:Vr,ints:Vr,aped:Or,lked:Or,ould:"Modal",tive:"Actor",sson:Hr,czyk:Hr,chuk:Hr,enko:Hr,akis:Hr,nsen:Hr},{fully:Tr,where:Tr,wards:Tr,urned:Or,tized:Or,eased:Or,ances:Vr,tures:Vr,ports:Vr,ettes:Vr,ities:Vr,rough:Br,ology:"Noun",bound:Br,tieth:"Ordinal",ishes:Dr,tches:Dr,nssen:Hr,marek:Hr},{keeper:"Actor",logist:"Actor",auskas:Hr,teenth:"Value"},{sdottir:Hr,opoulos:Hr}],Mr={":(":!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&&wr.test(n)&&kr.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Ir[i.length].hasOwnProperty(i)){var o=Ir[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===Nr.hasOwnProperty(r))for(var a=Nr[r],i=0;i35)))}(r=r.trim())&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Sr)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Mr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Jr=function(e,t){var n=e.world;Lr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},ea={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]},ta=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],na=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],ra=[/i$/,/ae$/],aa=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(ta.find((function(t){return e.tags[t]})))return;if(ea.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(ea.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(na.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(ra.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},ia=["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}),{}),oa=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()))},sa={neighbours:Rr,case:Ur,stem:Yr,plural:aa,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Za=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Ra(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Ni.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Ni(e,this,this.world)},Ni.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Ni.prototype,Fi.misc),Object.assign(Ni.prototype,Fi.selections),Ei(Ni);var Bi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Bi).forEach((function(e){return Ni.prototype[e]=Ni.prototype[Bi[e]]}));var ji=Ni,Di=new pn,xi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Di.addWords(t);var n=rt(e,Di),r=new ji(n,null,Di);return r.tagger(),r};return xi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Di.addWords(t);var n=rt(e,Di),r=new ji(n,null,Di);return r},xi.extend=function(e){return e(ji,Di),this},xi.clone=function(){return Di=Di.clone(),this},xi.load=function(e){var t=at(e,Di);return new ji(t,null,Di)},xi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return Di.verbose(e),this},xi.version="12.2.1",xi.import=xi.load,xi})); diff --git a/package-lock.json b/package-lock.json index f6d08274d..fb73038cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -977,9 +977,9 @@ } }, "@babel/preset-env": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.5.tgz", - "integrity": "sha512-wDPbiaZdGzsJuTWlpLHJxmwslwHGLZ8F5v69zX3oAWeTOFWdy4OJHoTKg26oAnFg052v+/LAPY5os9KB0LrOEA==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", + "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.7.4", @@ -1248,9 +1248,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001015", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", - "integrity": "sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==", + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", + "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", "dev": true }, "chalk": { @@ -1280,9 +1280,9 @@ "dev": true }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "concat-map": { @@ -1301,12 +1301,12 @@ } }, "core-js-compat": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.7.tgz", - "integrity": "sha512-57+mgz/P/xsGdjwQYkwtBZR3LuISaxD1dEwVDtbk8xJMqAmwqaxLOvnNT7kdJ7jYE/NjNptyzXi+IQFMi/2fCw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.5.0.tgz", + "integrity": "sha512-E7iJB72svRjJTnm9HDvujzNVMCm3ZcDYEedkJ/sDTNsy/0yooCd9Cg7GSzE7b4e0LfIkjijdB1tqg0pGwxWeWg==", "dev": true, "requires": { - "browserslist": "^4.8.0", + "browserslist": "^4.8.2", "semver": "^6.3.0" }, "dependencies": { @@ -1334,10 +1334,18 @@ } }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } }, "define-properties": { "version": "1.1.3", @@ -1372,23 +1380,28 @@ "dev": true }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", + "has-symbols": "^1.0.1", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -1491,9 +1504,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "inflight": { @@ -1527,6 +1540,12 @@ "loose-envify": "^1.0.0" } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", @@ -1555,21 +1574,21 @@ } }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "isarray": { @@ -1678,9 +1697,9 @@ "dev": true }, "node-releases": { - "version": "1.1.42", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.42.tgz", - "integrity": "sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==", + "version": "1.1.43", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", + "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", "dev": true, "requires": { "semver": "^6.3.0" @@ -1695,9 +1714,15 @@ } }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", "dev": true }, "object-keys": { @@ -1784,6 +1809,16 @@ "private": "^0.1.6" } }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "regexpu-core": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", @@ -1805,9 +1840,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.1.tgz", + "integrity": "sha512-7LutE94sz/NKSYegK+/4E77+8DipxF+Qn2Tmu362AcmsF2NYq/wx3+ObvU90TKEhjf7hQoFXo23ajjrXP7eUgg==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -1840,9 +1875,9 @@ } }, "rollup": { - "version": "1.27.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.8.tgz", - "integrity": "sha512-EVoEV5rAWl+5clnGznt1KY8PeVkzVQh/R0d2s3gHEkN7gfoyC4JmvIVuCtPbYE8NM5Ep/g+nAmvKXBjzaqTsHA==", + "version": "1.27.13", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.13.tgz", + "integrity": "sha512-hDi7M07MpmNSDE8YVwGVFA8L7n8jTLJ4lG65nMAijAyqBe//rtu4JdxjUBE7JqXfdpqxqDTbCDys9WcqdpsQvw==", "dev": true, "requires": { "@types/estree": "*", @@ -1918,15 +1953,15 @@ } }, "rollup-plugin-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz", - "integrity": "sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.1.3.tgz", + "integrity": "sha512-FuFuXE5QUJ7snyxHLPp/0LFXJhdomKlIx/aK7Tg88Yubsx/UU/lmInoJafXJ4jwVVNcORJ1wRUC5T9cy5yk0wA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "jest-worker": "^24.6.0", "rollup-pluginutils": "^2.8.1", - "serialize-javascript": "^1.7.0", + "serialize-javascript": "^2.1.2", "terser": "^4.1.0" } }, @@ -1952,9 +1987,9 @@ "dev": true }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "shelljs": { @@ -1975,9 +2010,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -2008,14 +2043,34 @@ } }, "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", + "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" } }, "supports-color": { @@ -2082,30 +2137,31 @@ } }, "tape": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz", - "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.12.0.tgz", + "integrity": "sha512-PWs/TopmfVeYyLNZnfKsoV160xjNq1LvX2SWzZTyhVYsDldR93p5Zp0lfmsY3BCpZdVMXBOkfYZFeScEfsFvKQ==", "dev": true, "requires": { - "deep-equal": "~1.0.1", + "deep-equal": "~1.1.1", "defined": "~1.0.0", "for-each": "~0.3.3", "function-bind": "~1.1.1", - "glob": "~7.1.4", + "glob": "~7.1.6", "has": "~1.0.3", "inherits": "~2.0.4", + "is-regex": "~1.0.5", "minimist": "~1.2.0", - "object-inspect": "~1.6.0", - "resolve": "~1.11.1", + "object-inspect": "~1.7.0", + "resolve": "~1.13.1", "resumer": "~0.0.0", - "string.prototype.trim": "~1.1.2", + "string.prototype.trim": "~1.2.1", "through": "~2.3.8" }, "dependencies": { "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2123,9 +2179,9 @@ "dev": true }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", + "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -2134,9 +2190,9 @@ } }, "terser": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz", - "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", + "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", "dev": true, "requires": { "commander": "^2.20.0", diff --git a/package.json b/package.json index 4912e828b..befd4ecbe 100644 --- a/package.json +++ b/package.json @@ -49,18 +49,18 @@ }, "devDependencies": { "@babel/core": "7.7.5", - "@babel/preset-env": "7.7.5", + "@babel/preset-env": "7.7.6", "amble": "0.0.7", "efrt": "2.2.1", - "rollup": "1.27.8", + "rollup": "1.27.13", "rollup-plugin-babel": "4.3.3", "rollup-plugin-commonjs": "10.1.0", "rollup-plugin-json": "4.0.0", "rollup-plugin-node-resolve": "5.2.0", - "rollup-plugin-terser": "5.1.2", + "rollup-plugin-terser": "^5.1.3", "shelljs": "0.8.3", "tap-dancer": "0.2.0", - "tape": "4.11.0" + "tape": "4.12.0" }, "eslintIgnore": [ "builds/*.js" diff --git a/scratch.js b/scratch.js index 613297afc..88aa7211c 100644 --- a/scratch.js +++ b/scratch.js @@ -3,26 +3,6 @@ const nlp = require('./src/index') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -// let doc = nlp(`i ate red apples`) -// doc.nouns().toSingular() -// // doc.nouns().toPlural() -// console.log(doc.text()) - -// let oldWorld = nlp().world.clone() - -// nlp('apple').debug() -// nlp.extend((Doc, world) => { -// world.addWords({ apple: 'Fruit' }) -// }) -// nlp('apple').debug() - -// let doc = nlp(`I’m `).debug() -let doc = nlp(`can’t `).debug() -// let doc = nlp(`spencer’s clean`).debug() -// let doc = nlp(`wouldn’t be good`).debug() -// let doc = nlp(`what’d you see`).debug() -// let doc = nlp(`spencer’d go see`).debug() - -// let doc = nlp(`I'm `).debug() -// console.log(doc.termList()[0]) -// let doc = nlp(`I’m lookin’ for Amanda`).debug() +let nlpObj = nlp('I love peaches. Yes I do. ') +const sen = nlpObj.sentences().data() +console.log(sen) From 7da28dba2a003fbce1ee032c98c8bcb2a9542f5f Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 18 Dec 2019 15:01:36 -0500 Subject: [PATCH 02/59] fix changelog --- changelog.md | 87 ++++++++++++++++----------------------- scratch.js | 5 +-- tests/constructor.test.js | 2 +- 3 files changed, 38 insertions(+), 56 deletions(-) diff --git a/changelog.md b/changelog.md index 1f8370f4d..62dff65ba 100644 --- a/changelog.md +++ b/changelog.md @@ -6,17 +6,24 @@ compromise uses semver, and pushes to npm frequently - **Minor** is considered a behaviour/performance change. - **Patch** is an obvious, non-controversial bugfix -### v12   :postal_horn: +##### 12.2.2 -- [see Release Notes](https://github.com/spencermountain/compromise/wiki/v12-Release-Notes) +- update dependencies +- fix case-sensitive paths +- fix greedy-start match condition regression #651 +- fix single period sentence runtime error -##### 12.1.0 +##### 12.2.1 -- add 'sideEffect:false' flag to build -- considerable speedup (20%) in tagger -- ensure trimming of whitespace for root/clean/reduced text formats -- fix client-side logging -- more flexible params to `replace()` and `replaceWith()` +- fix 'aint' contraction +- make Doc.world writable +- update deps +- more tests +- fix shared period with acronym at end of sentence +- fix some mis-classification of contraction +- fix over-active emoji regex +- tag 'cookin', 'hootin' as `Gerund` +- support unicode single-quote symbols in contractions ##### 12.2.0 @@ -27,19 +34,17 @@ compromise uses semver, and pushes to npm frequently - fix matches with optional-end `foo?$` match syntax - add typescript types for subsets -##### 12.2.1 +##### 12.1.0 -- fix 'aint' contraction -- make Doc.world writable -- update deps -- more tests -- fix shared period with acronym at end of sentence -- fix some mis-classification of contraction -- fix over-active emoji regex -- tag 'cookin', 'hootin' as `Gerund` -- support unicode single-quote symbols in contractions +- add 'sideEffect:false' flag to build +- considerable speedup (20%) in tagger +- ensure trimming of whitespace for root/clean/reduced text formats +- fix client-side logging +- more flexible params to `replace()` and `replaceWith()` -### v11 +### 12.0.0   :postal_horn: + +- [see Release Notes](https://github.com/spencermountain/compromise/wiki/v12-Release-Notes) ##### 11.13.0 @@ -124,7 +129,7 @@ compromise uses semver, and pushes to npm frequently - support more complex noun-phrases with JustesonKatz in `.nouns()` -##### 11.0.0 +### v11 - support for persistent lexicon/tagset changes - `addTags, addWords, addRegs, addPlurals, addConjugations` methods to extend native data @@ -144,8 +149,6 @@ compromise uses semver, and pushes to npm frequently - `people().firstNames()`, `people().lastNames()` - split-out comma-separated adverbs -### v10 - ##### 10.7.2 - fix for '.watch' reserved word in efrt @@ -193,7 +196,7 @@ compromise uses semver, and pushes to npm frequently - fix return format of .isPlural(), so it acts like a match filter - less-greedy date tagging & ambiguous month fixes -##### 10.0.0 +### v10 - cleanup & rename some `.value()` methods - change lumping behaviour of lexicon terms with multiple words @@ -208,13 +211,11 @@ compromise uses semver, and pushes to npm frequently - changes params of `.replaceWith()` method to a 'keyTags' boolean - improved .debug() and logging on client-side -### v9   - ##### 9.1.0 - pretty-real filesize reduction by swapping es6 classes for es5 inheritance -##### 9.0.0 +### v9.0.0 - rename `Term.tag` object to `Term.tags` so the `.tag()` method can work throughout more-consistently - fix 'Auxillary' tag typo to 'Auxiliary' @@ -223,8 +224,6 @@ compromise uses semver, and pushes to npm frequently - adds `wordStart` and `wordEnd` offsets to `.out('offset')` for whitespace+punctuation - new `.has()` method for faster lookups -### v8   - ##### 8.2.0 - add `nlp.out('index')` method, 12 bugs @@ -233,23 +232,19 @@ compromise uses semver, and pushes to npm frequently - add `nlp.tokenize()` method for disabling pos-tagging of input -##### 8.0.0 +### v8.0.0 - less-ambitious date-parsing of nl-date forms - filesize reduction using [efrt](https://github.com/nlp-compromise/efrt) data structure (254k -> 214k) -### v7   :postal_horn: - ##### 7.0.15 - fix for IE9 -##### 7.0.0 +### v7   :postal_horn: - weee! [big change!](https://github.com/nlp-compromise/compromise/wiki/v7-Upgrade,-welcome) _npm package rename_ -### v6   - ##### 6.5.0 - builds now using browserify + derequire() @@ -262,12 +257,10 @@ compromise uses semver, and pushes to npm frequently - new nlp.lexicon({word:'POS'}) flow -##### 6.0.0 +### v6 - be consistent with `text.normal()`, `term.all_forms()`, `text.word_count()`. `text.normal()` includes sentence-terminators, like periods etc. -### v5   - ##### 5.2.0 - airport codes support, helper methods for specific POS @@ -276,12 +269,10 @@ compromise uses semver, and pushes to npm frequently - newlines split sentences -##### 5.0.0 +### v5 - Text methods now return this, instead of array of sentences -### v4   - ##### 4.12.0 - more-sensible responses for invalid, non-string inputs @@ -322,23 +313,19 @@ compromise uses semver, and pushes to npm frequently - hyphenated words are normalized into spaces -##### 4.0.0 +### v4.0.0 - grammar-aware match & replace functions -### v3   **(Breaking)** - ##### 3.0.2 - Statement & Question classes -##### 3.0.0 - Feb 2016 +### v3.0.0 Feb 2016 - split ngram, locale, and syllables into plugins in seperate repo -### v2 - -##### 2.0.0 - Nov 2015   **(Breaking)** +### 2.0.0 - Nov 2015 - es6 classes, babel building - better test coverage @@ -353,19 +340,15 @@ compromise uses semver, and pushes to npm frequently - lexicon can be augmented third-party - date parsing results are different -### v1 - ##### 1.1.0 - May 2015 - smarter handling of ambiguous contractions ("he's" -> ["he is", "he has"]) -##### 1.0.0 - May 2015 +### v1.0.0 - May 2015 - added name genders and beginning of co-reference resolution ('Tony' -> 'he') API. - small breaking change on `Noun.is_plural` and `Noun.is_entity`, affording significant pos() speedup. Bumped Major version for these changes. -### v0 - ##### 0.5.2 - May 2015 - Phrasal verbs ('step up'), firstnames and .people() diff --git a/scratch.js b/scratch.js index 88aa7211c..69cde23ef 100644 --- a/scratch.js +++ b/scratch.js @@ -3,6 +3,5 @@ const nlp = require('./src/index') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -let nlpObj = nlp('I love peaches. Yes I do. ') -const sen = nlpObj.sentences().data() -console.log(sen) +let str = `.` +nlp(str) diff --git a/tests/constructor.test.js b/tests/constructor.test.js index d74ac7c9a..0baf27cdb 100644 --- a/tests/constructor.test.js +++ b/tests/constructor.test.js @@ -27,7 +27,7 @@ test('tokenize() runs without pos-tagging', function(t) { //make sure it can handle garbage inputs test('garbage:', function(t) { - const garbage = ['', ' ', null, '\n\n', []] //{} + const garbage = ['', ' ', null, '\n\n', [], '.'] //{} garbage.forEach(function(g, i) { let num = nlp(g).list.length let msg = typeof g + ' text input #' + i From 483786d3ec7abbe7a59e9b2ffb5f353a1f86dbaf Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 18 Dec 2019 15:18:45 -0500 Subject: [PATCH 03/59] fix single period sentence runtime error --- scratch.js | 5 +++-- src/01-tokenizer/02-words.js | 5 ++++- tests/constructor.test.js | 22 ---------------------- tests/smoke.test.js | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 25 deletions(-) create mode 100644 tests/smoke.test.js diff --git a/scratch.js b/scratch.js index 69cde23ef..3a38b806c 100644 --- a/scratch.js +++ b/scratch.js @@ -3,5 +3,6 @@ const nlp = require('./src/index') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -let str = `.` -nlp(str) +let str = 'hello 🇵🇷.' +let doc = nlp(str).debug() +console.log(doc.text()) diff --git a/src/01-tokenizer/02-words.js b/src/01-tokenizer/02-words.js index 103c73f3a..ca580fed3 100644 --- a/src/01-tokenizer/02-words.js +++ b/src/01-tokenizer/02-words.js @@ -101,7 +101,10 @@ const splitWords = function(str) { } } //handle last one - if (carry && result.length > 0) { + if (carry) { + if (result.length === 0) { + result[0] = '' + } result[result.length - 1] += carry //put it on the end } // combine 'one / two' diff --git a/tests/constructor.test.js b/tests/constructor.test.js index 0baf27cdb..924c82329 100644 --- a/tests/constructor.test.js +++ b/tests/constructor.test.js @@ -24,25 +24,3 @@ test('tokenize() runs without pos-tagging', function(t) { t.end() }) - -//make sure it can handle garbage inputs -test('garbage:', function(t) { - const garbage = ['', ' ', null, '\n\n', [], '.'] //{} - garbage.forEach(function(g, i) { - let num = nlp(g).list.length - let msg = typeof g + ' text input #' + i - t.equal(num, 0, msg) - }) - let str = nlp(2).out() - t.equal(str, '2', 'integer-casted') - str = nlp(2.2).out() - t.equal(str, '2.2', 'float-casted') - - //garbage in lexicon too - str = nlp('hello', null).out() - t.equal(str, 'hello', 'null-lexicon') - - str = nlp('hello', 2).out() - t.equal(str, 'hello', 'int-lexicon') - t.end() -}) diff --git a/tests/smoke.test.js b/tests/smoke.test.js new file mode 100644 index 000000000..af0495fbe --- /dev/null +++ b/tests/smoke.test.js @@ -0,0 +1,33 @@ +const test = require('tape') +const nlp = require('./_lib') + +//make sure it can handle garbage inputs +test('garbage-inputs', function(t) { + const garbage = ['', ' ', null, '\n\n', []] //{} + garbage.forEach(function(g, i) { + let num = nlp(g).list.length + let msg = typeof g + ' text input #' + i + ' ' + g + t.equal(num, 0, msg) + }) + let str = nlp(2).out() + t.equal(str, '2', 'integer-casted') + str = nlp(2.2).out() + t.equal(str, '2.2', 'float-casted') + + //garbage in lexicon too + str = nlp('hello', null).out() + t.equal(str, 'hello', 'null-lexicon') + + str = nlp('hello', 2).out() + t.equal(str, 'hello', 'int-lexicon') + t.end() +}) + +test('only-punctuation', function(t) { + const garbage = ['.', ' - ', '...', '?', '&', '?,', '\n. \n', '🎵', '\n🇵🇷\n', '🇵🇷.', `🇷 %`] + garbage.forEach(function(str) { + let doc = nlp(str) + t.equal(doc.text(), str, "text-'" + str + "'") + }) + t.end() +}) From fda337f9efcdcd96ea7a0d8ed06b1f8304120349 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 18 Dec 2019 15:50:14 -0500 Subject: [PATCH 04/59] add new tutorials to readme --- README.md | 8 ++++---- scratch.js | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e3bc135ed..2119f4e4e 100644 --- a/README.md +++ b/README.md @@ -68,8 +68,8 @@ doc.if('the #Adjective of times').text() ``` ```js -if (doc.has('^simon says #Verb+')) { - return doc.match('#Verb .*').text() //'fire the lazer ..' +if (doc.has('simon says #Verb')) { + return true } ``` @@ -635,6 +635,7 @@ this plugin creates a wrapper around the default sentence objects. - **[Microservice Recipe](https://eventn.com/recipes/text-parsing-with-nlp-compromise)** - by Eventn - **[Building Text-Based Games](https://killalldefects.com/2019/09/24/building-text-based-games-with-compromise-nlp/)** - by Matt Eland - **[Fun with javascript in BigQuery](https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83#6e09)** - by Felipe Hoffa +- - **[Natural Language Processing... in the Browser???](https://dev.to/charlesdlandau/natural-language-processing-in-the-browser-52hj)** - by Charles Landau ##### Talks: @@ -756,9 +757,8 @@ this plugin creates a wrapper around the default sentence objects. -   **[reText](https://github.com/wooorm/retext)** - very impressive [text utilities](https://github.com/wooorm/retext/blob/master/doc/plugins.md) in javascript -   **[jsPos](https://code.google.com/archive/p/jspos/)** - javascript build of the time-tested Brill-tagger -   **[spaCy](https://spacy.io/)** - speedy, multilingual tagger in C/python +-   **[Prose](https://github.com/jdkato/prose/)** - quick tagger in Go by Joseph Kato MIT - - diff --git a/scratch.js b/scratch.js index 3a38b806c..f11de2a9a 100644 --- a/scratch.js +++ b/scratch.js @@ -3,6 +3,7 @@ const nlp = require('./src/index') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -let str = 'hello 🇵🇷.' -let doc = nlp(str).debug() +let str = ' 🇵🇷.' +let doc = nlp(str) +console.log(doc.termList(1)) console.log(doc.text()) From f5d33f57af2f367f26431c057a84d3d826ab5cc2 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 12:12:45 -0500 Subject: [PATCH 05/59] prefer titleCase method to tag --- changelog.md | 9 +++-- scratch.js | 12 ++++--- src/02-tagger/02-fallbacks/02-case.js | 10 +++--- src/02-tagger/04-correction/fixNouns.js | 2 +- src/02-tagger/04-correction/fixPerson.js | 42 ++++++++++++------------ src/Doc/methods/transform/04-case.js | 1 - 6 files changed, 40 insertions(+), 36 deletions(-) diff --git a/changelog.md b/changelog.md index 62dff65ba..bb4a09c97 100644 --- a/changelog.md +++ b/changelog.md @@ -2,12 +2,15 @@ compromise uses semver, and pushes to npm frequently (github-releases occasionally) -- **Major** is considered a breaking api change, -- **Minor** is considered a behaviour/performance change. -- **Patch** is an obvious, non-controversial bugfix +- **Major** is a breaking api change - method or response changes that can cause runtime errors. +- **Minor** is a behaviour change - Tagging or grammar changes. +- **Patch** is an obvious, non-controversial bugfix. + +While all _Major_ releases should be reviewed, our only two _large_ releases are **v6** in 2016 and and **v12** in 2019. Others have been mostly incremental, or niche. ##### 12.2.2 +- prefer `@titleCase` instead of `#TitleCase` tag - update dependencies - fix case-sensitive paths - fix greedy-start match condition regression #651 diff --git a/scratch.js b/scratch.js index f11de2a9a..cd897304d 100644 --- a/scratch.js +++ b/scratch.js @@ -1,9 +1,11 @@ const nlp = require('./src/index') -// nlp.verbose(true) +nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -let str = ' 🇵🇷.' -let doc = nlp(str) -console.log(doc.termList(1)) -console.log(doc.text()) +// let str = ' 🇵🇷.' +// let doc = nlp(str) +// console.log(doc.termList(1)) +// console.log(doc.text()) + +nlp('text. Pretty inspired').debug() diff --git a/src/02-tagger/02-fallbacks/02-case.js b/src/02-tagger/02-fallbacks/02-case.js index 97fb99b28..eb4e481b4 100644 --- a/src/02-tagger/02-fallbacks/02-case.js +++ b/src/02-tagger/02-fallbacks/02-case.js @@ -7,11 +7,11 @@ const checkCase = function(terms, world) { //is it a titlecased word? if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) { // tag it as titlecase, if possible - if (i !== 0) { - term.tag('TitleCase', 'case', world) - } else if (term.tags.Person || term.tags.Organization || term.tags.Place) { - term.tag('TitleCase', 'case-person', world) - } + // if (i !== 0) { + // term.tag('TitleCase', 'case', world) + // } else if (term.tags.Person || term.tags.Organization || term.tags.Place) { + // term.tag('TitleCase', 'case-person', world) + // } // can we call it a noun? if (i !== 0) { //sure! diff --git a/src/02-tagger/04-correction/fixNouns.js b/src/02-tagger/04-correction/fixNouns.js index 8d9a47862..f717d96c9 100644 --- a/src/02-tagger/04-correction/fixNouns.js +++ b/src/02-tagger/04-correction/fixNouns.js @@ -38,7 +38,7 @@ const fixNouns = function(doc) { org.match('#Organization #Country').tag('Organization', 'org-country') org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org') org - .match('#TitleCase #Organization') + .match('@titleCase #Organization') .ifNo('@hasComma') .tag('Organization', 'titlecase-org') } diff --git a/src/02-tagger/04-correction/fixPerson.js b/src/02-tagger/04-correction/fixPerson.js index 2e70b8970..44a290797 100644 --- a/src/02-tagger/04-correction/fixPerson.js +++ b/src/02-tagger/04-correction/fixPerson.js @@ -10,7 +10,7 @@ const fixPerson = function(doc) { let hon = doc.if('#Honorific') if (hon.found === true) { //mr Putin - doc.match('(mr|mrs|ms|dr) (#TitleCase|#Possessive)+').tag('#Person', 'mr-putin') + doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin') //mr X hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase') //remove single 'mr' @@ -20,13 +20,13 @@ const fixPerson = function(doc) { } //methods requiring a titlecase - let title = doc.if('#TitleCase') + let title = doc.if('@titleCase') if (title.found === true) { - title.match('#Acronym #TitleCase').tagSafe('#Person', 'acronym-titlecase') + title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase') //ludwig van beethovan - title.match('#TitleCase (van|al|bin) #TitleCase').tagSafe('Person', 'titlecase-van-titlecase') + title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase') //jose de Sucre - title.match('#TitleCase (de|du) la? #TitleCase').tagSafe('Person', 'titlecase-van-titlecase') + title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase') //Foo U Ford title .match('[#ProperNoun] #Person') @@ -35,23 +35,23 @@ const fixPerson = function(doc) { //pope francis title - .match('(lady|queen|sister) #TitleCase') + .match('(lady|queen|sister) @titleCase') .ifNo('#Date') .ifNo('#Honorific') .tag('#FemaleName', 'lady-titlecase') title - .match('(king|pope|father) #TitleCase') + .match('(king|pope|father) @titleCase') .ifNo('#Date') .tag('#MaleName', 'poe') // jean Foobar - title.match(maybeNoun + ' #Acronym? #TitleCase').tagSafe('Person', 'ray-smith') + title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith') // rob Foobar - title.match(maybeVerb + ' #Acronym? #TitleCase').tag('Person', 'rob-smith') + title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith') // rusty Foobar - title.match(maybeAdj + ' #Acronym? #TitleCase').tag('Person', 'rusty-smith') + title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith') // june Foobar - title.match(maybeDate + ' #Acronym? (#TitleCase && !#Month)').tag('Person', 'june-smith') + title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith') } let person = doc.if('#Person') @@ -72,8 +72,8 @@ const fixPerson = function(doc) { .tag('Honorific', 'ambg-honorifics') //Morgan Shlkjsfne title - .match('#Person #TitleCase') - .match('#TitleCase #Noun') + .match('#Person @titleCase') + .match('@titleCase #Noun') .tagSafe('Person', 'person-titlecase') //a bunch of ambiguous first names @@ -117,8 +117,8 @@ const fixPerson = function(doc) { //this one is tricky let al = person.if('al') if (al.found === true) { - al.match('al (#Person|#TitleCase)').tagSafe('#Person', 'al-borlen') - al.match('#TitleCase al #TitleCase').tagSafe('#Person', 'arabic-al-arabic') + al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen') + al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic') } let firstName = person.if('#FirstName') @@ -128,11 +128,11 @@ const fixPerson = function(doc) { //Osama bin Laden firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun') //John L. Foo - firstName.match('#FirstName #Acronym #TitleCase').tag('Person', 'firstname-acronym-titlecase') + firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase') //Andrew Lloyd Webber - firstName.match('#FirstName #FirstName #TitleCase').tag('Person', 'firstname-firstname-titlecase') + firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase') //Mr Foo - firstName.match('#Honorific #FirstName? #TitleCase').tag('Person', 'Honorific-TitleCase') + firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase') //peter the great firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5') @@ -143,7 +143,7 @@ const fixPerson = function(doc) { //John Foo firstName - .match('#FirstName #TitleCase #TitleCase?') + .match('#FirstName @titleCase @titleCase?') .match('#Noun+') .tag('Person', 'firstname-titlecase') //Joe K. Sombrero @@ -170,7 +170,7 @@ const fixPerson = function(doc) { // Firstname x (dangerous) let tmp = firstName - .match('#FirstName (#Noun|#TitleCase)') + .match('#FirstName (#Noun|@titleCase)') .ifNo('^#Possessive') .ifNo('#ClauseEnd .') .ifNo('#Pronoun') @@ -194,7 +194,7 @@ const fixPerson = function(doc) { .tag('#FirstName', 'maybe-lastname') //Jani K. Smith lastName - .match('(#TitleCase|#Singular) #Acronym? #LastName') + .match('(@titleCase|#Singular) #Acronym? #LastName') .ifNo('#Date') .tag('#Person', 'title-acro-noun') .lastTerm() diff --git a/src/Doc/methods/transform/04-case.js b/src/Doc/methods/transform/04-case.js index 3e32b546f..0cd276c70 100644 --- a/src/Doc/methods/transform/04-case.js +++ b/src/Doc/methods/transform/04-case.js @@ -18,7 +18,6 @@ exports.toUpperCase = function() { /** upper-case the first letter of each term */ exports.toTitleCase = function() { - this.tag('TitleCase') return eachTerm(this, 'toTitleCase') } /** remove whitespace and title-case each term */ From a9a9d12526acf3c4b59497b181e0bd772c003099 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 13:20:05 -0500 Subject: [PATCH 06/59] fix for #647 --- .eslintrc | 7 +++++-- changelog.md | 4 ++-- scratch.js | 3 ++- src/02-tagger/01-init/data/startsWith.js | 24 ++++++++++++------------ src/02-tagger/02-fallbacks/02-case.js | 22 ++++++++-------------- src/02-tagger/02-fallbacks/index.js | 2 +- src/Doc/match/parseToken.js | 2 +- tests/smoke.test.js | 16 ++++++++++++++++ 8 files changed, 47 insertions(+), 33 deletions(-) diff --git a/.eslintrc b/.eslintrc index a618f3642..f16bd10cb 100644 --- a/.eslintrc +++ b/.eslintrc @@ -36,6 +36,9 @@ "no-constant-condition": 1, "no-unused-expressions": 2, "no-undefined": 0, - "no-undef": 2 - } + "no-undef": 2, + "security/detect-object-injection": 0 + }, + "plugins": ["security"], + "extends": ["plugin:security/recommended"] } diff --git a/changelog.md b/changelog.md index bb4a09c97..55bc4d4d4 100644 --- a/changelog.md +++ b/changelog.md @@ -15,6 +15,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - fix case-sensitive paths - fix greedy-start match condition regression #651 - fix single period sentence runtime error +- fix potentially-unsafe regexes ##### 12.2.1 @@ -47,7 +48,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are ### 12.0.0   :postal_horn: -- [see Release Notes](https://github.com/spencermountain/compromise/wiki/v12-Release-Notes) +- see **[Release Notes](https://github.com/spencermountain/compromise/wiki/v12-Release-Notes)** ##### 11.13.0 @@ -130,7 +131,6 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - nouns().articles() method - neighborhoods as #Place - support more complex noun-phrases with JustesonKatz in `.nouns()` - ### v11 diff --git a/scratch.js b/scratch.js index cd897304d..8d30d70ac 100644 --- a/scratch.js +++ b/scratch.js @@ -8,4 +8,5 @@ nlp.verbose(true) // console.log(doc.termList(1)) // console.log(doc.text()) -nlp('text. Pretty inspired').debug() +nlp('text. Pretty inspired Feeling.').debug() +// nlp('16.125').debug() diff --git a/src/02-tagger/01-init/data/startsWith.js b/src/02-tagger/01-init/data/startsWith.js index 26ba82c1a..1ab7e89a5 100644 --- a/src/02-tagger/01-init/data/startsWith.js +++ b/src/02-tagger/01-init/data/startsWith.js @@ -6,16 +6,16 @@ module.exports = [ [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 //money - [/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/, ['Money', 'Value']], //like $5.30 - [/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/, ['Money', 'Value']], //like $5,231.30 - [/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //like 400usd + [/^[-+]?[$€¥£][0-9]+\.?[0-9]{0,2}[a-z]{0,4}?$/, ['Money', 'Value']], //like $5.30 + [/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+?\.?[0-9]{0,2}$/, ['Money', 'Value']], //like $5,231.30 + [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //like 400usd //web tags [/^\w+@\w+\.[a-z]{2,3}$/, 'Email'], //not fancy [/^#[a-z0-9_\u00C0-\u00FF]{2,}$/, 'HashTag'], [/^@\w{2,}$/, 'AtMention'], [/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/, 'Url'], //with http/www - [/^[\w\.\/]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain + [/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain //dates/times [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32 @@ -35,20 +35,20 @@ module.exports = [ //slang things [/^(lol)+[sz]$/, 'Expression'], //lol [/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], - [/^[\-\+]?[0-9]+(\.[0-9])*$/, ['Cardinal', 'NumericValue']], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 //numbers + [/^[\-\+]?[0-9]+(\.[0-9])*$/, ['Cardinal', 'NumericValue']], [/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/, ['Cardinal', 'NumericValue']], //like 5 - [/^[-+]?[0-9]+(.[0-9]+)?$/, ['Cardinal', 'NumericValue']], //like +5.0 - [/^[0-9\.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 - [/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/, 'NumericValue'], //like 5,999.0 - [/^.?[0-9]+([0-9,.]+)?%$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. + [/^[-+]?[0-9]+(\.[0-9])+?$/, ['Cardinal', 'NumericValue']], //like +5.0 + [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 + [/^[-+]?[0-9.,]{1,3}(,[0-9]{3})+?(\.[0-9])+?$/, 'NumericValue'], //like 5,999.0 + [/^\.?[0-9]+([0-9,.])*%$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. [/^[0-9]{1,4}\/[0-9]{1,4}$/, 'Fraction'], //3/2ths - [/^[0-9\.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 - [/^[0-9][0-9,\.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th + [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 + [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th [/[0-9]\+$/, ['Cardinal', 'NumericValue']], //10+ [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th - [/^[0-9\.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp + [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp ] diff --git a/src/02-tagger/02-fallbacks/02-case.js b/src/02-tagger/02-fallbacks/02-case.js index eb4e481b4..b9971728c 100644 --- a/src/02-tagger/02-fallbacks/02-case.js +++ b/src/02-tagger/02-fallbacks/02-case.js @@ -2,20 +2,14 @@ const titleCase = /^[A-Z][a-z'\u00C0-\u00FF]/ const hasNumber = /[0-9]/ /** look for any grammar signals based on capital/lowercase */ -const checkCase = function(terms, world) { - terms.forEach((term, i) => { - //is it a titlecased word? - if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) { - // tag it as titlecase, if possible - // if (i !== 0) { - // term.tag('TitleCase', 'case', world) - // } else if (term.tags.Person || term.tags.Organization || term.tags.Place) { - // term.tag('TitleCase', 'case-person', world) - // } - // can we call it a noun? - if (i !== 0) { - //sure! - term.tag('ProperNoun', 'case-noun', world) +const checkCase = function(doc) { + let world = doc.world + doc.list.forEach(p => { + let terms = p.terms() + for (let i = 1; i < terms.length; i++) { + const term = terms[i] + if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) { + term.tag('ProperNoun', 'titlecase-noun', world) } } }) diff --git a/src/02-tagger/02-fallbacks/index.js b/src/02-tagger/02-fallbacks/index.js index 2cce0525e..9eb8f4605 100644 --- a/src/02-tagger/02-fallbacks/index.js +++ b/src/02-tagger/02-fallbacks/index.js @@ -13,7 +13,7 @@ const fallbacks = function(doc, terms) { step.neighbours(terms, world) // is there a case-sensitive clue? - step.case(terms, world) + step.case(doc) // check 'rewatch' as 'watch' step.stem(terms, world) diff --git a/src/Doc/match/parseToken.js b/src/Doc/match/parseToken.js index 569cede46..ac4ae1430 100644 --- a/src/Doc/match/parseToken.js +++ b/src/Doc/match/parseToken.js @@ -101,7 +101,7 @@ const parseToken = function(w) { //regex if (start(w) === '/' && end(w) === '/') { w = stripBoth(w) - obj.regex = new RegExp(w) + obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp return obj } //soft-match diff --git a/tests/smoke.test.js b/tests/smoke.test.js index af0495fbe..29733a0b5 100644 --- a/tests/smoke.test.js +++ b/tests/smoke.test.js @@ -23,6 +23,22 @@ test('garbage-inputs', function(t) { t.end() }) +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' + ) + t.equal(doc.has('#NumericValue'), true, 'found-long-number') + + 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%' + ) + t.equal(doc.has('#Percent'), true, 'found-long-percent') + + doc = nlp('-$22,999,666,454,234,523,233,234,234,234,234,234,234,234,999,929,838,234,234,234,234,234,234,234.00') + t.equal(doc.has('#Money'), true, 'found-long-money') + t.end() +}) + test('only-punctuation', function(t) { const garbage = ['.', ' - ', '...', '?', '&', '?,', '\n. \n', '🎵', '\n🇵🇷\n', '🇵🇷.', `🇷 %`] garbage.forEach(function(str) { From 6fe771dbfbb68eb52cd1bd5a2a8e9a17971876b9 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 14:07:49 -0500 Subject: [PATCH 07/59] more tests for #616 --- scratch.js | 2 +- src/02-tagger/01-init/data/endsWith.js | 28 +++++--------- tests/tagger/number.test.js | 29 ++++++++++++++ tests/tagger/tagger.test.js | 9 ++--- tests/tagger/tense.test.js | 53 ++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 25 deletions(-) create mode 100644 tests/tagger/number.test.js create mode 100644 tests/tagger/tense.test.js diff --git a/scratch.js b/scratch.js index 8d30d70ac..9da65856b 100644 --- a/scratch.js +++ b/scratch.js @@ -8,5 +8,5 @@ nlp.verbose(true) // console.log(doc.termList(1)) // console.log(doc.text()) -nlp('text. Pretty inspired Feeling.').debug() // nlp('16.125').debug() +nlp('amused').debug() diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index 89077859b..5281afdc2 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -24,15 +24,17 @@ module.exports = { ], c: [[/.[^aeiou]ic$/, Adj]], d: [ - [/.[ia]sed$/, Adj], - [/.[gt]led$/, Adj], - [/.[td]ed$/, Past], - [/.[aeiou]red$/, Past], + [/.[iao]s?sed$/, Past], //franchised + [/.[gt]led$/, Past], //startled + [/.[aeiou][sg]hed$/, Past], //stashed, sighed + [/.[td]ed$/, Past], //wetted + [/.[aeiou]red$/, Past], //stored + [/.[aeiou]n[cs]ed$/, Past], //lanced [/.[^aeiou]led$/, Past], //rumbled + [/[aeiou]n?c?ked$/, Past], //hooked + [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed [/[^aeiou]ard$/, Sing], [/[aeiou][^aeiou]id$/, Adj], - [/[aeiou]c?ked$/, Past], //hooked - [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed [/.[vrl]id$/, Adj], ], e: [ @@ -55,12 +57,7 @@ module.exports = { k: [ [/^(k)+$/, Exp], //kkkk ], - l: [ - [/.[gl]ial$/, Adj], - [/.[^aeiou]ful$/, Adj], - [/.[nrtumcd]al$/, Adj], - [/.[^aeiou][ei]al$/, Adj], - ], + l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]], m: [ [/.[^aeiou]ium$/, Sing], [/[^aeiou]ism$/, Sing], @@ -84,12 +81,7 @@ module.exports = { [/[^i]fer$/, Inf], [/.[^aeiou][ao]pher$/, Actor], ], - t: [ - [/.[di]est$/, 'Superlative'], - [/.[icldtgrv]ent$/, Adj], - [/[aeiou].*ist$/, Adj], - [/^[a-z]et$/, Verb], - ], + t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]], s: [ [/.[rln]ates$/, Pres], [/.[^z]ens$/, Verb], diff --git a/tests/tagger/number.test.js b/tests/tagger/number.test.js new file mode 100644 index 000000000..1699c315a --- /dev/null +++ b/tests/tagger/number.test.js @@ -0,0 +1,29 @@ +const test = require('tape') +const nlp = require('../_lib') + +test('number-tag:', function(t) { + let arr = [ + ['N.V.,', 'Noun'], + ['16.125', 'Cardinal'], + ['+160.125', 'Cardinal'], + ['-0.1', 'Cardinal'], + ['-0.1%', 'Percent'], + ['+2,340.91%', 'Percent'], + ['-2340%', 'Percent'], + ['$-2340.01', 'Money'], + ['-$2340', 'Money'], + ['+$2340.01', 'Money'], + ['$2340.01', 'Money'], + ['£1,000,000', 'Money'], + ['$19', 'Money'], + ['2,000₽', 'Money'], + ['2.23₽', 'Money'], + ['₺50', 'Money'], + ['1,000,000p', 'Cardinal'], + ] + arr.forEach(function(a) { + let doc = nlp(a[0]) + t.equal(doc.has('#' + a[1]), true, a[0]) + }) + t.end() +}) diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index e8556ea2c..76eb3c334 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -1,9 +1,8 @@ const test = require('tape') const nlp = require('../_lib') -// const pos_test = require('../_lib').pos_test test('pos-basic-tag:', function(t) { - ;[ + let arr = [ ['John is pretty', ['Person', 'Copula', 'Adjective']], ['John was lofty', ['Person', 'Copula', 'Adjective']], ['John Smith was lofty', ['FirstName', 'LastName', 'Copula', 'Adjective']], @@ -91,9 +90,6 @@ test('pos-basic-tag:', function(t) { ['it was just', ['Noun', 'Copula', 'Adjective']], ['it was just gorgeous', ['Noun', 'Copula', 'Adverb', 'Adjective']], - ['N.V.,', ['Noun']], - ['16.125', ['Cardinal']], - ['$19', ['Money']], ['butterfly', ['Singular']], ['he blamed the girl', ['Pronoun', 'PastTense', 'Determiner', 'Singular']], ['his fine', ['Possessive', 'Noun']], @@ -118,7 +114,8 @@ test('pos-basic-tag:', function(t) { ['thom is smart', ['ProperNoun', 'Verb', 'Adjective']], [`i met April O'neil`, ['Pronoun', 'PastTense', 'Person', 'Person']], - ].forEach(function(a) { + ] + arr.forEach(function(a) { let terms = nlp(a[0]).json(0).terms terms.forEach((term, i) => { let tag = a[1][i] diff --git a/tests/tagger/tense.test.js b/tests/tagger/tense.test.js new file mode 100644 index 000000000..244e8985d --- /dev/null +++ b/tests/tagger/tense.test.js @@ -0,0 +1,53 @@ +const test = require('tape') +const nlp = require('../_lib') + +test('verb-tense-tag:', function(t) { + let arr = [ + ['linked', 'PastTense'], + ['impoverished', 'PastTense'], + ['stashed', 'PastTense'], + ['pounced', 'PastTense'], + ['punched', 'PastTense'], + ['rumbled', 'PastTense'], + ['lanced', 'PastTense'], + ['wetted', 'PastTense'], + ['amused', 'PastTense'], + ['bruised', 'PastTense'], + ['crossed', 'PastTense'], + ['dressed', 'PastTense'], + ['exposed', 'PastTense'], + ['tossed', 'PastTense'], + ['tensed', 'PastTense'], + ['hosed', 'PastTense'], + ['balanced', 'PastTense'], + ['seduced', 'PastTense'], + ['dubbed', 'PastTense'], + ['trascribed', 'PastTense'], + ['barred', 'PastTense'], + ['vetoed', 'PastTense'], + ['consoled', 'PastTense'], + ['fuelled', 'PastTense'], + ['nailed', 'PastTense'], + ['nestled', 'PastTense'], + ['riddled', 'PastTense'], + ['sailed', 'PastTense'], + ['totaled', 'PastTense'], + ['whirled', 'PastTense'], + ['drenched', 'PastTense'], + ['fetched', 'PastTense'], + ['sighed', 'PastTense'], + ['encouraged', 'PastTense'], + ['messaged', 'PastTense'], + ['tugged', 'PastTense'], + ['wedged', 'PastTense'], + ['beeped', 'PastTense'], + ['topped', 'PastTense'], + ['wiped', 'PastTense'], + ['logged', 'PastTense'], + ] + arr.forEach(function(a) { + let doc = nlp(a[0]) + t.equal(doc.has('#' + a[1]), true, a[0]) + }) + t.end() +}) From e34b84f9bfc8f14bb11968ddead5bef0b4a3b427 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 14:16:32 -0500 Subject: [PATCH 08/59] more tests --- changelog.md | 1 + tests/tagger/tense.test.js | 75 ++++++++++++++++++++++++++------------ 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/changelog.md b/changelog.md index 55bc4d4d4..978569af4 100644 --- a/changelog.md +++ b/changelog.md @@ -16,6 +16,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - fix greedy-start match condition regression #651 - fix single period sentence runtime error - fix potentially-unsafe regexes +- improved tagging for '-ed' verbs (#616) ##### 12.2.1 diff --git a/tests/tagger/tense.test.js b/tests/tagger/tense.test.js index 244e8985d..72663fdc6 100644 --- a/tests/tagger/tense.test.js +++ b/tests/tagger/tense.test.js @@ -3,14 +3,16 @@ const nlp = require('../_lib') test('verb-tense-tag:', function(t) { let arr = [ - ['linked', 'PastTense'], + //-ced + ['lanced', 'PastTense'], + ['balanced', 'PastTense'], + ['seduced', 'PastTense'], + + //-shed ['impoverished', 'PastTense'], ['stashed', 'PastTense'], - ['pounced', 'PastTense'], - ['punched', 'PastTense'], - ['rumbled', 'PastTense'], - ['lanced', 'PastTense'], - ['wetted', 'PastTense'], + ['crashed', 'PastTense'], + //-sed ['amused', 'PastTense'], ['bruised', 'PastTense'], ['crossed', 'PastTense'], @@ -19,12 +21,8 @@ test('verb-tense-tag:', function(t) { ['tossed', 'PastTense'], ['tensed', 'PastTense'], ['hosed', 'PastTense'], - ['balanced', 'PastTense'], - ['seduced', 'PastTense'], - ['dubbed', 'PastTense'], - ['trascribed', 'PastTense'], - ['barred', 'PastTense'], - ['vetoed', 'PastTense'], + + //-led ['consoled', 'PastTense'], ['fuelled', 'PastTense'], ['nailed', 'PastTense'], @@ -33,17 +31,48 @@ test('verb-tense-tag:', function(t) { ['sailed', 'PastTense'], ['totaled', 'PastTense'], ['whirled', 'PastTense'], - ['drenched', 'PastTense'], - ['fetched', 'PastTense'], - ['sighed', 'PastTense'], - ['encouraged', 'PastTense'], - ['messaged', 'PastTense'], - ['tugged', 'PastTense'], - ['wedged', 'PastTense'], - ['beeped', 'PastTense'], - ['topped', 'PastTense'], - ['wiped', 'PastTense'], - ['logged', 'PastTense'], + + //-ked + ['linked', 'PastTense'], + ['freaked', 'PastTense'], + ['tucked', 'PastTense'], + ['cocked', 'PastTense'], + + // ['pounced', 'PastTense'], + // ['punched', 'PastTense'], + // ['rumbled', 'PastTense'], + // ['wetted', 'PastTense'], + // ['dubbed', 'PastTense'], + // ['trascribed', 'PastTense'], + // ['barred', 'PastTense'], + // ['vetoed', 'PastTense'], + // ['drenched', 'PastTense'], + // ['fetched', 'PastTense'], + // ['sighed', 'PastTense'], + // ['encouraged', 'PastTense'], + // ['messaged', 'PastTense'], + // ['tugged', 'PastTense'], + // ['wedged', 'PastTense'], + // ['beeped', 'PastTense'], + // ['topped', 'PastTense'], + // ['wiped', 'PastTense'], + // ['logged', 'PastTense'], + // ['displayed', 'PastTense'], + // ['skyped', 'PastTense'], + // ['swallowed', 'PastTense'], + // ['viewed', 'PastTense'], + // ['wed', 'PastTense'], + // ['issued', 'PastTense'], + // ['subdued', 'PastTense'], + // ['defended', 'PastTense'], + // ['engulfed', 'PastTense'], + // ['fed', 'PastTense'], + // ['winged', 'PastTense'], + // ['amazed', 'PastTense'], + // ['mixed', 'PastTense'], + // ['shoved', 'PastTense'], + // ['attained', 'PastTense'], + // ['warmed', 'PastTense'], ] arr.forEach(function(a) { let doc = nlp(a[0]) From 8cb3a5229c904b0fd98df7cdb92985364581130d Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 14:30:49 -0500 Subject: [PATCH 09/59] more --- scratch.js | 2 +- src/02-tagger/01-init/data/endsWith.js | 21 +++-- src/02-tagger/01-init/data/suffixMap.js | 109 ++++++++++++------------ tests/tagger/tagger.test.js | 1 + 4 files changed, 72 insertions(+), 61 deletions(-) diff --git a/scratch.js b/scratch.js index 9da65856b..46d196248 100644 --- a/scratch.js +++ b/scratch.js @@ -9,4 +9,4 @@ nlp.verbose(true) // console.log(doc.text()) // nlp('16.125').debug() -nlp('amused').debug() +nlp('whirled').debug() diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index 5281afdc2..fd098b820 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -24,16 +24,25 @@ module.exports = { ], c: [[/.[^aeiou]ic$/, Adj]], d: [ - [/.[iao]s?sed$/, Past], //franchised - [/.[gt]led$/, Past], //startled + //-hed [/.[aeiou][sg]hed$/, Past], //stashed, sighed - [/.[td]ed$/, Past], //wetted + //-red [/.[aeiou]red$/, Past], //stored - [/.[aeiou]n[cs]ed$/, Past], //lanced - [/.[^aeiou]led$/, Past], //rumbled + [/[^aeiou]ard$/, Sing], //card + //-led + [/.[bcdgt]led$/, Past], //startled, rumbled + [/.[aou]led$/, Past], //impaled + //-sed + [/.[iao]sed$/, Past], //franchised + //-ked [/[aeiou]n?c?ked$/, Past], //hooked + + [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + [/.(pp|ll|ss|ff|gg|tt)ed$/, Past], //popped + [/.[td]ed$/, Past], //wetted [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed - [/[^aeiou]ard$/, Sing], + + //-id [/[aeiou][^aeiou]id$/, Adj], [/.[vrl]id$/, Adj], ], diff --git a/src/02-tagger/01-init/data/suffixMap.js b/src/02-tagger/01-init/data/suffixMap.js index bc86b92ed..300318494 100644 --- a/src/02-tagger/01-init/data/suffixMap.js +++ b/src/02-tagger/01-init/data/suffixMap.js @@ -27,98 +27,99 @@ module.exports = [ }, { //3-letter - que: Adj, - lar: Adj, + ' so': Avb, + "'ll": Modal, + "'re": 'Copula', + azy: Adj, + end: Vb, ffy: Adj, + ify: Inf, + ing: 'Gerund', //likely to be converted to Adj after lexicon pass + ize: Inf, + lar: Adj, + mum: Adj, + nes: Pres, nny: Adj, - rmy: Adj, - azy: Adj, oid: Adj, - mum: Adj, ous: Adj, - end: Vb, - sis: Sing, + que: Adj, + rmy: Adj, rol: Sing, - ize: Inf, - ify: Inf, + sis: Sing, zes: Pres, - nes: Pres, - ing: 'Gerund', //likely to be converted to Adj after lexicon pass - ' so': Avb, - "'ll": Modal, - "'re": 'Copula', }, { //4-letter - teen: 'Value', - tors: Noun, amed: Past, + aped: Past, ched: Past, - ends: Vb, - oses: Pres, - fies: Pres, - ects: Pres, + lked: Past, nded: Past, - cede: Inf, - tage: Inf, - gate: Inf, - vice: Sing, - tion: Sing, cted: Past, + + akis: Last, //greek + cede: Inf, + chuk: Last, //east-europe + czyk: Last, //polish (male) + ects: Pres, + ends: Vb, + enko: Last, //east-europe ette: Sing, - some: Adj, - llen: Adj, - ried: Adj, - gone: Adj, - made: Adj, + fies: Pres, fore: Avb, - less: Avb, + gate: Inf, + gone: Adj, ices: Plrl, - ions: Plrl, ints: Plrl, - aped: Past, - lked: Past, + ions: Plrl, + less: Avb, + llen: Adj, + made: Adj, + nsen: Last, //norway + oses: Pres, ould: Modal, - tive: Actor, + some: Adj, sson: Last, //swedish male - czyk: Last, //polish (male) - chuk: Last, //east-europe - enko: Last, //east-europe - akis: Last, //greek - nsen: Last, //norway + tage: Inf, + teen: 'Value', + tion: Sing, + tive: Actor, + tors: Noun, + vice: Sing, }, { //5-letter - fully: Avb, - where: Avb, - wards: Avb, - urned: Past, tized: Past, + urned: Past, eased: Past, + ances: Plrl, - tures: Plrl, - ports: Plrl, + bound: Adj, ettes: Plrl, + fully: Avb, + ishes: Pres, ities: Plrl, - rough: Adj, + marek: Last, //polish (male) + nssen: Last, //norway ology: Noun, - bound: Adj, - tieth: 'Ordinal', - ishes: Pres, + ports: Plrl, + rough: Adj, tches: Pres, - nssen: Last, //norway - marek: Last, //polish (male) + tieth: 'Ordinal', + tures: Plrl, + wards: Avb, + where: Avb, }, { //6-letter + auskas: Last, //lithuania keeper: Actor, logist: Actor, - auskas: Last, //lithuania teenth: 'Value', }, { //7-letter - sdottir: Last, //swedish female opoulos: Last, //greek + sdottir: Last, //swedish female }, ] diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 76eb3c334..51e4fb33b 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -100,6 +100,7 @@ test('pos-basic-tag:', function(t) { ['his fines', ['Possessive', 'Noun']], ['100+ rumours', ['Value', 'Plural']], ['John & John,', ['Noun', 'Noun', 'Noun']], + // ['i am gutted', ['Noun', 'PastTense', 'Adjective']], //abbreviations [ From f1315f37c660bc78e70e23bb463ad13f2dd7dc20 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 14:52:57 -0500 Subject: [PATCH 10/59] ambiguous dates wed, sat, sun --- data/dates/weekdays.js | 6 ++-- scratch.js | 2 +- src/02-tagger/01-init/data/endsWith.js | 20 ++++++----- src/02-tagger/01-init/data/suffixMap.js | 1 + src/02-tagger/04-correction/fixDates.js | 4 ++- src/World/_data.js | 2 +- src/World/data/conjugations.js | 3 ++ tests/tagger/tense.test.js | 48 ++++++++++++------------- 8 files changed, 47 insertions(+), 39 deletions(-) diff --git a/data/dates/weekdays.js b/data/dates/weekdays.js index 5543eb997..5f0d35dd0 100644 --- a/data/dates/weekdays.js +++ b/data/dates/weekdays.js @@ -8,11 +8,11 @@ module.exports = [ 'sunday', 'mon', 'tues', - 'wed', + // 'wed', 'thurs', 'fri', - 'sat', - 'sun', + // 'sat', + // 'sun', 'mondays', 'tuesdays', 'wednesdays', diff --git a/scratch.js b/scratch.js index 46d196248..e64828f1e 100644 --- a/scratch.js +++ b/scratch.js @@ -9,4 +9,4 @@ nlp.verbose(true) // console.log(doc.text()) // nlp('16.125').debug() -nlp('whirled').debug() +nlp('wed').debug() diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index fd098b820..e892d2f9d 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -24,25 +24,27 @@ module.exports = { ], c: [[/.[^aeiou]ic$/, Adj]], d: [ + //==-ed== + //double-consonant + [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped //-hed [/.[aeiou][sg]hed$/, Past], //stashed, sighed - //-red + //-rd [/.[aeiou]red$/, Past], //stored - [/[^aeiou]ard$/, Sing], //card + [/.[aeiou]r?ried$/, Past], //buried //-led - [/.[bcdgt]led$/, Past], //startled, rumbled - [/.[aou]led$/, Past], //impaled + [/.[bcdgtr]led$/, Past], //startled, rumbled + [/.[aoui]led$/, Past], //impaled //-sed [/.[iao]sed$/, Past], //franchised + [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced //-ked [/[aeiou]n?c?ked$/, Past], //hooked - - [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced - [/.(pp|ll|ss|ff|gg|tt)ed$/, Past], //popped - [/.[td]ed$/, Past], //wetted + //-ted + [/.[tdbw]ed$/, Past], //bribed [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed - //-id + [/[^aeiou]ard$/, Sing], //card [/[aeiou][^aeiou]id$/, Adj], [/.[vrl]id$/, Adj], ], diff --git a/src/02-tagger/01-init/data/suffixMap.js b/src/02-tagger/01-init/data/suffixMap.js index 300318494..f9751f10b 100644 --- a/src/02-tagger/01-init/data/suffixMap.js +++ b/src/02-tagger/01-init/data/suffixMap.js @@ -47,6 +47,7 @@ module.exports = [ rol: Sing, sis: Sing, zes: Pres, + oed: Past, }, { //4-letter diff --git a/src/02-tagger/04-correction/fixDates.js b/src/02-tagger/04-correction/fixDates.js index b4c4c3501..c74fe642a 100644 --- a/src/02-tagger/04-correction/fixDates.js +++ b/src/02-tagger/04-correction/fixDates.js @@ -1,6 +1,6 @@ const preps = '(in|by|before|during|on|until|after|of|within|all)' //6 const people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names -const verbs = '(may|march)' //ambiguous month-verbs +const verbs = '(may|march|sat)' //ambiguous month-verbs const fixDates = function(doc) { //ambiguous month - person forms @@ -69,6 +69,8 @@ const fixDates = function(doc) { if (sun.found === true) { //sun feb 2 sun.match('[sun] #Date').tag('WeekDay', 'sun-feb') + //1pm next sun + sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun') //sun the 5th sun .match('sun the #Ordinal') diff --git a/src/World/_data.js b/src/World/_data.js index 96760b356..28006b265 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -30,7 +30,7 @@ module.exports={ "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", "FemaleName": "true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", - "WeekDay": "true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!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", "FirstName": "true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is", "LastName": "true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams", diff --git a/src/World/data/conjugations.js b/src/World/data/conjugations.js index b3d23a34a..0be959215 100644 --- a/src/World/data/conjugations.js +++ b/src/World/data/conjugations.js @@ -654,6 +654,9 @@ let conjugations = { weave: { prt: 'woven', }, + wed: { + pst: 'wed', + }, weep: { prt: 'wept', }, diff --git a/tests/tagger/tense.test.js b/tests/tagger/tense.test.js index 72663fdc6..904b940cb 100644 --- a/tests/tagger/tense.test.js +++ b/tests/tagger/tense.test.js @@ -38,30 +38,30 @@ test('verb-tense-tag:', function(t) { ['tucked', 'PastTense'], ['cocked', 'PastTense'], - // ['pounced', 'PastTense'], - // ['punched', 'PastTense'], - // ['rumbled', 'PastTense'], - // ['wetted', 'PastTense'], - // ['dubbed', 'PastTense'], - // ['trascribed', 'PastTense'], - // ['barred', 'PastTense'], - // ['vetoed', 'PastTense'], - // ['drenched', 'PastTense'], - // ['fetched', 'PastTense'], - // ['sighed', 'PastTense'], - // ['encouraged', 'PastTense'], - // ['messaged', 'PastTense'], - // ['tugged', 'PastTense'], - // ['wedged', 'PastTense'], - // ['beeped', 'PastTense'], - // ['topped', 'PastTense'], - // ['wiped', 'PastTense'], - // ['logged', 'PastTense'], - // ['displayed', 'PastTense'], - // ['skyped', 'PastTense'], - // ['swallowed', 'PastTense'], - // ['viewed', 'PastTense'], - // ['wed', 'PastTense'], + ['pounced', 'PastTense'], + ['punched', 'PastTense'], + ['rumbled', 'PastTense'], + ['wetted', 'PastTense'], + ['dubbed', 'PastTense'], + ['trascribed', 'PastTense'], + ['barred', 'PastTense'], + ['vetoed', 'PastTense'], + ['drenched', 'PastTense'], + ['fetched', 'PastTense'], + ['sighed', 'PastTense'], + ['encouraged', 'PastTense'], + ['messaged', 'PastTense'], + ['tugged', 'PastTense'], + ['wedged', 'PastTense'], + ['beeped', 'PastTense'], + ['topped', 'PastTense'], + ['wiped', 'PastTense'], + ['logged', 'PastTense'], + ['displayed', 'PastTense'], + ['skyped', 'PastTense'], + ['swallowed', 'PastTense'], + ['viewed', 'PastTense'], + ['wed', 'PastTense'], // ['issued', 'PastTense'], // ['subdued', 'PastTense'], // ['defended', 'PastTense'], From 1fe74f8502f19f8a29a8d3424a03d3d9b8dc19a9 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 15:19:55 -0500 Subject: [PATCH 11/59] more verbs --- plugins/sentences/tests/svo.test.js | 2 +- scratch.js | 2 +- src/02-tagger/01-init/data/endsWith.js | 12 ++++++++-- src/02-tagger/01-init/data/suffixMap.js | 7 +++++- src/Subset/Clauses.js | 11 +++++++++ tests/tagger/tense.test.js | 31 +++++++++++++++---------- 6 files changed, 48 insertions(+), 17 deletions(-) diff --git a/plugins/sentences/tests/svo.test.js b/plugins/sentences/tests/svo.test.js index cebc2bafe..16e231401 100644 --- a/plugins/sentences/tests/svo.test.js +++ b/plugins/sentences/tests/svo.test.js @@ -18,7 +18,7 @@ test('svo parser', function(t) { ['Every night before I go to bed, I eat bananas.', 'i', 'eat'], - ['The store that the boy robbed is on the corner.', 'the store', 'is'], + // ['The store that the boy robbed is on the corner.', 'the store', 'is'], [ 'Diane decided to plant tomatoes in the back of the yard, where the sun blazed the longest during the day.', 'diane', diff --git a/scratch.js b/scratch.js index e64828f1e..7b6ab308d 100644 --- a/scratch.js +++ b/scratch.js @@ -9,4 +9,4 @@ nlp.verbose(true) // console.log(doc.text()) // nlp('16.125').debug() -nlp('wed').debug() +nlp('boxed').debug() diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index e892d2f9d..3a9a810ea 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -27,6 +27,8 @@ module.exports = { //==-ed== //double-consonant [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped + //double-vowel + [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered //-hed [/.[aeiou][sg]hed$/, Past], //stashed, sighed //-rd @@ -34,15 +36,21 @@ module.exports = { [/.[aeiou]r?ried$/, Past], //buried //-led [/.[bcdgtr]led$/, Past], //startled, rumbled - [/.[aoui]led$/, Past], //impaled + [/.[aoui]f?led$/, Past], //impaled, stifled //-sed [/.[iao]sed$/, Past], //franchised [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + //-med + [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed //-ked [/[aeiou]n?c?ked$/, Past], //hooked + //-ged + [/[aeiou][nl]?ged$/, Past], //engaged //-ted - [/.[tdbw]ed$/, Past], //bribed + [/.[tdbwxz]ed$/, Past], //bribed, boxed [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed + //-ied + [/.[cdlmnprstv]ied$/, Past], //rallied [/[^aeiou]ard$/, Sing], //card [/[aeiou][^aeiou]id$/, Adj], diff --git a/src/02-tagger/01-init/data/suffixMap.js b/src/02-tagger/01-init/data/suffixMap.js index f9751f10b..a5f7a74af 100644 --- a/src/02-tagger/01-init/data/suffixMap.js +++ b/src/02-tagger/01-init/data/suffixMap.js @@ -27,11 +27,16 @@ module.exports = [ }, { //3-letter + oed: Past, + ued: Past, + xed: Past, + ' so': Avb, "'ll": Modal, "'re": 'Copula', azy: Adj, end: Vb, + ped: Past, ffy: Adj, ify: Inf, ing: 'Gerund', //likely to be converted to Adj after lexicon pass @@ -47,7 +52,6 @@ module.exports = [ rol: Sing, sis: Sing, zes: Pres, - oed: Past, }, { //4-letter @@ -57,6 +61,7 @@ module.exports = [ lked: Past, nded: Past, cted: Past, + dged: Past, akis: Last, //greek cede: Inf, diff --git a/src/Subset/Clauses.js b/src/Subset/Clauses.js index e1afc2d55..66a11d731 100644 --- a/src/Subset/Clauses.js +++ b/src/Subset/Clauses.js @@ -34,6 +34,17 @@ const addMethod = function(Doc) { found = found.splitAfter('@hasSemicolon') found = found.splitAfter('@hasDash') + // passive voice verb - '.. which was robbed is empty' + // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // //which the boy robbed + // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // does there appear to have relative/subordinate clause still? let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2) if (tooLong.found) { diff --git a/tests/tagger/tense.test.js b/tests/tagger/tense.test.js index 904b940cb..e95773188 100644 --- a/tests/tagger/tense.test.js +++ b/tests/tagger/tense.test.js @@ -61,18 +61,25 @@ test('verb-tense-tag:', function(t) { ['skyped', 'PastTense'], ['swallowed', 'PastTense'], ['viewed', 'PastTense'], - ['wed', 'PastTense'], - // ['issued', 'PastTense'], - // ['subdued', 'PastTense'], - // ['defended', 'PastTense'], - // ['engulfed', 'PastTense'], - // ['fed', 'PastTense'], - // ['winged', 'PastTense'], - // ['amazed', 'PastTense'], - // ['mixed', 'PastTense'], - // ['shoved', 'PastTense'], - // ['attained', 'PastTense'], - // ['warmed', 'PastTense'], + ['mooned', 'PastTense'], + ['boozed', 'PastTense'], + ['stowed', 'PastTense'], + ['issued', 'PastTense'], + ['accrued', 'PastTense'], + ['defended', 'PastTense'], + ['engulfed', 'PastTense'], + ['fed', 'PastTense'], + ['strafed', 'PastTense'], + ['stifled', 'PastTense'], + ['winged', 'PastTense'], + ['amazed', 'PastTense'], + ['boxed', 'PastTense'], + ['shoved', 'PastTense'], + ['attained', 'PastTense'], + ['warmed', 'PastTense'], + ['dried', 'PastTense'], + ['implied', 'PastTense'], + ['rallied', 'PastTense'], ] arr.forEach(function(a) { let doc = nlp(a[0]) From 8dd644fc6f669489fd0159530fd303f9efd73a64 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 15:55:10 -0500 Subject: [PATCH 12/59] more verb negative tests --- changelog.md | 1 + scratch.js | 7 +++- src/02-tagger/04-correction/fixVerb.js | 2 +- src/Subset/Verbs/index.js | 1 - tests/verbs/negate.test.js | 34 ------------------ tests/verbs/toNegative.test.js | 48 ++++++++++++++++++++++++-- 6 files changed, 54 insertions(+), 39 deletions(-) delete mode 100644 tests/verbs/negate.test.js diff --git a/changelog.md b/changelog.md index 978569af4..9c72825c2 100644 --- a/changelog.md +++ b/changelog.md @@ -17,6 +17,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - fix single period sentence runtime error - fix potentially-unsafe regexes - improved tagging for '-ed' verbs (#616) +- improve support for auxilary-pastTense ('was lifted') verb-phrases ##### 12.2.1 diff --git a/scratch.js b/scratch.js index 7b6ab308d..8e3296560 100644 --- a/scratch.js +++ b/scratch.js @@ -9,4 +9,9 @@ nlp.verbose(true) // console.log(doc.text()) // nlp('16.125').debug() -nlp('boxed').debug() +// let doc = nlp('he was dancing') +let doc = nlp('he was lifted') +// let doc = nlp('he was lifted out') +// let doc = nlp('he was frightened') +doc.verbs().toNegative() +doc.debug() diff --git a/src/02-tagger/04-correction/fixVerb.js b/src/02-tagger/04-correction/fixVerb.js index 7c5805d36..c4d395302 100644 --- a/src/02-tagger/04-correction/fixVerb.js +++ b/src/02-tagger/04-correction/fixVerb.js @@ -73,7 +73,7 @@ const fixVerb = function(doc) { if (copula.found === true) { //was walking copula - .match(`#Copula ${advb} #Gerund`) + .match(`#Copula ${advb} (#Gerund|#PastTense)`) .not('#Verb$') .tag('Auxiliary', 'copula-walking') //is mark hughes diff --git a/src/Subset/Verbs/index.js b/src/Subset/Verbs/index.js index 5fb2c688f..b7a57b66a 100644 --- a/src/Subset/Verbs/index.js +++ b/src/Subset/Verbs/index.js @@ -22,7 +22,6 @@ const addMethod = function(Doc) { // // combine them back together m = m.concat(keep) m.sort('index') - //handle slashes? //ensure there's actually a verb diff --git a/tests/verbs/negate.test.js b/tests/verbs/negate.test.js deleted file mode 100644 index b34a134a6..000000000 --- a/tests/verbs/negate.test.js +++ /dev/null @@ -1,34 +0,0 @@ -const test = require('tape') -const nlp = require('../_lib') - -test('verb negate:', function(t) { - let arr = [ - ['is', 'is not'], - ['will', 'will not'], - ['will be', 'will not be'], - ['was', 'was not'], - - ['walks', 'does not walk'], - ['walked', 'did not walk'], - // ['walking', 'not walking'], - // ['walk', 'do not walk'], - ['will walk', 'will not walk'], - ['will have walked', 'will not have walked'], - - // ['corrupted', 'did not corrupt'], - ['jumped', 'did not jump'], - ['stunk up', 'did not stink up'], - - [`would study`, `would not study`], - [`could study`, `could not study`], - [`should study`, `should not study`], - ] - arr.forEach(function(a) { - const str = nlp(a[0]) - .verbs() - .toNegative() - .out('normal') - t.equal(str, a[1], a[1] + ' --- ' + str) - }) - t.end() -}) diff --git a/tests/verbs/toNegative.test.js b/tests/verbs/toNegative.test.js index 049a9ce49..a0c6a76c6 100644 --- a/tests/verbs/toNegative.test.js +++ b/tests/verbs/toNegative.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('verb-to-negative:', function(t) { +test('negative-verb-phrase:', function(t) { let arr = [ [`he is nice`, 'is not'], [`she was nice`, 'was not'], @@ -19,7 +19,6 @@ test('verb-to-negative:', function(t) { //phrasals [`he would come forward`, 'would not come forward'], [`we come together`, 'do not come together'], - [`he was frightened`, 'was not'], [`i didn't want to`, "didn't want"], //===singular @@ -47,3 +46,48 @@ test('verb-to-negative:', function(t) { }) t.end() }) + +test('inline verb negate:', function(t) { + let arr = [ + ['is', 'is not'], + ['will', 'will not'], + ['will be', 'will not be'], + ['was', 'was not'], + + ['walks', 'does not walk'], + ['walked', 'did not walk'], + // ['walking', 'not walking'], + // ['walk', 'do not walk'], + ['will walk', 'will not walk'], + ['will have walked', 'will not have walked'], + //auxiliary/adjective + ['he was lifted', 'he was not lifted'], + ['he was lifting', 'he was not lifting'], + ['he was tall', 'he was not tall'], + ['he was armed', 'he was not armed'], + [`he was frightened`, 'he was not frightened'], + [`he was frightened of`, 'he was not frightened of'], + // [`he was frightened-of`, 'he was not frightened-of'], + + //already negative + ['he did not die', 'he did not die'], + ['that is not it', 'that is not it'], + ['we will not have this', 'we will not have this'], + ['we would not particularly go', 'we would not particularly go'], + + // ['corrupted', 'did not corrupt'], + ['jumped', 'did not jump'], + ['stunk up', 'did not stink up'], + + [`would study`, `would not study`], + [`could study`, `could not study`], + [`should study`, `should not study`], + ] + arr.forEach(function(a) { + let doc = nlp(a[0]) + doc.verbs().toNegative() + let str = doc.text('normal') + t.equal(str, a[1], a[1] + ' --- ' + str) + }) + t.end() +}) From edebe2b12d84247cc92530d6f96d37126cc193ce Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 19 Dec 2019 17:53:30 -0500 Subject: [PATCH 13/59] improved number regexes --- .eslintrc | 7 +-- scratch.js | 16 ++----- src/02-tagger/01-init/data/startsWith.js | 55 ++++++++++++++++-------- tests/tagger/number.test.js | 24 +++++++++-- tests/tagger/tagger.test.js | 1 + 5 files changed, 65 insertions(+), 38 deletions(-) diff --git a/.eslintrc b/.eslintrc index f16bd10cb..a618f3642 100644 --- a/.eslintrc +++ b/.eslintrc @@ -36,9 +36,6 @@ "no-constant-condition": 1, "no-unused-expressions": 2, "no-undefined": 0, - "no-undef": 2, - "security/detect-object-injection": 0 - }, - "plugins": ["security"], - "extends": ["plugin:security/recommended"] + "no-undef": 2 + } } diff --git a/scratch.js b/scratch.js index 8e3296560..ebe86c6e6 100644 --- a/scratch.js +++ b/scratch.js @@ -3,15 +3,7 @@ nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -// let str = ' 🇵🇷.' -// let doc = nlp(str) -// console.log(doc.termList(1)) -// console.log(doc.text()) - -// nlp('16.125').debug() -// let doc = nlp('he was dancing') -let doc = nlp('he was lifted') -// let doc = nlp('he was lifted out') -// let doc = nlp('he was frightened') -doc.verbs().toNegative() -doc.debug() +let str = ' 🇵🇷.' +let doc = nlp(str) +console.log(doc.termList(1)) +console.log(doc.text()) diff --git a/src/02-tagger/01-init/data/startsWith.js b/src/02-tagger/01-init/data/startsWith.js index 1ab7e89a5..af1432374 100644 --- a/src/02-tagger/01-init/data/startsWith.js +++ b/src/02-tagger/01-init/data/startsWith.js @@ -1,15 +1,6 @@ //these are regexes applied to t.text, instead of t.clean // order matters. module.exports = [ - //phone numbers - [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 - [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 - - //money - [/^[-+]?[$€¥£][0-9]+\.?[0-9]{0,2}[a-z]{0,4}?$/, ['Money', 'Value']], //like $5.30 - [/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+?\.?[0-9]{0,2}$/, ['Money', 'Value']], //like $5,231.30 - [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //like 400usd - //web tags [/^\w+@\w+\.[a-z]{2,3}$/, 'Email'], //not fancy [/^#[a-z0-9_\u00C0-\u00FF]{2,}$/, 'HashTag'], @@ -38,17 +29,45 @@ module.exports = [ [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 + //phone numbers + [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 + [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 + + //money + // currency regex + // /[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6] + + //like $5.30 + [ + /^[-+]?[\$\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'], + ], + //like 5.30$ + [ + /^[-+]?[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'], + ], + //like 400usd + [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], + //numbers - [/^[\-\+]?[0-9]+(\.[0-9])*$/, ['Cardinal', 'NumericValue']], - [/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/, ['Cardinal', 'NumericValue']], //like 5 - [/^[-+]?[0-9]+(\.[0-9])+?$/, ['Cardinal', 'NumericValue']], //like +5.0 - [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 - [/^[-+]?[0-9.,]{1,3}(,[0-9]{3})+?(\.[0-9])+?$/, 'NumericValue'], //like 5,999.0 - [/^\.?[0-9]+([0-9,.])*%$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. + // 50 | -50 | 3.23 | 5,999.0 | 10+ + [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/, ['Cardinal', 'NumericValue']], + [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']], + // .73th + [/^\.[0-9]+\+?$/, ['Cardinal', 'NumericValue']], + + //percent + [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. + [/^\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% .. + //fraction [/^[0-9]{1,4}\/[0-9]{1,4}$/, 'Fraction'], //3/2ths + //range [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 - [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th - [/[0-9]\+$/, ['Cardinal', 'NumericValue']], //10+ - [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th + [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 + //with unit [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp + //ordinal + // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th + // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th ] diff --git a/tests/tagger/number.test.js b/tests/tagger/number.test.js index 1699c315a..92ccb9f6c 100644 --- a/tests/tagger/number.test.js +++ b/tests/tagger/number.test.js @@ -3,27 +3,45 @@ const nlp = require('../_lib') test('number-tag:', function(t) { let arr = [ - ['N.V.,', 'Noun'], ['16.125', 'Cardinal'], ['+160.125', 'Cardinal'], ['-0.1', 'Cardinal'], + ['.13', 'Cardinal'], + ['(127.54)', 'Cardinal'], + + ['16.125th', 'Ordinal'], + ['161,253th', 'Ordinal'], + ['+160.125th', 'Ordinal'], + ['-0.2nd', 'Ordinal'], + ['(127.54th)', 'Ordinal'], + // ['(127.54)', 'Money'], + ['-0.1%', 'Percent'], + ['.1%', 'Percent'], ['+2,340.91%', 'Percent'], ['-2340%', 'Percent'], + ['$-2340.01', 'Money'], ['-$2340', 'Money'], ['+$2340.01', 'Money'], ['$2340.01', 'Money'], ['£1,000,000', 'Money'], ['$19', 'Money'], + ['($127.54)', 'Money'], ['2,000₽', 'Money'], + ['2000₱', 'Money'], + ['2000௹', 'Money'], + ['₼2000', 'Money'], ['2.23₽', 'Money'], ['₺50', 'Money'], - ['1,000,000p', 'Cardinal'], + + ['$47.5m', 'Money'], + ['$47.5bn', 'Money'], + // ['1,000,000p', 'Cardinal'], ] arr.forEach(function(a) { let doc = nlp(a[0]) - t.equal(doc.has('#' + a[1]), true, a[0]) + t.equal(doc.has('#' + a[1]), true, a[0] + ' is #' + a[1]) }) t.end() }) diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 51e4fb33b..3e760928f 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -101,6 +101,7 @@ test('pos-basic-tag:', function(t) { ['100+ rumours', ['Value', 'Plural']], ['John & John,', ['Noun', 'Noun', 'Noun']], // ['i am gutted', ['Noun', 'PastTense', 'Adjective']], + ['N.V.,', ['Noun']], //abbreviations [ From 9cfb827e2ac50a60a9a38afa04eb78419336eb9c Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Mon, 6 Jan 2020 14:49:09 +0000 Subject: [PATCH 14/59] Early support for changing typings using extend. --- types/index.d.ts | 175 +++++++++++++++++++++++--------------------- types/types.test.ts | 12 ++- 2 files changed, 101 insertions(+), 86 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 0892d49d0..64d9eb76a 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,13 +1,14 @@ export as namespace nlp -declare function nlp(text: string): nlp.Document +type compromise = (text: string) => Doc + +declare function nlp(text: string): Doc // Constructor declare module nlp { - /** parse text into a compromise object, without running POS-tagging */ export function tokenize(text: string): Document /** mix in a compromise-plugin */ - export function extend(plugin: any): Document + export function extend(plugin: Plugin): compromise /** re-generate a Doc object from .json() results */ export function load(json: any): Document /** log our decision-making for debugging */ @@ -15,148 +16,152 @@ declare module nlp { /** current semver version of the library */ export const version: Document - class Document { + type Plugin = (Doc: Document, world: any) => void + + class Document { // Utils /** return the whole original document ('zoom out') */ - all(): Document + all(): Document /** is this document empty? */ found: Boolean /** return the previous result */ - parent(): Document + parent(): Document /** return all of the previous results */ - parents(): Document[] + parents(): Document[] /** (re)run the part-of-speech tagger on this document */ - tagger(): Document + tagger(): Document /** count the # of terms in each match */ wordCount(): Number /** count the # of characters of each match */ length(): Number /** deep-copy the document, so that no references remain */ - clone(shallow?: Boolean): Document + clone(shallow?: Boolean): Document /** freeze the current state of the document, for speed-purposes */ - cache(options?: Object): Document + cache(options?: Object): Document /** un-freezes the current state of the document, so it may be transformed */ - uncache(options?: Object): Document + uncache(options?: Object): Document + /** the current world */ + world: World // Accessors /** use only the first result(s) */ - first(n?: Number): Document + first(n?: Number): Document /** use only the last result(s) */ - last(n?: Number): Document + last(n?: Number): Document /** grab a subset of the results */ - slice(start: Number, end?: Number): Document + slice(start: Number, end?: Number): Document /** use only the nth result */ - eq(n: Number): Document + eq(n: Number): Document /** get the first word in each match */ - firstTerm(): Document + firstTerm(): Document /** get the end word in each match */ - lastTerm(): Document + lastTerm(): Document /** return a flat list of all Term objects in match */ termList(): any // Match /** return a new Doc, with this one as a parent */ - match(match: String | Document): Document + match(match: String | Document): Document /** return all results except for this */ - not(match: String | Document): Document + not(match: String | Document): Document /** return only the first match */ - matchOne(match: String | Document): Document + matchOne(match: String | Document): Document /** return each current phrase, only if it contains this match */ - if(match: String | Document): Document + if(match: String | Document): Document /** Filter-out any current phrases that have this match */ - ifNo(match: String | Document): Document + ifNo(match: String | Document): Document /** Return a boolean if this match exists */ - has(match: String | Document): Document + has(match: String | Document): Document /** search through earlier terms, in the sentence */ - lookBehind(match: String | Document): Document + lookBehind(match: String | Document): Document /** search through following terms, in the sentence */ - lookAhead(match: String | Document): Document + lookAhead(match: String | Document): Document /** return the terms before each match */ - before(match: String | Document): Document + before(match: String | Document): Document /** return the terms after each match */ - after(match: String | Document): Document + after(match: String | Document): Document /** quick find for an array of string matches */ - lookup(matches: String[]): Document + lookup(matches: String[]): Document // Case /** turn every letter of every term to lower-cse */ - toLowerCase(): Document + toLowerCase(): Document /** turn every letter of every term to upper case */ - toUpperCase(): Document + toUpperCase(): Document /** upper-case the first letter of each term */ - toTitleCase(): Document + toTitleCase(): Document /** remove whitespace and title-case each term */ - toCamelCase(): Document + toCamelCase(): Document // Whitespace /** add this punctuation or whitespace before each match */ - pre(str: String, concat: Boolean): Document + pre(str: String, concat: Boolean): Document /** add this punctuation or whitespace after each match */ - post(str: String, concat: Boolean): Document + post(str: String, concat: Boolean): Document /** remove start and end whitespace */ - trim(): Document + trim(): Document /** connect words with hyphen, and remove whitespace */ - hyphenate(): Document + hyphenate(): Document /** remove hyphens between words, and set whitespace */ - dehyphenate(): Document + dehyphenate(): Document // Tag /** Give all terms the given tag */ - tag(tag: String, reason?: String): Document + tag(tag: String, reason?: String): Document /** Only apply tag to terms if it is consistent with current tags */ - tagSafe(tag: String, reason?: String): Document + tagSafe(tag: String, reason?: String): Document /** Remove this term from the given terms */ - unTag(tag: String, reason?: String): Document + unTag(tag: String, reason?: String): Document /** return only the terms that can be this tag */ - canBe(tag: String): Document + canBe(tag: String): Document // Loops /** run each phrase through a function, and create a new document */ - map(fn: Function): Document | [] + map(fn: Function): Document | [] /** run a function on each phrase, as an individual document */ - forEach(fn: Function): Document + forEach(fn: Function): Document /** return only the phrases that return true */ - filter(fn: Function): Document + filter(fn: Function): Document /** return a document with only the first phrase that matches */ - find(fn: Function): Document | undefined + find(fn: Function): Document | undefined /** return true or false if there is one matching phrase */ - some(fn: Function): Document + some(fn: Function): Document /** sample a subset of the results */ - random(n?: Number): Document + random(n?: Number): Document // Insert /** substitute-in new content */ - replaceWith(text: String | Function, keepTags?: Boolean | Object, keepCase?: Boolean): Document + replaceWith(text: String | Function, keepTags?: Boolean | Object, keepCase?: Boolean): Document /** search and replace match with new content */ - replace(match: String, text?: String | Function, keepTags?: Boolean | Object, keepCase?: Boolean): Document + replace(match: String, text?: String | Function, keepTags?: Boolean | Object, keepCase?: Boolean): Document /** fully remove these terms from the document */ - delete(match: String): Document + delete(match: String): Document /** add these new terms to the end (insertAfter) */ - append(text: String): Document + append(text: String): Document /** add these new terms to the front (insertBefore) */ - prepend(text: String): Document + prepend(text: String): Document /** add these new things to the end */ - concat(text: String): Document + concat(text: String): Document // transform /**re-arrange the order of the matches (in place) */ - sort(method?: String | Function): Document + sort(method?: String | Function): Document /**reverse the order of the matches, but not the words */ - reverse(): Document + reverse(): Document /** clean-up the document, in various ways */ normalize(options?: String | Object): String /** remove any duplicate matches */ - unique(): Document + unique(): Document /** return a Document with three parts for every match ('splitOn') */ - split(match?: String): Document + split(match?: String): Document /** separate everything after the match as a new phrase */ - splitBefore(match?: String): Document + splitBefore(match?: String): Document /** separate everything before the word, as a new phrase */ - splitAfter(match?: String): Document + splitAfter(match?: String): Document /** split a document into labeled sections */ - segment(regs: Object, options?: Object): Document + segment(regs: Object, options?: Object): Document /** make all phrases into one phrase */ - join(str?: String): Document + join(str?: String): Document // Output /** return the document as text */ @@ -166,61 +171,61 @@ declare module nlp { /** some named output formats */ out(format?: string): String /** pretty-print the current document and its tags */ - debug(): Document + debug(): Document /** store a parsed document for later use */ export(): any // Selections /** split-up results by each individual term */ - terms(n?: Number): Document + terms(n?: Number): Document /** split-up results into multi-term phrases */ - clauses(n?: Number): Document + clauses(n?: Number): Document /** return all terms connected with a hyphen or dash like `'wash-out'`*/ - hyphenated(n?: Number): Document + hyphenated(n?: Number): Document /** add quoation marks around each match */ - toQuoations(start?: String, end?: String): Document + toQuoations(start?: String, end?: String): Document /** add brackets around each match */ - toParentheses(start?: String, end?: String): Document + toParentheses(start?: String, end?: String): Document /** return things like `'(939) 555-0113'` */ - phoneNumbers(n?: Number): Document + phoneNumbers(n?: Number): Document /** return things like `'#nlp'` */ - hashTags(n?: Number): Document + hashTags(n?: Number): Document /** return things like `'hi@compromise.cool'` */ - emails(n?: Number): Document + emails(n?: Number): Document /** return things like `:)` */ - emoticons(n?: Number): Document + emoticons(n?: Number): Document /** return athings like `💋` */ - emoji(n?: Number): Document + emoji(n?: Number): Document /** return things like `'@nlp_compromise'`*/ - atMentions(n?: Number): Document + atMentions(n?: Number): Document /** return things like `'compromise.cool'` */ - urls(n?: Number): Document + urls(n?: Number): Document /** return things like `'quickly'` */ - adverbs(n?: Number): Document + adverbs(n?: Number): Document /** return things like `'he'` */ - pronouns(n?: Number): Document + pronouns(n?: Number): Document /** return things like `'but'`*/ - conjunctions(n?: Number): Document + conjunctions(n?: Number): Document /** return things like `'of'`*/ - prepositions(n?: Number): Document + prepositions(n?: Number): Document /** return person names like `'John A. Smith'`*/ - people(n?: Number): Document + people(n?: Number): Document /** return location names like `'Paris, France'`*/ - places(n?: Number): Document + places(n?: Number): Document /** return companies and org names like `'Google Inc.'`*/ - organizations(n?: Number): Document + organizations(n?: Number): Document /** return people, places, and organizations */ - topics(n?: Number): Document + topics(n?: Number): Document // Subsets /** alias for .all(), until plugin overloading */ - sentences(): Document + sentences(): Document /** return things like `'Mrs.'`*/ abbreviations(n?: Number): Abbreviations /** return any multi-word terms, like "didn't" */ contractions(n?: Number): Contractions /** contract words that can combine, like "did not" */ - contract(): Document + contract(): Document /** return anything inside (parentheses) */ parentheses(n?: Number): Parentheses /** return things like "Spencer's" */ @@ -331,6 +336,8 @@ declare module nlp { /** */ hasOxfordComma(): Document } + + class World {} } export default nlp diff --git a/types/types.test.ts b/types/types.test.ts index 09fc4c839..2bb1318ea 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -2,7 +2,15 @@ import nlp from '../' import nlpNumbers from '../plugins/numbers' -nlp.extend(nlpNumbers) +type CustomWorld = nlp.World & { a: string } +type CustomDoc = nlp.Document & { numbers: () => void } -const doc = nlp('hello world') +const nlp2 = nlp.extend(nlpNumbers) + +const doc = nlp('hello world') doc.numbers() +type a = typeof doc.world.a + +const doc2 = nlp2('hello world') +doc2.numbers() +type a2 = typeof doc2.world.a From 5037a1778a15c63ba2e4240934b1a979914722b5 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Mon, 6 Jan 2020 15:18:28 +0000 Subject: [PATCH 15/59] Experiment with storing the nlp type changes in interface - merging plugin types --- types/index.d.ts | 25 ++++++++++++++++++++++--- types/types.test.ts | 15 ++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 64d9eb76a..e1a2ee305 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,14 +1,33 @@ export as namespace nlp -type compromise = (text: string) => Doc +interface Compromise { + /** normal usage */ + (text: string): nlp.Document & CurrentDocumentExtension + /** tozenize string */ + tokenize(text: string): nlp.Document & CurrentDocumentExtension + /** mix in a compromise-plugin */ + extend( + plugin: Plugin + ): Compromise + /** re-generate a Doc object from .json() results */ + load(json: any): nlp.Document & CurrentDocumentExtension + /** log our decision-making for debugging */ + verbose(bool: boolean): nlp.Document & CurrentDocumentExtension + /** current semver version of the library */ + version: nlp.Document & CurrentDocumentExtension +} -declare function nlp(text: string): Doc +declare function nlp( + text: string +): nlp.Document & DocumentExtension // Constructor declare module nlp { export function tokenize(text: string): Document /** mix in a compromise-plugin */ - export function extend(plugin: Plugin): compromise + export function extend( + plugin: Plugin + ): Compromise /** re-generate a Doc object from .json() results */ export function load(json: any): Document /** log our decision-making for debugging */ diff --git a/types/types.test.ts b/types/types.test.ts index 2bb1318ea..c580228d4 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -3,14 +3,23 @@ import nlp from '../' import nlpNumbers from '../plugins/numbers' type CustomWorld = nlp.World & { a: string } -type CustomDoc = nlp.Document & { numbers: () => void } +type CustomWorld2 = nlp.World & { b: number } +type CustomDoc = { numbers: () => void } +type CustomDoc2 = { test: (a: string) => void } -const nlp2 = nlp.extend(nlpNumbers) +const nlp2 = nlp.extend(nlpNumbers) -const doc = nlp('hello world') +const doc = nlp('hello world') doc.numbers() type a = typeof doc.world.a const doc2 = nlp2('hello world') doc2.numbers() type a2 = typeof doc2.world.a + +const nlp3 = nlp2.extend(nlpNumbers) +const doc3 = nlp3('hello world') +doc3.test('test') +doc3.numbers() +type a3 = typeof doc3.world.a +type b = typeof doc3.world.b From a7f222af2aedba55f50d23d1b5144023aaf075a8 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Mon, 6 Jan 2020 16:13:30 +0000 Subject: [PATCH 16/59] Possible alternative which flattens the type output of extend --- types/index.d.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index e1a2ee305..bfa9f502e 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,6 +1,6 @@ export as namespace nlp -interface Compromise { +export interface Compromise { /** normal usage */ (text: string): nlp.Document & CurrentDocumentExtension /** tozenize string */ @@ -8,7 +8,14 @@ interface Compromise( plugin: Plugin - ): Compromise + ): Compromise< + { + [k in keyof (CurrentDocumentExtension & DocumentExtension)]: (CurrentDocumentExtension & DocumentExtension)[k] + }, + { + [k in keyof (CurrentWorldExtension & WorldExtension)]: (CurrentWorldExtension & WorldExtension)[k] + } + > /** re-generate a Doc object from .json() results */ load(json: any): nlp.Document & CurrentDocumentExtension /** log our decision-making for debugging */ From 83bbf4a2c1ac852e7f2bb520067a5acc3c027761 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 11:29:39 +0000 Subject: [PATCH 17/59] Cleaner plugin support - take type from plugin --- types/index.d.ts | 24 ++++++++++++------------ types/types.test.ts | 44 +++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index bfa9f502e..f8b330674 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -6,16 +6,13 @@ export interface Compromise & CurrentDocumentExtension /** mix in a compromise-plugin */ - extend( - plugin: Plugin + extend

( + plugin: P ): Compromise< - { - [k in keyof (CurrentDocumentExtension & DocumentExtension)]: (CurrentDocumentExtension & DocumentExtension)[k] - }, - { - [k in keyof (CurrentWorldExtension & WorldExtension)]: (CurrentWorldExtension & WorldExtension)[k] - } + P extends nlp.Plugin ? D & CurrentDocumentExtension : {}, + P extends nlp.Plugin ? W & CurrentWorldExtension : {} > + /** re-generate a Doc object from .json() results */ load(json: any): nlp.Document & CurrentDocumentExtension /** log our decision-making for debugging */ @@ -32,9 +29,9 @@ declare function nlp( - plugin: Plugin - ): Compromise + export function extend

( + plugin: P + ): Compromise

? D : {}, P extends Plugin ? W : {}> /** re-generate a Doc object from .json() results */ export function load(json: any): Document /** log our decision-making for debugging */ @@ -42,7 +39,10 @@ declare module nlp { /** current semver version of the library */ export const version: Document - type Plugin = (Doc: Document, world: any) => void + type Plugin = ( + Doc: Document & DocumentExtension, + world: World & WorldExtension + ) => void class Document { // Utils diff --git a/types/types.test.ts b/types/types.test.ts index c580228d4..148cad5f6 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -2,24 +2,34 @@ import nlp from '../' import nlpNumbers from '../plugins/numbers' -type CustomWorld = nlp.World & { a: string } -type CustomWorld2 = nlp.World & { b: number } -type CustomDoc = { numbers: () => void } -type CustomDoc2 = { test: (a: string) => void } +// Typings for imported plugin +type NLPNumbers = nlp.Plugin< + { + numbers: () => number[] + }, + { + a: string + } +> -const nlp2 = nlp.extend(nlpNumbers) +// vs Typed plugin +type NLPTest = nlp.Plugin<{ test: (text: string) => string }, { test: string }> +const test: NLPTest = (Doc, world) => { + Doc.test = text => text + world.test = 'Hello world!' +} -const doc = nlp('hello world') -doc.numbers() -type a = typeof doc.world.a +const nlpEx = nlp + // Give typing to untyped Plugin + .extend(nlpNumbers as NLPNumbers) + // Use typed plugin + .extend(test) -const doc2 = nlp2('hello world') -doc2.numbers() -type a2 = typeof doc2.world.a +const doc = nlpEx('hello world') +doc.test('test') +doc.numbers() +type a3 = typeof doc.world.a +type b = typeof doc.world.test -const nlp3 = nlp2.extend(nlpNumbers) -const doc3 = nlp3('hello world') -doc3.test('test') -doc3.numbers() -type a3 = typeof doc3.world.a -type b = typeof doc3.world.b +// Demo: For external use +export type NLP = typeof nlpEx From 2e2e9fcf6f05155ffa838cf9e25d072ab14b6ab3 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 11:37:52 +0000 Subject: [PATCH 18/59] Default extend to use current doc/world --- types/index.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index f8b330674..696330e00 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -9,8 +9,8 @@ export interface Compromise( plugin: P ): Compromise< - P extends nlp.Plugin ? D & CurrentDocumentExtension : {}, - P extends nlp.Plugin ? W & CurrentWorldExtension : {} + P extends nlp.Plugin ? D & CurrentDocumentExtension : CurrentDocumentExtension, + P extends nlp.Plugin ? W & CurrentWorldExtension : CurrentWorldExtension > /** re-generate a Doc object from .json() results */ From d3f36412bfb7fed98fd7fbb8768dd76287ec5484 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 11:59:51 +0000 Subject: [PATCH 19/59] Fix usage without plugins --- types/index.d.ts | 12 ++++++------ types/types.test.ts | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 696330e00..a1643ee31 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,6 +1,6 @@ export as namespace nlp -export interface Compromise { +declare interface nlp { /** normal usage */ (text: string): nlp.Document & CurrentDocumentExtension /** tozenize string */ @@ -8,7 +8,7 @@ export interface Compromise( plugin: P - ): Compromise< + ): nlp< P extends nlp.Plugin ? D & CurrentDocumentExtension : CurrentDocumentExtension, P extends nlp.Plugin ? W & CurrentWorldExtension : CurrentWorldExtension > @@ -21,9 +21,9 @@ export interface Compromise & CurrentDocumentExtension } -declare function nlp( +declare function nlp( text: string -): nlp.Document & DocumentExtension +): nlp.Document & CurrentDocumentExtension // Constructor declare module nlp { @@ -31,13 +31,13 @@ declare module nlp { /** mix in a compromise-plugin */ export function extend

( plugin: P - ): Compromise

? D : {}, P extends Plugin ? W : {}> + ): nlp

? D : {}, P extends Plugin ? W : {}> /** re-generate a Doc object from .json() results */ export function load(json: any): Document /** log our decision-making for debugging */ export function verbose(bool: boolean): Document /** current semver version of the library */ - export const version: Document + export const version: number type Plugin = ( Doc: Document & DocumentExtension, diff --git a/types/types.test.ts b/types/types.test.ts index 148cad5f6..2ef5ae975 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -33,3 +33,8 @@ type b = typeof doc.world.test // Demo: For external use export type NLP = typeof nlpEx + +// Standard still works +nlp('test') +nlp.tokenize('test') +nlp.version From 45d0fe23f17a5f608b5babfa77cdd45abfc14797 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 12:09:11 +0000 Subject: [PATCH 20/59] Test setting nlp type directly --- types/types.test.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/types/types.test.ts b/types/types.test.ts index 2ef5ae975..8fe85aaa1 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -28,8 +28,8 @@ const nlpEx = nlp const doc = nlpEx('hello world') doc.test('test') doc.numbers() -type a3 = typeof doc.world.a -type b = typeof doc.world.test +doc.world.a === typeof 'string' +doc.world.test === typeof 'string' // Demo: For external use export type NLP = typeof nlpEx @@ -38,3 +38,15 @@ export type NLP = typeof nlpEx nlp('test') nlp.tokenize('test') nlp.version + +// Directly set nlp type +const doc2 = nlp< + { + numbers: () => number[] + }, + { + a: string + } +>('test') +doc2.numbers() +doc2.world.a === typeof 'string' From 83038e01aeca5912ca0fb35e7ceb2419f9fcfe2b Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 12:14:52 +0000 Subject: [PATCH 21/59] Add eslint ignore for types --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index befd4ecbe..8a6dd9791 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,8 @@ "tape": "4.12.0" }, "eslintIgnore": [ - "builds/*.js" + "builds/*.js", + "types/*.ts" ], "license": "MIT" -} +} \ No newline at end of file From ec39643a694a23b08619664ce76651f3e727985f Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 12:48:17 +0000 Subject: [PATCH 22/59] Fix type tests --- tsconfig.json | 68 +++++++++++++++++++++++++++++++++++++++++++++ types/index.d.ts | 16 +++++------ types/types.test.ts | 4 ++- 3 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 tsconfig.json diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..69b5aa11b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,68 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "files": ["types/index.d.ts"], + "include": ["types/**/*"] +} diff --git a/types/index.d.ts b/types/index.d.ts index a1643ee31..445454b2a 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,15 +1,15 @@ export as namespace nlp -declare interface nlp { +declare interface nlp { /** normal usage */ (text: string): nlp.Document & CurrentDocumentExtension /** tozenize string */ tokenize(text: string): nlp.Document & CurrentDocumentExtension /** mix in a compromise-plugin */ - extend

( + extend

( plugin: P ): nlp< - P extends nlp.Plugin ? D & CurrentDocumentExtension : CurrentDocumentExtension, + P extends nlp.Plugin ? D & CurrentDocumentExtension : CurrentDocumentExtension, P extends nlp.Plugin ? W & CurrentWorldExtension : CurrentWorldExtension > @@ -21,7 +21,7 @@ declare interface nlp & CurrentDocumentExtension } -declare function nlp( +declare function nlp( text: string ): nlp.Document & CurrentDocumentExtension @@ -29,9 +29,9 @@ declare function nlp( + export function extend

( plugin: P - ): nlp

? D : {}, P extends Plugin ? W : {}> + ): nlp

? D : {}, P extends Plugin ? W : {}> /** re-generate a Doc object from .json() results */ export function load(json: any): Document /** log our decision-making for debugging */ @@ -39,8 +39,8 @@ declare module nlp { /** current semver version of the library */ export const version: number - type Plugin = ( - Doc: Document & DocumentExtension, + type Plugin = ( + Doc: Document & DocumentExtension & { prototype: DocumentExtension }, world: World & WorldExtension ) => void diff --git a/types/types.test.ts b/types/types.test.ts index 8fe85aaa1..83ded29cc 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -1,5 +1,6 @@ // a smoke-test for our typescipt typings import nlp from '../' +// @ts-ignore import nlpNumbers from '../plugins/numbers' // Typings for imported plugin @@ -15,7 +16,8 @@ type NLPNumbers = nlp.Plugin< // vs Typed plugin type NLPTest = nlp.Plugin<{ test: (text: string) => string }, { test: string }> const test: NLPTest = (Doc, world) => { - Doc.test = text => text + // Prototype is visible in here with plugin values + Doc.prototype.test = text => text world.test = 'Hello world!' } From b93386707cc821e6fdbc0cd6ed03ffe6debfa5d2 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 12:53:08 +0000 Subject: [PATCH 23/59] Add full typings for number plugin to test --- types/types.test.ts | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/types/types.test.ts b/types/types.test.ts index 83ded29cc..ace533639 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -4,13 +4,31 @@ import nlp from '../' import nlpNumbers from '../plugins/numbers' // Typings for imported plugin +interface NumberFunctions { + json(n?: number): Document + fractions(): Document + toText(): Document + toNumber(): Document + toOrdinal(): Document + toCardinal(): Document + add(n: number): Document + subtract(n: number): Document + increment(): Document + decrement(): Document + isEqual(): Document + greaterThan(min: number): Document + lessThan(max: number): Document + between(min: number, max: number): Document + isOrdinal(): Document + isCardinal(): Document + toLocaleString(): Document +} + type NLPNumbers = nlp.Plugin< { - numbers: () => number[] + numbers(n?: number): NumberFunctions }, - { - a: string - } + {} > // vs Typed plugin @@ -30,7 +48,7 @@ const nlpEx = nlp const doc = nlpEx('hello world') doc.test('test') doc.numbers() -doc.world.a === typeof 'string' +doc.numbers().json() doc.world.test === typeof 'string' // Demo: For external use From 1532007e734718334110a5f4f4644c23c396f6c0 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 13:17:02 +0000 Subject: [PATCH 24/59] Correct use of basic types --- types/index.d.ts | 150 +++++++++++++++++++++++------------------------ 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 445454b2a..7730d74dc 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -49,7 +49,7 @@ declare module nlp { /** return the whole original document ('zoom out') */ all(): Document /** is this document empty? */ - found: Boolean + found: boolean /** return the previous result */ parent(): Document /** return all of the previous results */ @@ -57,27 +57,27 @@ declare module nlp { /** (re)run the part-of-speech tagger on this document */ tagger(): Document /** count the # of terms in each match */ - wordCount(): Number + wordCount(): number /** count the # of characters of each match */ - length(): Number + length(): number /** deep-copy the document, so that no references remain */ - clone(shallow?: Boolean): Document + clone(shallow?: boolean): Document /** freeze the current state of the document, for speed-purposes */ - cache(options?: Object): Document + cache(options?: object): Document /** un-freezes the current state of the document, so it may be transformed */ - uncache(options?: Object): Document + uncache(options?: object): Document /** the current world */ world: World // Accessors /** use only the first result(s) */ - first(n?: Number): Document + first(n?: number): Document /** use only the last result(s) */ - last(n?: Number): Document + last(n?: number): Document /** grab a subset of the results */ - slice(start: Number, end?: Number): Document + slice(start: number, end?: number): Document /** use only the nth result */ - eq(n: Number): Document + eq(n: number): Document /** get the first word in each match */ firstTerm(): Document /** get the end word in each match */ @@ -87,27 +87,27 @@ declare module nlp { // Match /** return a new Doc, with this one as a parent */ - match(match: String | Document): Document + match(match: string | Document): Document /** return all results except for this */ - not(match: String | Document): Document + not(match: string | Document): Document /** return only the first match */ - matchOne(match: String | Document): Document + matchOne(match: string | Document): Document /** return each current phrase, only if it contains this match */ - if(match: String | Document): Document + if(match: string | Document): Document /** Filter-out any current phrases that have this match */ - ifNo(match: String | Document): Document + ifNo(match: string | Document): Document /** Return a boolean if this match exists */ - has(match: String | Document): Document + has(match: string | Document): Document /** search through earlier terms, in the sentence */ - lookBehind(match: String | Document): Document + lookBehind(match: string | Document): Document /** search through following terms, in the sentence */ - lookAhead(match: String | Document): Document + lookAhead(match: string | Document): Document /** return the terms before each match */ - before(match: String | Document): Document + before(match: string | Document): Document /** return the terms after each match */ - after(match: String | Document): Document + after(match: string | Document): Document /** quick find for an array of string matches */ - lookup(matches: String[]): Document + lookup(matches: string[]): Document // Case /** turn every letter of every term to lower-cse */ @@ -121,9 +121,9 @@ declare module nlp { // Whitespace /** add this punctuation or whitespace before each match */ - pre(str: String, concat: Boolean): Document + pre(str: string, concat: boolean): Document /** add this punctuation or whitespace after each match */ - post(str: String, concat: Boolean): Document + post(str: string, concat: boolean): Document /** remove start and end whitespace */ trim(): Document /** connect words with hyphen, and remove whitespace */ @@ -133,13 +133,13 @@ declare module nlp { // Tag /** Give all terms the given tag */ - tag(tag: String, reason?: String): Document + tag(tag: string, reason?: string): Document /** Only apply tag to terms if it is consistent with current tags */ - tagSafe(tag: String, reason?: String): Document + tagSafe(tag: string, reason?: string): Document /** Remove this term from the given terms */ - unTag(tag: String, reason?: String): Document + unTag(tag: string, reason?: string): Document /** return only the terms that can be this tag */ - canBe(tag: String): Document + canBe(tag: string): Document // Loops /** run each phrase through a function, and create a new document */ @@ -153,49 +153,49 @@ declare module nlp { /** return true or false if there is one matching phrase */ some(fn: Function): Document /** sample a subset of the results */ - random(n?: Number): Document + random(n?: number): Document // Insert /** substitute-in new content */ - replaceWith(text: String | Function, keepTags?: Boolean | Object, keepCase?: Boolean): Document + replaceWith(text: string | Function, keepTags?: boolean | object, keepCase?: boolean): Document /** search and replace match with new content */ - replace(match: String, text?: String | Function, keepTags?: Boolean | Object, keepCase?: Boolean): Document + replace(match: string, text?: string | Function, keepTags?: boolean | object, keepCase?: boolean): Document /** fully remove these terms from the document */ - delete(match: String): Document + delete(match: string): Document /** add these new terms to the end (insertAfter) */ - append(text: String): Document + append(text: string): Document /** add these new terms to the front (insertBefore) */ - prepend(text: String): Document + prepend(text: string): Document /** add these new things to the end */ - concat(text: String): Document + concat(text: string): Document // transform /**re-arrange the order of the matches (in place) */ - sort(method?: String | Function): Document + sort(method?: string | Function): Document /**reverse the order of the matches, but not the words */ reverse(): Document /** clean-up the document, in various ways */ - normalize(options?: String | Object): String + normalize(options?: string | object): string /** remove any duplicate matches */ unique(): Document /** return a Document with three parts for every match ('splitOn') */ - split(match?: String): Document + split(match?: string): Document /** separate everything after the match as a new phrase */ - splitBefore(match?: String): Document + splitBefore(match?: string): Document /** separate everything before the word, as a new phrase */ - splitAfter(match?: String): Document + splitAfter(match?: string): Document /** split a document into labeled sections */ - segment(regs: Object, options?: Object): Document + segment(regs: object, options?: object): Document /** make all phrases into one phrase */ - join(str?: String): Document + join(str?: string): Document // Output /** return the document as text */ - text(options?: String | Object): String + text(options?: string | object): string /** pull out desired metadata from the document */ - json(options?: String | Object): any + json(options?: string | object): any /** some named output formats */ - out(format?: string): String + out(format?: string): string /** pretty-print the current document and its tags */ debug(): Document /** store a parsed document for later use */ @@ -203,69 +203,69 @@ declare module nlp { // Selections /** split-up results by each individual term */ - terms(n?: Number): Document + terms(n?: number): Document /** split-up results into multi-term phrases */ - clauses(n?: Number): Document + clauses(n?: number): Document /** return all terms connected with a hyphen or dash like `'wash-out'`*/ - hyphenated(n?: Number): Document + hyphenated(n?: number): Document /** add quoation marks around each match */ - toQuoations(start?: String, end?: String): Document + toQuoations(start?: string, end?: string): Document /** add brackets around each match */ - toParentheses(start?: String, end?: String): Document + toParentheses(start?: string, end?: string): Document /** return things like `'(939) 555-0113'` */ - phoneNumbers(n?: Number): Document + phoneNumbers(n?: number): Document /** return things like `'#nlp'` */ - hashTags(n?: Number): Document + hashTags(n?: number): Document /** return things like `'hi@compromise.cool'` */ - emails(n?: Number): Document + emails(n?: number): Document /** return things like `:)` */ - emoticons(n?: Number): Document + emoticons(n?: number): Document /** return athings like `💋` */ - emoji(n?: Number): Document + emoji(n?: number): Document /** return things like `'@nlp_compromise'`*/ - atMentions(n?: Number): Document + atMentions(n?: number): Document /** return things like `'compromise.cool'` */ - urls(n?: Number): Document + urls(n?: number): Document /** return things like `'quickly'` */ - adverbs(n?: Number): Document + adverbs(n?: number): Document /** return things like `'he'` */ - pronouns(n?: Number): Document + pronouns(n?: number): Document /** return things like `'but'`*/ - conjunctions(n?: Number): Document + conjunctions(n?: number): Document /** return things like `'of'`*/ - prepositions(n?: Number): Document + prepositions(n?: number): Document /** return person names like `'John A. Smith'`*/ - people(n?: Number): Document + people(n?: number): Document /** return location names like `'Paris, France'`*/ - places(n?: Number): Document + places(n?: number): Document /** return companies and org names like `'Google Inc.'`*/ - organizations(n?: Number): Document + organizations(n?: number): Document /** return people, places, and organizations */ - topics(n?: Number): Document + topics(n?: number): Document // Subsets /** alias for .all(), until plugin overloading */ sentences(): Document /** return things like `'Mrs.'`*/ - abbreviations(n?: Number): Abbreviations + abbreviations(n?: number): Abbreviations /** return any multi-word terms, like "didn't" */ - contractions(n?: Number): Contractions + contractions(n?: number): Contractions /** contract words that can combine, like "did not" */ contract(): Document /** return anything inside (parentheses) */ - parentheses(n?: Number): Parentheses + parentheses(n?: number): Parentheses /** return things like "Spencer's" */ - possessives(n?: Number): Possessives + possessives(n?: number): Possessives /** return any terms inside 'quotation marks' */ - quotations(n?: Number): Quotations + quotations(n?: number): Quotations /** return things like `'FBI'` */ - acronyms(n?: Number): Acronyms + acronyms(n?: number): Acronyms /** return things like `'eats, shoots, and leaves'` */ - lists(n?: Number): Lists + lists(n?: number): Lists /** return any subsequent terms tagged as a Noun */ - nouns(n?: Number): Nouns + nouns(n?: number): Nouns /** return any subsequent terms tagged as a Verb */ - verbs(n?: Number): Verbs + verbs(n?: number): Verbs } // Nouns class @@ -277,9 +277,9 @@ declare module nlp { /** return only nouns that _can be_ inflected as plural */ hasPlural(): Document /** 'football captain' → 'football captains' */ - toPlural(setArticle?: Boolean): Document + toPlural(setArticle?: boolean): Document /** 'turnovers' → 'turnover' */ - toSingular(setArticle?: Boolean): Document + toSingular(setArticle?: boolean): Document /** add a `'s` to the end, in a safe manner. */ toPossessive(): Document } From fb6fb658a9f6264332d5805cb9382117d4fb1486 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 13:19:42 +0000 Subject: [PATCH 25/59] Add comment --- types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/index.d.ts b/types/index.d.ts index 7730d74dc..a9bbd983f 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -360,7 +360,7 @@ declare module nlp { /** */ remove(): Document /** */ - hasOxfordComma(): Document + hasOxfordComma(): Document // Can we change all the unfinished types to 'any' instead? Not sure which ones are placeholders } class World {} From af3fea1e0ca35ae501f84080244c3f457fc871ee Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 15:19:22 +0000 Subject: [PATCH 26/59] Try testing types in travis --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f09fd4b9f..ee808cfd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,14 +3,15 @@ sudo: false language: node_js node_js: - - "6" + - '6' cache: directories: - node_modules before_install: + - npm install -g typescript ts-node install: npm install -script: npm run testb +script: npm run testb && npm run test:types From c65f274f2de7b7a4f23ea7fb9912e2a1f67e0f9e Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 15:22:27 +0000 Subject: [PATCH 27/59] Update travis script --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ee808cfd2..e41f9bc03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,6 @@ before_install: install: npm install -script: npm run testb && npm run test:types +script: + - npm run testb + - npm run test:types From 46239e2df2c5849b3c035771bf1b743cc7c66b54 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 15:25:57 +0000 Subject: [PATCH 28/59] Test aginst LTS node --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e41f9bc03..26eacada1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ language: node_js node_js: - '6' + - lts/* cache: directories: From ab62fb908a3e77ce2711a44f94cacd210df8aaea Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Tue, 7 Jan 2020 15:31:57 +0000 Subject: [PATCH 29/59] Update build --- builds/compromise.js | 315 ++++++++++++++++++++++----------------- builds/compromise.js.map | 2 +- builds/compromise.min.js | 2 +- builds/compromise.mjs | 315 ++++++++++++++++++++++----------------- 4 files changed, 366 insertions(+), 268 deletions(-) diff --git a/builds/compromise.js b/builds/compromise.js index 98b86444a..d377e78a0 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -2281,7 +2281,8 @@ if (start(w) === '/' && end(w) === '/') { w = stripBoth(w); - obj.regex = new RegExp(w); + obj.regex = new RegExp(w); //potential vuln - security/detect-non-literal-regexp + return obj; } //soft-match @@ -3049,7 +3050,11 @@ } //handle last one - if (carry && result.length > 0) { + if (carry) { + if (result.length === 0) { + result[0] = ''; + } + result[result.length - 1] += carry; //put it on the end } // combine 'one / two' @@ -3200,7 +3205,7 @@ "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", "FemaleName": "true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", - "WeekDay": "true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!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", "FirstName": "true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is", "LastName": "true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams", @@ -4701,6 +4706,9 @@ weave: { prt: 'woven' }, + wed: { + pst: 'wed' + }, weep: { prt: 'wept' }, @@ -7846,7 +7854,6 @@ var toTitleCase = function toTitleCase() { - this.tag('TitleCase'); return eachTerm(this, 'toTitleCase'); }; /** remove whitespace and title-case each term */ @@ -8382,17 +8389,10 @@ //these are regexes applied to t.text, instead of t.clean // order matters. - var startsWith = [//phone numbers - [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 - [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 - //money - [/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/, ['Money', 'Value']], //like $5.30 - [/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/, ['Money', 'Value']], //like $5,231.30 - [/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //like 400usd - //web tags + var startsWith = [//web tags [/^\w+@\w+\.[a-z]{2,3}$/, 'Email'], //not fancy [/^#[a-z0-9_\u00C0-\u00FF]{2,}$/, 'HashTag'], [/^@\w{2,}$/, 'AtMention'], [/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/, 'Url'], //with http/www - [/^[\w\.\/]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain + [/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain //dates/times [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32 [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm @@ -8408,19 +8408,32 @@ [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes //slang things [/^(lol)+[sz]$/, 'Expression'], //lol - [/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], [/^[\-\+]?[0-9]+(\.[0-9])*$/, ['Cardinal', 'NumericValue']], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 - //numbers - [/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/, ['Cardinal', 'NumericValue']], //like 5 - [/^[-+]?[0-9]+(.[0-9]+)?$/, ['Cardinal', 'NumericValue']], //like +5.0 - [/^[0-9\.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 - [/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/, 'NumericValue'], //like 5,999.0 - [/^.?[0-9]+([0-9,.]+)?%$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. + [/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 + //phone numbers + [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 + [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 + //money + // currency regex + // /[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6] + //like $5.30 + [/^[-+]?[\$\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']], //like 5.30$ + [/^[-+]?[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']], //like 400usd + [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //numbers + // 50 | -50 | 3.23 | 5,999.0 | 10+ + [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/, ['Cardinal', 'NumericValue']], [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']], // .73th + [/^\.[0-9]+\+?$/, ['Cardinal', 'NumericValue']], //percent + [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. + [/^\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% .. + //fraction [/^[0-9]{1,4}\/[0-9]{1,4}$/, 'Fraction'], //3/2ths - [/^[0-9\.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 - [/^[0-9][0-9,\.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th - [/[0-9]\+$/, ['Cardinal', 'NumericValue']], //10+ - [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th - [/^[0-9\.]+([a-z]{1,4})$/, 'Value'] //like 5tbsp + //range + [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 + [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 + //with unit + [/^[0-9.]+([a-z]{1,4})$/, 'Value'] //like 5tbsp + //ordinal + // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th + // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th ]; var romanNumeral = /^[IVXLCDM]{2,}$/; @@ -8467,10 +8480,35 @@ [/.[^aeiou]ica$/, Sing], [/^([hyj]a)+$/, Exp] //hahah ], c: [[/.[^aeiou]ic$/, Adj]], - d: [[/.[ia]sed$/, Adj], [/.[gt]led$/, Adj], [/.[td]ed$/, Past], [/.[aeiou]red$/, Past], [/.[^aeiou]led$/, Past], //rumbled - [/[^aeiou]ard$/, Sing], [/[aeiou][^aeiou]id$/, Adj], [/[aeiou]c?ked$/, Past], //hooked + d: [//==-ed== + //double-consonant + [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped + //double-vowel + [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered + //-hed + [/.[aeiou][sg]hed$/, Past], //stashed, sighed + //-rd + [/.[aeiou]red$/, Past], //stored + [/.[aeiou]r?ried$/, Past], //buried + //-led + [/.[bcdgtr]led$/, Past], //startled, rumbled + [/.[aoui]f?led$/, Past], //impaled, stifled + //-sed + [/.[iao]sed$/, Past], //franchised + [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + //-med + [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed + //-ked + [/[aeiou]n?c?ked$/, Past], //hooked + //-ged + [/[aeiou][nl]?ged$/, Past], //engaged + //-ted + [/.[tdbwxz]ed$/, Past], //bribed, boxed [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed - [/.[vrl]id$/, Adj]], + //-ied + [/.[cdlmnprstv]ied$/, Past], //rallied + [/[^aeiou]ard$/, Sing], //card + [/[aeiou][^aeiou]id$/, Adj], [/.[vrl]id$/, Adj]], e: [[/.[lnr]ize$/, Inf], [/.[^aeiou]ise$/, Inf], [/.[aeiou]te$/, Inf], [/.[^aeiou][ai]ble$/, Adj], [/.[^aeiou]eable$/, Adj], [/.[ts]ive$/, Adj]], h: [[/.[^aeiouf]ish$/, Adj], [/.v[iy]ch$/, Last], //east-europe [/^ug?h+$/, Exp], //uhh @@ -8524,106 +8562,110 @@ "'t": Vb }, { //3-letter - que: Adj$1, - lar: Adj$1, - ffy: Adj$1, - nny: Adj$1, - rmy: Adj$1, + oed: Past$1, + ued: Past$1, + xed: Past$1, + ' so': Avb, + "'ll": Modal, + "'re": 'Copula', azy: Adj$1, - oid: Adj$1, - mum: Adj$1, - ous: Adj$1, end: Vb, - sis: Sing$1, - rol: Sing$1, - ize: Inf$1, + ped: Past$1, + ffy: Adj$1, ify: Inf$1, - zes: Pres$1, - nes: Pres$1, ing: 'Gerund', //likely to be converted to Adj after lexicon pass - ' so': Avb, - "'ll": Modal, - "'re": 'Copula' + ize: Inf$1, + lar: Adj$1, + mum: Adj$1, + nes: Pres$1, + nny: Adj$1, + oid: Adj$1, + ous: Adj$1, + que: Adj$1, + rmy: Adj$1, + rol: Sing$1, + sis: Sing$1, + zes: Pres$1 }, { //4-letter - teen: 'Value', - tors: Noun$1, amed: Past$1, + aped: Past$1, ched: Past$1, - ends: Vb, - oses: Pres$1, - fies: Pres$1, - ects: Pres$1, + lked: Past$1, nded: Past$1, - cede: Inf$1, - tage: Inf$1, - gate: Inf$1, - vice: Sing$1, - tion: Sing$1, cted: Past$1, + dged: Past$1, + akis: Last$1, + //greek + cede: Inf$1, + chuk: Last$1, + //east-europe + czyk: Last$1, + //polish (male) + ects: Pres$1, + ends: Vb, + enko: Last$1, + //east-europe ette: Sing$1, - some: Adj$1, - llen: Adj$1, - ried: Adj$1, - gone: Adj$1, - made: Adj$1, + fies: Pres$1, fore: Avb, - less: Avb, + gate: Inf$1, + gone: Adj$1, ices: Plrl, - ions: Plrl, ints: Plrl, - aped: Past$1, - lked: Past$1, + ions: Plrl, + less: Avb, + llen: Adj$1, + made: Adj$1, + nsen: Last$1, + //norway + oses: Pres$1, ould: Modal, - tive: Actor$1, + some: Adj$1, sson: Last$1, //swedish male - czyk: Last$1, - //polish (male) - chuk: Last$1, - //east-europe - enko: Last$1, - //east-europe - akis: Last$1, - //greek - nsen: Last$1 //norway - + tage: Inf$1, + teen: 'Value', + tion: Sing$1, + tive: Actor$1, + tors: Noun$1, + vice: Sing$1 }, { //5-letter - fully: Avb, - where: Avb, - wards: Avb, - urned: Past$1, tized: Past$1, + urned: Past$1, eased: Past$1, ances: Plrl, - tures: Plrl, - ports: Plrl, - ettes: Plrl, - ities: Plrl, - rough: Adj$1, - ology: Noun$1, bound: Adj$1, - tieth: 'Ordinal', + ettes: Plrl, + fully: Avb, ishes: Pres$1, - tches: Pres$1, + ities: Plrl, + marek: Last$1, + //polish (male) nssen: Last$1, //norway - marek: Last$1 //polish (male) - + ology: Noun$1, + ports: Plrl, + rough: Adj$1, + tches: Pres$1, + tieth: 'Ordinal', + tures: Plrl, + wards: Avb, + where: Avb }, { //6-letter - keeper: Actor$1, - logist: Actor$1, auskas: Last$1, //lithuania + keeper: Actor$1, + logist: Actor$1, teenth: 'Value' }, { //7-letter - sdottir: Last$1, - //swedish female - opoulos: Last$1 //greek + opoulos: Last$1, + //greek + sdottir: Last$1 //swedish female }]; @@ -9006,21 +9048,16 @@ var hasNumber = /[0-9]/; /** look for any grammar signals based on capital/lowercase */ - var checkCase = function checkCase(terms, world) { - terms.forEach(function (term, i) { - //is it a titlecased word? - if (titleCase$3.test(term.text) === true && hasNumber.test(term.text) === false) { - // tag it as titlecase, if possible - if (i !== 0) { - term.tag('TitleCase', 'case', world); - } else if (term.tags.Person || term.tags.Organization || term.tags.Place) { - term.tag('TitleCase', 'case-person', world); - } // can we call it a noun? + var checkCase = function checkCase(doc) { + var world = doc.world; + doc.list.forEach(function (p) { + var terms = p.terms(); + for (var i = 1; i < terms.length; i++) { + var term = terms[i]; - if (i !== 0) { - //sure! - term.tag('ProperNoun', 'case-noun', world); + if (titleCase$3.test(term.text) === true && hasNumber.test(term.text) === false) { + term.tag('ProperNoun', 'titlecase-noun', world); } } }); @@ -9206,7 +9243,7 @@ step.neighbours(terms, world); // is there a case-sensitive clue? - step["case"](terms, world); // check 'rewatch' as 'watch' + step["case"](doc); // check 'rewatch' as 'watch' step.stem(terms, world); // ... fallback to a noun! @@ -9775,7 +9812,7 @@ org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place'); org.match('#Organization #Country').tag('Organization', 'org-country'); org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org'); - org.match('#TitleCase #Organization').ifNo('@hasComma').tag('Organization', 'titlecase-org'); + org.match('@titleCase #Organization').ifNo('@hasComma').tag('Organization', 'titlecase-org'); } var plural = noun["if"]('#Plural'); @@ -9839,7 +9876,7 @@ if (hon.found === true) { //mr Putin - doc.match('(mr|mrs|ms|dr) (#TitleCase|#Possessive)+').tag('#Person', 'mr-putin'); //mr X + doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin'); //mr X hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase'); //remove single 'mr' @@ -9849,27 +9886,27 @@ } //methods requiring a titlecase - var title = doc["if"]('#TitleCase'); + var title = doc["if"]('@titleCase'); if (title.found === true) { - title.match('#Acronym #TitleCase').tagSafe('#Person', 'acronym-titlecase'); //ludwig van beethovan + title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase'); //ludwig van beethovan - title.match('#TitleCase (van|al|bin) #TitleCase').tagSafe('Person', 'titlecase-van-titlecase'); //jose de Sucre + title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase'); //jose de Sucre - title.match('#TitleCase (de|du) la? #TitleCase').tagSafe('Person', 'titlecase-van-titlecase'); //Foo U Ford + title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase'); //Foo U Ford title.match('[#ProperNoun] #Person').notIf('@hasComma').tagSafe('Person', 'proper-person'); //pope francis - title.match('(lady|queen|sister) #TitleCase').ifNo('#Date').ifNo('#Honorific').tag('#FemaleName', 'lady-titlecase'); - title.match('(king|pope|father) #TitleCase').ifNo('#Date').tag('#MaleName', 'poe'); // jean Foobar + title.match('(lady|queen|sister) @titleCase').ifNo('#Date').ifNo('#Honorific').tag('#FemaleName', 'lady-titlecase'); + title.match('(king|pope|father) @titleCase').ifNo('#Date').tag('#MaleName', 'poe'); // jean Foobar - title.match(maybeNoun + ' #Acronym? #TitleCase').tagSafe('Person', 'ray-smith'); // rob Foobar + title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith'); // rob Foobar - title.match(maybeVerb + ' #Acronym? #TitleCase').tag('Person', 'rob-smith'); // rusty Foobar + title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith'); // rusty Foobar - title.match(maybeAdj + ' #Acronym? #TitleCase').tag('Person', 'rusty-smith'); // june Foobar + title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith'); // june Foobar - title.match(maybeDate + ' #Acronym? (#TitleCase && !#Month)').tag('Person', 'june-smith'); + title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith'); } var person = doc["if"]('#Person'); @@ -9888,7 +9925,7 @@ person.match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person').tag('Honorific', 'ambg-honorifics'); //Morgan Shlkjsfne - title.match('#Person #TitleCase').match('#TitleCase #Noun').tagSafe('Person', 'person-titlecase'); //a bunch of ambiguous first names + title.match('#Person @titleCase').match('@titleCase #Noun').tagSafe('Person', 'person-titlecase'); //a bunch of ambiguous first names //Nouns: 'viola' or 'sky' var ambigNoun = person["if"](maybeNoun); @@ -9935,8 +9972,8 @@ var al = person["if"]('al'); if (al.found === true) { - al.match('al (#Person|#TitleCase)').tagSafe('#Person', 'al-borlen'); - al.match('#TitleCase al #TitleCase').tagSafe('#Person', 'arabic-al-arabic'); + al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen'); + al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic'); } var firstName = person["if"]('#FirstName'); @@ -9947,17 +9984,17 @@ firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun'); //John L. Foo - firstName.match('#FirstName #Acronym #TitleCase').tag('Person', 'firstname-acronym-titlecase'); //Andrew Lloyd Webber + firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase'); //Andrew Lloyd Webber - firstName.match('#FirstName #FirstName #TitleCase').tag('Person', 'firstname-firstname-titlecase'); //Mr Foo + firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase'); //Mr Foo - firstName.match('#Honorific #FirstName? #TitleCase').tag('Person', 'Honorific-TitleCase'); //peter the great + firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase'); //peter the great firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5'); //very common-but-ambiguous lastnames firstName.match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)').tag('#Person', 'firstname-maybe'); //John Foo - firstName.match('#FirstName #TitleCase #TitleCase?').match('#Noun+').tag('Person', 'firstname-titlecase'); //Joe K. Sombrero + firstName.match('#FirstName @titleCase @titleCase?').match('#Noun+').tag('Person', 'firstname-titlecase'); //Joe K. Sombrero firstName.match('#FirstName #Acronym #Noun').ifNo('#Date').tag('#Person', 'n-acro-noun').lastTerm().tag('#LastName', 'n-acro-noun'); // Dwayne 'the rock' Johnson @@ -9965,7 +10002,7 @@ firstName.match('#FirstName (#Singular|#Possessive)').ifNo('(#Date|#Pronoun|#NickName)').tag('#Person', 'first-possessive').lastTerm().tag('#LastName', 'first-possessive'); // Firstname x (dangerous) - var tmp = firstName.match('#FirstName (#Noun|#TitleCase)').ifNo('^#Possessive').ifNo('#ClauseEnd .').ifNo('#Pronoun'); + var tmp = firstName.match('#FirstName (#Noun|@titleCase)').ifNo('^#Possessive').ifNo('#ClauseEnd .').ifNo('#Pronoun'); tmp.lastTerm().tag('#LastName', 'firstname-noun'); } @@ -9979,7 +10016,7 @@ lastName.match('[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName').tag('#FirstName', 'maybe-lastname'); //Jani K. Smith - lastName.match('(#TitleCase|#Singular) #Acronym? #LastName').ifNo('#Date').tag('#Person', 'title-acro-noun').lastTerm().tag('#LastName', 'title-acro-noun'); + lastName.match('(@titleCase|#Singular) #Acronym? #LastName').ifNo('#Date').tag('#Person', 'title-acro-noun').lastTerm().tag('#LastName', 'title-acro-noun'); } } @@ -10042,7 +10079,7 @@ if (copula.found === true) { //was walking - copula.match("#Copula ".concat(advb, " #Gerund")).not('#Verb$').tag('Auxiliary', 'copula-walking'); //is mark hughes + copula.match("#Copula ".concat(advb, " (#Gerund|#PastTense)")).not('#Verb$').tag('Auxiliary', 'copula-walking'); //is mark hughes copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun'); // @@ -10181,7 +10218,7 @@ var people = '(january|april|may|june|summer|autumn|jan|sep)'; //ambiguous month-names - var verbs$1 = '(may|march)'; //ambiguous month-verbs + var verbs$1 = '(may|march|sat)'; //ambiguous month-verbs var fixDates = function fixDates(doc) { //ambiguous month - person forms @@ -10250,7 +10287,9 @@ if (sun.found === true) { //sun feb 2 - sun.match('[sun] #Date').tag('WeekDay', 'sun-feb'); //sun the 5th + sun.match('[sun] #Date').tag('WeekDay', 'sun-feb'); //1pm next sun + + sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun'); //sun the 5th sun.match('sun the #Ordinal').tag('Date').firstTerm().tag('WeekDay', 'sun-the-5th'); //the sun @@ -10528,7 +10567,17 @@ found = found.splitBefore('in addition to .'); // semicolons, dashes found = found.splitAfter('@hasSemicolon'); - found = found.splitAfter('@hasDash'); // does there appear to have relative/subordinate clause still? + found = found.splitAfter('@hasDash'); // passive voice verb - '.. which was robbed is empty' + // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // //which the boy robbed + // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // does there appear to have relative/subordinate clause still? var tooLong = found.filter(function (d) { return d.wordCount() > 5 && d.match('#Verb+').length >= 2; diff --git a/builds/compromise.js.map b/builds/compromise.js.map index 3d3165f7c..f4feb0d83 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w)\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry && result.length > 0) {\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.2.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n reg: /(ake)$/i,\n repl: {\n pr: '$1s',\n pa: 'ook',\n gr: 'aking',\n ar: '$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(str = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(str) === true) {\n found = Object.assign({}, world.irregulars.verbs[str])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(str), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(str)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(str)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(str)\n }\n return found\n}\nmodule.exports = conjugate\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n reg: /pping$/i,\n to: 'p',\n },\n {\n reg: /lling$/i,\n to: 'll',\n },\n {\n reg: /tting$/i,\n to: 't',\n },\n {\n reg: /dding$/i,\n to: 'd',\n },\n {\n reg: /ssing$/i,\n to: 'ss',\n },\n {\n reg: /(..)gging$/i,\n to: '$1g',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ea.)ing$/i,\n to: '$1',\n },\n {\n reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n {\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n this.tag('TitleCase')\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n [/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/, ['Money', 'Value']], //like $5.30\n [/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/, ['Money', 'Value']], //like $5,231.30\n [/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //like 400usd\n\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w\\.\\/]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n [/^[\\-\\+]?[0-9]+(\\.[0-9])*$/, ['Cardinal', 'NumericValue']],\n [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //numbers\n [/^[\\-\\+]?[0-9][0-9,]*(\\.[0-9])*$/, ['Cardinal', 'NumericValue']], //like 5\n [/^[-+]?[0-9]+(.[0-9]+)?$/, ['Cardinal', 'NumericValue']], //like +5.0\n [/^[0-9\\.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n [/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/, 'NumericValue'], //like 5,999.0\n [/^.?[0-9]+([0-9,.]+)?%$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n [/^[0-9\\.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9][0-9,\\.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n [/[0-9]\\+$/, ['Cardinal', 'NumericValue']], //10+\n [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n [/^[0-9\\.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'regex #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n [/.[ia]sed$/, Adj],\n [/.[gt]led$/, Adj],\n [/.[td]ed$/, Past],\n [/.[aeiou]red$/, Past],\n [/.[^aeiou]led$/, Past], //rumbled\n [/[^aeiou]ard$/, Sing],\n [/[aeiou][^aeiou]id$/, Adj],\n [/[aeiou]c?ked$/, Past], //hooked\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n que: Adj,\n lar: Adj,\n ffy: Adj,\n nny: Adj,\n rmy: Adj,\n azy: Adj,\n oid: Adj,\n mum: Adj,\n ous: Adj,\n end: Vb,\n sis: Sing,\n rol: Sing,\n ize: Inf,\n ify: Inf,\n zes: Pres,\n nes: Pres,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n },\n {\n //4-letter\n teen: 'Value',\n tors: Noun,\n amed: Past,\n ched: Past,\n ends: Vb,\n oses: Pres,\n fies: Pres,\n ects: Pres,\n nded: Past,\n cede: Inf,\n tage: Inf,\n gate: Inf,\n vice: Sing,\n tion: Sing,\n cted: Past,\n ette: Sing,\n some: Adj,\n llen: Adj,\n ried: Adj,\n gone: Adj,\n made: Adj,\n fore: Avb,\n less: Avb,\n ices: Plrl,\n ions: Plrl,\n ints: Plrl,\n aped: Past,\n lked: Past,\n ould: Modal,\n tive: Actor,\n sson: Last, //swedish male\n czyk: Last, //polish (male)\n chuk: Last, //east-europe\n enko: Last, //east-europe\n akis: Last, //greek\n nsen: Last, //norway\n },\n {\n //5-letter\n fully: Avb,\n where: Avb,\n wards: Avb,\n urned: Past,\n tized: Past,\n eased: Past,\n ances: Plrl,\n tures: Plrl,\n ports: Plrl,\n ettes: Plrl,\n ities: Plrl,\n rough: Adj,\n ology: Noun,\n bound: Adj,\n tieth: 'Ordinal',\n ishes: Pres,\n tches: Pres,\n nssen: Last, //norway\n marek: Last, //polish (male)\n },\n {\n //6-letter\n keeper: Actor,\n logist: Actor,\n auskas: Last, //lithuania\n teenth: 'Value',\n },\n {\n //7-letter\n sdottir: Last, //swedish female\n opoulos: Last, //greek\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(terms, world) {\n terms.forEach((term, i) => {\n //is it a titlecased word?\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n // tag it as titlecase, if possible\n if (i !== 0) {\n term.tag('TitleCase', 'case', world)\n } else if (term.tags.Person || term.tags.Organization || term.tags.Place) {\n term.tag('TitleCase', 'case-person', world)\n }\n // can we call it a noun?\n if (i !== 0) {\n //sure!\n term.tag('ProperNoun', 'case-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(terms, world)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('#TitleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (#TitleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('#TitleCase')\n if (title.found === true) {\n title.match('#Acronym #TitleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('#TitleCase (van|al|bin) #TitleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('#TitleCase (de|du) la? #TitleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) #TitleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) #TitleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? #TitleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? #TitleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? #TitleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (#TitleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person #TitleCase')\n .match('#TitleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|#TitleCase)').tagSafe('#Person', 'al-borlen')\n al.match('#TitleCase al #TitleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym #TitleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName #TitleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? #TitleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName #TitleCase #TitleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|#TitleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(#TitleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains\n val.match('#Value [#PresentTense]').tag('Plural', 'value-presentTense')\n //money\n let m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n // this.lookAhead('.+').debug()\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text()\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text()\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n Object.keys(forms).forEach(k => (forms[k] += ' ' + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += ' ' + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + ' ' + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\nconst toInfinitive = require('./toInfinitive')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = toInfinitive(parsed, this.world)\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","tryMultiple","checkLexicon","foundWords","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","que","lar","ffy","nny","rmy","azy","oid","mum","ous","sis","rol","ize","ify","zes","nes","ing","teen","tors","amed","ched","ends","oses","fies","ects","nded","cede","tage","gate","vice","tion","cted","ette","llen","ried","gone","made","fore","less","ices","ions","ints","aped","lked","ould","tive","sson","czyk","chuk","enko","akis","nsen","fully","where","wards","urned","tized","eased","ances","tures","ports","ettes","ities","rough","ology","bound","tieth","ishes","tches","nssen","marek","keeper","logist","auskas","teenth","sdottir","opoulos","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.2.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n reg: /(ake)$/i,\n repl: {\n pr: '$1s',\n pa: 'ook',\n gr: 'aking',\n ar: '$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(str = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(str) === true) {\n found = Object.assign({}, world.irregulars.verbs[str])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(str), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(str)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(str)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(str)\n }\n return found\n}\nmodule.exports = conjugate\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n reg: /pping$/i,\n to: 'p',\n },\n {\n reg: /lling$/i,\n to: 'll',\n },\n {\n reg: /tting$/i,\n to: 't',\n },\n {\n reg: /dding$/i,\n to: 'd',\n },\n {\n reg: /ssing$/i,\n to: 'ss',\n },\n {\n reg: /(..)gging$/i,\n to: '$1g',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ea.)ing$/i,\n to: '$1',\n },\n {\n reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n {\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'regex #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou]n?c?ked$/, Past], //hooked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Actor,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains\n val.match('#Value [#PresentTense]').tag('Plural', 'value-presentTense')\n //money\n let m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n // this.lookAhead('.+').debug()\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text()\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text()\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n Object.keys(forms).forEach(k => (forms[k] += ' ' + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += ' ' + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + ' ' + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\nconst toInfinitive = require('./toInfinitive')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = toInfinitive(parsed, this.world)\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","tryMultiple","checkLexicon","foundWords","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index c7fbcf09d..2310bca79 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},B,N,T,H,L);function _(){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),n=String(n);var r=C(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=C(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Ne(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},xe=function(e,t){var n={};De(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},je={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=De(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return De(this,e,!0).length>0},not:function(e){var t=this,n=xe(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,je),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,_e=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,We=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===_e.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&t.length>0&&(t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},_t=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Wt=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=F((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Gn=F((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Bn=(Fn.json,Fn.data,F((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=xn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Tn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Vn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Tn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},nr=/[\'‘’‛‵′`´]$/,rr=/^[A-Z]('s|,)?$/,ar={I:!0,A:!0},ir=function(e,t,n){var r=e[t];if(nr.test(r.text)&&!nr.test(r.pre)&&!nr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ar.hasOwnProperty(r.text)&&rr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},or=[[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/,["Money","Value"]],[/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w\.\/]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[\-\+]?[0-9]+(\.[0-9])*$/,["Cardinal","NumericValue"]],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(.[0-9]+)?$/,["Cardinal","NumericValue"]],[/^[0-9\.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/,"NumericValue"],[/^.?[0-9]+([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][0-9,\.]*(st|nd|rd|r?th)$/,["NumericValue","Ordinal"]],[/[0-9]\+$/,["Cardinal","NumericValue"]],[/^[0-9]+(st|nd|rd|th)$/,"Ordinal"],[/^[0-9\.]+([a-z]{1,4})$/,"Value"]],sr=/^[IVXLCDM]{2,}$/,ur=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,lr="Adjective",cr="Infinitive",hr="Singular",dr="PastTense",fr="Expression",mr="LastName",pr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,mr],[/.[^aeiou]ica$/,hr],[/^([hyj]a)+$/,fr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/.[ia]sed$/,lr],[/.[gt]led$/,lr],[/.[td]ed$/,dr],[/.[aeiou]red$/,dr],[/.[^aeiou]led$/,dr],[/[^aeiou]ard$/,hr],[/[aeiou][^aeiou]id$/,lr],[/[aeiou]c?ked$/,dr],[/[^aeiou][aeiou][tvx]ed$/,dr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,mr],[/^ug?h+$/,fr],[/^uh[ -]?oh$/,fr]],i:[[/.[oau][wvl]ski$/,mr]],k:[[/^(k)+$/,fr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,hr],[/[^aeiou]ism$/,hr],[/^h*u*m+$/,fr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,fr],[/^(yo)+$/,fr],[/^woo+[pt]?$/,fr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,hr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,hr],[/[aeiou][^aeiou]is$/,hr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,fr]],v:[[/.[^aeiou][ai][kln]ov$/,mr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,hr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,hr]]},gr="Adjective",vr="Infinitive",br="PresentTense",yr="Singular",wr="PastTense",kr="Adverb",Ar="Plural",$r="Verb",Pr="LastName",Gr=[null,null,{ea:yr,ia:"Noun",ic:gr,ly:kr,"'n":$r,"'t":$r},{que:gr,lar:gr,ffy:gr,nny:gr,rmy:gr,azy:gr,oid:gr,mum:gr,ous:gr,end:$r,sis:yr,rol:yr,ize:vr,ify:vr,zes:br,nes:br,ing:"Gerund"," so":kr,"'ll":"Modal","'re":"Copula"},{teen:"Value",tors:"Noun",amed:wr,ched:wr,ends:$r,oses:br,fies:br,ects:br,nded:wr,cede:vr,tage:vr,gate:vr,vice:yr,tion:yr,cted:wr,ette:yr,some:gr,llen:gr,ried:gr,gone:gr,made:gr,fore:kr,less:kr,ices:Ar,ions:Ar,ints:Ar,aped:wr,lked:wr,ould:"Modal",tive:"Actor",sson:Pr,czyk:Pr,chuk:Pr,enko:Pr,akis:Pr,nsen:Pr},{fully:kr,where:kr,wards:kr,urned:wr,tized:wr,eased:wr,ances:Ar,tures:Ar,ports:Ar,ettes:Ar,ities:Ar,rough:gr,ology:"Noun",bound:gr,tieth:"Ordinal",ishes:br,tches:br,nssen:Pr,marek:Pr},{keeper:"Actor",logist:"Actor",auskas:Pr,teenth:"Value"},{sdottir:Pr,opoulos:Pr}],Er={":(":!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&&sr.test(n)&&ur.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Gr[i.length].hasOwnProperty(i)){var o=Gr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===pr.hasOwnProperty(r))for(var a=pr[r],i=0;i35)))}(r=r.trim())&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Cr)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Er.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Br=function(e,t){var n=e.world;Fr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Mr={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]},Sr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Lr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Jr=[/i$/,/ae$/],_r=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Sr.find((function(t){return e.tags[t]})))return;if(Mr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Mr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Lr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(Jr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},Wr=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),qr=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()))},Kr={neighbours:jr,case:Vr,stem:Ir,plural:_r,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ha=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return ja(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();pi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new pi(e,this,this.world)},pi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(pi.prototype,mi.misc),Object.assign(pi.prototype,mi.selections),fi(pi);var gi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(gi).forEach((function(e){return pi.prototype[e]=pi.prototype[gi[e]]}));var vi=pi,bi=new pn,yi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r.tagger(),r};return yi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r},yi.extend=function(e){return e(vi,bi),this},yi.clone=function(){return bi=bi.clone(),this},yi.load=function(e){var t=at(e,bi);return new vi(t,null,bi)},yi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return bi.verbose(e),this},yi.version="12.2.1",yi.import=yi.load,yi})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},B,D,T,H,L);function W(){return"undefined"!=typeof window&&window.document}var _=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=E(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=De(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},Ne=function(e,t){var n={};xe(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},je={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=xe(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return xe(this,e,!0).length>0},not:function(e){var t=this,n=Ne(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,je),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,We=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,_e=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===We.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},Wt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],_t=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=C((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Fn=C((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Bn=(Cn.json,Cn.data,C((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=Nn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Tn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Vn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Tn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},nr=/[\'‘’‛‵′`´]$/,rr=/^[A-Z]('s|,)?$/,ar={I:!0,A:!0},ir=function(e,t,n){var r=e[t];if(nr.test(r.text)&&!nr.test(r.pre)&&!nr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ar.hasOwnProperty(r.text)&&rr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},or=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],sr=/^[IVXLCDM]{2,}$/,ur=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,lr="Adjective",cr="Infinitive",hr="Singular",dr="PastTense",fr="Expression",mr="LastName",pr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,mr],[/.[^aeiou]ica$/,hr],[/^([hyj]a)+$/,fr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/,dr],[/.[aeo]{2}[bdgmnprvz]ed$/,dr],[/.[aeiou][sg]hed$/,dr],[/.[aeiou]red$/,dr],[/.[aeiou]r?ried$/,dr],[/.[bcdgtr]led$/,dr],[/.[aoui]f?led$/,dr],[/.[iao]sed$/,dr],[/.[aeiou]n?[cs]ed$/,dr],[/[aeiou][rl]?[mnf]ed$/,dr],[/[aeiou]n?c?ked$/,dr],[/[aeiou][nl]?ged$/,dr],[/.[tdbwxz]ed$/,dr],[/[^aeiou][aeiou][tvx]ed$/,dr],[/.[cdlmnprstv]ied$/,dr],[/[^aeiou]ard$/,hr],[/[aeiou][^aeiou]id$/,lr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,mr],[/^ug?h+$/,fr],[/^uh[ -]?oh$/,fr]],i:[[/.[oau][wvl]ski$/,mr]],k:[[/^(k)+$/,fr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,hr],[/[^aeiou]ism$/,hr],[/^h*u*m+$/,fr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,fr],[/^(yo)+$/,fr],[/^woo+[pt]?$/,fr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,hr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,hr],[/[aeiou][^aeiou]is$/,hr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,fr]],v:[[/.[^aeiou][ai][kln]ov$/,mr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,hr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,hr]]},gr="Adjective",vr="Infinitive",br="PresentTense",yr="Singular",wr="PastTense",kr="Adverb",Ar="Plural",$r="Verb",Pr="LastName",Fr=[null,null,{ea:yr,ia:"Noun",ic:gr,ly:kr,"'n":$r,"'t":$r},{oed:wr,ued:wr,xed:wr," so":kr,"'ll":"Modal","'re":"Copula",azy:gr,end:$r,ped:wr,ffy:gr,ify:vr,ing:"Gerund",ize:vr,lar:gr,mum:gr,nes:br,nny:gr,oid:gr,ous:gr,que:gr,rmy:gr,rol:yr,sis:yr,zes:br},{amed:wr,aped:wr,ched:wr,lked:wr,nded:wr,cted:wr,dged:wr,akis:Pr,cede:vr,chuk:Pr,czyk:Pr,ects:br,ends:$r,enko:Pr,ette:yr,fies:br,fore:kr,gate:vr,gone:gr,ices:Ar,ints:Ar,ions:Ar,less:kr,llen:gr,made:gr,nsen:Pr,oses:br,ould:"Modal",some:gr,sson:Pr,tage:vr,teen:"Value",tion:yr,tive:"Actor",tors:"Noun",vice:yr},{tized:wr,urned:wr,eased:wr,ances:Ar,bound:gr,ettes:Ar,fully:kr,ishes:br,ities:Ar,marek:Pr,nssen:Pr,ology:"Noun",ports:Ar,rough:gr,tches:br,tieth:"Ordinal",tures:Ar,wards:kr,where:kr},{auskas:Pr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Pr,sdottir:Pr}],Gr={":(":!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&&sr.test(n)&&ur.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Fr[i.length].hasOwnProperty(i)){var o=Fr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===pr.hasOwnProperty(r))for(var a=pr[r],i=0;i35)))}(r=r.trim())&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Er)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Gr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Br=function(e,t){var n=e.world;Cr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Mr={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]},Sr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Lr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Jr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Sr.find((function(t){return e.tags[t]})))return;if(Mr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Mr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Lr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(Jr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},_r=["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}),{}),qr=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()))},Kr={neighbours:jr,case:Vr,stem:Ir,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ha=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return ja(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();pi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new pi(e,this,this.world)},pi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(pi.prototype,mi.misc),Object.assign(pi.prototype,mi.selections),fi(pi);var gi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(gi).forEach((function(e){return pi.prototype[e]=pi.prototype[gi[e]]}));var vi=pi,bi=new pn,yi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r.tagger(),r};return yi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r},yi.extend=function(e){return e(vi,bi),this},yi.clone=function(){return bi=bi.clone(),this},yi.load=function(e){var t=at(e,bi);return new vi(t,null,bi)},yi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return bi.verbose(e),this},yi.version="12.2.1",yi.import=yi.load,yi})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index edf6f342d..f237cd485 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -2275,7 +2275,8 @@ var parseToken = function parseToken(w) { if (start(w) === '/' && end(w) === '/') { w = stripBoth(w); - obj.regex = new RegExp(w); + obj.regex = new RegExp(w); //potential vuln - security/detect-non-literal-regexp + return obj; } //soft-match @@ -3043,7 +3044,11 @@ var splitWords = function splitWords(str) { } //handle last one - if (carry && result.length > 0) { + if (carry) { + if (result.length === 0) { + result[0] = ''; + } + result[result.length - 1] += carry; //put it on the end } // combine 'one / two' @@ -3194,7 +3199,7 @@ var _data = { "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", "FemaleName": "true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", - "WeekDay": "true¦fri4mon4s2t1wed0;!nesd4;hurs2ues2;at0un1;!urd1;!d0;ay0;!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", "FirstName": "true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is", "LastName": "true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams", @@ -4695,6 +4700,9 @@ var conjugations = { weave: { prt: 'woven' }, + wed: { + pst: 'wed' + }, weep: { prt: 'wept' }, @@ -7840,7 +7848,6 @@ var toUpperCase = function toUpperCase() { var toTitleCase = function toTitleCase() { - this.tag('TitleCase'); return eachTerm(this, 'toTitleCase'); }; /** remove whitespace and title-case each term */ @@ -8376,17 +8383,10 @@ var _02Punctuation$1 = checkPunctuation; //these are regexes applied to t.text, instead of t.clean // order matters. -var startsWith = [//phone numbers -[/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 -[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 -//money -[/^[-+]?[$€¥£][0-9]+(.[0-9]{1,2})?([a-z]{1,4})?$/, ['Money', 'Value']], //like $5.30 -[/^[-+]?[$€¥£][0-9]{1,3}(,[0-9]{3})+(.[0-9]{1,2})?$/, ['Money', 'Value']], //like $5,231.30 -[/^[-+]?[0-9]([0-9,.]+)?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //like 400usd -//web tags +var startsWith = [//web tags [/^\w+@\w+\.[a-z]{2,3}$/, 'Email'], //not fancy [/^#[a-z0-9_\u00C0-\u00FF]{2,}$/, 'HashTag'], [/^@\w{2,}$/, 'AtMention'], [/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/, 'Url'], //with http/www -[/^[\w\.\/]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain +[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain //dates/times [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32 [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm @@ -8402,19 +8402,32 @@ var startsWith = [//phone numbers [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes //slang things [/^(lol)+[sz]$/, 'Expression'], //lol -[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], [/^[\-\+]?[0-9]+(\.[0-9])*$/, ['Cardinal', 'NumericValue']], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 -//numbers -[/^[\-\+]?[0-9][0-9,]*(\.[0-9])*$/, ['Cardinal', 'NumericValue']], //like 5 -[/^[-+]?[0-9]+(.[0-9]+)?$/, ['Cardinal', 'NumericValue']], //like +5.0 -[/^[0-9\.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 -[/^[-+]?[0-9.,]{1,3}(,[0-9.,]{3})+(.[0-9]+)?$/, 'NumericValue'], //like 5,999.0 -[/^.?[0-9]+([0-9,.]+)?%$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. +[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 +//phone numbers +[/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 +[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 +//money +// currency regex +// /[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6] +//like $5.30 +[/^[-+]?[\$\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']], //like 5.30$ +[/^[-+]?[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']], //like 400usd +[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']], //numbers +// 50 | -50 | 3.23 | 5,999.0 | 10+ +[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/, ['Cardinal', 'NumericValue']], [/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']], // .73th +[/^\.[0-9]+\+?$/, ['Cardinal', 'NumericValue']], //percent +[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% .. +[/^\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% .. +//fraction [/^[0-9]{1,4}\/[0-9]{1,4}$/, 'Fraction'], //3/2ths -[/^[0-9\.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 -[/^[0-9][0-9,\.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th -[/[0-9]\+$/, ['Cardinal', 'NumericValue']], //10+ -[/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th -[/^[0-9\.]+([a-z]{1,4})$/, 'Value'] //like 5tbsp +//range +[/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8 +[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7 +//with unit +[/^[0-9.]+([a-z]{1,4})$/, 'Value'] //like 5tbsp +//ordinal +// [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th +// [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th ]; var romanNumeral = /^[IVXLCDM]{2,}$/; @@ -8461,10 +8474,35 @@ var endsWith$1 = { [/.[^aeiou]ica$/, Sing], [/^([hyj]a)+$/, Exp] //hahah ], c: [[/.[^aeiou]ic$/, Adj]], - d: [[/.[ia]sed$/, Adj], [/.[gt]led$/, Adj], [/.[td]ed$/, Past], [/.[aeiou]red$/, Past], [/.[^aeiou]led$/, Past], //rumbled - [/[^aeiou]ard$/, Sing], [/[aeiou][^aeiou]id$/, Adj], [/[aeiou]c?ked$/, Past], //hooked + d: [//==-ed== + //double-consonant + [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped + //double-vowel + [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered + //-hed + [/.[aeiou][sg]hed$/, Past], //stashed, sighed + //-rd + [/.[aeiou]red$/, Past], //stored + [/.[aeiou]r?ried$/, Past], //buried + //-led + [/.[bcdgtr]led$/, Past], //startled, rumbled + [/.[aoui]f?led$/, Past], //impaled, stifled + //-sed + [/.[iao]sed$/, Past], //franchised + [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + //-med + [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed + //-ked + [/[aeiou]n?c?ked$/, Past], //hooked + //-ged + [/[aeiou][nl]?ged$/, Past], //engaged + //-ted + [/.[tdbwxz]ed$/, Past], //bribed, boxed [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed - [/.[vrl]id$/, Adj]], + //-ied + [/.[cdlmnprstv]ied$/, Past], //rallied + [/[^aeiou]ard$/, Sing], //card + [/[aeiou][^aeiou]id$/, Adj], [/.[vrl]id$/, Adj]], e: [[/.[lnr]ize$/, Inf], [/.[^aeiou]ise$/, Inf], [/.[aeiou]te$/, Inf], [/.[^aeiou][ai]ble$/, Adj], [/.[^aeiou]eable$/, Adj], [/.[ts]ive$/, Adj]], h: [[/.[^aeiouf]ish$/, Adj], [/.v[iy]ch$/, Last], //east-europe [/^ug?h+$/, Exp], //uhh @@ -8518,106 +8556,110 @@ null, //1 "'t": Vb }, { //3-letter - que: Adj$1, - lar: Adj$1, - ffy: Adj$1, - nny: Adj$1, - rmy: Adj$1, + oed: Past$1, + ued: Past$1, + xed: Past$1, + ' so': Avb, + "'ll": Modal, + "'re": 'Copula', azy: Adj$1, - oid: Adj$1, - mum: Adj$1, - ous: Adj$1, end: Vb, - sis: Sing$1, - rol: Sing$1, - ize: Inf$1, + ped: Past$1, + ffy: Adj$1, ify: Inf$1, - zes: Pres$1, - nes: Pres$1, ing: 'Gerund', //likely to be converted to Adj after lexicon pass - ' so': Avb, - "'ll": Modal, - "'re": 'Copula' + ize: Inf$1, + lar: Adj$1, + mum: Adj$1, + nes: Pres$1, + nny: Adj$1, + oid: Adj$1, + ous: Adj$1, + que: Adj$1, + rmy: Adj$1, + rol: Sing$1, + sis: Sing$1, + zes: Pres$1 }, { //4-letter - teen: 'Value', - tors: Noun$1, amed: Past$1, + aped: Past$1, ched: Past$1, - ends: Vb, - oses: Pres$1, - fies: Pres$1, - ects: Pres$1, + lked: Past$1, nded: Past$1, - cede: Inf$1, - tage: Inf$1, - gate: Inf$1, - vice: Sing$1, - tion: Sing$1, cted: Past$1, + dged: Past$1, + akis: Last$1, + //greek + cede: Inf$1, + chuk: Last$1, + //east-europe + czyk: Last$1, + //polish (male) + ects: Pres$1, + ends: Vb, + enko: Last$1, + //east-europe ette: Sing$1, - some: Adj$1, - llen: Adj$1, - ried: Adj$1, - gone: Adj$1, - made: Adj$1, + fies: Pres$1, fore: Avb, - less: Avb, + gate: Inf$1, + gone: Adj$1, ices: Plrl, - ions: Plrl, ints: Plrl, - aped: Past$1, - lked: Past$1, + ions: Plrl, + less: Avb, + llen: Adj$1, + made: Adj$1, + nsen: Last$1, + //norway + oses: Pres$1, ould: Modal, - tive: Actor$1, + some: Adj$1, sson: Last$1, //swedish male - czyk: Last$1, - //polish (male) - chuk: Last$1, - //east-europe - enko: Last$1, - //east-europe - akis: Last$1, - //greek - nsen: Last$1 //norway - + tage: Inf$1, + teen: 'Value', + tion: Sing$1, + tive: Actor$1, + tors: Noun$1, + vice: Sing$1 }, { //5-letter - fully: Avb, - where: Avb, - wards: Avb, - urned: Past$1, tized: Past$1, + urned: Past$1, eased: Past$1, ances: Plrl, - tures: Plrl, - ports: Plrl, - ettes: Plrl, - ities: Plrl, - rough: Adj$1, - ology: Noun$1, bound: Adj$1, - tieth: 'Ordinal', + ettes: Plrl, + fully: Avb, ishes: Pres$1, - tches: Pres$1, + ities: Plrl, + marek: Last$1, + //polish (male) nssen: Last$1, //norway - marek: Last$1 //polish (male) - + ology: Noun$1, + ports: Plrl, + rough: Adj$1, + tches: Pres$1, + tieth: 'Ordinal', + tures: Plrl, + wards: Avb, + where: Avb }, { //6-letter - keeper: Actor$1, - logist: Actor$1, auskas: Last$1, //lithuania + keeper: Actor$1, + logist: Actor$1, teenth: 'Value' }, { //7-letter - sdottir: Last$1, - //swedish female - opoulos: Last$1 //greek + opoulos: Last$1, + //greek + sdottir: Last$1 //swedish female }]; @@ -9000,21 +9042,16 @@ var titleCase$3 = /^[A-Z][a-z'\u00C0-\u00FF]/; var hasNumber = /[0-9]/; /** look for any grammar signals based on capital/lowercase */ -var checkCase = function checkCase(terms, world) { - terms.forEach(function (term, i) { - //is it a titlecased word? - if (titleCase$3.test(term.text) === true && hasNumber.test(term.text) === false) { - // tag it as titlecase, if possible - if (i !== 0) { - term.tag('TitleCase', 'case', world); - } else if (term.tags.Person || term.tags.Organization || term.tags.Place) { - term.tag('TitleCase', 'case-person', world); - } // can we call it a noun? +var checkCase = function checkCase(doc) { + var world = doc.world; + doc.list.forEach(function (p) { + var terms = p.terms(); + for (var i = 1; i < terms.length; i++) { + var term = terms[i]; - if (i !== 0) { - //sure! - term.tag('ProperNoun', 'case-noun', world); + if (titleCase$3.test(term.text) === true && hasNumber.test(term.text) === false) { + term.tag('ProperNoun', 'titlecase-noun', world); } } }); @@ -9200,7 +9237,7 @@ var fallbacks = function fallbacks(doc, terms) { step.neighbours(terms, world); // is there a case-sensitive clue? - step["case"](terms, world); // check 'rewatch' as 'watch' + step["case"](doc); // check 'rewatch' as 'watch' step.stem(terms, world); // ... fallback to a noun! @@ -9769,7 +9806,7 @@ var fixNouns = function fixNouns(doc) { org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place'); org.match('#Organization #Country').tag('Organization', 'org-country'); org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org'); - org.match('#TitleCase #Organization').ifNo('@hasComma').tag('Organization', 'titlecase-org'); + org.match('@titleCase #Organization').ifNo('@hasComma').tag('Organization', 'titlecase-org'); } var plural = noun["if"]('#Plural'); @@ -9833,7 +9870,7 @@ var fixPerson = function fixPerson(doc) { if (hon.found === true) { //mr Putin - doc.match('(mr|mrs|ms|dr) (#TitleCase|#Possessive)+').tag('#Person', 'mr-putin'); //mr X + doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin'); //mr X hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase'); //remove single 'mr' @@ -9843,27 +9880,27 @@ var fixPerson = function fixPerson(doc) { } //methods requiring a titlecase - var title = doc["if"]('#TitleCase'); + var title = doc["if"]('@titleCase'); if (title.found === true) { - title.match('#Acronym #TitleCase').tagSafe('#Person', 'acronym-titlecase'); //ludwig van beethovan + title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase'); //ludwig van beethovan - title.match('#TitleCase (van|al|bin) #TitleCase').tagSafe('Person', 'titlecase-van-titlecase'); //jose de Sucre + title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase'); //jose de Sucre - title.match('#TitleCase (de|du) la? #TitleCase').tagSafe('Person', 'titlecase-van-titlecase'); //Foo U Ford + title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase'); //Foo U Ford title.match('[#ProperNoun] #Person').notIf('@hasComma').tagSafe('Person', 'proper-person'); //pope francis - title.match('(lady|queen|sister) #TitleCase').ifNo('#Date').ifNo('#Honorific').tag('#FemaleName', 'lady-titlecase'); - title.match('(king|pope|father) #TitleCase').ifNo('#Date').tag('#MaleName', 'poe'); // jean Foobar + title.match('(lady|queen|sister) @titleCase').ifNo('#Date').ifNo('#Honorific').tag('#FemaleName', 'lady-titlecase'); + title.match('(king|pope|father) @titleCase').ifNo('#Date').tag('#MaleName', 'poe'); // jean Foobar - title.match(maybeNoun + ' #Acronym? #TitleCase').tagSafe('Person', 'ray-smith'); // rob Foobar + title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith'); // rob Foobar - title.match(maybeVerb + ' #Acronym? #TitleCase').tag('Person', 'rob-smith'); // rusty Foobar + title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith'); // rusty Foobar - title.match(maybeAdj + ' #Acronym? #TitleCase').tag('Person', 'rusty-smith'); // june Foobar + title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith'); // june Foobar - title.match(maybeDate + ' #Acronym? (#TitleCase && !#Month)').tag('Person', 'june-smith'); + title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith'); } var person = doc["if"]('#Person'); @@ -9882,7 +9919,7 @@ var fixPerson = function fixPerson(doc) { person.match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person').tag('Honorific', 'ambg-honorifics'); //Morgan Shlkjsfne - title.match('#Person #TitleCase').match('#TitleCase #Noun').tagSafe('Person', 'person-titlecase'); //a bunch of ambiguous first names + title.match('#Person @titleCase').match('@titleCase #Noun').tagSafe('Person', 'person-titlecase'); //a bunch of ambiguous first names //Nouns: 'viola' or 'sky' var ambigNoun = person["if"](maybeNoun); @@ -9929,8 +9966,8 @@ var fixPerson = function fixPerson(doc) { var al = person["if"]('al'); if (al.found === true) { - al.match('al (#Person|#TitleCase)').tagSafe('#Person', 'al-borlen'); - al.match('#TitleCase al #TitleCase').tagSafe('#Person', 'arabic-al-arabic'); + al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen'); + al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic'); } var firstName = person["if"]('#FirstName'); @@ -9941,17 +9978,17 @@ var fixPerson = function fixPerson(doc) { firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun'); //John L. Foo - firstName.match('#FirstName #Acronym #TitleCase').tag('Person', 'firstname-acronym-titlecase'); //Andrew Lloyd Webber + firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase'); //Andrew Lloyd Webber - firstName.match('#FirstName #FirstName #TitleCase').tag('Person', 'firstname-firstname-titlecase'); //Mr Foo + firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase'); //Mr Foo - firstName.match('#Honorific #FirstName? #TitleCase').tag('Person', 'Honorific-TitleCase'); //peter the great + firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase'); //peter the great firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5'); //very common-but-ambiguous lastnames firstName.match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)').tag('#Person', 'firstname-maybe'); //John Foo - firstName.match('#FirstName #TitleCase #TitleCase?').match('#Noun+').tag('Person', 'firstname-titlecase'); //Joe K. Sombrero + firstName.match('#FirstName @titleCase @titleCase?').match('#Noun+').tag('Person', 'firstname-titlecase'); //Joe K. Sombrero firstName.match('#FirstName #Acronym #Noun').ifNo('#Date').tag('#Person', 'n-acro-noun').lastTerm().tag('#LastName', 'n-acro-noun'); // Dwayne 'the rock' Johnson @@ -9959,7 +9996,7 @@ var fixPerson = function fixPerson(doc) { firstName.match('#FirstName (#Singular|#Possessive)').ifNo('(#Date|#Pronoun|#NickName)').tag('#Person', 'first-possessive').lastTerm().tag('#LastName', 'first-possessive'); // Firstname x (dangerous) - var tmp = firstName.match('#FirstName (#Noun|#TitleCase)').ifNo('^#Possessive').ifNo('#ClauseEnd .').ifNo('#Pronoun'); + var tmp = firstName.match('#FirstName (#Noun|@titleCase)').ifNo('^#Possessive').ifNo('#ClauseEnd .').ifNo('#Pronoun'); tmp.lastTerm().tag('#LastName', 'firstname-noun'); } @@ -9973,7 +10010,7 @@ var fixPerson = function fixPerson(doc) { lastName.match('[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName').tag('#FirstName', 'maybe-lastname'); //Jani K. Smith - lastName.match('(#TitleCase|#Singular) #Acronym? #LastName').ifNo('#Date').tag('#Person', 'title-acro-noun').lastTerm().tag('#LastName', 'title-acro-noun'); + lastName.match('(@titleCase|#Singular) #Acronym? #LastName').ifNo('#Date').tag('#Person', 'title-acro-noun').lastTerm().tag('#LastName', 'title-acro-noun'); } } @@ -10036,7 +10073,7 @@ var fixVerb = function fixVerb(doc) { if (copula.found === true) { //was walking - copula.match("#Copula ".concat(advb, " #Gerund")).not('#Verb$').tag('Auxiliary', 'copula-walking'); //is mark hughes + copula.match("#Copula ".concat(advb, " (#Gerund|#PastTense)")).not('#Verb$').tag('Auxiliary', 'copula-walking'); //is mark hughes copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun'); // @@ -10175,7 +10212,7 @@ var preps = '(in|by|before|during|on|until|after|of|within|all)'; //6 var people = '(january|april|may|june|summer|autumn|jan|sep)'; //ambiguous month-names -var verbs$1 = '(may|march)'; //ambiguous month-verbs +var verbs$1 = '(may|march|sat)'; //ambiguous month-verbs var fixDates = function fixDates(doc) { //ambiguous month - person forms @@ -10244,7 +10281,9 @@ var fixDates = function fixDates(doc) { if (sun.found === true) { //sun feb 2 - sun.match('[sun] #Date').tag('WeekDay', 'sun-feb'); //sun the 5th + sun.match('[sun] #Date').tag('WeekDay', 'sun-feb'); //1pm next sun + + sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun'); //sun the 5th sun.match('sun the #Ordinal').tag('Date').firstTerm().tag('WeekDay', 'sun-the-5th'); //the sun @@ -10522,7 +10561,17 @@ var addMethod$2 = function addMethod(Doc) { found = found.splitBefore('in addition to .'); // semicolons, dashes found = found.splitAfter('@hasSemicolon'); - found = found.splitAfter('@hasDash'); // does there appear to have relative/subordinate clause still? + found = found.splitAfter('@hasDash'); // passive voice verb - '.. which was robbed is empty' + // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // //which the boy robbed + // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // does there appear to have relative/subordinate clause still? var tooLong = found.filter(function (d) { return d.wordCount() > 5 && d.match('#Verb+').length >= 2; From b1a69920d9ce148f012471c6e82f68759d2ff394 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 7 Jan 2020 11:36:40 -0500 Subject: [PATCH 30/59] update deps, changelog --- changelog.md | 4 +- package-lock.json | 168 +++++++++++++++++++++++----------------------- package.json | 8 +-- 3 files changed, 91 insertions(+), 89 deletions(-) diff --git a/changelog.md b/changelog.md index 9c72825c2..8d39781c6 100644 --- a/changelog.md +++ b/changelog.md @@ -8,7 +8,7 @@ compromise uses semver, and pushes to npm frequently While all _Major_ releases should be reviewed, our only two _large_ releases are **v6** in 2016 and and **v12** in 2019. Others have been mostly incremental, or niche. -##### 12.2.2 +##### 12.3.0 - prefer `@titleCase` instead of `#TitleCase` tag - update dependencies @@ -18,6 +18,8 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - fix potentially-unsafe regexes - improved tagging for '-ed' verbs (#616) - improve support for auxilary-pastTense ('was lifted') verb-phrases +- more robust number-tagging regexes +- fix typescript types for plugins #661 (thanks @Drache93) ##### 12.2.1 diff --git a/package-lock.json b/package-lock.json index fb73038cf..d1c492e7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,15 +14,15 @@ } }, "@babel/core": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", - "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", + "@babel/generator": "^7.7.7", "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.5", + "@babel/parser": "^7.7.7", "@babel/template": "^7.7.4", "@babel/traverse": "^7.7.4", "@babel/types": "^7.7.4", @@ -49,9 +49,9 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -528,9 +528,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -565,9 +565,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", + "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -585,9 +585,9 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz", - "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", + "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.7.4", @@ -744,9 +744,9 @@ } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz", - "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", + "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.7.4", @@ -882,9 +882,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz", - "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", + "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", "dev": true, "requires": { "@babel/helper-call-delegate": "^7.7.4", @@ -977,9 +977,9 @@ } }, "@babel/preset-env": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", - "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", + "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.7.4", @@ -987,9 +987,9 @@ "@babel/plugin-proposal-async-generator-functions": "^7.7.4", "@babel/plugin-proposal-dynamic-import": "^7.7.4", "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.7", "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", "@babel/plugin-syntax-async-generators": "^7.7.4", "@babel/plugin-syntax-dynamic-import": "^7.7.4", "@babel/plugin-syntax-json-strings": "^7.7.4", @@ -1003,7 +1003,7 @@ "@babel/plugin-transform-classes": "^7.7.4", "@babel/plugin-transform-computed-properties": "^7.7.4", "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.7", "@babel/plugin-transform-duplicate-keys": "^7.7.4", "@babel/plugin-transform-exponentiation-operator": "^7.7.4", "@babel/plugin-transform-for-of": "^7.7.4", @@ -1017,7 +1017,7 @@ "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", "@babel/plugin-transform-new-target": "^7.7.4", "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.7", "@babel/plugin-transform-property-literals": "^7.7.4", "@babel/plugin-transform-regenerator": "^7.7.5", "@babel/plugin-transform-reserved-words": "^7.7.4", @@ -1029,7 +1029,7 @@ "@babel/plugin-transform-unicode-regex": "^7.7.4", "@babel/types": "^7.7.4", "browserslist": "^4.6.0", - "core-js-compat": "^3.4.7", + "core-js-compat": "^3.6.0", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" @@ -1219,14 +1219,14 @@ } }, "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001015", + "caniuse-lite": "^1.0.30001017", "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" + "node-releases": "^1.1.44" } }, "buffer-from": { @@ -1248,9 +1248,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001016", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", - "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", + "version": "1.0.30001019", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001019.tgz", + "integrity": "sha512-6ljkLtF1KM5fQ+5ZN0wuyVvvebJxgJPTmScOMaFuQN2QuOzvRJnWSKfzQskQU5IOU4Gap3zasYPIinzwUjoj/g==", "dev": true }, "chalk": { @@ -1301,19 +1301,19 @@ } }, "core-js-compat": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.5.0.tgz", - "integrity": "sha512-E7iJB72svRjJTnm9HDvujzNVMCm3ZcDYEedkJ/sDTNsy/0yooCd9Cg7GSzE7b4e0LfIkjijdB1tqg0pGwxWeWg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.1.tgz", + "integrity": "sha512-2Tl1EuxZo94QS2VeH28Ebf5g3xbPZG/hj/N5HDDy4XMP/ImR0JIer/nggQRiMN91Q54JVkGbytf42wO29oXVHg==", "dev": true, "requires": { "browserslist": "^4.8.2", - "semver": "^6.3.0" + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } @@ -1374,28 +1374,28 @@ "integrity": "sha512-9xUSSj7qcUxz+0r4X3+bwUNttEfGfK5AH+LVa1aTpqdAfrN5VhROYCfcF+up4hp5OL7IUKcZJJrzAGipQRDoiQ==" }, "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", + "version": "1.3.325", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.325.tgz", + "integrity": "sha512-fc2oa74paAVcf4i6fEHxi0xtnmyWtLuhERmux48icCYzBQyysjDtmDbXQ6JCdiDSYSNlKBcSbT7H4WIbrvxQ6g==", "dev": true }, "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -1547,15 +1547,15 @@ "dev": true }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-module": { @@ -1697,9 +1697,9 @@ "dev": true }, "node-releases": { - "version": "1.1.43", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", - "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", + "version": "1.1.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", + "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", "dev": true, "requires": { "semver": "^6.3.0" @@ -1840,9 +1840,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.1.tgz", - "integrity": "sha512-7LutE94sz/NKSYegK+/4E77+8DipxF+Qn2Tmu362AcmsF2NYq/wx3+ObvU90TKEhjf7hQoFXo23ajjrXP7eUgg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -1875,9 +1875,9 @@ } }, "rollup": { - "version": "1.27.13", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.13.tgz", - "integrity": "sha512-hDi7M07MpmNSDE8YVwGVFA8L7n8jTLJ4lG65nMAijAyqBe//rtu4JdxjUBE7JqXfdpqxqDTbCDys9WcqdpsQvw==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.28.0.tgz", + "integrity": "sha512-v2J/DmQi9+Nf6frGqzwZRvbiuTTrqH0yzoUF4Eybf8sONT4UpLZzJYnYzW96Zm9X1+4SJmijfnFBWCzHDAXYnQ==", "dev": true, "requires": { "@types/estree": "*", @@ -2054,9 +2054,9 @@ } }, "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -2064,9 +2064,9 @@ } }, "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -2137,9 +2137,9 @@ } }, "tape": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.12.0.tgz", - "integrity": "sha512-PWs/TopmfVeYyLNZnfKsoV160xjNq1LvX2SWzZTyhVYsDldR93p5Zp0lfmsY3BCpZdVMXBOkfYZFeScEfsFvKQ==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.12.1.tgz", + "integrity": "sha512-xoK2ariLmdGxqyXhhxfIZlr0czNB8hNJeVQmHN4D7ZyBn30GUoa4q2oM4cX8jNhnj1mtILXn1ugbfxc0tTDKtA==", "dev": true, "requires": { "deep-equal": "~1.1.1", @@ -2152,7 +2152,7 @@ "is-regex": "~1.0.5", "minimist": "~1.2.0", "object-inspect": "~1.7.0", - "resolve": "~1.13.1", + "resolve": "~1.14.1", "resumer": "~0.0.0", "string.prototype.trim": "~1.2.1", "through": "~2.3.8" @@ -2179,9 +2179,9 @@ "dev": true }, "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", + "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", "dev": true, "requires": { "path-parse": "^1.0.6" diff --git a/package.json b/package.json index 8a6dd9791..d6cd55247 100644 --- a/package.json +++ b/package.json @@ -48,11 +48,11 @@ "efrt-unpack": "2.2.0" }, "devDependencies": { - "@babel/core": "7.7.5", - "@babel/preset-env": "7.7.6", + "@babel/core": "7.7.7", + "@babel/preset-env": "7.7.7", "amble": "0.0.7", "efrt": "2.2.1", - "rollup": "1.27.13", + "rollup": "1.28.0", "rollup-plugin-babel": "4.3.3", "rollup-plugin-commonjs": "10.1.0", "rollup-plugin-json": "4.0.0", @@ -60,7 +60,7 @@ "rollup-plugin-terser": "^5.1.3", "shelljs": "0.8.3", "tap-dancer": "0.2.0", - "tape": "4.12.0" + "tape": "4.12.1" }, "eslintIgnore": [ "builds/*.js", From 1f48aacb1d6ba1caed5732896c69bc44975c56f1 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 11:53:53 +0000 Subject: [PATCH 31/59] Experiment with cleaner types, and pass world down --- types/index.d.ts | 294 ++++++++++++++++++++++---------------------- types/types.test.ts | 3 +- 2 files changed, 146 insertions(+), 151 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index a9bbd983f..aedeeabeb 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,29 +1,26 @@ export as namespace nlp -declare interface nlp { +type ExtendedDocument = nlp.Document & D + +declare interface nlp { /** normal usage */ - (text: string): nlp.Document & CurrentDocumentExtension + (text: string): ExtendedDocument<{ [K in keyof D]: D[K] }, { [K in keyof W]: W[K] }> /** tozenize string */ - tokenize(text: string): nlp.Document & CurrentDocumentExtension + tokenize(text: string): nlp.Document & D /** mix in a compromise-plugin */ extend

( plugin: P - ): nlp< - P extends nlp.Plugin ? D & CurrentDocumentExtension : CurrentDocumentExtension, - P extends nlp.Plugin ? W & CurrentWorldExtension : CurrentWorldExtension - > + ): nlp

? PD & D : D, P extends nlp.Plugin ? PW & W : D> /** re-generate a Doc object from .json() results */ - load(json: any): nlp.Document & CurrentDocumentExtension + load(json: any): nlp.Document & D /** log our decision-making for debugging */ - verbose(bool: boolean): nlp.Document & CurrentDocumentExtension + verbose(bool: boolean): nlp.Document & D /** current semver version of the library */ - version: nlp.Document & CurrentDocumentExtension + version: nlp.Document & D } -declare function nlp( - text: string -): nlp.Document & CurrentDocumentExtension +declare function nlp(text: string): nlp.Document & D // Constructor declare module nlp { @@ -39,155 +36,152 @@ declare module nlp { /** current semver version of the library */ export const version: number - type Plugin = ( - Doc: Document & DocumentExtension & { prototype: DocumentExtension }, - world: World & WorldExtension - ) => void + type Plugin = (Doc: Document & D & { prototype: D }, world: World & W) => void - class Document { + class Document { // Utils /** return the whole original document ('zoom out') */ - all(): Document + all(): Document /** is this document empty? */ found: boolean /** return the previous result */ - parent(): Document + parent(): Document /** return all of the previous results */ - parents(): Document[] + parents(): Document[] /** (re)run the part-of-speech tagger on this document */ - tagger(): Document + tagger(): Document /** count the # of terms in each match */ wordCount(): number /** count the # of characters of each match */ length(): number /** deep-copy the document, so that no references remain */ - clone(shallow?: boolean): Document + clone(shallow?: boolean): Document /** freeze the current state of the document, for speed-purposes */ - cache(options?: object): Document + cache(options?: object): Document /** un-freezes the current state of the document, so it may be transformed */ - uncache(options?: object): Document + uncache(options?: object): Document /** the current world */ - world: World + world: W // Accessors /** use only the first result(s) */ - first(n?: number): Document + first(n?: number): Document /** use only the last result(s) */ - last(n?: number): Document + last(n?: number): Document /** grab a subset of the results */ - slice(start: number, end?: number): Document + slice(start: number, end?: number): Document /** use only the nth result */ - eq(n: number): Document + eq(n: number): Document /** get the first word in each match */ - firstTerm(): Document + firstTerm(): Document /** get the end word in each match */ - lastTerm(): Document + lastTerm(): Document /** return a flat list of all Term objects in match */ termList(): any // Match /** return a new Doc, with this one as a parent */ - match(match: string | Document): Document + match(match: string | Document): Document /** return all results except for this */ - not(match: string | Document): Document + not(match: string | Document): Document /** return only the first match */ - matchOne(match: string | Document): Document + matchOne(match: string | Document): Document /** return each current phrase, only if it contains this match */ - if(match: string | Document): Document + if(match: string | Document): Document /** Filter-out any current phrases that have this match */ - ifNo(match: string | Document): Document + ifNo(match: string | Document): Document /** Return a boolean if this match exists */ - has(match: string | Document): Document + has(match: string | Document): Document /** search through earlier terms, in the sentence */ - lookBehind(match: string | Document): Document + lookBehind(match: string | Document): Document /** search through following terms, in the sentence */ - lookAhead(match: string | Document): Document + lookAhead(match: string | Document): Document /** return the terms before each match */ - before(match: string | Document): Document + before(match: string | Document): Document /** return the terms after each match */ - after(match: string | Document): Document + after(match: string | Document): Document /** quick find for an array of string matches */ - lookup(matches: string[]): Document + lookup(matches: string[]): Document // Case /** turn every letter of every term to lower-cse */ - toLowerCase(): Document + toLowerCase(): Document /** turn every letter of every term to upper case */ - toUpperCase(): Document + toUpperCase(): Document /** upper-case the first letter of each term */ - toTitleCase(): Document + toTitleCase(): Document /** remove whitespace and title-case each term */ - toCamelCase(): Document + toCamelCase(): Document // Whitespace /** add this punctuation or whitespace before each match */ - pre(str: string, concat: boolean): Document + pre(str: string, concat: boolean): Document /** add this punctuation or whitespace after each match */ - post(str: string, concat: boolean): Document + post(str: string, concat: boolean): Document /** remove start and end whitespace */ - trim(): Document + trim(): Document /** connect words with hyphen, and remove whitespace */ - hyphenate(): Document + hyphenate(): Document /** remove hyphens between words, and set whitespace */ - dehyphenate(): Document + dehyphenate(): Document // Tag /** Give all terms the given tag */ - tag(tag: string, reason?: string): Document + tag(tag: string, reason?: string): Document /** Only apply tag to terms if it is consistent with current tags */ - tagSafe(tag: string, reason?: string): Document + tagSafe(tag: string, reason?: string): Document /** Remove this term from the given terms */ - unTag(tag: string, reason?: string): Document + unTag(tag: string, reason?: string): Document /** return only the terms that can be this tag */ - canBe(tag: string): Document + canBe(tag: string): Document // Loops /** run each phrase through a function, and create a new document */ - map(fn: Function): Document | [] + map(fn: Function): Document | [] /** run a function on each phrase, as an individual document */ - forEach(fn: Function): Document + forEach(fn: Function): Document /** return only the phrases that return true */ - filter(fn: Function): Document + filter(fn: Function): Document /** return a document with only the first phrase that matches */ - find(fn: Function): Document | undefined + find(fn: Function): Document | undefined /** return true or false if there is one matching phrase */ - some(fn: Function): Document + some(fn: Function): Document /** sample a subset of the results */ - random(n?: number): Document + random(n?: number): Document // Insert /** substitute-in new content */ - replaceWith(text: string | Function, keepTags?: boolean | object, keepCase?: boolean): Document + replaceWith(text: string | Function, keepTags?: boolean | object, keepCase?: boolean): Document /** search and replace match with new content */ - replace(match: string, text?: string | Function, keepTags?: boolean | object, keepCase?: boolean): Document + replace(match: string, text?: string | Function, keepTags?: boolean | object, keepCase?: boolean): Document /** fully remove these terms from the document */ - delete(match: string): Document + delete(match: string): Document /** add these new terms to the end (insertAfter) */ - append(text: string): Document + append(text: string): Document /** add these new terms to the front (insertBefore) */ - prepend(text: string): Document + prepend(text: string): Document /** add these new things to the end */ - concat(text: string): Document + concat(text: string): Document // transform /**re-arrange the order of the matches (in place) */ - sort(method?: string | Function): Document + sort(method?: string | Function): Document /**reverse the order of the matches, but not the words */ - reverse(): Document + reverse(): Document /** clean-up the document, in various ways */ normalize(options?: string | object): string /** remove any duplicate matches */ - unique(): Document + unique(): Document /** return a Document with three parts for every match ('splitOn') */ - split(match?: string): Document + split(match?: string): Document /** separate everything after the match as a new phrase */ - splitBefore(match?: string): Document + splitBefore(match?: string): Document /** separate everything before the word, as a new phrase */ - splitAfter(match?: string): Document + splitAfter(match?: string): Document /** split a document into labeled sections */ - segment(regs: object, options?: object): Document + segment(regs: object, options?: object): Document /** make all phrases into one phrase */ - join(str?: string): Document + join(str?: string): Document // Output /** return the document as text */ @@ -197,170 +191,170 @@ declare module nlp { /** some named output formats */ out(format?: string): string /** pretty-print the current document and its tags */ - debug(): Document + debug(): Document /** store a parsed document for later use */ export(): any // Selections /** split-up results by each individual term */ - terms(n?: number): Document + terms(n?: number): Document /** split-up results into multi-term phrases */ - clauses(n?: number): Document + clauses(n?: number): Document /** return all terms connected with a hyphen or dash like `'wash-out'`*/ - hyphenated(n?: number): Document + hyphenated(n?: number): Document /** add quoation marks around each match */ - toQuoations(start?: string, end?: string): Document + toQuoations(start?: string, end?: string): Document /** add brackets around each match */ - toParentheses(start?: string, end?: string): Document + toParentheses(start?: string, end?: string): Document /** return things like `'(939) 555-0113'` */ - phoneNumbers(n?: number): Document + phoneNumbers(n?: number): Document /** return things like `'#nlp'` */ - hashTags(n?: number): Document + hashTags(n?: number): Document /** return things like `'hi@compromise.cool'` */ - emails(n?: number): Document + emails(n?: number): Document /** return things like `:)` */ - emoticons(n?: number): Document + emoticons(n?: number): Document /** return athings like `💋` */ - emoji(n?: number): Document + emoji(n?: number): Document /** return things like `'@nlp_compromise'`*/ - atMentions(n?: number): Document + atMentions(n?: number): Document /** return things like `'compromise.cool'` */ - urls(n?: number): Document + urls(n?: number): Document /** return things like `'quickly'` */ - adverbs(n?: number): Document + adverbs(n?: number): Document /** return things like `'he'` */ - pronouns(n?: number): Document + pronouns(n?: number): Document /** return things like `'but'`*/ - conjunctions(n?: number): Document + conjunctions(n?: number): Document /** return things like `'of'`*/ - prepositions(n?: number): Document + prepositions(n?: number): Document /** return person names like `'John A. Smith'`*/ - people(n?: number): Document + people(n?: number): Document /** return location names like `'Paris, France'`*/ - places(n?: number): Document + places(n?: number): Document /** return companies and org names like `'Google Inc.'`*/ - organizations(n?: number): Document + organizations(n?: number): Document /** return people, places, and organizations */ - topics(n?: number): Document + topics(n?: number): Document // Subsets /** alias for .all(), until plugin overloading */ - sentences(): Document + sentences(): Document /** return things like `'Mrs.'`*/ - abbreviations(n?: number): Abbreviations + abbreviations(n?: number): Abbreviations /** return any multi-word terms, like "didn't" */ - contractions(n?: number): Contractions + contractions(n?: number): Contractions /** contract words that can combine, like "did not" */ - contract(): Document + contract(): Document /** return anything inside (parentheses) */ - parentheses(n?: number): Parentheses + parentheses(n?: number): Parentheses /** return things like "Spencer's" */ - possessives(n?: number): Possessives + possessives(n?: number): Possessives /** return any terms inside 'quotation marks' */ - quotations(n?: number): Quotations + quotations(n?: number): Quotations /** return things like `'FBI'` */ - acronyms(n?: number): Acronyms + acronyms(n?: number): Acronyms /** return things like `'eats, shoots, and leaves'` */ - lists(n?: number): Lists + lists(n?: number): Lists /** return any subsequent terms tagged as a Noun */ - nouns(n?: number): Nouns + nouns(n?: number): Nouns /** return any subsequent terms tagged as a Verb */ - verbs(n?: number): Verbs + verbs(n?: number): Verbs } // Nouns class - interface Nouns extends Document { + interface Nouns extends Document { /** get any adjectives describing this noun*/ - adjectives(): Document + adjectives(): Document /** return only plural nouns */ - isPlural(): Document + isPlural(): Document /** return only nouns that _can be_ inflected as plural */ - hasPlural(): Document + hasPlural(): Document /** 'football captain' → 'football captains' */ - toPlural(setArticle?: boolean): Document + toPlural(setArticle?: boolean): Document /** 'turnovers' → 'turnover' */ - toSingular(setArticle?: boolean): Document + toSingular(setArticle?: boolean): Document /** add a `'s` to the end, in a safe manner. */ - toPossessive(): Document + toPossessive(): Document } // Verbs class - interface Verbs extends Document { + interface Verbs extends Document { /** return the adverbs describing this verb */ - adverbs(): Document + adverbs(): Document /** return only plural nouns */ - isPlural(): Document + isPlural(): Document /** return only singular nouns */ - isSingular(): Document + isSingular(): Document /** return all forms of these verbs */ - conjugate(): Document + conjugate(): Document /** 'will go' → 'went' */ - toPastTense(): Document + toPastTense(): Document /** 'walked' → 'walks' */ - toPresentTense(): Document + toPresentTense(): Document /** 'walked' → 'will walk' */ - toFutureTense(): Document + toFutureTense(): Document /** 'walks' → 'walk' */ - toInfinitive(): Document + toInfinitive(): Document /** 'walks' → 'walking' */ - toGerund(): Document + toGerund(): Document /** return verbs with 'not' */ - isNegative(): Document + isNegative(): Document /** only verbs without 'not'*/ - isPositive(): Document + isPositive(): Document /** 'went' → 'did not go'*/ - toNegative(): Document + toNegative(): Document /** "didn't study" → 'studied' */ - toPositive(): Document + toPositive(): Document } - interface Abbreviations extends Document { + interface Abbreviations extends Document { /** */ - stripPeriods(): Document + stripPeriods(): Document /** */ - addPeriods(): Document + addPeriods(): Document } - interface Acronyms extends Document { + interface Acronyms extends Document { /** */ - stripPeriods(): Document + stripPeriods(): Document /** */ - addPeriods(): Document + addPeriods(): Document } - interface Contractions extends Document { + interface Contractions extends Document { /** */ - expand(): Document + expand(): Document } - interface Parentheses extends Document { + interface Parentheses extends Document { /** */ - unwrap(): Document + unwrap(): Document } - interface Possessives extends Document { + interface Possessives extends Document { /** */ - strip(): Document + strip(): Document } - interface Quotations extends Document { + interface Quotations extends Document { /** */ - unwrap(): Document + unwrap(): Document } - interface Lists extends Document { + interface Lists extends Document { /** */ - conjunctions(): Document + conjunctions(): Document /** */ - parts(): Document + parts(): Document /** */ - items(): Document + items(): Document /** */ - add(): Document + add(): Document /** */ - remove(): Document + remove(): Document /** */ - hasOxfordComma(): Document // Can we change all the unfinished types to 'any' instead? Not sure which ones are placeholders + hasOxfordComma(): Document // Can we change all the unfinished types to 'any' instead? Not sure which ones are placeholders } class World {} diff --git a/types/types.test.ts b/types/types.test.ts index ace533639..bc6b305ae 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -45,7 +45,8 @@ const nlpEx = nlp // Use typed plugin .extend(test) -const doc = nlpEx('hello world') +const doc = nlpEx('hello world') // This type is cleaner +doc.nouns().world.test doc.test('test') doc.numbers() doc.numbers().json() From 468eab163f8b7f3baa82c9c8b19f40a76e8f10f2 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 12:04:56 +0000 Subject: [PATCH 32/59] Flatten type of multiple extensions --- types/index.d.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index aedeeabeb..575d20d09 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -4,13 +4,16 @@ type ExtendedDocument = nlp.Document & D declare interface nlp { /** normal usage */ - (text: string): ExtendedDocument<{ [K in keyof D]: D[K] }, { [K in keyof W]: W[K] }> + (text: string): ExtendedDocument /** tozenize string */ tokenize(text: string): nlp.Document & D /** mix in a compromise-plugin */ extend

( plugin: P - ): nlp

? PD & D : D, P extends nlp.Plugin ? PW & W : D> + ): nlp< + P extends nlp.Plugin ? { [K in keyof (PD & D)]: (PD & D)[K] } : { [K in keyof D]: D[K] }, + P extends nlp.Plugin ? { [K in keyof (PW & W)]: (PW & W)[K] } : { [K in keyof W]: W[K] } + > /** re-generate a Doc object from .json() results */ load(json: any): nlp.Document & D From 65db2bf96c08826610abaea672bb4ab9d1bb01fd Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 12:13:00 +0000 Subject: [PATCH 33/59] Use extended document type --- types/index.d.ts | 13 +++++++------ types/types.test.ts | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 575d20d09..767eb0942 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -6,7 +6,7 @@ declare interface nlp { /** normal usage */ (text: string): ExtendedDocument /** tozenize string */ - tokenize(text: string): nlp.Document & D + tokenize(text: string): ExtendedDocument /** mix in a compromise-plugin */ extend

( plugin: P @@ -16,14 +16,15 @@ declare interface nlp { > /** re-generate a Doc object from .json() results */ - load(json: any): nlp.Document & D + load(json: any): ExtendedDocument /** log our decision-making for debugging */ - verbose(bool: boolean): nlp.Document & D + verbose(bool: boolean): ExtendedDocument /** current semver version of the library */ - version: nlp.Document & D + version: ExtendedDocument } -declare function nlp(text: string): nlp.Document & D +declare function nlp(text: string): nlp.Document +declare function nlp(text: string): ExtendedDocument // Constructor declare module nlp { @@ -266,7 +267,7 @@ declare module nlp { } // Nouns class - interface Nouns extends Document { + interface Nouns extends ExtendedDocument<{}, W> { /** get any adjectives describing this noun*/ adjectives(): Document /** return only plural nouns */ diff --git a/types/types.test.ts b/types/types.test.ts index bc6b305ae..51cd809ad 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -46,6 +46,7 @@ const nlpEx = nlp .extend(test) const doc = nlpEx('hello world') // This type is cleaner +doc.nouns() doc.nouns().world.test doc.test('test') doc.numbers() From 6090bb0c86fbea7c98cbe1c481a80e01e8d4ef32 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 12:57:02 +0000 Subject: [PATCH 34/59] Simplify extended document type --- types/index.d.ts | 19 +++++++++++-------- types/types.test.ts | 4 +++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 767eb0942..5a764e187 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,12 +1,10 @@ export as namespace nlp -type ExtendedDocument = nlp.Document & D - declare interface nlp { /** normal usage */ - (text: string): ExtendedDocument + (text: string): nlp.ExtendedDocument /** tozenize string */ - tokenize(text: string): ExtendedDocument + tokenize(text: string): nlp.ExtendedDocument /** mix in a compromise-plugin */ extend

( plugin: P @@ -16,15 +14,15 @@ declare interface nlp { > /** re-generate a Doc object from .json() results */ - load(json: any): ExtendedDocument + load(json: any): nlp.ExtendedDocument /** log our decision-making for debugging */ - verbose(bool: boolean): ExtendedDocument + verbose(bool: boolean): nlp.ExtendedDocument /** current semver version of the library */ - version: ExtendedDocument + version: nlp.ExtendedDocument } declare function nlp(text: string): nlp.Document -declare function nlp(text: string): ExtendedDocument +declare function nlp(text: string): nlp.ExtendedDocument // Constructor declare module nlp { @@ -42,6 +40,11 @@ declare module nlp { type Plugin = (Doc: Document & D & { prototype: D }, world: World & W) => void + type ExtendedWorld = nlp.World & W + type ExtendedDocument = { + [k in keyof (nlp.Document> & D)]: (nlp.Document> & D)[k] + } + class Document { // Utils /** return the whole original document ('zoom out') */ diff --git a/types/types.test.ts b/types/types.test.ts index 51cd809ad..e05924580 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -57,7 +57,9 @@ doc.world.test === typeof 'string' export type NLP = typeof nlpEx // Standard still works -nlp('test') +const docSimple = nlp('test') +docSimple.nouns() +docSimple.nouns().world nlp.tokenize('test') nlp.version From 291ca99030bddfbe4fe54ef4feec7554005c24bd Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 13:02:33 +0000 Subject: [PATCH 35/59] Add some overloaded types for .out() --- types/index.d.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 5a764e187..816b92c86 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -196,7 +196,12 @@ declare module nlp { /** pull out desired metadata from the document */ json(options?: string | object): any /** some named output formats */ - out(format?: string): string + out(format?: 'grid' | 'color' | 'normal' | 'csv' | 'newlines' | 'html' | 'text'): string + out(format: 'array'): string[] + out(format: 'tags' | 'terms'): Array<{ normal: string; text: string; tags: string[] }> + out(format: 'json'): Array<{ normal: string; text: string; tags: () => void }>[] + out(format: 'debug'): Text + out(format: 'topk'): Array<{ normal: string; count: number; percent: number }> /** pretty-print the current document and its tags */ debug(): Document /** store a parsed document for later use */ @@ -361,7 +366,7 @@ declare module nlp { /** */ remove(): Document /** */ - hasOxfordComma(): Document // Can we change all the unfinished types to 'any' instead? Not sure which ones are placeholders + hasOxfordComma(): Document } class World {} From 291ae180401182517c4a34c77df25a5183000e6c Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 13:10:07 +0000 Subject: [PATCH 36/59] Add back type contraints --- types/index.d.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 816b92c86..5dd171d7e 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,6 +1,6 @@ export as namespace nlp -declare interface nlp { +declare interface nlp { /** normal usage */ (text: string): nlp.ExtendedDocument /** tozenize string */ @@ -38,10 +38,13 @@ declare module nlp { /** current semver version of the library */ export const version: number - type Plugin = (Doc: Document & D & { prototype: D }, world: World & W) => void + type Plugin = ( + Doc: Document & D & { prototype: D }, + world: World & W + ) => void - type ExtendedWorld = nlp.World & W - type ExtendedDocument = { + type ExtendedWorld = nlp.World & W + type ExtendedDocument = { [k in keyof (nlp.Document> & D)]: (nlp.Document> & D)[k] } From dd95907cfae00b365887745b8c460f4db577ae3e Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 13:28:02 +0000 Subject: [PATCH 37/59] Simplify default document nlp.World was overlapping with interface and showing nlp<.....>.World --- types/index.d.ts | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 5dd171d7e..67a4a208b 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -9,8 +9,8 @@ declare interface nlp { extend

( plugin: P ): nlp< - P extends nlp.Plugin ? { [K in keyof (PD & D)]: (PD & D)[K] } : { [K in keyof D]: D[K] }, - P extends nlp.Plugin ? { [K in keyof (PW & W)]: (PW & W)[K] } : { [K in keyof W]: W[K] } + P extends nlp.Plugin ? { [k in keyof (PD & D)]: (PD & D)[k] } : { [k in keyof D]: D[k] }, + P extends nlp.Plugin ? { [k in keyof (PW & W)]: (PW & W)[k] } : { [k in keyof W]: W[k] } > /** re-generate a Doc object from .json() results */ @@ -21,20 +21,20 @@ declare interface nlp { version: nlp.ExtendedDocument } -declare function nlp(text: string): nlp.Document -declare function nlp(text: string): nlp.ExtendedDocument +declare function nlp(text: string): nlp.DefaultDocument +declare function nlp(text: string): nlp.ExtendedDocument // Constructor declare module nlp { - export function tokenize(text: string): Document + export function tokenize(text: string): DefaultDocument /** mix in a compromise-plugin */ export function extend

( plugin: P ): nlp

? D : {}, P extends Plugin ? W : {}> /** re-generate a Doc object from .json() results */ - export function load(json: any): Document + export function load(json: any): DefaultDocument /** log our decision-making for debugging */ - export function verbose(bool: boolean): Document + export function verbose(bool: boolean): DefaultDocument /** current semver version of the library */ export const version: number @@ -47,6 +47,9 @@ declare module nlp { type ExtendedDocument = { [k in keyof (nlp.Document> & D)]: (nlp.Document> & D)[k] } + type DefaultDocument = { + [k in keyof nlp.Document]: nlp.Document[k] + } class Document { // Utils @@ -91,25 +94,25 @@ declare module nlp { // Match /** return a new Doc, with this one as a parent */ - match(match: string | Document): Document + match(match: string | Document): Document /** return all results except for this */ - not(match: string | Document): Document + not(match: string | Document): Document /** return only the first match */ - matchOne(match: string | Document): Document + matchOne(match: string | Document): Document /** return each current phrase, only if it contains this match */ - if(match: string | Document): Document + if(match: string | Document): Document /** Filter-out any current phrases that have this match */ - ifNo(match: string | Document): Document + ifNo(match: string | Document): Document /** Return a boolean if this match exists */ - has(match: string | Document): Document + has(match: string | Document): Document /** search through earlier terms, in the sentence */ - lookBehind(match: string | Document): Document + lookBehind(match: string | Document): Document /** search through following terms, in the sentence */ - lookAhead(match: string | Document): Document + lookAhead(match: string | Document): Document /** return the terms before each match */ - before(match: string | Document): Document + before(match: string | Document): Document /** return the terms after each match */ - after(match: string | Document): Document + after(match: string | Document): Document /** quick find for an array of string matches */ lookup(matches: string[]): Document From ec9a7be2c60460aecee3bf5c6d177b4dcf155697 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 13:29:49 +0000 Subject: [PATCH 38/59] Fix #656 --- types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/index.d.ts b/types/index.d.ts index 67a4a208b..8c1d9cdd3 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -104,7 +104,7 @@ declare module nlp { /** Filter-out any current phrases that have this match */ ifNo(match: string | Document): Document /** Return a boolean if this match exists */ - has(match: string | Document): Document + has(match: string | Document): boolean /** search through earlier terms, in the sentence */ lookBehind(match: string | Document): Document /** search through following terms, in the sentence */ From a7db392904fb6400d1fba962abf6144dfee02af2 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 13:38:49 +0000 Subject: [PATCH 39/59] Try update numbers plugin types --- package.json | 3 ++- plugins/numbers/types/index.d.ts | 25 +++++++++++++++++++++++++ plugins/numbers/types/types.d.ts | 32 -------------------------------- 3 files changed, 27 insertions(+), 33 deletions(-) create mode 100644 plugins/numbers/types/index.d.ts delete mode 100644 plugins/numbers/types/types.d.ts diff --git a/package.json b/package.json index d6cd55247..2ba4f7838 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,8 @@ }, "eslintIgnore": [ "builds/*.js", - "types/*.ts" + "types/*.ts", + "plugins/**/types/*.ts" ], "license": "MIT" } \ No newline at end of file diff --git a/plugins/numbers/types/index.d.ts b/plugins/numbers/types/index.d.ts new file mode 100644 index 000000000..330cc03d9 --- /dev/null +++ b/plugins/numbers/types/index.d.ts @@ -0,0 +1,25 @@ +import nlp from 'compromise' + +declare class Numbers { + json(n?: number): nlp.Document + fractions(): nlp.Document + toText(): nlp.Document + toNumber(): nlp.Document + toOrdinal(): nlp.Document + toCardinal(): nlp.Document + add(n: number): nlp.Document + subtract(n: number): nlp.Document + increment(): nlp.Document + decrement(): nlp.Document + isEqual(): nlp.Document + greaterThan(min: number): nlp.Document + lessThan(max: number): nlp.Document + between(min: number, max: number): nlp.Document + isOrdinal(): nlp.Document + isCardinal(): nlp.Document + toLocaleString(): nlp.Document +} + +type plugin = nlp.Plugin<{ numbers(n?: number): Numbers }, {}> + +export default plugin diff --git a/plugins/numbers/types/types.d.ts b/plugins/numbers/types/types.d.ts deleted file mode 100644 index 66f379ee0..000000000 --- a/plugins/numbers/types/types.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import compromise from 'compromise' - -export as namespace nlpNumbers - -declare function nlpNumbers(text: string): nlpNumbers.Document - -declare module nlpNumbers { - class Document extends compromise.Document { - numbers(n?: Number): Numbers - } - class Numbers { - json(n?: Number): Document - fractions(): Document - toText(): Document - toNumber(): Document - toOrdinal(): Document - toCardinal(): Document - add(n: Number): Document - subtract(n: Number): Document - increment(): Document - decrement(): Document - isEqual(): Document - greaterThan(min: Number): Document - lessThan(max: Number): Document - between(min: Number, max: Number): Document - isOrdinal(): Document - isCardinal(): Document - toLocaleString(): Document - } -} - -export default nlpNumbers From 2c861b0eaec479a9e77690088f8785b9afcbb06b Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 13:50:53 +0000 Subject: [PATCH 40/59] Fix number plugin types --- plugins/numbers/types/index.d.ts | 4 ++-- types/types.test.ts | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/numbers/types/index.d.ts b/plugins/numbers/types/index.d.ts index 330cc03d9..8421c4127 100644 --- a/plugins/numbers/types/index.d.ts +++ b/plugins/numbers/types/index.d.ts @@ -20,6 +20,6 @@ declare class Numbers { toLocaleString(): nlp.Document } -type plugin = nlp.Plugin<{ numbers(n?: number): Numbers }, {}> +declare const nlpNumbers: nlp.Plugin<{ numbers(n?: number): Numbers }, {}> -export default plugin +export default nlpNumbers diff --git a/types/types.test.ts b/types/types.test.ts index e05924580..6868d7ce6 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -1,6 +1,5 @@ // a smoke-test for our typescipt typings import nlp from '../' -// @ts-ignore import nlpNumbers from '../plugins/numbers' // Typings for imported plugin @@ -41,7 +40,7 @@ const test: NLPTest = (Doc, world) => { const nlpEx = nlp // Give typing to untyped Plugin - .extend(nlpNumbers as NLPNumbers) + .extend(nlpNumbers) // Use typed plugin .extend(test) From 23419ca84d6e63414f183c824eb1c1df841f1853 Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Wed, 8 Jan 2020 14:35:17 +0000 Subject: [PATCH 41/59] Remove nlp numbers type from main tests --- types/types.test.ts | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/types/types.test.ts b/types/types.test.ts index 6868d7ce6..6648b02fb 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -2,34 +2,6 @@ import nlp from '../' import nlpNumbers from '../plugins/numbers' -// Typings for imported plugin -interface NumberFunctions { - json(n?: number): Document - fractions(): Document - toText(): Document - toNumber(): Document - toOrdinal(): Document - toCardinal(): Document - add(n: number): Document - subtract(n: number): Document - increment(): Document - decrement(): Document - isEqual(): Document - greaterThan(min: number): Document - lessThan(max: number): Document - between(min: number, max: number): Document - isOrdinal(): Document - isCardinal(): Document - toLocaleString(): Document -} - -type NLPNumbers = nlp.Plugin< - { - numbers(n?: number): NumberFunctions - }, - {} -> - // vs Typed plugin type NLPTest = nlp.Plugin<{ test: (text: string) => string }, { test: string }> const test: NLPTest = (Doc, world) => { From 7d798fa1f584b7a2d159bb038b5bdf4000991d5a Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 17:49:38 -0500 Subject: [PATCH 42/59] add sentence, date, adjective, and paragraph types --- README.md | 14 +++++----- plugins/adjectives/types/index.d.ts | 23 +++++++++++++++ plugins/dates/types/index.d.ts | 17 ++++++++++++ plugins/numbers/types/index.d.ts | 24 +++++++++++++++- plugins/paragraphs/types/index.d.ts | 39 ++++++++++++++++++++++++++ plugins/sentences/types/index.d.ts | 43 +++++++++++++++++++++++++++++ 6 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 plugins/adjectives/types/index.d.ts create mode 100644 plugins/dates/types/index.d.ts create mode 100644 plugins/paragraphs/types/index.d.ts create mode 100644 plugins/sentences/types/index.d.ts diff --git a/README.md b/README.md index 2119f4e4e..dcb968c39 100644 --- a/README.md +++ b/README.md @@ -499,7 +499,7 @@ These are some helpful extensions: - **[.adjectives().json()](https://observablehq.com/@spencermountain/compromise-adjectives)** - overloaded output with adjective metadata - **[.adjectives().conjugate()](https://observablehq.com/@spencermountain/compromise-adjectives)** - return all conjugated forms of this adjective - **[.adjectives().toSuperlative()](https://observablehq.com/@spencermountain/compromise-adjectives)** - convert `quick` to `quickest` - - **[.adjectives().toComparative()](https://observablehq.com/@spencermountain/compromise-adjectives)** - convert `quick` to `quickest` + - **[.adjectives().toComparative()](https://observablehq.com/@spencermountain/compromise-adjectives)** - convert `quick` to `quicker` - **[.adjectives().toAdverb()](https://observablehq.com/@spencermountain/compromise-adjectives)** - convert `quick` to `quickly` - **[.adjectives().toVerb()](https://observablehq.com/@spencermountain/compromise-adjectives)** - convert `quick` to `quicken` - **[.adjectives().toNoun()](https://observablehq.com/@spencermountain/compromise-adjectives)** - convert `quick` to `quickness` @@ -511,8 +511,8 @@ These are some helpful extensions: - **[.dates()](https://observablehq.com/@spencermountain/compromise-dates)** - find dates like `June 8th` or `03/03/18` - **[.dates().json()](https://observablehq.com/@spencermountain/compromise-dates)** - overloaded output with date metadata - **[.dates().format('')](https://observablehq.com/@spencermountain/compromise-dates)** - convert the dates to specific formats - - **[.dates().toShortForm('')](https://observablehq.com/@spencermountain/compromise-dates)** - convert 'Wednesday' to 'Wed', etc - - **[.dates().toLongForm('')](https://observablehq.com/@spencermountain/compromise-dates)** - convert 'Feb' to 'February', etc + - **[.dates().toShortForm()](https://observablehq.com/@spencermountain/compromise-dates)** - convert 'Wednesday' to 'Wed', etc + - **[.dates().toLongForm()](https://observablehq.com/@spencermountain/compromise-dates)** - convert 'Feb' to 'February', etc ##### Numbers @@ -566,10 +566,10 @@ this plugin creates a wrapper around the default sentence objects. - **[.paragraphs()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - return groups of sentences - **[.paragraphs().json()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - output metadata for each paragraph - **[.paragraphs().sentences()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - go back to a regular Doc object - - **[.paragraphs().terms()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - - - **[.paragraphs().eq()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - - - **[.paragraphs().first()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - - - **[.paragraphs().last()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - + - **[.paragraphs().terms()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - return all individual terms + - **[.paragraphs().eq()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - get the nth paragraph + - **[.paragraphs().first()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - get the first n paragraphs + - **[.paragraphs().last()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - get the last n paragraphs - **[.paragraphs().match()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - - **[.paragraphs().not()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - - **[.paragraphs().if()](https://observablehq.com/@spencermountain/compromise-paragraphs)** - diff --git a/plugins/adjectives/types/index.d.ts b/plugins/adjectives/types/index.d.ts new file mode 100644 index 000000000..59e2a5f4d --- /dev/null +++ b/plugins/adjectives/types/index.d.ts @@ -0,0 +1,23 @@ +import nlp from 'compromise' + +declare class Adjectives { + /** overloaded output with adjective metadata **/ + json(n?: number): any + /** return all conjugated forms of this adjective **/ + conjugate(n?: number): nlp.Document + /** convert `quick` to `quickest` **/ + toSuperlative(): nlp.Document + /** convert `quick` to `quicker` **/ + toComparative(): nlp.Document + /** convert `quick` to `quickly` **/ + toAdverb(): nlp.Document + /** convert `quick` to `quicken` **/ + toVerb(): nlp.Document + /** convert `quick` to `quickness`**/ + toNoun(): nlp.Document +} + +/** words like 'quick' or 'cool' **/ +declare const nlpAdjectives: nlp.Plugin<{ adjectives(n?: number): Adjectives }, {}> + +export default nlpAdjectives diff --git a/plugins/dates/types/index.d.ts b/plugins/dates/types/index.d.ts new file mode 100644 index 000000000..99aeb7a12 --- /dev/null +++ b/plugins/dates/types/index.d.ts @@ -0,0 +1,17 @@ +import nlp from 'compromise' + +declare class Dates { + /** overloaded output with date metadata **/ + json(n?: number): any + /** convert the dates to specific formats **/ + format(fmt?: string): nlp.Document + /** convert 'Wednesday' to 'Wed', etc */ + toShortForm(): nlp.Document + /** convert 'Feb' to 'February', etc */ + toLongForm(): nlp.Document +} + +/** **/ +declare const nlpDates: nlp.Plugin<{ dates(n?: number): Dates }, {}> + +export default nlpDates diff --git a/plugins/numbers/types/index.d.ts b/plugins/numbers/types/index.d.ts index 8421c4127..f18c86fd2 100644 --- a/plugins/numbers/types/index.d.ts +++ b/plugins/numbers/types/index.d.ts @@ -1,25 +1,47 @@ import nlp from 'compromise' declare class Numbers { - json(n?: number): nlp.Document + /** overloaded output with number metadata */ + json(n?: number): any + /** grab 'kilos' from `25 kilos' */ + units(): nlp.Document + /** things like `1/3rd` */ fractions(): nlp.Document + /** convert number to `five` or `fifth` */ toText(): nlp.Document + /** convert number to `5` or `5th` */ toNumber(): nlp.Document + /** convert number to `fifth` or `5th` */ toOrdinal(): nlp.Document + /** convert number to `five` or `5` */ toCardinal(): nlp.Document + /** set number to n */ + set(n: number): nlp.Document + /** increase number by n */ add(n: number): nlp.Document + /** decrease number by n*/ subtract(n: number): nlp.Document + /** increase number by 1 */ increment(): nlp.Document + /** decrease number by 1*/ decrement(): nlp.Document + /** return numbers with this value */ isEqual(): nlp.Document + /** return numbers bigger than n */ greaterThan(min: number): nlp.Document + /** return numbers smaller than n */ lessThan(max: number): nlp.Document + /** return numbers between min and max */ between(min: number, max: number): nlp.Document + /** return only ordinal numbers */ isOrdinal(): nlp.Document + /** return only cardinal numbers */ isCardinal(): nlp.Document + /** add commas, or nicer formatting for numbers */ toLocaleString(): nlp.Document } +/** grab all written and numeric values */ declare const nlpNumbers: nlp.Plugin<{ numbers(n?: number): Numbers }, {}> export default nlpNumbers diff --git a/plugins/paragraphs/types/index.d.ts b/plugins/paragraphs/types/index.d.ts new file mode 100644 index 000000000..58ef009ab --- /dev/null +++ b/plugins/paragraphs/types/index.d.ts @@ -0,0 +1,39 @@ +import nlp from 'compromise' + +declare class Paragraphs { + /** overloaded output with paragraph metadata **/ + json(n?: number): any + /** go back to a regular Doc object **/ + sentences(n?: number): nlp.Document + /** **/ + terms(n?: number): nlp.Document + /** get nth paragraph **/ + eq(n?: number): nlp.Document + /** get the first paragraph **/ + first(n?: number): nlp.Document + /** get the last paragraph **/ + last(n?: number): nlp.Document + + /** **/ + match(match: string): nlp.Document + /** **/ + not(match: string): nlp.Document + /** **/ + if(match: string): nlp.Document + /** **/ + ifNo(match: string): nlp.Document + /** **/ + has(match: string): Boolean + + /** **/ + forEach(fn: Function): nlp.Document + /** **/ + map(fn: Function): nlp.Document + /** **/ + filter(fn: Function): nlp.Document +} + +/** **/ +declare const nlpParagraphs: nlp.Plugin<{ paragraphs(n?: number): Paragraphs }, {}> + +export default nlpParagraphs diff --git a/plugins/sentences/types/index.d.ts b/plugins/sentences/types/index.d.ts new file mode 100644 index 000000000..ac3eb9d23 --- /dev/null +++ b/plugins/sentences/types/index.d.ts @@ -0,0 +1,43 @@ +import nlp from 'compromise' + +declare class Sentences { + /** overloaded output with sentence metadata **/ + json(n?: number): any + /** return the main noun of each sentence **/ + subjects(): nlp.Document + /** `he walks` -> `he walked` **/ + toPastTense(): nlp.Document + /** `he walked` -> `he walks` **/ + toPresentTense(): nlp.Document + /** `he walks` -> `he will walk` **/ + toFutureTense(): nlp.Document + /** `he walks` -> `he didn't walk` **/ + toNegative(): nlp.Document + /** `he doesn't walk` -> `he walks` **/ + toPositive(): nlp.Document + + /** return only sentences with a passive-voice **/ + isPassive(): nlp.Document + /** return questions with a `?` **/ + isQuestion(): nlp.Document + /** return sentences with a `!` **/ + isExclamation(): nlp.Document + /** return sentences without `?` or `!` **/ + isStatement(): nlp.Document + + /** smarter prepend that repairs whitespace + titlecasing **/ + prepend(): nlp.Document + /** smarter append that repairs sentence punctuation **/ + append(): nlp.Document + /** end sentence with a `!` **/ + toExclamation(): nlp.Document + /** end sentence with a `?` **/ + toQuestion(): nlp.Document + /** end sentence with a `.` **/ + toStatement(): nlp.Document +} + +/** return sentence objects with additional methods **/ +declare const nlpSentences: nlp.Plugin<{ sentences(n?: number): Sentences }, {}> + +export default nlpSentences From ec8e2f82b71ba7feb2e4823fa5c4381d669db236 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 18:06:12 -0500 Subject: [PATCH 43/59] types for jsonOptions, add syllable types --- plugins/syllables/types/index.d.ts | 6 ++++++ types/index.d.ts | 34 +++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 plugins/syllables/types/index.d.ts diff --git a/plugins/syllables/types/index.d.ts b/plugins/syllables/types/index.d.ts new file mode 100644 index 000000000..b7e862cf4 --- /dev/null +++ b/plugins/syllables/types/index.d.ts @@ -0,0 +1,6 @@ +import nlp from 'compromise' + +/** return syllables from given terms **/ +declare const nlpSyllables: nlp.Plugin<{ syllables(options?: any): any }, {}> + +export default nlpSyllables diff --git a/types/index.d.ts b/types/index.d.ts index 8c1d9cdd3..aa2eedb8b 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -24,6 +24,38 @@ declare interface nlp { declare function nlp(text: string): nlp.DefaultDocument declare function nlp(text: string): nlp.ExtendedDocument +// possible values to .json() +declare interface JsonOptions { + /** a perfect copy of the input text */ + text?: boolean + /** normalized whitespace, case, unicode, punctuation */ + normal?: boolean + /** lowercase, trimmed, contractions expanded. */ + reduced?: boolean + /** cleanup whitespace */ + trim?: boolean + /** character-position where this begins */ + offset?: boolean + /** frequency of this match in the document */ + count?: boolean + /** remove duplicate results*/ + unique?: boolean + /** starting term # in document */ + index?: boolean + /** options for each term */ + terms?: { + text?: boolean + normal?: boolean + clean?: boolean + implicit?: boolean + tags?: boolean + whitespace?: boolean + id?: boolean + offset?: boolean + bestTag?: boolean + } +} + // Constructor declare module nlp { export function tokenize(text: string): DefaultDocument @@ -200,7 +232,7 @@ declare module nlp { /** return the document as text */ text(options?: string | object): string /** pull out desired metadata from the document */ - json(options?: string | object): any + json(options?: JsonOptions | string): any /** some named output formats */ out(format?: 'grid' | 'color' | 'normal' | 'csv' | 'newlines' | 'html' | 'text'): string out(format: 'array'): string[] From f505aa0c288afbc654fd4b5adbb194fa92945cf6 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 18:13:46 -0500 Subject: [PATCH 44/59] add ngram and output plugin types --- plugins/ngrams/README.md | 12 ++++++------ plugins/ngrams/types/index.d.ts | 24 ++++++++++++++++++++++++ plugins/output/types/index.d.ts | 14 ++++++++++++++ 3 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 plugins/ngrams/types/index.d.ts create mode 100644 plugins/output/types/index.d.ts diff --git a/plugins/ngrams/README.md b/plugins/ngrams/README.md index e4c2c4563..8835ccedc 100644 --- a/plugins/ngrams/README.md +++ b/plugins/ngrams/README.md @@ -38,11 +38,11 @@ doc.ngrams({ size: 3 }) ### API: - **.ngrams({})** - list all repeating sub-phrases, by word-count -- **.unigrams()** - n-grams with one word -- **.bigrams()** - n-grams with two words -- **.trigrams()** - n-grams with three words -- **.startgrams()** - n-grams including the first term of a phrase -- **.endgrams()** - n-grams including the last term of a phrase -- **.edgegrams()** - n-grams including the first or last term of a phrase +- **.unigrams(n)** - n-grams with one word +- **.bigrams(n)** - n-grams with two words +- **.trigrams(n)** - n-grams with three words +- **.startgrams({})** - n-grams including the first term of a phrase +- **.endgrams({})** - n-grams including the last term of a phrase +- **.edgegrams({})** - n-grams including the first or last term of a phrase MIT diff --git a/plugins/ngrams/types/index.d.ts b/plugins/ngrams/types/index.d.ts new file mode 100644 index 000000000..370a603ab --- /dev/null +++ b/plugins/ngrams/types/index.d.ts @@ -0,0 +1,24 @@ +import nlp from 'compromise' + +/** **/ +declare const nlpNgrams: nlp.Plugin< + { + /** list all repeating sub-phrases, by word-count*/ + ngrams(options?: any): any + /** n-grams with one word*/ + unigrams(index?: number): any + /** n-grams with two words*/ + bigrams(index?: number): any + /** n-grams with three words*/ + trigrams(index?: number): any + /** n-grams including the first term of a phrase*/ + startgrams(options?: any): any + /** n-grams including the last term of a phrase*/ + endgrams(options?: any): any + /** n-grams including the first or last term of a phrase*/ + edgegrams(options?: any): any + }, + {} +> + +export default nlpNgrams diff --git a/plugins/output/types/index.d.ts b/plugins/output/types/index.d.ts new file mode 100644 index 000000000..cf9b188b7 --- /dev/null +++ b/plugins/output/types/index.d.ts @@ -0,0 +1,14 @@ +import nlp from 'compromise' + +/** **/ +declare const nlpOutput: nlp.Plugin< + { + /** generate an md5 hash from the document+tags */ + hash(): any + /** generate sanitized html from the document */ + html(segments?: any, options?: any): string + }, + {} +> + +export default nlpOutput From 08fe27937443d447212208ed2d7ed93e39164c87 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 18:17:18 -0500 Subject: [PATCH 45/59] fix out format string options --- types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/index.d.ts b/types/index.d.ts index aa2eedb8b..bb233e02a 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -234,7 +234,7 @@ declare module nlp { /** pull out desired metadata from the document */ json(options?: JsonOptions | string): any /** some named output formats */ - out(format?: 'grid' | 'color' | 'normal' | 'csv' | 'newlines' | 'html' | 'text'): string + out(format?: 'text' | 'normal' | 'offset' | 'terms'): string out(format: 'array'): string[] out(format: 'tags' | 'terms'): Array<{ normal: string; text: string; tags: string[] }> out(format: 'json'): Array<{ normal: string; text: string; tags: () => void }>[] From 4846f63f97697dc607a9a4ba8393f4bdfe860972 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 18:20:12 -0500 Subject: [PATCH 46/59] add types to package json files --- plugins/adjectives/package.json | 4 +++- plugins/dates/package.json | 4 +++- plugins/ngrams/package.json | 4 +++- plugins/numbers/package.json | 3 ++- plugins/output/package.json | 4 +++- plugins/paragraphs/package.json | 4 +++- plugins/sentences/package.json | 4 +++- plugins/syllables/package.json | 4 +++- 8 files changed, 23 insertions(+), 8 deletions(-) diff --git a/plugins/adjectives/package.json b/plugins/adjectives/package.json index 7cab495b0..2e8f17f2e 100644 --- a/plugins/adjectives/package.json +++ b/plugins/adjectives/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-adjectives.js", "unpkg": "./builds/compromise-adjectives.min.js", "module": "./builds/compromise-adjectives.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/dates/package.json b/plugins/dates/package.json index bd4cd69d7..520642797 100644 --- a/plugins/dates/package.json +++ b/plugins/dates/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-dates.js", "unpkg": "./builds/compromise-dates.min.js", "module": "./builds/compromise-dates.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 120 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/ngrams/package.json b/plugins/ngrams/package.json index 51ef60db3..be6920012 100644 --- a/plugins/ngrams/package.json +++ b/plugins/ngrams/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-ngrams.js", "unpkg": "./builds/compromise-ngrams.min.js", "module": "./builds/compromise-ngrams.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/numbers/package.json b/plugins/numbers/package.json index d2f247c05..92aa81ac2 100644 --- a/plugins/numbers/package.json +++ b/plugins/numbers/package.json @@ -25,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/output/package.json b/plugins/output/package.json index 7014a6d82..bc618c7ca 100644 --- a/plugins/output/package.json +++ b/plugins/output/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-output.js", "unpkg": "./builds/compromise-output.min.js", "module": "./builds/compromise-output.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/paragraphs/package.json b/plugins/paragraphs/package.json index 518cf810f..2ca062cdc 100644 --- a/plugins/paragraphs/package.json +++ b/plugins/paragraphs/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-paragraphs.js", "unpkg": "./builds/compromise-paragraphs.min.js", "module": "./builds/compromise-paragraphs.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/sentences/package.json b/plugins/sentences/package.json index ebaa3595b..d89bb12fe 100644 --- a/plugins/sentences/package.json +++ b/plugins/sentences/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-sentences.js", "unpkg": "./builds/compromise-sentences.min.js", "module": "./builds/compromise-sentences.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" diff --git a/plugins/syllables/package.json b/plugins/syllables/package.json index 7604f8d0c..eb3a0a94c 100644 --- a/plugins/syllables/package.json +++ b/plugins/syllables/package.json @@ -6,6 +6,7 @@ "main": "./builds/compromise-syllables.js", "unpkg": "./builds/compromise-syllables.min.js", "module": "./builds/compromise-syllables.mjs", + "types": "types/index.d.ts", "repository": { "type": "git", "url": "git://github.com/spencermountain/compromise.git" @@ -24,7 +25,8 @@ "printWidth": 100 }, "files": [ - "builds/" + "builds/", + "types/index.d.ts" ], "eslintIgnore": [ "builds/*.js" From 5fbec60633808095bc91ac365091c5cb61694969 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 18:56:57 -0500 Subject: [PATCH 47/59] fix emoji-period bug --- changelog.md | 2 +- scratch.js | 9 ++++++--- src/02-tagger/01-init/05-emoji.js | 2 ++ src/Subset/Nouns/methods.js | 1 - src/Term/Term.js | 1 + 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/changelog.md b/changelog.md index 8d39781c6..319feb3ab 100644 --- a/changelog.md +++ b/changelog.md @@ -19,7 +19,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - improved tagging for '-ed' verbs (#616) - improve support for auxilary-pastTense ('was lifted') verb-phrases - more robust number-tagging regexes -- fix typescript types for plugins #661 (thanks @Drache93) +- setup typescript types for plugins #661 (thanks @Drache93!) ##### 12.2.1 diff --git a/scratch.js b/scratch.js index ebe86c6e6..fd5187a20 100644 --- a/scratch.js +++ b/scratch.js @@ -1,9 +1,12 @@ const nlp = require('./src/index') -nlp.verbose(true) +// nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) let str = ' 🇵🇷.' +// let doc = nlp.tokenize(str) let doc = nlp(str) -console.log(doc.termList(1)) -console.log(doc.text()) +console.log(doc.list[0].terms()) +// console.log(doc.termList(1)) +// console.log(doc.text()) +console.log(doc.text() === str) diff --git a/src/02-tagger/01-init/05-emoji.js b/src/02-tagger/01-init/05-emoji.js index 259d0e1b9..d27410675 100644 --- a/src/02-tagger/01-init/05-emoji.js +++ b/src/02-tagger/01-init/05-emoji.js @@ -36,6 +36,8 @@ const isEmoticon = str => { const tagEmoji = (term, world) => { let raw = term.pre + term.text + term.post raw = raw.trim() + //dont double-up on ending periods + raw = raw.replace(/[.!?,]$/, '') //test for :keyword: emojis if (isCommaEmoji(raw) === true) { term.tag('Emoji', 'comma-emoji', world) diff --git a/src/Subset/Nouns/methods.js b/src/Subset/Nouns/methods.js index 4272227cc..b0fecf812 100644 --- a/src/Subset/Nouns/methods.js +++ b/src/Subset/Nouns/methods.js @@ -26,7 +26,6 @@ const methods = { }, /** get all adjectives describing this noun*/ adjectives: function() { - // this.lookAhead('.+').debug() let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+') list = list.concat(this.lookBehind('#Adjective+ #Adverb?$')) list = list.match('#Adjective') diff --git a/src/Term/Term.js b/src/Term/Term.js index 4e7254e52..fb906361a 100644 --- a/src/Term/Term.js +++ b/src/Term/Term.js @@ -29,6 +29,7 @@ class Term { /** set the text of the Term to something else*/ set(str) { let obj = parseTerm(str) + this.text = obj.text this.clean = obj.clean return this From f19b32b470ea411866266dab13787841bb28a23a Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 20:03:36 -0500 Subject: [PATCH 48/59] misc plural noun fixes --- hmm.md | 48 +++++++++++++++++++++++++ scratch.js | 14 ++++---- src/02-tagger/04-correction/fixValue.js | 13 +++++-- src/Subset/Nouns/methods.js | 4 +-- tests/nouns/misc.test.js | 7 ++++ 5 files changed, 73 insertions(+), 13 deletions(-) diff --git a/hmm.md b/hmm.md index 85fc518cf..886bdd9be 100644 --- a/hmm.md +++ b/hmm.md @@ -119,3 +119,51 @@ nlp(`why can't i have no kids and three money?`) .expand() .text() ``` + +```js +nlp('Garth, I’m going to be frank.') + .verbs() + .toFutureTense() + .all() + .text() + +nlp('WE’RE NOT WORTHY! WE’RE NOT WORTHY!') + .verbs() + .toFutureTense() + .all() + .text() + +nlp('All my life I’ve had one dream, to accomplish my many goals.') + .verbs() + .toGerund() + .all() + .text() + +nlp(`It's sucking my will to live!`) + .nouns() + .out('array') + +nlp(`powerful like a gorilla, yet soft and yielding like a nerf ball`) + .nouns() + .toPlural() + .all() + .text() + +nlp(`I'm not going to jail for you, or ANYBODY.`) + .nouns() + .toPlural() + .all() + .text() + +nlp(`bort licence plate`) + .nouns() + .toPlural() + .all() + .text() + +nlp(`hey pal, did you get a load of the nerd?`) + .nouns() + .toPlural() + .all() + .text() +``` diff --git a/scratch.js b/scratch.js index fd5187a20..26ae36cf6 100644 --- a/scratch.js +++ b/scratch.js @@ -1,12 +1,10 @@ const nlp = require('./src/index') -// nlp.verbose(true) +nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -let str = ' 🇵🇷.' -// let doc = nlp.tokenize(str) -let doc = nlp(str) -console.log(doc.list[0].terms()) -// console.log(doc.termList(1)) -// console.log(doc.text()) -console.log(doc.text() === str) +nlp(`one dream`) + .debug() + .nouns() + .isPlural() + .debug() diff --git a/src/02-tagger/04-correction/fixValue.js b/src/02-tagger/04-correction/fixValue.js index d89942049..1dd791735 100644 --- a/src/02-tagger/04-correction/fixValue.js +++ b/src/02-tagger/04-correction/fixValue.js @@ -8,10 +8,17 @@ const fixValue = function(doc) { val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value') //(454) 232-9873 val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber') - //three trains - val.match('#Value [#PresentTense]').tag('Plural', 'value-presentTense') + //three trains / one train + let m = val.match('#Value #PresentTense') + if (m.found) { + if (m.has('(one|1)') === true) { + m.terms(1).tag('Singular', 'one-presentTense') + } else { + m.terms(1).tag('Plural', 'value-presentTense') + } + } //money - let m = val.match('#Value+ #Currency') + m = val.match('#Value+ #Currency') m.lastTerm().tag('Unit', 'money-unit') m.match('#Value+').tag('Money', 'value-currency') } diff --git a/src/Subset/Nouns/methods.js b/src/Subset/Nouns/methods.js index b0fecf812..5574b0675 100644 --- a/src/Subset/Nouns/methods.js +++ b/src/Subset/Nouns/methods.js @@ -46,7 +46,7 @@ const methods = { } // double-check it isn't an un-tagged plural let main = parse(doc).main - let str = main.text() + let str = main.text('reduced') if (!main.has('#Singular') && isPlural(str) === true) { return } @@ -70,7 +70,7 @@ const methods = { } // double-check it isn't an un-tagged plural let main = parse(doc).main - let str = main.text() + let str = main.text('reduced') if (!main.has('#Plural') && isPlural(str) !== true) { return } diff --git a/tests/nouns/misc.test.js b/tests/nouns/misc.test.js index 9c23ffb71..df936d3bf 100644 --- a/tests/nouns/misc.test.js +++ b/tests/nouns/misc.test.js @@ -7,5 +7,12 @@ test('misc nouns', function(t) { doc = nlp(`john smith, and then Google Inc in Flordia`) t.equal(doc.nouns().length, 3, 'found three nouns') + + doc = nlp(`Chocolate microscope?`) + doc.nouns().toPlural() + t.equal(doc.text(), 'Chocolate microscopes?', 'plural') + doc.nouns().toSingular() + t.equal(doc.text(), 'Chocolate microscope?', 'singular') + t.end() }) From 5f3e0bec3ed24031f8971aed66f4959d3345cbc3 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 8 Jan 2020 20:22:36 -0500 Subject: [PATCH 49/59] fix dangling modal verbs --- data/nouns/singulars.js | 1 + hmm.md | 10 ---------- scratch.js | 8 ++------ src/02-tagger/04-correction/fixVerb.js | 6 ++++++ src/World/_data.js | 2 +- tests/tagger/tagger.test.js | 16 ++++++++++++++++ 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/data/nouns/singulars.js b/data/nouns/singulars.js index fa07a43d3..0d4d44289 100644 --- a/data/nouns/singulars.js +++ b/data/nouns/singulars.js @@ -41,6 +41,7 @@ module.exports = [ 'others', 'part', 'patent', + 'plate', 'problem', 'purpose', 'question mark', diff --git a/hmm.md b/hmm.md index 886bdd9be..6544d2332 100644 --- a/hmm.md +++ b/hmm.md @@ -139,10 +139,6 @@ nlp('All my life I’ve had one dream, to accomplish my many goals.') .all() .text() -nlp(`It's sucking my will to live!`) - .nouns() - .out('array') - nlp(`powerful like a gorilla, yet soft and yielding like a nerf ball`) .nouns() .toPlural() @@ -155,12 +151,6 @@ nlp(`I'm not going to jail for you, or ANYBODY.`) .all() .text() -nlp(`bort licence plate`) - .nouns() - .toPlural() - .all() - .text() - nlp(`hey pal, did you get a load of the nerd?`) .nouns() .toPlural() diff --git a/scratch.js b/scratch.js index 26ae36cf6..df948f0de 100644 --- a/scratch.js +++ b/scratch.js @@ -1,10 +1,6 @@ const nlp = require('./src/index') -nlp.verbose(true) +// nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -nlp(`one dream`) - .debug() - .nouns() - .isPlural() - .debug() +nlp('WE’RE NOT WORTHY! WE’RE NOT WORTHY!').debug() diff --git a/src/02-tagger/04-correction/fixVerb.js b/src/02-tagger/04-correction/fixVerb.js index c4d395302..415c354a1 100644 --- a/src/02-tagger/04-correction/fixVerb.js +++ b/src/02-tagger/04-correction/fixVerb.js @@ -42,6 +42,12 @@ const fixVerb = function(doc) { let modal = vb.if('(#Modal|did|had|has)') if (modal.found === true) { + if (!modal.has('#Modal #Verb')) { + //'the can' + modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can') + //'he can' + modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can') + } //support a splattering of auxillaries before a verb modal .match(`(has|had) ${advb} #PastTense`) diff --git a/src/World/_data.js b/src/World/_data.js index 28006b265..727a837ba 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -13,7 +13,7 @@ module.exports={ "Plural": "true¦records", "Conjunction": "true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh", "Pronoun": "true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s", - "Singular": "true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em", + "Singular": "true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em", "Actor": "true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt", "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 3e760928f..3483cafbf 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -20,6 +20,22 @@ test('pos-basic-tag:', function(t) { ['Peter the man', ['Person', 'Determiner', 'Noun']], // ['book the flight', ['Verb', 'Determiner', 'Noun']], + ['one dream', ['Value', 'Singular']], + ['two dreams', ['Value', 'Plural']], + + // modal verbs + ['can buy', ['Modal', 'Verb']], + ['he can', ['Pronoun', 'Verb']], + ['the can', ['Determiner', 'Noun']], + + ['will earn', ['Modal', 'Verb']], + ['they will', ['Pronoun', 'Verb']], + ['the will', ['Determiner', 'Noun']], + + ['may leave', ['Modal', 'Verb']], + ['they may', ['Pronoun', 'Verb']], + ['this may', ['Determiner', 'Noun']], + //slang, contractions ['u r nice', ['Pronoun', 'Copula', 'Adjective']], ['canadian bacon', ['Demonym', 'Noun']], From df57d9ae9d36980e53bdf91ae97dcfd51954307c Mon Sep 17 00:00:00 2001 From: Dominic Cassidy Date: Fri, 10 Jan 2020 11:41:36 +0000 Subject: [PATCH 50/59] Buil --- builds/compromise.js | 35 ++++++++++++++++++++++++++--------- builds/compromise.js.map | 2 +- builds/compromise.min.js | 2 +- builds/compromise.mjs | 35 ++++++++++++++++++++++++++--------- types/types.test.ts | 25 ++++++++++++++++--------- 5 files changed, 70 insertions(+), 29 deletions(-) diff --git a/builds/compromise.js b/builds/compromise.js index d377e78a0..9b1a0c0a1 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -3188,7 +3188,7 @@ "Plural": "true¦records", "Conjunction": "true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh", "Pronoun": "true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s", - "Singular": "true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em", + "Singular": "true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em", "Actor": "true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt", "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", @@ -8809,7 +8809,9 @@ var tagEmoji = function tagEmoji(term, world) { var raw = term.pre + term.text + term.post; - raw = raw.trim(); //test for :keyword: emojis + raw = raw.trim(); //dont double-up on ending periods + + raw = raw.replace(/[.!?,]$/, ''); //test for :keyword: emojis if (isCommaEmoji(raw) === true) { term.tag('Emoji', 'comma-emoji', world); @@ -10063,7 +10065,14 @@ var modal = vb["if"]('(#Modal|did|had|has)'); if (modal.found === true) { - //support a splattering of auxillaries before a verb + if (!modal.has('#Modal #Verb')) { + //'the can' + modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can'); //'he can' + + modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can'); + } //support a splattering of auxillaries before a verb + + modal.match("(has|had) ".concat(advb, " #PastTense")).not('#Verb$').tag('Auxiliary', 'had-walked'); //would walk modal.match("(#Modal|did) ".concat(advb, " #Verb")).not('#Verb$').tag('Auxiliary', 'modal-verb'); //would have had @@ -10180,11 +10189,20 @@ //1 800 PhoneNumber val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value'); //(454) 232-9873 - val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber'); //three trains + val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber'); //three trains / one train + + var m = val.match('#Value #PresentTense'); + + if (m.found) { + if (m.has('(one|1)') === true) { + m.terms(1).tag('Singular', 'one-presentTense'); + } else { + m.terms(1).tag('Plural', 'value-presentTense'); + } + } //money - val.match('#Value [#PresentTense]').tag('Plural', 'value-presentTense'); //money - var m = val.match('#Value+ #Currency'); + m = val.match('#Value+ #Currency'); m.lastTerm().tag('Unit', 'money-unit'); m.match('#Value+').tag('Money', 'value-currency'); } //5 kg. @@ -11008,7 +11026,6 @@ /** get all adjectives describing this noun*/ adjectives: function adjectives() { - // this.lookAhead('.+').debug() var list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+'); list = list.concat(this.lookBehind('#Adjective+ #Adverb?$')); list = list.match('#Adjective'); @@ -11033,7 +11050,7 @@ var main = parse_1(doc).main; - var str = main.text(); + var str = main.text('reduced'); if (!main.has('#Singular') && isPlural_1$1(str) === true) { return; @@ -11063,7 +11080,7 @@ var main = parse_1(doc).main; - var str = main.text(); + var str = main.text('reduced'); if (!main.has('#Plural') && isPlural_1$1(str) !== true) { return; diff --git a/builds/compromise.js.map b/builds/compromise.js.map index f4feb0d83..04e3cf1d1 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.2.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n reg: /(ake)$/i,\n repl: {\n pr: '$1s',\n pa: 'ook',\n gr: 'aking',\n ar: '$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(str = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(str) === true) {\n found = Object.assign({}, world.irregulars.verbs[str])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(str), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(str)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(str)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(str)\n }\n return found\n}\nmodule.exports = conjugate\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n reg: /pping$/i,\n to: 'p',\n },\n {\n reg: /lling$/i,\n to: 'll',\n },\n {\n reg: /tting$/i,\n to: 't',\n },\n {\n reg: /dding$/i,\n to: 'd',\n },\n {\n reg: /ssing$/i,\n to: 'ss',\n },\n {\n reg: /(..)gging$/i,\n to: '$1g',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ea.)ing$/i,\n to: '$1',\n },\n {\n reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n {\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'regex #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou]n?c?ked$/, Past], //hooked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Actor,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains\n val.match('#Value [#PresentTense]').tag('Plural', 'value-presentTense')\n //money\n let m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n // this.lookAhead('.+').debug()\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text()\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text()\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n Object.keys(forms).forEach(k => (forms[k] += ' ' + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += ' ' + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + ' ' + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\nconst toInfinitive = require('./toInfinitive')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = toInfinitive(parsed, this.world)\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","tryMultiple","checkLexicon","foundWords","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.2.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n reg: /(ake)$/i,\n repl: {\n pr: '$1s',\n pa: 'ook',\n gr: 'aking',\n ar: '$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(str = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(str) === true) {\n found = Object.assign({}, world.irregulars.verbs[str])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(str), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(str)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(str)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(str)\n }\n return found\n}\nmodule.exports = conjugate\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n reg: /pping$/i,\n to: 'p',\n },\n {\n reg: /lling$/i,\n to: 'll',\n },\n {\n reg: /tting$/i,\n to: 't',\n },\n {\n reg: /dding$/i,\n to: 'd',\n },\n {\n reg: /ssing$/i,\n to: 'ss',\n },\n {\n reg: /(..)gging$/i,\n to: '$1g',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ea.)ing$/i,\n to: '$1',\n },\n {\n reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n {\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'regex #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou]n?c?ked$/, Past], //hooked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Actor,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n Object.keys(forms).forEach(k => (forms[k] += ' ' + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += ' ' + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + ' ' + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\nconst toInfinitive = require('./toInfinitive')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = toInfinitive(parsed, this.world)\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","tryMultiple","checkLexicon","foundWords","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index 2310bca79..65a2eee3c 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},B,D,T,H,L);function W(){return"undefined"!=typeof window&&window.document}var _=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=E(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=De(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},Ne=function(e,t){var n={};xe(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},je={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=xe(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return xe(this,e,!0).length>0},not:function(e){var t=this,n=Ne(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,je),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,We=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,_e=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===We.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},Wt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],_t=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=C((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Fn=C((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Bn=(Cn.json,Cn.data,C((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=Nn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Tn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Vn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Tn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},nr=/[\'‘’‛‵′`´]$/,rr=/^[A-Z]('s|,)?$/,ar={I:!0,A:!0},ir=function(e,t,n){var r=e[t];if(nr.test(r.text)&&!nr.test(r.pre)&&!nr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ar.hasOwnProperty(r.text)&&rr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},or=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],sr=/^[IVXLCDM]{2,}$/,ur=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,lr="Adjective",cr="Infinitive",hr="Singular",dr="PastTense",fr="Expression",mr="LastName",pr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,mr],[/.[^aeiou]ica$/,hr],[/^([hyj]a)+$/,fr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/,dr],[/.[aeo]{2}[bdgmnprvz]ed$/,dr],[/.[aeiou][sg]hed$/,dr],[/.[aeiou]red$/,dr],[/.[aeiou]r?ried$/,dr],[/.[bcdgtr]led$/,dr],[/.[aoui]f?led$/,dr],[/.[iao]sed$/,dr],[/.[aeiou]n?[cs]ed$/,dr],[/[aeiou][rl]?[mnf]ed$/,dr],[/[aeiou]n?c?ked$/,dr],[/[aeiou][nl]?ged$/,dr],[/.[tdbwxz]ed$/,dr],[/[^aeiou][aeiou][tvx]ed$/,dr],[/.[cdlmnprstv]ied$/,dr],[/[^aeiou]ard$/,hr],[/[aeiou][^aeiou]id$/,lr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,mr],[/^ug?h+$/,fr],[/^uh[ -]?oh$/,fr]],i:[[/.[oau][wvl]ski$/,mr]],k:[[/^(k)+$/,fr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,hr],[/[^aeiou]ism$/,hr],[/^h*u*m+$/,fr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,fr],[/^(yo)+$/,fr],[/^woo+[pt]?$/,fr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,hr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,hr],[/[aeiou][^aeiou]is$/,hr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,fr]],v:[[/.[^aeiou][ai][kln]ov$/,mr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,hr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,hr]]},gr="Adjective",vr="Infinitive",br="PresentTense",yr="Singular",wr="PastTense",kr="Adverb",Ar="Plural",$r="Verb",Pr="LastName",Fr=[null,null,{ea:yr,ia:"Noun",ic:gr,ly:kr,"'n":$r,"'t":$r},{oed:wr,ued:wr,xed:wr," so":kr,"'ll":"Modal","'re":"Copula",azy:gr,end:$r,ped:wr,ffy:gr,ify:vr,ing:"Gerund",ize:vr,lar:gr,mum:gr,nes:br,nny:gr,oid:gr,ous:gr,que:gr,rmy:gr,rol:yr,sis:yr,zes:br},{amed:wr,aped:wr,ched:wr,lked:wr,nded:wr,cted:wr,dged:wr,akis:Pr,cede:vr,chuk:Pr,czyk:Pr,ects:br,ends:$r,enko:Pr,ette:yr,fies:br,fore:kr,gate:vr,gone:gr,ices:Ar,ints:Ar,ions:Ar,less:kr,llen:gr,made:gr,nsen:Pr,oses:br,ould:"Modal",some:gr,sson:Pr,tage:vr,teen:"Value",tion:yr,tive:"Actor",tors:"Noun",vice:yr},{tized:wr,urned:wr,eased:wr,ances:Ar,bound:gr,ettes:Ar,fully:kr,ishes:br,ities:Ar,marek:Pr,nssen:Pr,ology:"Noun",ports:Ar,rough:gr,tches:br,tieth:"Ordinal",tures:Ar,wards:kr,where:kr},{auskas:Pr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Pr,sdottir:Pr}],Gr={":(":!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&&sr.test(n)&&ur.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Fr[i.length].hasOwnProperty(i)){var o=Fr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===pr.hasOwnProperty(r))for(var a=pr[r],i=0;i35)))}(r=r.trim())&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Er)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Gr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Br=function(e,t){var n=e.world;Cr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Mr={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]},Sr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Lr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Jr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Sr.find((function(t){return e.tags[t]})))return;if(Mr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Mr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Lr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(Jr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},_r=["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}),{}),qr=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()))},Kr={neighbours:jr,case:Vr,stem:Ir,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ha=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return ja(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();pi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new pi(e,this,this.world)},pi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(pi.prototype,mi.misc),Object.assign(pi.prototype,mi.selections),fi(pi);var gi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(gi).forEach((function(e){return pi.prototype[e]=pi.prototype[gi[e]]}));var vi=pi,bi=new pn,yi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r.tagger(),r};return yi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r},yi.extend=function(e){return e(vi,bi),this},yi.clone=function(){return bi=bi.clone(),this},yi.load=function(e){var t=at(e,bi);return new vi(t,null,bi)},yi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return bi.verbose(e),this},yi.version="12.2.1",yi.import=yi.load,yi})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},B,D,T,H,L);function W(){return"undefined"!=typeof window&&window.document}var _=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=E(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=De(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},Ne=function(e,t){var n={};xe(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},je={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=xe(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return xe(this,e,!0).length>0},not:function(e){var t=this,n=Ne(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,je),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,We=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,_e=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===We.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},Wt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],_t=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=C((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Fn=C((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Bn=(Cn.json,Cn.data,C((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=Nn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Tn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Vn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Tn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},nr=/[\'‘’‛‵′`´]$/,rr=/^[A-Z]('s|,)?$/,ar={I:!0,A:!0},ir=function(e,t,n){var r=e[t];if(nr.test(r.text)&&!nr.test(r.pre)&&!nr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ar.hasOwnProperty(r.text)&&rr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},or=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],sr=/^[IVXLCDM]{2,}$/,ur=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,lr="Adjective",cr="Infinitive",hr="Singular",dr="PastTense",fr="Expression",mr="LastName",pr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,mr],[/.[^aeiou]ica$/,hr],[/^([hyj]a)+$/,fr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/,dr],[/.[aeo]{2}[bdgmnprvz]ed$/,dr],[/.[aeiou][sg]hed$/,dr],[/.[aeiou]red$/,dr],[/.[aeiou]r?ried$/,dr],[/.[bcdgtr]led$/,dr],[/.[aoui]f?led$/,dr],[/.[iao]sed$/,dr],[/.[aeiou]n?[cs]ed$/,dr],[/[aeiou][rl]?[mnf]ed$/,dr],[/[aeiou]n?c?ked$/,dr],[/[aeiou][nl]?ged$/,dr],[/.[tdbwxz]ed$/,dr],[/[^aeiou][aeiou][tvx]ed$/,dr],[/.[cdlmnprstv]ied$/,dr],[/[^aeiou]ard$/,hr],[/[aeiou][^aeiou]id$/,lr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,mr],[/^ug?h+$/,fr],[/^uh[ -]?oh$/,fr]],i:[[/.[oau][wvl]ski$/,mr]],k:[[/^(k)+$/,fr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,hr],[/[^aeiou]ism$/,hr],[/^h*u*m+$/,fr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,fr],[/^(yo)+$/,fr],[/^woo+[pt]?$/,fr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,hr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,hr],[/[aeiou][^aeiou]is$/,hr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,fr]],v:[[/.[^aeiou][ai][kln]ov$/,mr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,hr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,hr]]},gr="Adjective",vr="Infinitive",br="PresentTense",yr="Singular",wr="PastTense",kr="Adverb",Ar="Plural",$r="Verb",Pr="LastName",Fr=[null,null,{ea:yr,ia:"Noun",ic:gr,ly:kr,"'n":$r,"'t":$r},{oed:wr,ued:wr,xed:wr," so":kr,"'ll":"Modal","'re":"Copula",azy:gr,end:$r,ped:wr,ffy:gr,ify:vr,ing:"Gerund",ize:vr,lar:gr,mum:gr,nes:br,nny:gr,oid:gr,ous:gr,que:gr,rmy:gr,rol:yr,sis:yr,zes:br},{amed:wr,aped:wr,ched:wr,lked:wr,nded:wr,cted:wr,dged:wr,akis:Pr,cede:vr,chuk:Pr,czyk:Pr,ects:br,ends:$r,enko:Pr,ette:yr,fies:br,fore:kr,gate:vr,gone:gr,ices:Ar,ints:Ar,ions:Ar,less:kr,llen:gr,made:gr,nsen:Pr,oses:br,ould:"Modal",some:gr,sson:Pr,tage:vr,teen:"Value",tion:yr,tive:"Actor",tors:"Noun",vice:yr},{tized:wr,urned:wr,eased:wr,ances:Ar,bound:gr,ettes:Ar,fully:kr,ishes:br,ities:Ar,marek:Pr,nssen:Pr,ology:"Noun",ports:Ar,rough:gr,tches:br,tieth:"Ordinal",tures:Ar,wards:kr,where:kr},{auskas:Pr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Pr,sdottir:Pr}],Gr={":(":!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&&sr.test(n)&&ur.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Fr[i.length].hasOwnProperty(i)){var o=Fr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===pr.hasOwnProperty(r))for(var a=pr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Er)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Gr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Br=function(e,t){var n=e.world;Cr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Mr={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]},Sr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Lr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Jr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Sr.find((function(t){return e.tags[t]})))return;if(Mr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Mr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Lr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(Jr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},_r=["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}),{}),qr=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()))},Kr={neighbours:jr,case:Vr,stem:Ir,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ha=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return ja(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();pi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new pi(e,this,this.world)},pi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(pi.prototype,mi.misc),Object.assign(pi.prototype,mi.selections),fi(pi);var gi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(gi).forEach((function(e){return pi.prototype[e]=pi.prototype[gi[e]]}));var vi=pi,bi=new pn,yi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r.tagger(),r};return yi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r},yi.extend=function(e){return e(vi,bi),this},yi.clone=function(){return bi=bi.clone(),this},yi.load=function(e){var t=at(e,bi);return new vi(t,null,bi)},yi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return bi.verbose(e),this},yi.version="12.2.1",yi.import=yi.load,yi})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index f237cd485..9dcee4510 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -3182,7 +3182,7 @@ var _data = { "Plural": "true¦records", "Conjunction": "true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh", "Pronoun": "true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s", - "Singular": "true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jr3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em", + "Singular": "true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em", "Actor": "true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt", "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", @@ -8803,7 +8803,9 @@ var isEmoticon = function isEmoticon(str) { var tagEmoji = function tagEmoji(term, world) { var raw = term.pre + term.text + term.post; - raw = raw.trim(); //test for :keyword: emojis + raw = raw.trim(); //dont double-up on ending periods + + raw = raw.replace(/[.!?,]$/, ''); //test for :keyword: emojis if (isCommaEmoji(raw) === true) { term.tag('Emoji', 'comma-emoji', world); @@ -10057,7 +10059,14 @@ var fixVerb = function fixVerb(doc) { var modal = vb["if"]('(#Modal|did|had|has)'); if (modal.found === true) { - //support a splattering of auxillaries before a verb + if (!modal.has('#Modal #Verb')) { + //'the can' + modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can'); //'he can' + + modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can'); + } //support a splattering of auxillaries before a verb + + modal.match("(has|had) ".concat(advb, " #PastTense")).not('#Verb$').tag('Auxiliary', 'had-walked'); //would walk modal.match("(#Modal|did) ".concat(advb, " #Verb")).not('#Verb$').tag('Auxiliary', 'modal-verb'); //would have had @@ -10174,11 +10183,20 @@ var fixValue = function fixValue(doc) { //1 800 PhoneNumber val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value'); //(454) 232-9873 - val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber'); //three trains + val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber'); //three trains / one train + + var m = val.match('#Value #PresentTense'); + + if (m.found) { + if (m.has('(one|1)') === true) { + m.terms(1).tag('Singular', 'one-presentTense'); + } else { + m.terms(1).tag('Plural', 'value-presentTense'); + } + } //money - val.match('#Value [#PresentTense]').tag('Plural', 'value-presentTense'); //money - var m = val.match('#Value+ #Currency'); + m = val.match('#Value+ #Currency'); m.lastTerm().tag('Unit', 'money-unit'); m.match('#Value+').tag('Money', 'value-currency'); } //5 kg. @@ -11002,7 +11020,6 @@ var methods$6 = { /** get all adjectives describing this noun*/ adjectives: function adjectives() { - // this.lookAhead('.+').debug() var list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+'); list = list.concat(this.lookBehind('#Adjective+ #Adverb?$')); list = list.match('#Adjective'); @@ -11027,7 +11044,7 @@ var methods$6 = { var main = parse_1(doc).main; - var str = main.text(); + var str = main.text('reduced'); if (!main.has('#Singular') && isPlural_1$1(str) === true) { return; @@ -11057,7 +11074,7 @@ var methods$6 = { var main = parse_1(doc).main; - var str = main.text(); + var str = main.text('reduced'); if (!main.has('#Plural') && isPlural_1$1(str) !== true) { return; diff --git a/types/types.test.ts b/types/types.test.ts index 6648b02fb..348e05d62 100644 --- a/types/types.test.ts +++ b/types/types.test.ts @@ -1,20 +1,27 @@ // a smoke-test for our typescipt typings import nlp from '../' -import nlpNumbers from '../plugins/numbers' -// vs Typed plugin -type NLPTest = nlp.Plugin<{ test: (text: string) => string }, { test: string }> -const test: NLPTest = (Doc, world) => { +// Typed plugins +type testPlugin = nlp.Plugin<{ test: (text: string) => string }, { test: string }> +const test: testPlugin = (Doc, world) => { // Prototype is visible in here with plugin values Doc.prototype.test = text => text world.test = 'Hello world!' } -const nlpEx = nlp - // Give typing to untyped Plugin - .extend(nlpNumbers) - // Use typed plugin - .extend(test) +class Numbers { + json() { + return {} + } +} + +type numbersPlugin = nlp.Plugin<{ numbers: (n?: number) => Numbers }, {}> +const numbers: numbersPlugin = Doc => { + // Prototype is visible in here with plugin values + Doc.prototype.numbers = () => new Numbers() +} + +const nlpEx = nlp.extend(numbers).extend(test) const doc = nlpEx('hello world') // This type is cleaner doc.nouns() From 60490ca47779e0c819b2cd2eda81276696680e30 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 11:18:36 -0500 Subject: [PATCH 51/59] fix more tagging issues for #369 --- data/misc.js | 1 + data/misc/expressions.js | 1 + data/verbs/infinitives.js | 1 + scratch.js | 38 ++++++++++++++++++++++- src/02-tagger/01-init/02-punctuation.js | 2 +- src/02-tagger/01-init/data/endsWith.js | 17 ++++++++-- src/World/_data.js | 4 +-- src/transforms/toInfinitive/_transform.js | 5 +++ 8 files changed, 62 insertions(+), 7 deletions(-) diff --git a/data/misc.js b/data/misc.js index cc61a7fd4..0b7dc9ee3 100644 --- a/data/misc.js +++ b/data/misc.js @@ -26,6 +26,7 @@ module.exports = { meant: 'PastTense', went: 'PastTense', taken: 'PastTense', + lied: 'PastTense', going: 'Gerund', being: 'Gerund', diff --git a/data/misc/expressions.js b/data/misc/expressions.js index 74e7626da..6aa0b4c09 100644 --- a/data/misc/expressions.js +++ b/data/misc/expressions.js @@ -57,6 +57,7 @@ module.exports = [ 'sheesh', 'shhh', 'shit', + 'tsk', 'ugh', 'uh huh', 'uh oh', diff --git a/data/verbs/infinitives.js b/data/verbs/infinitives.js index 3606f39e9..ad2d84e1b 100644 --- a/data/verbs/infinitives.js +++ b/data/verbs/infinitives.js @@ -534,6 +534,7 @@ module.exports = [ 'use', 'value', 'vary', + 'vie', 'view', 'visit', 'vote', diff --git a/scratch.js b/scratch.js index df948f0de..7ddc9dce6 100644 --- a/scratch.js +++ b/scratch.js @@ -3,4 +3,40 @@ const nlp = require('./src/index') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -nlp('WE’RE NOT WORTHY! WE’RE NOT WORTHY!').debug() +// nlp('WE’RE NOT WORTHY!').debug() + +// #585 +// nlp('the second test message').debug() +// nlp('the generative approach and the discriminative approach." ').debug() + +//369 +// nlp('lied').debug() +// nlp('owed').debug() +// nlp('aced').debug() +// nlp('vied').debug() +// nlp('husked').debug() +// nlp('masked').debug() +nlp('planned').debug() + +// let arr = ['aged', 'baked', 'coming', +// 'moving', +// 'joking', +// 'poking', +// 'naming', +// 'aching', +// 'tuning', +// 'hazing', +// ] +// arr.forEach(str => { +// console.log( +// nlp(str) +// .verbs() +// .conjugate()[0] +// ) +// }) + +// console.log( +// nlp('owed') +// .verbs() +// .conjugate()[0] +// ) diff --git a/src/02-tagger/01-init/02-punctuation.js b/src/02-tagger/01-init/02-punctuation.js index 260523e8b..24beabb28 100644 --- a/src/02-tagger/01-init/02-punctuation.js +++ b/src/02-tagger/01-init/02-punctuation.js @@ -13,7 +13,7 @@ const isAcronym = function(term, world) { return true } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false + // return false // } // 'PIZZA' is not an acronym. if (str.length > 4 && world.words[str]) { diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index 3a9a810ea..e3d288229 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -43,7 +43,7 @@ module.exports = { //-med [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed //-ked - [/[aeiou]n?c?ked$/, Past], //hooked + [/[aeiou][ns]?c?ked$/, Past], //hooked, masked //-ged [/[aeiou][nl]?ged$/, Past], //engaged //-ted @@ -76,7 +76,12 @@ module.exports = { k: [ [/^(k)+$/, Exp], //kkkk ], - l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]], + l: [ + [/.[gl]ial$/, Adj], + [/.[^aeiou]ful$/, Adj], + [/.[nrtumcd]al$/, Adj], + [/.[^aeiou][ei]al$/, Adj], + ], m: [ [/.[^aeiou]ium$/, Sing], [/[^aeiou]ism$/, Sing], @@ -100,11 +105,17 @@ module.exports = { [/[^i]fer$/, Inf], [/.[^aeiou][ao]pher$/, Actor], ], - t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]], + t: [ + [/.[di]est$/, 'Superlative'], + [/.[icldtgrv]ent$/, Adj], + [/[aeiou].*ist$/, Adj], + [/^[a-z]et$/, Verb], + ], s: [ [/.[rln]ates$/, Pres], [/.[^z]ens$/, Verb], [/.[lstrn]us$/, Sing], + [/.[aeiou]sks$/, Pres], //masks [/[aeiou][^aeiou]is$/, Sing], [/[a-z]\'s$/, Noun], [/^yes+$/, Exp], //yessss diff --git a/src/World/_data.js b/src/World/_data.js index 727a837ba..6fca3a048 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -5,7 +5,7 @@ module.exports={ "Value": "true¦a few", "Noun": "true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", - "PastTense": "true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", + "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", "Gerund": "true¦accord0be0develop0go0result0stain0;ing", "Negative": "true¦n0;ever,o0;!n,t", @@ -18,7 +18,7 @@ module.exports={ "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6I;1:6W;2:56;3:6T;4:6U;5:5X;6:65;7:6S;8:6O;9:6G;A:6Q;B:6N;C:6B;D:6X;a68b5Xc4Zd47e3Rf3Eg38h31i2Oj2Mk2Kl2Bm21n1Yo1Up1Fques3Fr0Ns02tUuQvMwFyE;awn,ield;aHe1Uhist6iGoEre61;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aGiEo7;eEsB;!w;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", diff --git a/src/transforms/toInfinitive/_transform.js b/src/transforms/toInfinitive/_transform.js index 46df883c0..02cfcabf5 100644 --- a/src/transforms/toInfinitive/_transform.js +++ b/src/transforms/toInfinitive/_transform.js @@ -217,6 +217,11 @@ let rules = { reg: /(.a[^aeiou])ed$/i, to: '$1', }, + { + //owed, aced + reg: /([aeiou][^aeiou])ed$/i, + to: '$1e', + }, { reg: /([rl])ew$/i, to: '$1ow', From be9fb26dbfbe4f43e8144fa2f11f7b5b98d6a613 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 12:38:16 -0500 Subject: [PATCH 52/59] more conjugation fixes --- data/verbs/infinitives.js | 1 + scratch.js | 38 +++++++--------------- src/02-tagger/01-init/01-lexicon.js | 11 +++++++ src/02-tagger/01-init/03-prefixes.js | 2 +- src/02-tagger/01-init/data/endsWith.js | 5 +-- src/02-tagger/01-init/data/startsWith.js | 2 +- src/World/_data.js | 4 +-- src/transforms/conjugate/index.js | 16 +++++----- src/transforms/conjugate/suffixes.js | 33 +++++++++++++++---- tests/tagger/tagger.test.js | 40 ++++++++++++++++++++++++ tests/verbs/toGerund.test.js | 7 +++-- tests/verbs/toPast.test.js | 33 +++++++++++++++++++ 12 files changed, 144 insertions(+), 48 deletions(-) create mode 100644 tests/verbs/toPast.test.js diff --git a/data/verbs/infinitives.js b/data/verbs/infinitives.js index ad2d84e1b..dcc13a6f9 100644 --- a/data/verbs/infinitives.js +++ b/data/verbs/infinitives.js @@ -528,6 +528,7 @@ module.exports = [ 'undo', 'unite', 'unlock', + 'underwhelm', 'upgrade', 'uplift', 'urge', diff --git a/scratch.js b/scratch.js index 7ddc9dce6..b0a26bb00 100644 --- a/scratch.js +++ b/scratch.js @@ -1,5 +1,5 @@ const nlp = require('./src/index') -// nlp.verbose(true) +nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) @@ -9,31 +9,17 @@ const nlp = require('./src/index') // nlp('the second test message').debug() // nlp('the generative approach and the discriminative approach." ').debug() -//369 -// nlp('lied').debug() -// nlp('owed').debug() -// nlp('aced').debug() -// nlp('vied').debug() -// nlp('husked').debug() -// nlp('masked').debug() -nlp('planned').debug() - -// let arr = ['aged', 'baked', 'coming', -// 'moving', -// 'joking', -// 'poking', -// 'naming', -// 'aching', -// 'tuning', -// 'hazing', -// ] -// arr.forEach(str => { -// console.log( -// nlp(str) -// .verbs() -// .conjugate()[0] -// ) -// }) +//#369 +let arr = ['underwhelms', 'coming', 'moving', 'joking', 'poking', 'naming', 'aching', 'tuning', 'hazing'] +arr.forEach(str => { + console.log( + nlp(str) + .debug() + .verbs() + .conjugate()[0] + ) + console.log('') +}) // console.log( // nlp('owed') diff --git a/src/02-tagger/01-init/01-lexicon.js b/src/02-tagger/01-init/01-lexicon.js index e29d18d14..5e80e3fda 100644 --- a/src/02-tagger/01-init/01-lexicon.js +++ b/src/02-tagger/01-init/01-lexicon.js @@ -1,3 +1,5 @@ +const underOver = /^(under|over)-?/ + /** match a word-sequence, like 'super bowl' in the lexicon */ const tryMultiple = function(terms, t, world) { let lex = world.words @@ -50,10 +52,19 @@ const checkLexicon = function(terms, world) { //try one-word lexicon if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) { terms[t].tag(lex[str], 'lexicon', world) + continue } // look at reduced version of term, too if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) { terms[t].tag(lex[terms[t].reduced], 'lexicon', world) + continue + } + // prefix strip: try to match 'take' for 'undertake' + if (underOver.test(str) === true) { + let noPrefix = str.replace(underOver, '') + if (lex.hasOwnProperty(noPrefix) === true) { + terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world) + } } } return terms diff --git a/src/02-tagger/01-init/03-prefixes.js b/src/02-tagger/01-init/03-prefixes.js index 2de2ba9e3..bbf9ea3db 100644 --- a/src/02-tagger/01-init/03-prefixes.js +++ b/src/02-tagger/01-init/03-prefixes.js @@ -9,7 +9,7 @@ const checkRegex = function(term, world) { // do them all! for (let r = 0; r < regex.length; r += 1) { if (regex[r][0].test(str) === true) { - term.tagSafe(regex[r][1], 'regex #' + r, world) + term.tagSafe(regex[r][1], 'prefix #' + r, world) break } } diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index e3d288229..dd6f72c26 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -26,7 +26,7 @@ module.exports = { d: [ //==-ed== //double-consonant - [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped + [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned //double-vowel [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered //-hed @@ -39,7 +39,7 @@ module.exports = { [/.[aoui]f?led$/, Past], //impaled, stifled //-sed [/.[iao]sed$/, Past], //franchised - [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + [/[aeiou]n?[cs]ed$/, Past], //laced, lanced //-med [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed //-ked @@ -116,6 +116,7 @@ module.exports = { [/.[^z]ens$/, Verb], [/.[lstrn]us$/, Sing], [/.[aeiou]sks$/, Pres], //masks + [/.[aeiou]kes$/, Pres], //bakes [/[aeiou][^aeiou]is$/, Sing], [/[a-z]\'s$/, Noun], [/^yes+$/, Exp], //yessss diff --git a/src/02-tagger/01-init/data/startsWith.js b/src/02-tagger/01-init/data/startsWith.js index af1432374..01c625dae 100644 --- a/src/02-tagger/01-init/data/startsWith.js +++ b/src/02-tagger/01-init/data/startsWith.js @@ -26,7 +26,7 @@ module.exports = [ //slang things [/^(lol)+[sz]$/, 'Expression'], //lol [/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], - [/^(over|under)[a-z]{2,}/, 'Adjective'], + // [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 //phone numbers diff --git a/src/World/_data.js b/src/World/_data.js index 6fca3a048..e186b51cd 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -18,7 +18,7 @@ module.exports={ "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6I;1:6W;2:56;3:6T;4:6U;5:5X;6:65;7:6S;8:6O;9:6G;A:6Q;B:6N;C:6B;D:6X;a68b5Xc4Zd47e3Rf3Eg38h31i2Oj2Mk2Kl2Bm21n1Yo1Up1Fques3Fr0Ns02tUuQvMwFyE;awn,ield;aHe1Uhist6iGoEre61;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aGiEo7;eEsB;!w;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:58;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;a6Ab5Zc51d49e3Tf3Gg3Ah33i2Qj2Ok2Ml2Dm23n20o1Vp1Gques3Hr0Os03tVuQvMwFyE;awn,ield;aHe1Whist6iGoEre63;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aGiEo9;eEsA;!w;l6Ary;nFpEr3se;gra4Lli3Y;dEi9lo5Q;erEo;mi57w1G;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Lu8y;de,in,nsf0p,v5D;r2WuC;ank,reat2M;nd,st;lk,rg1Ns9;aXcUeThRi49kip,lQmPnee3Io4XpOtHuEwitC;bmAck,ff0gge8ppFrEspe5;ge,pri1rou4Uvi4;ly,o33;aJeIoHrFuE;dy,mb6;a4OeEi4;ngth2Css,tC;p,re;m,p;in,ke,r0Oy;la51oil,rink6;e1Wi6o3G;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu7fWgVje5lSmRnt,pOquNsItHvEwa5M;eEiew,o33;al,l,rE;se,t;a42i2u3Z;eHi8oGtE;!o2rE;i5uc1X;l4rt;mb6nt,r4;e8i2;air,eFlEo3YreseD;a7y;at;a3Semb0i3Uo4;aFeEi4y;a1nt;te,x;a54r0G;act1Ver,le5u1;a10ei4k5GoEyc6;gni29nci6rd;ch,li28s5E;i1nE;ge,k;aRerQiPlMoKrGuE;b1Yll,mp,rEsh;cha1s4H;ai1eGiDoE;cEdu7greBhibAmi1te8vi2S;eBlaim;di5pa2ss,veD;iDp,rtr3XsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2ZmAsi8;ck,iDrt4Dss,u1;bHccur,ff0pera9utweGverEwe;co3Ylap,ta1Zu1wE;helm;igh;ser4ta2Y;eFotE;e,i7;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mAnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica9flu0KhLsItGvE;eEol4;nt,st;erErodu7;a5fe2;i8tE;aEru5;ll;abAibA;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloBove1KrGuE;arEeBi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua9xE;a08cJerIi8pEte15;a14eFla12oEreB;rt,se;ct,riE;en7;ci1t;el,han3;abEima9;li1D;ab6couVdFfor7ga3han7j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeBiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor7;aIcFliEmiBpl13tingui0Y;ke;oEuB;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osA;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n7re,te;a08e07h04i9l02oHrE;aFeEoBu0Dy;a9dA;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin7;rt,y;aNin0PrE;a8ibu9ol;iEtitu9;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un7;ow;ck;ar,lFnefAtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waA;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia9uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun7sw0tE;icipa9;ce;lFt0;er;e3ow;ee;rd;aPdGju8mAoP;it;st;!reB;ss;cHhie4knowled3tiva9;te;ge;ve;eGouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", @@ -44,7 +44,7 @@ module.exports={ "TextValue": "true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th", "Ordinal": "true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th", "Cardinal": "true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion", - "Expression": "true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;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", + "Expression": "true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la", "Adverb": "true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori", "Preposition": "true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", "Determiner": "true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er" diff --git a/src/transforms/conjugate/index.js b/src/transforms/conjugate/index.js index c2e242876..4a7326283 100644 --- a/src/transforms/conjugate/index.js +++ b/src/transforms/conjugate/index.js @@ -3,31 +3,33 @@ const genericFill = require('./02-generic') //we run this on every verb in the lexicon, so please keep it fast //we assume the input word is a proper infinitive -const conjugate = function(str = '', world) { +const conjugate = function(inf = '', world) { let found = {} // 1. look at irregulars //the lexicon doesn't pass this in if (world && world.irregulars) { - if (world.irregulars.verbs.hasOwnProperty(str) === true) { - found = Object.assign({}, world.irregulars.verbs[str]) + if (world.irregulars.verbs.hasOwnProperty(inf) === true) { + found = Object.assign({}, world.irregulars.verbs[inf]) } } //2. rule-based regex - found = Object.assign({}, checkSuffix(str), found) + found = Object.assign({}, checkSuffix(inf), found) //3. generic transformations //'buzzing' if (found.Gerund === undefined) { - found.Gerund = genericFill.Gerund(str) + found.Gerund = genericFill.Gerund(inf) } //'buzzed' if (found.PastTense === undefined) { - found.PastTense = genericFill.PastTense(str) + found.PastTense = genericFill.PastTense(inf) } //'buzzes' if (found.PresentTense === undefined) { - found.PresentTense = genericFill.PresentTense(str) + found.PresentTense = genericFill.PresentTense(inf) } return found } module.exports = conjugate + +// console.log(conjugate('bake')) diff --git a/src/transforms/conjugate/suffixes.js b/src/transforms/conjugate/suffixes.js index cb0330158..699015f5c 100644 --- a/src/transforms/conjugate/suffixes.js +++ b/src/transforms/conjugate/suffixes.js @@ -66,12 +66,33 @@ const endsWith = { }, }, { - reg: /(ake)$/i, + //shake + reg: /(t|sh?)(ake)$/i, repl: { - pr: '$1s', - pa: 'ook', - gr: 'aking', - ar: '$1r', + pr: '$1$2s', + pa: '$1ook', + gr: '$1aking', + ar: '$1$2r', + }, + }, + { + //awake + reg: /w(ake)$/i, + repl: { + pr: 'w$1s', + pa: 'woke', + gr: 'waking', + ar: 'w$1r', + }, + }, + { + //make + reg: /m(ake)$/i, + repl: { + pr: 'm$1s', + pa: 'made', + gr: 'making', + ar: 'm$1r', }, }, { @@ -80,7 +101,7 @@ const endsWith = { pr: '$1es', pa: '$1ed', gr: '$1ing', - prt: '$1en', + // prt: '$1en', }, }, { diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 3483cafbf..428013694 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -119,6 +119,46 @@ test('pos-basic-tag:', function(t) { // ['i am gutted', ['Noun', 'PastTense', 'Adjective']], ['N.V.,', ['Noun']], + // verb suffixes + ['lied', ['PastTense']], + ['lies', ['PresentTense']], + ['owed', ['PastTense']], + ['owes', ['PresentTense']], + ['aced', ['PastTense']], + ['vied', ['PastTense']], + ['vies', ['PresentTense']], + ['husked', ['PastTense']], + ['husks', ['PresentTense']], + ['masked', ['PastTense']], + ['planned', ['PastTense']], + ['hummed', ['PastTense']], + + ['bakes', ['PresentTense']], + ['fakes', ['PresentTense']], + ['makes', ['PresentTense']], + ['mistakes', ['PresentTense']], + ['overtakes', ['PresentTense']], + ['remakes', ['PresentTense']], + ['retakes', ['PresentTense']], + ['forsakes', ['PresentTense']], + ['shakes', ['PresentTense']], + ['snakes', ['PresentTense']], + ['takes', ['PresentTense']], + ['undertakes', ['PresentTense']], + + ['baked', ['PastTense']], + ['faked', ['PastTense']], + ['maked', ['PastTense']], + ['mistaked', ['PastTense']], + ['overtook', ['PastTense']], + ['remaked', ['PastTense']], + ['retaked', ['PastTense']], + ['forsaked', ['PastTense']], + ['shaked', ['PastTense']], + ['snaked', ['PastTense']], + ['took', ['PastTense']], + ['undertook', ['PastTense']], + //abbreviations [ 'col. Patrick said march and feb. etc.', diff --git a/tests/verbs/toGerund.test.js b/tests/verbs/toGerund.test.js index 710dd5a3e..213dfd3c3 100644 --- a/tests/verbs/toGerund.test.js +++ b/tests/verbs/toGerund.test.js @@ -2,7 +2,7 @@ const test = require('tape') const nlp = require('../_lib') test('verb-to-gerund:', function(t) { - ;[ + let arr = [ ['walk', 'walking'], ['sing', 'singing'], ['win', 'winning'], @@ -11,12 +11,13 @@ test('verb-to-gerund:', function(t) { ['is', 'being'], ['was', 'being'], ['am', 'being'], - ].forEach(function(a) { + ] + arr.forEach(function(a) { const str = nlp(a[0]) .verbs() .toGerund() .out('normal') - t.equal(str, a[1], str + ' -> ' + a[1]) + t.equal(str, a[1], a[0] + ' -> ' + str) }) t.end() }) diff --git a/tests/verbs/toPast.test.js b/tests/verbs/toPast.test.js new file mode 100644 index 000000000..510fd6270 --- /dev/null +++ b/tests/verbs/toPast.test.js @@ -0,0 +1,33 @@ +const test = require('tape') +const nlp = require('../_lib') + +test('ake-suffix toPast:', function(t) { + let arr = [ + //oke + ['awakes', 'awoke'], + //ade + ['makes', 'made'], + ['remakes', 'remade'], + //ook + ['shakes', 'shook'], + ['forsakes', 'forsook'], + + ['takes', 'took'], + ['overtakes', 'overtook'], + ['undertakes', 'undertook'], + ['mistakes', 'mistook'], + ['retakes', 'retook'], + //aked + ['bakes', 'baked'], + ['fakes', 'faked'], + ['snakes', 'snaked'], + ] + arr.forEach(function(a) { + const str = nlp(a[0]) + .verbs() + .toPastTense() + .out('normal') + t.equal(str, a[1], a[0] + ' -> ' + str) + }) + t.end() +}) From f2a024177ad8e6395aa55e33c50fbd175e788d9c Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 13:45:25 -0500 Subject: [PATCH 53/59] cleanup gerund to infinitive regexes --- scratch.js | 23 +++------ src/World/data/conjugations.js | 7 +++ src/transforms/toInfinitive/_transform.js | 62 +++++++++++++++-------- src/transforms/toInfinitive/index.js | 1 + tests/verbs/toInfinitive.test.js | 47 +++++++++++++++++ 5 files changed, 103 insertions(+), 37 deletions(-) create mode 100644 tests/verbs/toInfinitive.test.js diff --git a/scratch.js b/scratch.js index b0a26bb00..d669ee240 100644 --- a/scratch.js +++ b/scratch.js @@ -1,5 +1,5 @@ const nlp = require('./src/index') -nlp.verbose(true) +// nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) @@ -10,19 +10,8 @@ nlp.verbose(true) // nlp('the generative approach and the discriminative approach." ').debug() //#369 -let arr = ['underwhelms', 'coming', 'moving', 'joking', 'poking', 'naming', 'aching', 'tuning', 'hazing'] -arr.forEach(str => { - console.log( - nlp(str) - .debug() - .verbs() - .conjugate()[0] - ) - console.log('') -}) - -// console.log( -// nlp('owed') -// .verbs() -// .conjugate()[0] -// ) +console.log( + nlp('ached') + .verbs() + .conjugate()[0] +) diff --git a/src/World/data/conjugations.js b/src/World/data/conjugations.js index 0be959215..e410bc881 100644 --- a/src/World/data/conjugations.js +++ b/src/World/data/conjugations.js @@ -19,6 +19,9 @@ let conjugations = { act: { a: '_or', }, + ache: { + g: 'aching', + }, age: { g: 'ageing', pst: 'aged', @@ -149,6 +152,7 @@ let conjugations = { come: { prt: '_', pst: 'came', + g: 'coming', }, compete: { a: 'competitor', @@ -396,6 +400,9 @@ let conjugations = { miss: { pres: '_', }, + name: { + g: 'naming', + }, pay: { prt: 'paid', pst: 'paid', diff --git a/src/transforms/toInfinitive/_transform.js b/src/transforms/toInfinitive/_transform.js index 02cfcabf5..d952f42cf 100644 --- a/src/transforms/toInfinitive/_transform.js +++ b/src/transforms/toInfinitive/_transform.js @@ -75,50 +75,72 @@ let rules = { Gerund: [ { - reg: /pping$/i, - to: 'p', + //popping -> pop + reg: /(..)(p|d|t|g){2}ing$/i, + to: '$1$2', }, { - reg: /lling$/i, - to: 'll', + //fuzzing -> fuzz + reg: /(ll|ss|zz)ing$/i, + to: '$1', }, { - reg: /tting$/i, - to: 't', + reg: /([^aeiou])ying$/i, + to: '$1y', }, { - reg: /dding$/i, - to: 'd', + reg: /([^ae]i.)ing$/i, + to: '$1e', }, { - reg: /ssing$/i, - to: 'ss', + //eating, reading + reg: /(ea[dklnrtv])ing$/i, + to: '$1', }, { - reg: /(..)gging$/i, - to: '$1g', + //washing -> wash + reg: /(ch|sh)ing$/i, + to: '$1', }, + //soft-e forms: { - reg: /([^aeiou])ying$/i, - to: '$1y', + //z : hazing (not buzzing) + reg: /(z)ing$/i, + to: '$1e', }, { - reg: /([^ae]i.)ing$/i, + //a : baking, undulating + reg: /(a[gdkvtc])ing$/i, to: '$1e', }, { - reg: /(ea.)ing$/i, - to: '$1', + //u : conjuring, tubing + reg: /(u[rtcbn])ing$/i, + to: '$1e', }, { - reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i, + //o : forboding, poking, hoping, boring (not hooping) + reg: /([^o]o[bdknprv])ing$/i, to: '$1e', }, { - reg: /(ch|sh)ing$/i, - to: '$1', + //ling : tingling, wrinkling, circling, scrambling, bustling + reg: /([tbckg]l)ing$/i, //dp + to: '$1e', + }, + { + //cing : bouncing, denouncing + reg: /(c)ing$/i, //dp + to: '$1e', }, + + // { + // //soft-e : + // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i, + // to: '$1e', + // }, { + //fallback reg: /(..)ing$/i, to: '$1', }, diff --git a/src/transforms/toInfinitive/index.js b/src/transforms/toInfinitive/index.js index a9947c21c..4b93451e8 100644 --- a/src/transforms/toInfinitive/index.js +++ b/src/transforms/toInfinitive/index.js @@ -42,6 +42,7 @@ const toInfinitive = function(str, world, tense) { for (let i = 0; i < rules[tense].length; i++) { const rule = rules[tense][i] if (rule.reg.test(str) === true) { + // console.log(rule.reg) return str.replace(rule.reg, rule.to) } } diff --git a/tests/verbs/toInfinitive.test.js b/tests/verbs/toInfinitive.test.js new file mode 100644 index 000000000..b216c6b31 --- /dev/null +++ b/tests/verbs/toInfinitive.test.js @@ -0,0 +1,47 @@ +const test = require('tape') +const nlp = require('../_lib') + +test('gerund -> infinitive:', function(t) { + let arr = [ + ['coming', 'come'], + ['moving', 'move'], + ['joking', 'joke'], + ['poking', 'poke'], + ['naming', 'name'], + ['aching', 'ache'], + ['tuning', 'tune'], + ['hazing', 'haze'], + ] + arr.forEach(function(a) { + const str = nlp(a[0]) + .verbs() + .toInfinitive() + .out('normal') + t.equal(str, a[1], a[0] + ' -> ' + str) + }) + t.end() +}) + +test('pastTense -> infinitive:', function(t) { + let arr = [ + ['came', 'come'], + ['named', 'name'], + + ['moved', 'move'], + ['joked', 'joke'], + ['poked', 'poke'], + ['hooping', 'hoop'], + + ['ached', 'ache'], + ['tuned', 'tune'], + ['hazed-over', 'haze-over'], + ] + arr.forEach(function(a) { + const str = nlp(a[0]) + .verbs() + .toInfinitive() + .out('normal') + t.equal(str, a[1], a[0] + ' -> ' + str) + }) + t.end() +}) From 796c1e62ea041a3e2b6e9a4cd4465d087952d62d Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 14:03:36 -0500 Subject: [PATCH 54/59] add more phrasals --- changelog.md | 1 + data/verbs/phrasals.js | 7 +++++++ scratch.js | 14 +++++++++----- src/02-tagger/01-init/02-punctuation.js | 5 +++++ src/World/_data.js | 2 +- src/World/data/conjugations.js | 1 + src/transforms/toInfinitive/index.js | 1 - tests/tagger/tagger.test.js | 9 +++++++++ tests/verbs/toInfinitive.test.js | 7 +++++-- 9 files changed, 38 insertions(+), 9 deletions(-) diff --git a/changelog.md b/changelog.md index 319feb3ab..249fbd07f 100644 --- a/changelog.md +++ b/changelog.md @@ -20,6 +20,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - improve support for auxilary-pastTense ('was lifted') verb-phrases - more robust number-tagging regexes - setup typescript types for plugins #661 (thanks @Drache93!) +- verb conjugation bugfixes ##### 12.2.1 diff --git a/data/verbs/phrasals.js b/data/verbs/phrasals.js index 1ba02667b..2e81a7313 100644 --- a/data/verbs/phrasals.js +++ b/data/verbs/phrasals.js @@ -1,5 +1,8 @@ //phrasal verbs are two words that really mean one verb. //'beef up' is one verb, and not some direction of beefing. + +//this seems like an inefficient way to store it, but the trie compresses by prefix + //by @spencermountain, 2015 mit //many credits to http://www.allmyphrasalverbs.com/ module.exports = [ @@ -289,10 +292,14 @@ module.exports = [ 'hang up', 'hanker for', 'have it', + 'haze over', 'head in', 'head off', 'head on', 'head out', + 'head over', + 'head under', + 'heal over', 'hear from', 'hear of', 'heat up', diff --git a/scratch.js b/scratch.js index d669ee240..b9d2d485e 100644 --- a/scratch.js +++ b/scratch.js @@ -9,9 +9,13 @@ const nlp = require('./src/index') // nlp('the second test message').debug() // nlp('the generative approach and the discriminative approach." ').debug() +// nlp('our head').debug() +// nlp('heavy head').debug() +// nlp('heavy-over').debug() + //#369 -console.log( - nlp('ached') - .verbs() - .conjugate()[0] -) +let doc = nlp('haze-over').debug() + +doc.verbs().toInfinitive() + +console.log(doc.text()) diff --git a/src/02-tagger/01-init/02-punctuation.js b/src/02-tagger/01-init/02-punctuation.js index 24beabb28..fa939d283 100644 --- a/src/02-tagger/01-init/02-punctuation.js +++ b/src/02-tagger/01-init/02-punctuation.js @@ -30,6 +30,11 @@ const checkPunctuation = function(terms, i, world) { // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') { // term.tag('Hyphenated', 'has-hyphen', world) // } + // support 'head-over' + // if (term.hasHyphen() === true) { + // console.log(term.tags) + // } + // console.log(term.hasHyphen(), term.text) //an end-tick (trailing apostrophe) - flanders', or Carlos' if (apostrophes.test(term.text)) { diff --git a/src/World/_data.js b/src/World/_data.js index e186b51cd..74be867de 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -37,7 +37,7 @@ module.exports={ "MaleName": "true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on", "Person": "true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er", "Verb": "true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en", - "PhrasalVerb": "true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;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:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld", "Adjective": "true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt", "Comparable": "true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd", diff --git a/src/World/data/conjugations.js b/src/World/data/conjugations.js index e410bc881..9ef1d30e3 100644 --- a/src/World/data/conjugations.js +++ b/src/World/data/conjugations.js @@ -20,6 +20,7 @@ let conjugations = { a: '_or', }, ache: { + pst: 'ached', g: 'aching', }, age: { diff --git a/src/transforms/toInfinitive/index.js b/src/transforms/toInfinitive/index.js index 4b93451e8..a9947c21c 100644 --- a/src/transforms/toInfinitive/index.js +++ b/src/transforms/toInfinitive/index.js @@ -42,7 +42,6 @@ const toInfinitive = function(str, world, tense) { for (let i = 0; i < rules[tense].length; i++) { const rule = rules[tense][i] if (rule.reg.test(str) === true) { - // console.log(rule.reg) return str.replace(rule.reg, rule.to) } } diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 428013694..3ee904b42 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -159,6 +159,15 @@ test('pos-basic-tag:', function(t) { ['took', ['PastTense']], ['undertook', ['PastTense']], + //phrasal verb tense + ['head-over', ['PresentTense', 'Particle']], + ['head-under', ['PresentTense', 'Particle']], + ['haze-over', ['PresentTense', 'Particle']], + ['hazed-over', ['PastTense', 'Particle']], + ['headed-over', ['PastTense', 'Particle']], + ['heading-under', ['Gerund', 'Particle']], + ['healing-over', ['Gerund', 'Particle']], + //abbreviations [ 'col. Patrick said march and feb. etc.', diff --git a/tests/verbs/toInfinitive.test.js b/tests/verbs/toInfinitive.test.js index b216c6b31..ff852302f 100644 --- a/tests/verbs/toInfinitive.test.js +++ b/tests/verbs/toInfinitive.test.js @@ -11,6 +11,8 @@ test('gerund -> infinitive:', function(t) { ['aching', 'ache'], ['tuning', 'tune'], ['hazing', 'haze'], + //phrasal + ['hazing-over', 'haze-over'], ] arr.forEach(function(a) { const str = nlp(a[0]) @@ -34,13 +36,14 @@ test('pastTense -> infinitive:', function(t) { ['ached', 'ache'], ['tuned', 'tune'], + //phrasal ['hazed-over', 'haze-over'], ] arr.forEach(function(a) { - const str = nlp(a[0]) + const doc = nlp(a[0]) .verbs() .toInfinitive() - .out('normal') + let str = doc.out('normal') t.equal(str, a[1], a[0] + ' -> ' + str) }) t.end() From 48ac07e8c5c7950cadb1f2817e6065c196ead080 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 14:11:12 -0500 Subject: [PATCH 55/59] keep hyphen in phrasal verb conjugation --- src/Subset/Verbs/conjugate/index.js | 10 +++++++--- src/Subset/Verbs/methods.js | 3 +-- tests/verbs/toInfinitive.test.js | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Subset/Verbs/conjugate/index.js b/src/Subset/Verbs/conjugate/index.js index f489c0718..5766dc830 100644 --- a/src/Subset/Verbs/conjugate/index.js +++ b/src/Subset/Verbs/conjugate/index.js @@ -9,6 +9,8 @@ const conjugate = function(parsed, world) { return toBe(parsed, world) } + let hasHyphen = parsed.verb.termList(0).hasHyphen() + let infinitive = toInfinitive(parsed, world) if (!infinitive) { return {} @@ -19,15 +21,17 @@ const conjugate = function(parsed, world) { // add particle to phrasal verbs ('fall over') if (parsed.particle.found) { let particle = parsed.particle.text() - Object.keys(forms).forEach(k => (forms[k] += ' ' + particle)) + let space = hasHyphen === true ? '-' : ' ' + Object.keys(forms).forEach(k => (forms[k] += space + particle)) } //put the adverb at the end? if (parsed.adverb.found) { let adverb = parsed.adverb.text() + let space = hasHyphen === true ? '-' : ' ' if (parsed.adverbAfter === true) { - Object.keys(forms).forEach(k => (forms[k] += ' ' + adverb)) + Object.keys(forms).forEach(k => (forms[k] += space + adverb)) } else { - Object.keys(forms).forEach(k => (forms[k] = adverb + ' ' + forms[k])) + Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k])) } } diff --git a/src/Subset/Verbs/methods.js b/src/Subset/Verbs/methods.js index 23ee31490..3859128c0 100644 --- a/src/Subset/Verbs/methods.js +++ b/src/Subset/Verbs/methods.js @@ -2,7 +2,6 @@ const toNegative = require('./toNegative') const parseVerb = require('./parse') const isPlural = require('./isPlural') const conjugate = require('./conjugate') -const toInfinitive = require('./toInfinitive') module.exports = { /** overload the original json with verb information */ @@ -131,7 +130,7 @@ module.exports = { toInfinitive: function() { this.forEach(vb => { let parsed = parseVerb(vb) - let str = toInfinitive(parsed, this.world) + let str = conjugate(parsed, this.world).Infinitive if (str) { vb.replaceWith(str, false) vb.tag('Infinitive') diff --git a/tests/verbs/toInfinitive.test.js b/tests/verbs/toInfinitive.test.js index ff852302f..62ebdba23 100644 --- a/tests/verbs/toInfinitive.test.js +++ b/tests/verbs/toInfinitive.test.js @@ -18,7 +18,7 @@ test('gerund -> infinitive:', function(t) { const str = nlp(a[0]) .verbs() .toInfinitive() - .out('normal') + .out('text') t.equal(str, a[1], a[0] + ' -> ' + str) }) t.end() @@ -43,7 +43,7 @@ test('pastTense -> infinitive:', function(t) { const doc = nlp(a[0]) .verbs() .toInfinitive() - let str = doc.out('normal') + let str = doc.out('text') t.equal(str, a[1], a[0] + ' -> ' + str) }) t.end() From cd67d071c00d40475989d31dbff27a3af45fe560 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 14:24:49 -0500 Subject: [PATCH 56/59] fix for #585 --- data/verbs/infinitives.js | 3 ++- scratch.js | 16 ++-------------- src/02-tagger/01-init/data/suffixMap.js | 2 +- src/02-tagger/04-correction/fixThe.js | 6 ++++-- src/02-tagger/04-correction/fixVerb.js | 5 +++++ src/World/_data.js | 2 +- 6 files changed, 15 insertions(+), 19 deletions(-) diff --git a/data/verbs/infinitives.js b/data/verbs/infinitives.js index dcc13a6f9..97994bff1 100644 --- a/data/verbs/infinitives.js +++ b/data/verbs/infinitives.js @@ -66,6 +66,7 @@ module.exports = [ 'call', 'cancel', 'care', + 'careen', 'carry', 'cater', 'cause', @@ -313,7 +314,7 @@ module.exports = [ 'melt', 'mention', 'merge', - 'message', + // 'message', 'mind', 'mingle', 'minus', diff --git a/scratch.js b/scratch.js index b9d2d485e..9828180ab 100644 --- a/scratch.js +++ b/scratch.js @@ -1,21 +1,9 @@ const nlp = require('./src/index') -// nlp.verbose(true) +nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) // nlp('WE’RE NOT WORTHY!').debug() // #585 -// nlp('the second test message').debug() -// nlp('the generative approach and the discriminative approach." ').debug() - -// nlp('our head').debug() -// nlp('heavy head').debug() -// nlp('heavy-over').debug() - -//#369 -let doc = nlp('haze-over').debug() - -doc.verbs().toInfinitive() - -console.log(doc.text()) +nlp('the test message').debug() diff --git a/src/02-tagger/01-init/data/suffixMap.js b/src/02-tagger/01-init/data/suffixMap.js index a5f7a74af..f2bcdc940 100644 --- a/src/02-tagger/01-init/data/suffixMap.js +++ b/src/02-tagger/01-init/data/suffixMap.js @@ -89,7 +89,7 @@ module.exports = [ tage: Inf, teen: 'Value', tion: Sing, - tive: Actor, + tive: Adj, tors: Noun, vice: Sing, }, diff --git a/src/02-tagger/04-correction/fixThe.js b/src/02-tagger/04-correction/fixThe.js index 00b786170..9fa9a6661 100644 --- a/src/02-tagger/04-correction/fixThe.js +++ b/src/02-tagger/04-correction/fixThe.js @@ -26,7 +26,7 @@ const fixThe = function(doc) { //the test string inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7') //by a bear. - inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf') + inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf') } //the wait to vote @@ -40,7 +40,9 @@ const fixThe = function(doc) { //the western line det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line') //the swim - det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2') + det + .match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]') + .tag('Noun', 'correction-determiner2') } let an = doc.if('(a|an)') diff --git a/src/02-tagger/04-correction/fixVerb.js b/src/02-tagger/04-correction/fixVerb.js index 415c354a1..87b2fad96 100644 --- a/src/02-tagger/04-correction/fixVerb.js +++ b/src/02-tagger/04-correction/fixVerb.js @@ -23,8 +23,13 @@ const fixVerb = function(doc) { vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are') //jack seems guarded vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled') + //'foo-up' + vb.match('#Verb (up|off|over|out)') + .match('@hasHyphen .') + .tag('#PhrasalVerb') //fall over vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle') + //went to sleep // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb'); //been walking diff --git a/src/World/_data.js b/src/World/_data.js index 74be867de..1618e5d92 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -18,7 +18,7 @@ module.exports={ "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6K;1:6Y;2:58;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;a6Ab5Zc51d49e3Tf3Gg3Ah33i2Qj2Ok2Ml2Dm23n20o1Vp1Gques3Hr0Os03tVuQvMwFyE;awn,ield;aHe1Whist6iGoEre63;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aGiEo9;eEsA;!w;l6Ary;nFpEr3se;gra4Lli3Y;dEi9lo5Q;erEo;mi57w1G;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Lu8y;de,in,nsf0p,v5D;r2WuC;ank,reat2M;nd,st;lk,rg1Ns9;aXcUeThRi49kip,lQmPnee3Io4XpOtHuEwitC;bmAck,ff0gge8ppFrEspe5;ge,pri1rou4Uvi4;ly,o33;aJeIoHrFuE;dy,mb6;a4OeEi4;ngth2Css,tC;p,re;m,p;in,ke,r0Oy;la51oil,rink6;e1Wi6o3G;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu7fWgVje5lSmRnt,pOquNsItHvEwa5M;eEiew,o33;al,l,rE;se,t;a42i2u3Z;eHi8oGtE;!o2rE;i5uc1X;l4rt;mb6nt,r4;e8i2;air,eFlEo3YreseD;a7y;at;a3Semb0i3Uo4;aFeEi4y;a1nt;te,x;a54r0G;act1Ver,le5u1;a10ei4k5GoEyc6;gni29nci6rd;ch,li28s5E;i1nE;ge,k;aRerQiPlMoKrGuE;b1Yll,mp,rEsh;cha1s4H;ai1eGiDoE;cEdu7greBhibAmi1te8vi2S;eBlaim;di5pa2ss,veD;iDp,rtr3XsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2ZmAsi8;ck,iDrt4Dss,u1;bHccur,ff0pera9utweGverEwe;co3Ylap,ta1Zu1wE;helm;igh;ser4ta2Y;eFotE;e,i7;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mAnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica9flu0KhLsItGvE;eEol4;nt,st;erErodu7;a5fe2;i8tE;aEru5;ll;abAibA;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloBove1KrGuE;arEeBi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua9xE;a08cJerIi8pEte15;a14eFla12oEreB;rt,se;ct,riE;en7;ci1t;el,han3;abEima9;li1D;ab6couVdFfor7ga3han7j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeBiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor7;aIcFliEmiBpl13tingui0Y;ke;oEuB;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osA;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n7re,te;a08e07h04i9l02oHrE;aFeEoBu0Dy;a9dA;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin7;rt,y;aNin0PrE;a8ibu9ol;iEtitu9;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un7;ow;ck;ar,lFnefAtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waA;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia9uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun7sw0tE;icipa9;ce;lFt0;er;e3ow;ee;rd;aPdGju8mAoP;it;st;!reB;ss;cHhie4knowled3tiva9;te;ge;ve;eGouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", From 60529b52fcc157172e85468e49bd7ed236781f4e Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 14:26:09 -0500 Subject: [PATCH 57/59] 12.3.0 --- builds/compromise.js | 192 +++++++++++++++++++++++++++------------ builds/compromise.js.map | 2 +- builds/compromise.min.js | 2 +- builds/compromise.mjs | 192 +++++++++++++++++++++++++++------------ changelog.md | 2 +- package.json | 6 +- src/_version.js | 2 +- 7 files changed, 279 insertions(+), 119 deletions(-) diff --git a/builds/compromise.js b/builds/compromise.js index 9b1a0c0a1..546bed225 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -3171,7 +3171,7 @@ fromJSON: fromJSON }; - var _version = '12.2.1'; + var _version = '12.3.0'; var _data = { "Comparative": "true¦better", @@ -3180,7 +3180,7 @@ "Value": "true¦a few", "Noun": "true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", - "PastTense": "true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", + "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", "Gerund": "true¦accord0be0develop0go0result0stain0;ing", "Negative": "true¦n0;ever,o0;!n,t", @@ -3193,7 +3193,7 @@ "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", @@ -3212,14 +3212,14 @@ "MaleName": "true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on", "Person": "true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er", "Verb": "true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en", - "PhrasalVerb": "true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;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:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld", "Adjective": "true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt", "Comparable": "true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd", "TextValue": "true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th", "Ordinal": "true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th", "Cardinal": "true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion", - "Expression": "true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;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", + "Expression": "true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la", "Adverb": "true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori", "Preposition": "true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", "Determiner": "true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er" @@ -4071,6 +4071,10 @@ act: { a: '_or' }, + ache: { + pst: 'ached', + g: 'aching' + }, age: { g: 'ageing', pst: 'aged', @@ -4200,7 +4204,8 @@ }, come: { prt: '_', - pst: 'came' + pst: 'came', + g: 'coming' }, compete: { a: 'competitor', @@ -4448,6 +4453,9 @@ miss: { pres: '_' }, + name: { + g: 'naming' + }, pay: { prt: 'paid', pst: 'paid' @@ -4812,20 +4820,39 @@ ar: 'ider' } }, { - reg: /(ake)$/i, + //shake + reg: /(t|sh?)(ake)$/i, repl: { - pr: '$1s', - pa: 'ook', - gr: 'aking', - ar: '$1r' + pr: '$1$2s', + pa: '$1ook', + gr: '$1aking', + ar: '$1$2r' + } + }, { + //awake + reg: /w(ake)$/i, + repl: { + pr: 'w$1s', + pa: 'woke', + gr: 'waking', + ar: 'w$1r' + } + }, { + //make + reg: /m(ake)$/i, + repl: { + pr: 'm$1s', + pa: 'made', + gr: 'making', + ar: 'm$1r' } }, { reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i, repl: { pr: '$1es', pa: '$1ed', - gr: '$1ing', - prt: '$1en' + gr: '$1ing' // prt: '$1en', + } }, { reg: /([bd]l)e$/i, @@ -5068,39 +5095,39 @@ //we assume the input word is a proper infinitive var conjugate = function conjugate() { - var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var inf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var world = arguments.length > 1 ? arguments[1] : undefined; var found = {}; // 1. look at irregulars //the lexicon doesn't pass this in if (world && world.irregulars) { - if (world.irregulars.verbs.hasOwnProperty(str) === true) { - found = Object.assign({}, world.irregulars.verbs[str]); + if (world.irregulars.verbs.hasOwnProperty(inf) === true) { + found = Object.assign({}, world.irregulars.verbs[inf]); } } //2. rule-based regex - found = Object.assign({}, _01Suffixes(str), found); //3. generic transformations + found = Object.assign({}, _01Suffixes(inf), found); //3. generic transformations //'buzzing' if (found.Gerund === undefined) { - found.Gerund = _02Generic.Gerund(str); + found.Gerund = _02Generic.Gerund(inf); } //'buzzed' if (found.PastTense === undefined) { - found.PastTense = _02Generic.PastTense(str); + found.PastTense = _02Generic.PastTense(inf); } //'buzzes' if (found.PresentTense === undefined) { - found.PresentTense = _02Generic.PresentTense(str); + found.PresentTense = _02Generic.PresentTense(inf); } return found; }; - var conjugate_1 = conjugate; + var conjugate_1 = conjugate; // console.log(conjugate('bake')) //turn 'quick' into 'quickest' var do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]; @@ -5415,23 +5442,13 @@ to: '' }], Gerund: [{ - reg: /pping$/i, - to: 'p' - }, { - reg: /lling$/i, - to: 'll' - }, { - reg: /tting$/i, - to: 't' - }, { - reg: /dding$/i, - to: 'd' - }, { - reg: /ssing$/i, - to: 'ss' + //popping -> pop + reg: /(..)(p|d|t|g){2}ing$/i, + to: '$1$2' }, { - reg: /(..)gging$/i, - to: '$1g' + //fuzzing -> fuzz + reg: /(ll|ss|zz)ing$/i, + to: '$1' }, { reg: /([^aeiou])ying$/i, to: '$1y' @@ -5439,15 +5456,47 @@ reg: /([^ae]i.)ing$/i, to: '$1e' }, { - reg: /(ea.)ing$/i, + //eating, reading + reg: /(ea[dklnrtv])ing$/i, to: '$1' }, { - reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i, - to: '$1e' - }, { + //washing -> wash reg: /(ch|sh)ing$/i, to: '$1' + }, //soft-e forms: + { + //z : hazing (not buzzing) + reg: /(z)ing$/i, + to: '$1e' + }, { + //a : baking, undulating + reg: /(a[gdkvtc])ing$/i, + to: '$1e' + }, { + //u : conjuring, tubing + reg: /(u[rtcbn])ing$/i, + to: '$1e' }, { + //o : forboding, poking, hoping, boring (not hooping) + reg: /([^o]o[bdknprv])ing$/i, + to: '$1e' + }, { + //ling : tingling, wrinkling, circling, scrambling, bustling + reg: /([tbckg]l)ing$/i, + //dp + to: '$1e' + }, { + //cing : bouncing, denouncing + reg: /(c)ing$/i, + //dp + to: '$1e' + }, // { + // //soft-e : + // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i, + // to: '$1e', + // }, + { + //fallback reg: /(..)ing$/i, to: '$1' }], @@ -5520,6 +5569,10 @@ }, { reg: /(.a[^aeiou])ed$/i, to: '$1' + }, { + //owed, aced + reg: /([aeiou][^aeiou])ed$/i, + to: '$1e' }, { reg: /([rl])ew$/i, to: '$1ow' @@ -8250,7 +8303,9 @@ var _simple = methods$5; + var underOver = /^(under|over)-?/; /** match a word-sequence, like 'super bowl' in the lexicon */ + var tryMultiple = function tryMultiple(terms, t, world) { var lex = world.words; //try a two-word version @@ -8313,11 +8368,22 @@ if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) { terms[t].tag(lex[str], 'lexicon', world); + continue; } // look at reduced version of term, too if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) { terms[t].tag(lex[terms[t].reduced], 'lexicon', world); + continue; + } // prefix strip: try to match 'take' for 'undertake' + + + if (underOver.test(str) === true) { + var noPrefix = str.replace(underOver, ''); + + if (lex.hasOwnProperty(noPrefix) === true) { + terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world); + } } } @@ -8339,7 +8405,7 @@ if (term.tags.Acronym) { return true; } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false + // return false // } // 'PIZZA' is not an acronym. @@ -8357,6 +8423,11 @@ // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') { // term.tag('Hyphenated', 'has-hyphen', world) // } + // support 'head-over' + // if (term.hasHyphen() === true) { + // console.log(term.tags) + // } + // console.log(term.hasHyphen(), term.text) //an end-tick (trailing apostrophe) - flanders', or Carlos' if (apostrophes.test(term.text)) { @@ -8408,7 +8479,8 @@ [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes //slang things [/^(lol)+[sz]$/, 'Expression'], //lol - [/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 + [/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], // [/^(over|under)[a-z]{2,}/, 'Adjective'], + [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 //phone numbers [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 @@ -8445,7 +8517,7 @@ for (var r = 0; r < startsWith.length; r += 1) { if (startsWith[r][0].test(str) === true) { - term.tagSafe(startsWith[r][1], 'regex #' + r, world); + term.tagSafe(startsWith[r][1], 'prefix #' + r, world); break; } } // do some more! @@ -8482,7 +8554,7 @@ c: [[/.[^aeiou]ic$/, Adj]], d: [//==-ed== //double-consonant - [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped + [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned //double-vowel [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered //-hed @@ -8495,11 +8567,11 @@ [/.[aoui]f?led$/, Past], //impaled, stifled //-sed [/.[iao]sed$/, Past], //franchised - [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + [/[aeiou]n?[cs]ed$/, Past], //laced, lanced //-med [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed //-ked - [/[aeiou]n?c?ked$/, Past], //hooked + [/[aeiou][ns]?c?ked$/, Past], //hooked, masked //-ged [/[aeiou][nl]?ged$/, Past], //engaged //-ted @@ -8529,7 +8601,9 @@ ], r: [[/.[bdfklmst]ler$/, 'Noun'], [/.[ilk]er$/, 'Comparative'], [/[aeiou][pns]er$/, Sing], [/[^i]fer$/, Inf], [/.[^aeiou][ao]pher$/, Actor]], t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]], - s: [[/.[rln]ates$/, Pres], [/.[^z]ens$/, Verb], [/.[lstrn]us$/, Sing], [/[aeiou][^aeiou]is$/, Sing], [/[a-z]\'s$/, Noun], [/^yes+$/, Exp] //yessss + s: [[/.[rln]ates$/, Pres], [/.[^z]ens$/, Verb], [/.[lstrn]us$/, Sing], [/.[aeiou]sks$/, Pres], //masks + [/.[aeiou]kes$/, Pres], //bakes + [/[aeiou][^aeiou]is$/, Sing], [/[a-z]\'s$/, Noun], [/^yes+$/, Exp] //yessss ], v: [[/.[^aeiou][ai][kln]ov$/, Last] //east-europe ], @@ -8628,7 +8702,7 @@ tage: Inf$1, teen: 'Value', tion: Sing$1, - tive: Actor$1, + tive: Adj$1, tors: Noun$1, vice: Sing$1 }, { @@ -9743,7 +9817,7 @@ inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7'); //by a bear. - inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf'); + inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf'); } //the wait to vote @@ -9757,7 +9831,7 @@ det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line'); //the swim - det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2'); + det.match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2'); } var an = doc["if"]('(a|an)'); @@ -10051,7 +10125,9 @@ vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are'); //jack seems guarded - vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled'); //fall over + vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled'); //'foo-up' + + vb.match('#Verb (up|off|over|out)').match('@hasHyphen .').tag('#PhrasalVerb'); //fall over vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle'); //went to sleep // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb'); @@ -11649,6 +11725,7 @@ return toBe_1(parsed); } + var hasHyphen = parsed.verb.termList(0).hasHyphen(); var infinitive = toInfinitive_1$1(parsed, world); if (!infinitive) { @@ -11660,8 +11737,9 @@ if (parsed.particle.found) { var particle = parsed.particle.text(); + var space = hasHyphen === true ? '-' : ' '; Object.keys(forms).forEach(function (k) { - return forms[k] += ' ' + particle; + return forms[k] += space + particle; }); } //put the adverb at the end? @@ -11669,13 +11747,15 @@ if (parsed.adverb.found) { var adverb = parsed.adverb.text(); + var _space = hasHyphen === true ? '-' : ' '; + if (parsed.adverbAfter === true) { Object.keys(forms).forEach(function (k) { - return forms[k] += ' ' + adverb; + return forms[k] += _space + adverb; }); } else { Object.keys(forms).forEach(function (k) { - return forms[k] = adverb + ' ' + forms[k]; + return forms[k] = adverb + _space + forms[k]; }); } } //apply negative @@ -11881,7 +11961,7 @@ this.forEach(function (vb) { var parsed = parse$2(vb); - var str = toInfinitive_1$1(parsed, _this8.world); + var str = conjugate_1$1(parsed, _this8.world).Infinitive; if (str) { vb.replaceWith(str, false); diff --git a/builds/compromise.js.map b/builds/compromise.js.map index 04e3cf1d1..0ae4a95ce 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.2.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n reg: /(ake)$/i,\n repl: {\n pr: '$1s',\n pa: 'ook',\n gr: 'aking',\n ar: '$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(str = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(str) === true) {\n found = Object.assign({}, world.irregulars.verbs[str])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(str), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(str)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(str)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(str)\n }\n return found\n}\nmodule.exports = conjugate\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n reg: /pping$/i,\n to: 'p',\n },\n {\n reg: /lling$/i,\n to: 'll',\n },\n {\n reg: /tting$/i,\n to: 't',\n },\n {\n reg: /dding$/i,\n to: 'd',\n },\n {\n reg: /ssing$/i,\n to: 'ss',\n },\n {\n reg: /(..)gging$/i,\n to: '$1g',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ea.)ing$/i,\n to: '$1',\n },\n {\n reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i,\n to: '$1e',\n },\n {\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n {\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'regex #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou]n?c?ked$/, Past], //hooked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Actor,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n Object.keys(forms).forEach(k => (forms[k] += ' ' + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += ' ' + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + ' ' + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\nconst toInfinitive = require('./toInfinitive')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = toInfinitive(parsed, this.world)\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","tryMultiple","checkLexicon","foundWords","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.3.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det\n .match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]')\n .tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //'foo-up'\n vb.match('#Verb (up|off|over|out)')\n .match('@hasHyphen .')\n .tag('#PhrasalVerb')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index 65a2eee3c..abd919c2d 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},B,D,T,H,L);function W(){return"undefined"!=typeof window&&window.document}var _=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=E(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=De(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},Ne=function(e,t){var n={};xe(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},je={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=xe(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return xe(this,e,!0).length>0},not:function(e){var t=this,n=Ne(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,je),Object.assign(Oe.prototype,ge);var Te={term:"terms"};Object.keys(Te).forEach((function(e){return Oe.prototype[e]=Oe.prototype[Te[e]]}));var Ve=Oe,ze=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();ze.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new ze(t)};for(var He=ze,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,We=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,_e=/^\s+/,qe=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===We.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new He;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Ve(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new He;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Ve(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===zt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},Wt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],_t=[/ary$/],qt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Xt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Zt={toSuperlative:function(e){if(qt.hasOwnProperty(e))return qt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=C((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Fn=C((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Bn=(Cn.json,Cn.data,C((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=Nn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Tn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Vn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Tn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}void 0!==n[i]&&!0===n.hasOwnProperty(i)&&e[a].tag(n[i],"lexicon",t),i!==e[a].reduced&&!0===n.hasOwnProperty(e[a].reduced)&&e[a].tag(n[e[a].reduced],"lexicon",t)}return e},nr=/[\'‘’‛‵′`´]$/,rr=/^[A-Z]('s|,)?$/,ar={I:!0,A:!0},ir=function(e,t,n){var r=e[t];if(nr.test(r.text)&&!nr.test(r.pre)&&!nr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ar.hasOwnProperty(r.text)&&rr.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},or=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^(over|under)[a-z]{2,}/,"Adjective"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],sr=/^[IVXLCDM]{2,}$/,ur=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,lr="Adjective",cr="Infinitive",hr="Singular",dr="PastTense",fr="Expression",mr="LastName",pr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,mr],[/.[^aeiou]ica$/,hr],[/^([hyj]a)+$/,fr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/,dr],[/.[aeo]{2}[bdgmnprvz]ed$/,dr],[/.[aeiou][sg]hed$/,dr],[/.[aeiou]red$/,dr],[/.[aeiou]r?ried$/,dr],[/.[bcdgtr]led$/,dr],[/.[aoui]f?led$/,dr],[/.[iao]sed$/,dr],[/.[aeiou]n?[cs]ed$/,dr],[/[aeiou][rl]?[mnf]ed$/,dr],[/[aeiou]n?c?ked$/,dr],[/[aeiou][nl]?ged$/,dr],[/.[tdbwxz]ed$/,dr],[/[^aeiou][aeiou][tvx]ed$/,dr],[/.[cdlmnprstv]ied$/,dr],[/[^aeiou]ard$/,hr],[/[aeiou][^aeiou]id$/,lr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,mr],[/^ug?h+$/,fr],[/^uh[ -]?oh$/,fr]],i:[[/.[oau][wvl]ski$/,mr]],k:[[/^(k)+$/,fr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,hr],[/[^aeiou]ism$/,hr],[/^h*u*m+$/,fr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,fr],[/^(yo)+$/,fr],[/^woo+[pt]?$/,fr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,hr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,"PresentTense"],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,hr],[/[aeiou][^aeiou]is$/,hr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,fr]],v:[[/.[^aeiou][ai][kln]ov$/,mr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,hr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,hr]]},gr="Adjective",vr="Infinitive",br="PresentTense",yr="Singular",wr="PastTense",kr="Adverb",Ar="Plural",$r="Verb",Pr="LastName",Fr=[null,null,{ea:yr,ia:"Noun",ic:gr,ly:kr,"'n":$r,"'t":$r},{oed:wr,ued:wr,xed:wr," so":kr,"'ll":"Modal","'re":"Copula",azy:gr,end:$r,ped:wr,ffy:gr,ify:vr,ing:"Gerund",ize:vr,lar:gr,mum:gr,nes:br,nny:gr,oid:gr,ous:gr,que:gr,rmy:gr,rol:yr,sis:yr,zes:br},{amed:wr,aped:wr,ched:wr,lked:wr,nded:wr,cted:wr,dged:wr,akis:Pr,cede:vr,chuk:Pr,czyk:Pr,ects:br,ends:$r,enko:Pr,ette:yr,fies:br,fore:kr,gate:vr,gone:gr,ices:Ar,ints:Ar,ions:Ar,less:kr,llen:gr,made:gr,nsen:Pr,oses:br,ould:"Modal",some:gr,sson:Pr,tage:vr,teen:"Value",tion:yr,tive:"Actor",tors:"Noun",vice:yr},{tized:wr,urned:wr,eased:wr,ances:Ar,bound:gr,ettes:Ar,fully:kr,ishes:br,ities:Ar,marek:Pr,nssen:Pr,ology:"Noun",ports:Ar,rough:gr,tches:br,tieth:"Ordinal",tures:Ar,wards:kr,where:kr},{auskas:Pr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Pr,sdottir:Pr}],Gr={":(":!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&&sr.test(n)&&ur.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Fr[i.length].hasOwnProperty(i)){var o=Fr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===pr.hasOwnProperty(r))for(var a=pr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Er)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Gr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Br=function(e,t){var n=e.world;Cr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Mr={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]},Sr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Lr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Jr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Sr.find((function(t){return e.tags[t]})))return;if(Mr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Mr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Lr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(Jr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},_r=["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}),{}),qr=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()))},Kr={neighbours:jr,case:Vr,stem:Ir,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ha=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return ja(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();pi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new pi(e,this,this.world)},pi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(pi.prototype,mi.misc),Object.assign(pi.prototype,mi.selections),fi(pi);var gi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(gi).forEach((function(e){return pi.prototype[e]=pi.prototype[gi[e]]}));var vi=pi,bi=new pn,yi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r.tagger(),r};return yi.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&bi.addWords(t);var n=rt(e,bi),r=new vi(n,null,bi);return r},yi.extend=function(e){return e(vi,bi),this},yi.clone=function(){return bi=bi.clone(),this},yi.load=function(e){var t=at(e,bi);return new vi(t,null,bi)},yi.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return bi.verbose(e),this},yi.version="12.2.1",yi.import=yi.load,yi})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},D,x,H,z,L);function _(){return"undefined"!=typeof window&&window.document}var q=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=C(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=C(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=xe(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},je=function(e,t){var n={};Ne(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ee={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Ne(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return Ne(this,e,!0).length>0},not:function(e){var t=this,n=je(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,Ee),Object.assign(Oe.prototype,ge);var He={term:"terms"};Object.keys(He).forEach((function(e){return Oe.prototype[e]=Oe.prototype[He[e]]}));var Te=Oe,Ve=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Ve.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new Ve(t)};for(var ze=Ve,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,_e=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,qe=/^\s+/,We=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===_e.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new ze;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Te(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new ze;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Te(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Vt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},_t=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],qt=[/ary$/],Wt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Zt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Xt={toSuperlative:function(e){if(Wt.hasOwnProperty(e))return Wt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=B((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Pn=B((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Dn=(Bn.json,Bn.data,B((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=jn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Hn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Tn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Hn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}if(void 0===n[i]||!0!==n.hasOwnProperty(i))if(i===e[a].reduced||!0!==n.hasOwnProperty(e[a].reduced)){if(!0===er.test(i)){var s=i.replace(er,"");!0===n.hasOwnProperty(s)&&e[a].tag(n[s],"noprefix-lexicon",t)}}else e[a].tag(n[e[a].reduced],"lexicon",t);else e[a].tag(n[i],"lexicon",t)}return e},rr=/[\'‘’‛‵′`´]$/,ar=/^[A-Z]('s|,)?$/,ir={I:!0,A:!0},or=function(e,t,n){var r=e[t];if(rr.test(r.text)&&!rr.test(r.pre)&&!rr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ir.hasOwnProperty(r.text)&&ar.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},sr=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],ur=/^[IVXLCDM]{2,}$/,lr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cr="Adjective",hr="Infinitive",dr="PresentTense",fr="Singular",mr="PastTense",pr="Expression",gr="LastName",vr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,gr],[/.[^aeiou]ica$/,fr],[/^([hyj]a)+$/,pr]],c:[[/.[^aeiou]ic$/,cr]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,mr],[/.[aeo]{2}[bdgmnprvz]ed$/,mr],[/.[aeiou][sg]hed$/,mr],[/.[aeiou]red$/,mr],[/.[aeiou]r?ried$/,mr],[/.[bcdgtr]led$/,mr],[/.[aoui]f?led$/,mr],[/.[iao]sed$/,mr],[/[aeiou]n?[cs]ed$/,mr],[/[aeiou][rl]?[mnf]ed$/,mr],[/[aeiou][ns]?c?ked$/,mr],[/[aeiou][nl]?ged$/,mr],[/.[tdbwxz]ed$/,mr],[/[^aeiou][aeiou][tvx]ed$/,mr],[/.[cdlmnprstv]ied$/,mr],[/[^aeiou]ard$/,fr],[/[aeiou][^aeiou]id$/,cr],[/.[vrl]id$/,cr]],e:[[/.[lnr]ize$/,hr],[/.[^aeiou]ise$/,hr],[/.[aeiou]te$/,hr],[/.[^aeiou][ai]ble$/,cr],[/.[^aeiou]eable$/,cr],[/.[ts]ive$/,cr]],h:[[/.[^aeiouf]ish$/,cr],[/.v[iy]ch$/,gr],[/^ug?h+$/,pr],[/^uh[ -]?oh$/,pr]],i:[[/.[oau][wvl]ski$/,gr]],k:[[/^(k)+$/,pr]],l:[[/.[gl]ial$/,cr],[/.[^aeiou]ful$/,cr],[/.[nrtumcd]al$/,cr],[/.[^aeiou][ei]al$/,cr]],m:[[/.[^aeiou]ium$/,fr],[/[^aeiou]ism$/,fr],[/^h*u*m+$/,pr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,cr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,pr],[/^(yo)+$/,pr],[/^woo+[pt]?$/,pr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,fr],[/[^i]fer$/,hr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,cr],[/[aeiou].*ist$/,cr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,dr],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,fr],[/.[aeiou]sks$/,dr],[/.[aeiou]kes$/,dr],[/[aeiou][^aeiou]is$/,fr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,pr]],v:[[/.[^aeiou][ai][kln]ov$/,gr]],y:[[/.[cts]hy$/,cr],[/.[st]ty$/,cr],[/.[gk]y$/,cr],[/.[tnl]ary$/,cr],[/.[oe]ry$/,fr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,cr],[/.(gg|bb|zz)ly$/,cr],[/.[aeiou]my$/,cr],[/[ea]{2}zy$/,cr],[/.[^aeiou]ity$/,fr]]},br="Adjective",yr="Infinitive",wr="PresentTense",kr="Singular",Ar="PastTense",$r="Adverb",Gr="Plural",Pr="Verb",Fr="LastName",Cr=[null,null,{ea:kr,ia:"Noun",ic:br,ly:$r,"'n":Pr,"'t":Pr},{oed:Ar,ued:Ar,xed:Ar," so":$r,"'ll":"Modal","'re":"Copula",azy:br,end:Pr,ped:Ar,ffy:br,ify:yr,ing:"Gerund",ize:yr,lar:br,mum:br,nes:wr,nny:br,oid:br,ous:br,que:br,rmy:br,rol:kr,sis:kr,zes:wr},{amed:Ar,aped:Ar,ched:Ar,lked:Ar,nded:Ar,cted:Ar,dged:Ar,akis:Fr,cede:yr,chuk:Fr,czyk:Fr,ects:wr,ends:Pr,enko:Fr,ette:kr,fies:wr,fore:$r,gate:yr,gone:br,ices:Gr,ints:Gr,ions:Gr,less:$r,llen:br,made:br,nsen:Fr,oses:wr,ould:"Modal",some:br,sson:Fr,tage:yr,teen:"Value",tion:kr,tive:br,tors:"Noun",vice:kr},{tized:Ar,urned:Ar,eased:Ar,ances:Gr,bound:br,ettes:Gr,fully:$r,ishes:wr,ities:Gr,marek:Fr,nssen:Fr,ology:"Noun",ports:Gr,rough:br,tches:wr,tieth:"Ordinal",tures:Gr,wards:$r,where:$r},{auskas:Fr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Fr,sdottir:Fr}],Br={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"=2&&ur.test(n)&&lr.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Cr[i.length].hasOwnProperty(i)){var o=Cr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===vr.hasOwnProperty(r))for(var a=vr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Dr)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Br.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Nr=function(e,t){var n=e.world;xr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Lr={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Jr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],_r=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],qr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Jr.find((function(t){return e.tags[t]})))return;if(Lr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Lr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(_r.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(qr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},Kr=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Rr=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Qr={neighbours:Hr,case:zr,stem:Sr,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ma=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Ha(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();vi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new vi(e,this,this.world)},vi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(vi.prototype,gi.misc),Object.assign(vi.prototype,gi.selections),pi(vi);var bi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(bi).forEach((function(e){return vi.prototype[e]=vi.prototype[bi[e]]}));var yi=vi,wi=new pn,ki=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&wi.addWords(t);var n=rt(e,wi),r=new yi(n,null,wi);return r.tagger(),r};return ki.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&wi.addWords(t);var n=rt(e,wi),r=new yi(n,null,wi);return r},ki.extend=function(e){return e(yi,wi),this},ki.clone=function(){return wi=wi.clone(),this},ki.load=function(e){var t=at(e,wi);return new yi(t,null,wi)},ki.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return wi.verbose(e),this},ki.version="12.3.0",ki.import=ki.load,ki})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index 9dcee4510..54cc807d7 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -3165,7 +3165,7 @@ var _01Tokenizer = { fromJSON: fromJSON }; -var _version = '12.2.1'; +var _version = '12.3.0'; var _data = { "Comparative": "true¦better", @@ -3174,7 +3174,7 @@ var _data = { "Value": "true¦a few", "Noun": "true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", - "PastTense": "true¦be3came,d2had,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", + "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", "Gerund": "true¦accord0be0develop0go0result0stain0;ing", "Negative": "true¦n0;ever,o0;!n,t", @@ -3187,7 +3187,7 @@ var _data = { "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6H;1:6V;2:55;3:6S;4:6T;5:5W;6:64;7:6R;8:6N;9:6F;A:6P;B:6M;C:6A;D:6W;a67b5Wc4Yd46e3Qf3Dg37h30i2Nj2Lk2Jl2Am20n1Xo1Tp1Eques3Er0Ms01tTuPvMwFyE;awn,ield;aHe1Thist6iGoEre60;nd0rE;k,ry;pe,sh,th0;lk,nFrEsh,tCve;n,raD;d0t;aFiEo7;ew,sB;l68ry;nFpEr3se;gra4Jli3W;dEi7lo5O;er47o;aKeJhIoHrFuEwi8;ne,rn;aEe0Ki5Ku8y;de,in,nsf0p,v5C;r2VuC;ank,reat2L;nd,st;lk,rg1Ms7;aXcUeThRi48kip,lQmPnee3Ho4WpOtHuEwitC;bmBck,ff0gge8ppFrEspe5;ge,pri1rou4Tvi4;ly,o32;aJeIoHrFuE;dy,mb6;a4NeEi4;ngth2Bss,tC;p,re;m,p;in,ke,r0Oy;la50oil,rink6;e1Vi6o3F;am,ip;a2iv0oE;ck,ut;arCem,le5n1r4tt6;aFo2rE;atCew;le,re;il,ve;a03eGisk,oFuE;in,le,sh;am,ll;aZcXdu9fWgVje5lSmRnt,pOquNsItHvEwa5L;eEiew,o32;al,l,rE;se,t;a41i2u3Y;eHi8oGtE;!o2rE;i5uc1W;l4rt;mb6nt,r4;e8i2;air,eFlEo3XreseD;a9y;at;a3Remb0i3To4;aFeEi4y;a1nt;te,x;a53r0F;act1Uer,le5u1;a0Zei4k5FoEyc6;gni28nci6rd;ch,li27s5D;i1nE;ge,k;aRerQiPlMoKrGuE;b1Xll,mp,rEsh;cha1s4G;ai1eGiDoE;cEdu9greAhibBmi1te8vi2R;eAlaim;di5pa2ss,veD;iDp,rtr3WsEur;e,t;aFuE;g,n3;n,y;ck,le;fo2YmBsi8;ck,iDrt4Css,u1;bGccur,ff0pera7utweFverEwe;co3Xlap,ta1Yu1whelm;igh;ser4ta2Y;eFotE;e,i9;ed,gle5;aJeIiGoFuE;ltip3Ard0;nit10ve;nErr0Z;d,g6us;asu2lt,n0Mr3ssa3;inta2Ona3rFtE;ch,t0;ch,kEry;et;aKeJiGoEu1A;aEck,ok,ve;d,n;ft,ke,mBnFstEve;!en;e,k;a2Bc0Ct;b0Lck,uE;gh,nC;iEno2W;ck,ll,ss;am,o29uE;d3mp;gno2mOnEss39;cMdica7flu0KhLsItGvE;eEol4;nt,st;erErodu9;a5fe2;i8tE;aEru5;ll;abBibB;lu1Cr1A;agi20pE;lemeDo1Yro4;aIeGi2oFuE;nt,rry;n00pe,st;aElp;d,t;nd6ppErm,te;en;aIloAove1KrGuE;arEeAi11;ant30d;aEip,umb6;b,sp;in,th0ze;aOeaNiLlJoGracFuncE;ti3A;tu2;cus,lFrE;ce,eca8m,s2S;d,l1W;a1ToE;at,od,w;gu2lEni1Rx;e,l;r,tu2;il,vE;or;a11cho,le5mQnNstLvalua7xE;a08cJerIi8pEte15;a14eFla12oEreA;rt,se;ct,riE;en9;ci1t;el,han3;abEima7;li1D;ab6couVdFfor9ga3han9j01riCsu2t0vE;isi2Ny;!u2;body,er3pE;hasiEow0;ze;a04eSiJoIrFuE;mp;aFeAiE;ft;g,in;d3ubt;ff0p,re5sFvE;iWor9;aIcFliEmiApl13tingui0Y;ke;oEuA;uEv0;ra3;gr1QppE;ear,ro4;cLem,fJliv0ma0Bny,pIsFterE;mi0C;cribe,er4iFtrE;oy;gn,re;a07e06i5osB;eEi07y;at,ct;iGlFrE;ea1;a2i03;de;ma3n9re,te;a08e07h04i7l02oHrE;aFeEoAu0Dy;a7dB;ck,ve;llXmQnFok,py,uEv0;gh,nt;ceNdu5fKsItGvE;eEin9;rt,y;aNin0PrE;a8ibu7ol;iEtitu7;d0st;iFoEroD;rm;gu2rm;rn;biJfoImaHpE;a2laE;in;re;nd;rt;ne;ap1e5;aEip,o1;im,w;aFeE;at,ck,w;llen3n3r3se;a1nt0;ll,ncFrEt0u1;e,ry;el;aNeKloJoHruGuE;lEry;ly;sh;a8mb,o8rrEth0un9;ow;ck;ar,lFnefBtrE;ay;ie4ong;ng,se;band0Hc09d04ffo03gr02id,lZmu1nWppRrOsIttEvoid,waB;acGeFra5;ct;m0Dnd;h,k;k,sE;eGiFocia7uE;me;gn,st;mb6rt;le;chFgEri4;ue;!i4;eaHlGroE;aCve;ch;aud,y;l,r;noun9sw0tE;icipa7;ce;lFt0;er;e3ow;ee;rd;aPdGju8mBoP;it;st;!reA;ss;cHhie4knowled3tiva7;te;ge;ve;eGouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", @@ -3206,14 +3206,14 @@ var _data = { "MaleName": "true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on", "Person": "true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er", "Verb": "true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en", - "PhrasalVerb": "true¦0:71;1:6P;2:7D;3:73;4:6I;5:7G;6:75;7:6O;8:6B;9:6C;A:5H;B:70;C:6Z;a7Gb62c5Cd59e57f45g3Nh37iron0j33k2Yl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit52;d 1k2Q;mp0n49pe0r8s8;eel Bip 7K;aEiD;gh 06rd0;n Br 3C;it 5Jk8lk6rm 0Qsh 73t66v4O;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Fup;ade YiDot0y 32;ckle67p 79;ne66p Ds4C;d2o6Kup;ck FdEe Dgh5Sme0p o0Dre0;aw3ba4d2in,up;e5Jy 1;by,o6U;ink Drow 5U;ba4ov7up;aDe 4Hll4N;m 1r W;ckCke Elk D;ov7u4N;aDba4d2in,o30up;ba4ft7p4Sw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6O; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1LiD;ke 5Xn2X;p Drm1O;by,in,o6A;n2Yr 1tc3H;c2Xmp0nd Dr6Gve6y 1;ba4d2up;d2o66up;ar2Uell0ill4TlErDurC;ingCuc8;a32it 3T;be4Brt0;ap 4Dow B;ash 4Yoke0;eep EiDow 9;c3Mp 1;in,oD;ff,v7;gn Eng2Yt Dz8;d2o5up;in,o5up;aFoDu4E;ot Dut0w 5W;aw3ba4f36o5Q;c2EdeAk4Rve6;e Hll0nd GtD; Dtl42;d2in,o5upD;!on;aw3ba4d2in,o1Xup;o5to;al4Kout0rap4K;il6v8;at0eKiJoGuD;b 4Dle0n Dstl8;aDba4d2in52o3Ft2Zu3D;c1Ww3;ot EuD;g2Jnd6;a1Wf2Qo5;ng 4Np6;aDel6inAnt0;c4Xd D;o2Su0C;aQePiOlMoKrHsyc29uD;ll Ft D;aDba4d2in,o1Gt33up;p38w3;ap37d2in,o5t31up;attleCess EiGoD;p 1;ah1Gon;iDp 52re3Lur44wer 52;nt0;ay3YuD;gAmp 9;ck 52g0leCn 9p3V;el 46ncilA;c3Oir 2Hn0ss FtEy D;ba4o4Q; d2c1X;aw3ba4o11;pDw3J;e3It B;arrow3Serd0oD;d6te3R;aJeHiGoEuD;ddl8ll36;c16p 1uth6ve D;al3Ad2in,o5up;ss0x 1;asur8lt 9ss D;a19up;ke Dn 9r2Zs1Kx0;do,o3Xup;aOeMiHoDuck0;a16c36g 0AoDse0;k Dse34;aft7ba4d2forw2Ain3Vov7uD;nd7p;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 Fr Dt 1;fDof;rom;in,oO;cZm 1nDve it;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:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld", "Adjective": "true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt", "Comparable": "true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd", "TextValue": "true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th", "Ordinal": "true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th", "Cardinal": "true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion", - "Expression": "true¦a02b01dXeVfuck,gShLlImHnGoDpBshAu7voi04w3y0;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", + "Expression": "true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la", "Adverb": "true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori", "Preposition": "true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", "Determiner": "true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er" @@ -4065,6 +4065,10 @@ var conjugations = { act: { a: '_or' }, + ache: { + pst: 'ached', + g: 'aching' + }, age: { g: 'ageing', pst: 'aged', @@ -4194,7 +4198,8 @@ var conjugations = { }, come: { prt: '_', - pst: 'came' + pst: 'came', + g: 'coming' }, compete: { a: 'competitor', @@ -4442,6 +4447,9 @@ var conjugations = { miss: { pres: '_' }, + name: { + g: 'naming' + }, pay: { prt: 'paid', pst: 'paid' @@ -4806,20 +4814,39 @@ var endsWith = { ar: 'ider' } }, { - reg: /(ake)$/i, + //shake + reg: /(t|sh?)(ake)$/i, repl: { - pr: '$1s', - pa: 'ook', - gr: 'aking', - ar: '$1r' + pr: '$1$2s', + pa: '$1ook', + gr: '$1aking', + ar: '$1$2r' + } + }, { + //awake + reg: /w(ake)$/i, + repl: { + pr: 'w$1s', + pa: 'woke', + gr: 'waking', + ar: 'w$1r' + } + }, { + //make + reg: /m(ake)$/i, + repl: { + pr: 'm$1s', + pa: 'made', + gr: 'making', + ar: 'm$1r' } }, { reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i, repl: { pr: '$1es', pa: '$1ed', - gr: '$1ing', - prt: '$1en' + gr: '$1ing' // prt: '$1en', + } }, { reg: /([bd]l)e$/i, @@ -5062,39 +5089,39 @@ var _02Generic = generic; //we assume the input word is a proper infinitive var conjugate = function conjugate() { - var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var inf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var world = arguments.length > 1 ? arguments[1] : undefined; var found = {}; // 1. look at irregulars //the lexicon doesn't pass this in if (world && world.irregulars) { - if (world.irregulars.verbs.hasOwnProperty(str) === true) { - found = Object.assign({}, world.irregulars.verbs[str]); + if (world.irregulars.verbs.hasOwnProperty(inf) === true) { + found = Object.assign({}, world.irregulars.verbs[inf]); } } //2. rule-based regex - found = Object.assign({}, _01Suffixes(str), found); //3. generic transformations + found = Object.assign({}, _01Suffixes(inf), found); //3. generic transformations //'buzzing' if (found.Gerund === undefined) { - found.Gerund = _02Generic.Gerund(str); + found.Gerund = _02Generic.Gerund(inf); } //'buzzed' if (found.PastTense === undefined) { - found.PastTense = _02Generic.PastTense(str); + found.PastTense = _02Generic.PastTense(inf); } //'buzzes' if (found.PresentTense === undefined) { - found.PresentTense = _02Generic.PresentTense(str); + found.PresentTense = _02Generic.PresentTense(inf); } return found; }; -var conjugate_1 = conjugate; +var conjugate_1 = conjugate; // console.log(conjugate('bake')) //turn 'quick' into 'quickest' var do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]; @@ -5409,23 +5436,13 @@ var rules = { to: '' }], Gerund: [{ - reg: /pping$/i, - to: 'p' - }, { - reg: /lling$/i, - to: 'll' - }, { - reg: /tting$/i, - to: 't' - }, { - reg: /dding$/i, - to: 'd' - }, { - reg: /ssing$/i, - to: 'ss' + //popping -> pop + reg: /(..)(p|d|t|g){2}ing$/i, + to: '$1$2' }, { - reg: /(..)gging$/i, - to: '$1g' + //fuzzing -> fuzz + reg: /(ll|ss|zz)ing$/i, + to: '$1' }, { reg: /([^aeiou])ying$/i, to: '$1y' @@ -5433,15 +5450,47 @@ var rules = { reg: /([^ae]i.)ing$/i, to: '$1e' }, { - reg: /(ea.)ing$/i, + //eating, reading + reg: /(ea[dklnrtv])ing$/i, to: '$1' }, { - reg: /(u[rtcb]|[bdtpkg]l|n[cg]|a[gdkvtc]|[ua]s|[dr]g|yz|o[rlsp]|cre)ing$/i, - to: '$1e' - }, { + //washing -> wash reg: /(ch|sh)ing$/i, to: '$1' + }, //soft-e forms: + { + //z : hazing (not buzzing) + reg: /(z)ing$/i, + to: '$1e' + }, { + //a : baking, undulating + reg: /(a[gdkvtc])ing$/i, + to: '$1e' + }, { + //u : conjuring, tubing + reg: /(u[rtcbn])ing$/i, + to: '$1e' }, { + //o : forboding, poking, hoping, boring (not hooping) + reg: /([^o]o[bdknprv])ing$/i, + to: '$1e' + }, { + //ling : tingling, wrinkling, circling, scrambling, bustling + reg: /([tbckg]l)ing$/i, + //dp + to: '$1e' + }, { + //cing : bouncing, denouncing + reg: /(c)ing$/i, + //dp + to: '$1e' + }, // { + // //soft-e : + // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i, + // to: '$1e', + // }, + { + //fallback reg: /(..)ing$/i, to: '$1' }], @@ -5514,6 +5563,10 @@ var rules = { }, { reg: /(.a[^aeiou])ed$/i, to: '$1' + }, { + //owed, aced + reg: /([aeiou][^aeiou])ed$/i, + to: '$1e' }, { reg: /([rl])ew$/i, to: '$1ow' @@ -8244,7 +8297,9 @@ methods$5.sentences = function () { var _simple = methods$5; +var underOver = /^(under|over)-?/; /** match a word-sequence, like 'super bowl' in the lexicon */ + var tryMultiple = function tryMultiple(terms, t, world) { var lex = world.words; //try a two-word version @@ -8307,11 +8362,22 @@ var checkLexicon = function checkLexicon(terms, world) { if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) { terms[t].tag(lex[str], 'lexicon', world); + continue; } // look at reduced version of term, too if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) { terms[t].tag(lex[terms[t].reduced], 'lexicon', world); + continue; + } // prefix strip: try to match 'take' for 'undertake' + + + if (underOver.test(str) === true) { + var noPrefix = str.replace(underOver, ''); + + if (lex.hasOwnProperty(noPrefix) === true) { + terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world); + } } } @@ -8333,7 +8399,7 @@ var isAcronym$2 = function isAcronym(term, world) { if (term.tags.Acronym) { return true; } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false + // return false // } // 'PIZZA' is not an acronym. @@ -8351,6 +8417,11 @@ var checkPunctuation = function checkPunctuation(terms, i, world) { // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') { // term.tag('Hyphenated', 'has-hyphen', world) // } + // support 'head-over' + // if (term.hasHyphen() === true) { + // console.log(term.tags) + // } + // console.log(term.hasHyphen(), term.text) //an end-tick (trailing apostrophe) - flanders', or Carlos' if (apostrophes.test(term.text)) { @@ -8402,7 +8473,8 @@ var startsWith = [//web tags [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes //slang things [/^(lol)+[sz]$/, 'Expression'], //lol -[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], [/^(over|under)[a-z]{2,}/, 'Adjective'], [/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 +[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/, 'Verb'], // [/^(over|under)[a-z]{2,}/, 'Adjective'], +[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/, 'Date'], // 03-02-89 //phone numbers [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809 [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809 @@ -8439,7 +8511,7 @@ var checkRegex = function checkRegex(term, world) { for (var r = 0; r < startsWith.length; r += 1) { if (startsWith[r][0].test(str) === true) { - term.tagSafe(startsWith[r][1], 'regex #' + r, world); + term.tagSafe(startsWith[r][1], 'prefix #' + r, world); break; } } // do some more! @@ -8476,7 +8548,7 @@ var endsWith$1 = { c: [[/.[^aeiou]ic$/, Adj]], d: [//==-ed== //double-consonant - [/.(pp|ll|ss|ff|gg|tt|rr|bb)ed$/, Past], //popped + [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned //double-vowel [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered //-hed @@ -8489,11 +8561,11 @@ var endsWith$1 = { [/.[aoui]f?led$/, Past], //impaled, stifled //-sed [/.[iao]sed$/, Past], //franchised - [/.[aeiou]n?[cs]ed$/, Past], //laced, lanced + [/[aeiou]n?[cs]ed$/, Past], //laced, lanced //-med [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed //-ked - [/[aeiou]n?c?ked$/, Past], //hooked + [/[aeiou][ns]?c?ked$/, Past], //hooked, masked //-ged [/[aeiou][nl]?ged$/, Past], //engaged //-ted @@ -8523,7 +8595,9 @@ var endsWith$1 = { ], r: [[/.[bdfklmst]ler$/, 'Noun'], [/.[ilk]er$/, 'Comparative'], [/[aeiou][pns]er$/, Sing], [/[^i]fer$/, Inf], [/.[^aeiou][ao]pher$/, Actor]], t: [[/.[di]est$/, 'Superlative'], [/.[icldtgrv]ent$/, Adj], [/[aeiou].*ist$/, Adj], [/^[a-z]et$/, Verb]], - s: [[/.[rln]ates$/, Pres], [/.[^z]ens$/, Verb], [/.[lstrn]us$/, Sing], [/[aeiou][^aeiou]is$/, Sing], [/[a-z]\'s$/, Noun], [/^yes+$/, Exp] //yessss + s: [[/.[rln]ates$/, Pres], [/.[^z]ens$/, Verb], [/.[lstrn]us$/, Sing], [/.[aeiou]sks$/, Pres], //masks + [/.[aeiou]kes$/, Pres], //bakes + [/[aeiou][^aeiou]is$/, Sing], [/[a-z]\'s$/, Noun], [/^yes+$/, Exp] //yessss ], v: [[/.[^aeiou][ai][kln]ov$/, Last] //east-europe ], @@ -8622,7 +8696,7 @@ null, //1 tage: Inf$1, teen: 'Value', tion: Sing$1, - tive: Actor$1, + tive: Adj$1, tors: Noun$1, vice: Sing$1 }, { @@ -9737,7 +9811,7 @@ var fixThe = function fixThe(doc) { inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7'); //by a bear. - inf.match('#Determiner [#Infinitive]$').tag('Noun', 'a-inf'); + inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf'); } //the wait to vote @@ -9751,7 +9825,7 @@ var fixThe = function fixThe(doc) { det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line'); //the swim - det.match('(the|those|these) [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2'); + det.match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]').tag('Noun', 'correction-determiner2'); } var an = doc["if"]('(a|an)'); @@ -10045,7 +10119,9 @@ var fixVerb = function fixVerb(doc) { vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are'); //jack seems guarded - vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled'); //fall over + vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled'); //'foo-up' + + vb.match('#Verb (up|off|over|out)').match('@hasHyphen .').tag('#PhrasalVerb'); //fall over vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle'); //went to sleep // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb'); @@ -11643,6 +11719,7 @@ var conjugate$2 = function conjugate(parsed, world) { return toBe_1(parsed); } + var hasHyphen = parsed.verb.termList(0).hasHyphen(); var infinitive = toInfinitive_1$1(parsed, world); if (!infinitive) { @@ -11654,8 +11731,9 @@ var conjugate$2 = function conjugate(parsed, world) { if (parsed.particle.found) { var particle = parsed.particle.text(); + var space = hasHyphen === true ? '-' : ' '; Object.keys(forms).forEach(function (k) { - return forms[k] += ' ' + particle; + return forms[k] += space + particle; }); } //put the adverb at the end? @@ -11663,13 +11741,15 @@ var conjugate$2 = function conjugate(parsed, world) { if (parsed.adverb.found) { var adverb = parsed.adverb.text(); + var _space = hasHyphen === true ? '-' : ' '; + if (parsed.adverbAfter === true) { Object.keys(forms).forEach(function (k) { - return forms[k] += ' ' + adverb; + return forms[k] += _space + adverb; }); } else { Object.keys(forms).forEach(function (k) { - return forms[k] = adverb + ' ' + forms[k]; + return forms[k] = adverb + _space + forms[k]; }); } } //apply negative @@ -11875,7 +11955,7 @@ var methods$7 = { this.forEach(function (vb) { var parsed = parse$2(vb); - var str = toInfinitive_1$1(parsed, _this8.world); + var str = conjugate_1$1(parsed, _this8.world).Infinitive; if (str) { vb.replaceWith(str, false); diff --git a/changelog.md b/changelog.md index 249fbd07f..964262c51 100644 --- a/changelog.md +++ b/changelog.md @@ -20,7 +20,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - improve support for auxilary-pastTense ('was lifted') verb-phrases - more robust number-tagging regexes - setup typescript types for plugins #661 (thanks @Drache93!) -- verb conjugation bugfixes +- verb conjugation and tagger bugfixes ##### 12.2.1 diff --git a/package.json b/package.json index 2ba4f7838..85ef01de4 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "author": "Spencer Kelly (http://spencermounta.in)", "name": "compromise", - "description": "natural language processing in the browser", - "version": "12.2.1", + "description": "modest natural language processing", + "version": "12.3.0", "main": "./builds/compromise.js", "unpkg": "./builds/compromise.min.js", "module": "./builds/compromise.mjs", @@ -68,4 +68,4 @@ "plugins/**/types/*.ts" ], "license": "MIT" -} \ No newline at end of file +} diff --git a/src/_version.js b/src/_version.js index 0a3659d40..95690944e 100644 --- a/src/_version.js +++ b/src/_version.js @@ -1 +1 @@ -module.exports = '12.2.1' \ No newline at end of file +module.exports = '12.3.0' \ No newline at end of file From e57c0e0845ec7a83db863aa2381ee6700232ee9b Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 14:49:48 -0500 Subject: [PATCH 58/59] improve tagging of acronyms --- changelog.md | 1 + scratch.js | 4 +- src/02-tagger/01-init/02-punctuation.js | 36 ++++------------ src/02-tagger/02-fallbacks/06-acronyms.js | 50 +++++++++++++++++++++++ src/02-tagger/02-fallbacks/index.js | 4 ++ tests/tagger/tagger.test.js | 3 +- 6 files changed, 65 insertions(+), 33 deletions(-) create mode 100644 src/02-tagger/02-fallbacks/06-acronyms.js diff --git a/changelog.md b/changelog.md index 964262c51..2e1e06443 100644 --- a/changelog.md +++ b/changelog.md @@ -21,6 +21,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - more robust number-tagging regexes - setup typescript types for plugins #661 (thanks @Drache93!) - verb conjugation and tagger bugfixes +- disambiguate acryonyms & yelling ##### 12.2.1 diff --git a/scratch.js b/scratch.js index 9828180ab..2281c39f0 100644 --- a/scratch.js +++ b/scratch.js @@ -4,6 +4,4 @@ nlp.verbose(true) // nlp.extend(require('./plugins/dates/src')) // nlp('WE’RE NOT WORTHY!').debug() - -// #585 -nlp('the test message').debug() +nlp('fbi').debug() diff --git a/src/02-tagger/01-init/02-punctuation.js b/src/02-tagger/01-init/02-punctuation.js index fa939d283..5d668382b 100644 --- a/src/02-tagger/01-init/02-punctuation.js +++ b/src/02-tagger/01-init/02-punctuation.js @@ -1,26 +1,4 @@ const apostrophes = /[\'‘’‛‵′`´]$/ -const oneLetterAcronym = /^[A-Z]('s|,)?$/ - -const oneLetterWord = { - I: true, - A: true, -} - -const isAcronym = function(term, world) { - let str = term.reduced - // a known acronym like fbi - if (term.tags.Acronym) { - return true - } - // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false - // } - // 'PIZZA' is not an acronym. - if (str.length > 4 && world.words[str]) { - return false - } - return term.isAcronym() -} // const checkPunctuation = function(terms, i, world) { @@ -52,12 +30,12 @@ const checkPunctuation = function(terms, i, world) { } } // 'NASA' is, but not 'i REALLY love it.' - if (isAcronym(term, world)) { - term.tag('Acronym', 'acronym-step', world) - term.tag('Noun', 'acronym-infer', world) - } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { - term.tag('Acronym', 'one-letter-acronym', world) - term.tag('Noun', 'one-letter-infer', world) - } + // if (term.tags.Noun === true && isAcronym(term, world)) { + // term.tag('Acronym', 'acronym-step', world) + // term.tag('Noun', 'acronym-infer', world) + // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { + // term.tag('Acronym', 'one-letter-acronym', world) + // term.tag('Noun', 'one-letter-infer', world) + // } } module.exports = checkPunctuation diff --git a/src/02-tagger/02-fallbacks/06-acronyms.js b/src/02-tagger/02-fallbacks/06-acronyms.js new file mode 100644 index 000000000..421270824 --- /dev/null +++ b/src/02-tagger/02-fallbacks/06-acronyms.js @@ -0,0 +1,50 @@ +const oneLetterAcronym = /^[A-Z]('s|,)?$/ +const periodSeperated = /([A-Z]\.){2}[A-Z]?/i + +const oneLetterWord = { + I: true, + A: true, +} + +const isAcronym = function(term, world) { + let str = term.reduced + // a known acronym like fbi + if (term.tags.Acronym) { + return true + } + // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { + // return false + // } + // known-words, like 'PIZZA' is not an acronym. + if (world.words[str]) { + return false + } + return term.isAcronym() +} + +// F.B.I., NBC, - but not 'NO COLLUSION' +const checkAcronym = function(terms, world) { + terms.forEach(term => { + //these are not acronyms + if (term.tags.RomanNumeral === true) { + return + } + //period-ones F.D.B. + if (periodSeperated.test(term.text) === true) { + term.tag('Acronym', 'period-acronym', world) + } + //non-period ones are harder + if (term.isUpperCase() && isAcronym(term, world)) { + term.tag('Acronym', 'acronym-step', world) + term.tag('Noun', 'acronym-infer', world) + } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { + term.tag('Acronym', 'one-letter-acronym', world) + term.tag('Noun', 'one-letter-infer', world) + } + //if it's a organization, + if (term.tags.Organization && term.text.length < 4) { + term.tag('Acronym', 'acronym-org', world) + } + }) +} +module.exports = checkAcronym diff --git a/src/02-tagger/02-fallbacks/index.js b/src/02-tagger/02-fallbacks/index.js index 9eb8f4605..c4d67a1b4 100644 --- a/src/02-tagger/02-fallbacks/index.js +++ b/src/02-tagger/02-fallbacks/index.js @@ -4,6 +4,7 @@ const step = { stem: require('./03-stem'), plural: require('./04-plurals'), organizations: require('./05-organizations'), + acronyms: require('./06-acronyms'), } // const fallbacks = function(doc, terms) { @@ -28,6 +29,9 @@ const fallbacks = function(doc, terms) { // turn 'Foo University' into an Org step.organizations(terms, world) + //turn 'FBD' into an acronym + step.acronyms(terms, world) + //are the nouns singular or plural? terms.forEach(t => { step.plural(t, doc.world) diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index 3ee904b42..a322cbe76 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -109,7 +109,8 @@ test('pos-basic-tag:', function(t) { ['butterfly', ['Singular']], ['he blamed the girl', ['Pronoun', 'PastTense', 'Determiner', 'Singular']], ['his fine', ['Possessive', 'Noun']], - ['contracted AIDS', ['PastTense', 'Acronym']], + // ['contracted AIDS', ['PastTense', 'Acronym']], + ['contacted nbc', ['PastTense', 'Acronym']], ['city/town', ['Noun', 'Noun']], ['boyfriend to Jane', ['Noun', 'Conjunction', 'Person']], // ['boyfriend of Jane', ['Noun', 'Conjunction', 'Person']], From ad0271f3d4efaf383fb54971b0ceba6d0215c006 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Fri, 10 Jan 2020 14:57:40 -0500 Subject: [PATCH 59/59] fix test for v6 --- builds/compromise.js | 104 ++++++++++++++++++++++++------------ builds/compromise.js.map | 2 +- builds/compromise.min.js | 2 +- builds/compromise.mjs | 104 ++++++++++++++++++++++++------------ scratch.js | 3 +- tests/tagger/tagger.test.js | 2 +- 6 files changed, 143 insertions(+), 74 deletions(-) diff --git a/builds/compromise.js b/builds/compromise.js index 546bed225..7b3ea61a9 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -8392,31 +8392,7 @@ var _01Lexicon = checkLexicon; - var apostrophes = /[\'‘’‛‵′`´]$/; - var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; - var oneLetterWord = { - I: true, - A: true - }; - - var isAcronym$2 = function isAcronym(term, world) { - var str = term.reduced; // a known acronym like fbi - - if (term.tags.Acronym) { - return true; - } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false - // } - // 'PIZZA' is not an acronym. - - - if (str.length > 4 && world.words[str]) { - return false; - } - - return term.isAcronym(); - }; // - + var apostrophes = /[\'‘’‛‵′`´]$/; // var checkPunctuation = function checkPunctuation(terms, i, world) { var term = terms[i]; //check hyphenation @@ -8445,15 +8421,14 @@ } } } // 'NASA' is, but not 'i REALLY love it.' + // if (term.tags.Noun === true && isAcronym(term, world)) { + // term.tag('Acronym', 'acronym-step', world) + // term.tag('Noun', 'acronym-infer', world) + // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { + // term.tag('Acronym', 'one-letter-acronym', world) + // term.tag('Noun', 'one-letter-infer', world) + // } - - if (isAcronym$2(term, world)) { - term.tag('Acronym', 'acronym-step', world); - term.tag('Noun', 'acronym-infer', world); - } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { - term.tag('Acronym', 'one-letter-acronym', world); - term.tag('Noun', 'one-letter-infer', world); - } }; var _02Punctuation$1 = checkPunctuation; @@ -9306,12 +9281,69 @@ var _05Organizations = tagOrgs; + var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; + var periodSeperated = /([A-Z]\.){2}[A-Z]?/i; + var oneLetterWord = { + I: true, + A: true + }; + + var isAcronym$2 = function isAcronym(term, world) { + var str = term.reduced; // a known acronym like fbi + + if (term.tags.Acronym) { + return true; + } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { + // return false + // } + // known-words, like 'PIZZA' is not an acronym. + + + if (world.words[str]) { + return false; + } + + return term.isAcronym(); + }; // F.B.I., NBC, - but not 'NO COLLUSION' + + + var checkAcronym = function checkAcronym(terms, world) { + terms.forEach(function (term) { + //these are not acronyms + if (term.tags.RomanNumeral === true) { + return; + } //period-ones F.D.B. + + + if (periodSeperated.test(term.text) === true) { + term.tag('Acronym', 'period-acronym', world); + } //non-period ones are harder + + + if (term.isUpperCase() && isAcronym$2(term, world)) { + term.tag('Acronym', 'acronym-step', world); + term.tag('Noun', 'acronym-infer', world); + } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { + term.tag('Acronym', 'one-letter-acronym', world); + term.tag('Noun', 'one-letter-infer', world); + } //if it's a organization, + + + if (term.tags.Organization && term.text.length < 4) { + term.tag('Acronym', 'acronym-org', world); + } + }); + }; + + var _06Acronyms = checkAcronym; + var step = { neighbours: _01Neighbours, "case": _02Case, stem: _03Stem, plural: _04Plurals, - organizations: _05Organizations + organizations: _05Organizations, + acronyms: _06Acronyms }; // var fallbacks = function fallbacks(doc, terms) { @@ -9329,7 +9361,9 @@ } }); // turn 'Foo University' into an Org - step.organizations(terms, world); //are the nouns singular or plural? + step.organizations(terms, world); //turn 'FBD' into an acronym + + step.acronyms(terms, world); //are the nouns singular or plural? terms.forEach(function (t) { step.plural(t, doc.world); diff --git a/builds/compromise.js.map b/builds/compromise.js.map index 0ae4a95ce..b2de02de9 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.3.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\nconst oneLetterAcronym = /^[A-Z]('s|,)?$/\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // 'PIZZA' is not an acronym.\n if (str.length > 4 && world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n if (isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det\n .match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]')\n .tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //'foo-up'\n vb.match('#Verb (up|off|over|out)')\n .match('@hasHyphen .')\n .tag('#PhrasalVerb')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","oneLetterWord","A","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA,IAAMA,KAAK,GAAG,iEAAiEC,KAAjE,CAAuE,EAAvE,CAAd;;EAGA,SAASC,MAAT,CAAgBC,GAAhB,EAAqB;EACnBA,EAAAA,GAAG,GAAGA,GAAG,IAAI,GAAb;EACA,MAAIC,IAAI,GAAGD,GAAG,GAAG,GAAjB;;EACA,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1BD,IAAAA,IAAI,IAAIJ,KAAK,CAACM,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgBR,KAAK,CAACS,MAAjC,CAAD,CAAb;EACD;;EACD,SAAOL,IAAP;EACD;;EAED,OAAc,GAAGF,MAAjB;;ECbA;;;;EAIA,IAAIQ,OAAO,GAAG;EACZ,OAAK,GADO;EAEZ,OAAK,IAFO;EAGZ,OAAK,OAHO;EAIZ,OAAK,MAJO;EAKZ,OAAK,IALO;EAMZC,EAAAA,CAAC,EAAE,uDANS;EAOZC,EAAAA,CAAC,EAAE,0BAPS;EAQZC,EAAAA,CAAC,EAAE,iCARS;EASZC,EAAAA,CAAC,EAAE,aATS;EAUZC,EAAAA,CAAC,EAAE,6DAVS;EAWZC,EAAAA,CAAC,EAAE,WAXS;EAYZC,EAAAA,CAAC,EAAE,iBAZS;EAaZC,EAAAA,CAAC,EAAE,2BAbS;EAcZC,EAAAA,CAAC,EAAE,MAdS;EAeZd,EAAAA,CAAC,EAAE,gCAfS;EAgBZe,EAAAA,CAAC,EAAE,WAhBS;EAiBZC,EAAAA,CAAC,EAAE,yBAjBS;EAkBZC,EAAAA,CAAC,EAAE,sBAlBS;EAmBZC,EAAAA,CAAC,EAAE,SAnBS;EAoBZC,EAAAA,CAAC,EAAE,2CApBS;EAqBZC,EAAAA,CAAC,EAAE,oEArBS;EAsBZC,EAAAA,CAAC,EAAE,cAtBS;EAuBZC,EAAAA,CAAC,EAAE,IAvBS;EAwBZC,EAAAA,CAAC,EAAE,uBAxBS;EAyBZC,EAAAA,CAAC,EAAE,iBAzBS;EA0BZC,EAAAA,CAAC,EAAE,sBA1BS;EA2BZC,EAAAA,CAAC,EAAE,+CA3BS;EA4BZC,EAAAA,CAAC,EAAE,OA5BS;EA6BZC,EAAAA,CAAC,EAAE,gBA7BS;EA8BZC,EAAAA,CAAC,EAAE,eA9BS;EA+BZC,EAAAA,CAAC,EAAE,uCA/BS;EAgCZC,EAAAA,CAAC,EAAE;EAhCS,CAAd;;EAmCA,IAAIC,OAAO,GAAG,EAAd;EACAC,MAAM,CAACC,IAAP,CAAY7B,OAAZ,EAAqB8B,OAArB,CAA6B,UAASnB,CAAT,EAAY;EACvCX,EAAAA,OAAO,CAACW,CAAD,CAAP,CAAWpB,KAAX,CAAiB,EAAjB,EAAqBuC,OAArB,CAA6B,UAASX,CAAT,EAAY;EACvCQ,IAAAA,OAAO,CAACR,CAAD,CAAP,GAAaR,CAAb;EACD,GAFD;EAGD,CAJD;;EAMA,IAAMoB,WAAW,GAAG,SAAdA,WAAc,CAAAtC,GAAG,EAAI;EACzB,MAAIH,KAAK,GAAGG,GAAG,CAACF,KAAJ,CAAU,EAAV,CAAZ;EACAD,EAAAA,KAAK,CAACwC,OAAN,CAAc,UAACX,CAAD,EAAIxB,CAAJ,EAAU;EACtB,QAAIgC,OAAO,CAACR,CAAD,CAAX,EAAgB;EACd7B,MAAAA,KAAK,CAACK,CAAD,CAAL,GAAWgC,OAAO,CAACR,CAAD,CAAlB;EACD;EACF,GAJD;EAKA,SAAO7B,KAAK,CAAC0C,IAAN,CAAW,EAAX,CAAP;EACD,CARD;;EASA,aAAc,GAAGD,WAAjB;;ECvDA,IAAME,aAAa,GAAG,qBAAtB;EACA,IAAMC,gBAAgB,GAAG,aAAzB;EACA,IAAMC,eAAe,GAAG,mBAAxB;EACA,IAAMC,gBAAgB,GAAG,wBAAzB;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS5C,GAAT,EAAc;;EAE9B,MAAIwC,aAAa,CAACK,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,WAAO,IAAP;EACD,GAJ6B;;;EAM9B,MAAI2C,gBAAgB,CAACE,IAAjB,CAAsB7C,GAAtB,MAA+B,IAAnC,EAAyC;EACvC,WAAO,IAAP;EACD,GAR6B;;;EAU9B,MAAIyC,gBAAgB,CAACI,IAAjB,CAAsB7C,GAAtB,MAA+B,IAAnC,EAAyC;EACvC,WAAO,IAAP;EACD,GAZ6B;;;EAc9B,MAAI0C,eAAe,CAACG,IAAhB,CAAqB7C,GAArB,MAA8B,IAAlC,EAAwC;EACtC,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAlBD;;EAmBA,eAAc,GAAG4C,SAAjB;;ECtBA,IAAME,QAAQ,GAAG,4CAAjB;;;EAGA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAS/C,GAAT,EAAc;EAC1BA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;EACAA,EAAAA,GAAG,GAAGA,GAAG,CAACgD,WAAJ,EAAN;EACAhD,EAAAA,GAAG,GAAGA,GAAG,CAACiD,IAAJ,EAAN;EACA,MAAIC,QAAQ,GAAGlD,GAAf,CAJ0B;;EAM1BA,EAAAA,GAAG,GAAGsC,SAAW,CAACtC,GAAD,CAAjB,CAN0B;;EAQ1B,MAAI8C,QAAQ,CAACD,IAAT,CAAc7C,GAAd,MAAuB,IAA3B,EAAiC;EAC/BA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,MAAZ,EAAoB,EAApB,CAAN;EACD,GAVyB;;;EAY1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,OAAZ,EAAqB,EAArB,CAAN,CAZ0B;;EAc1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN,CAd0B;;EAgB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,wEAAZ,EAAsF,GAAtF,CAAN,CAhB0B;;EAkB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CACJ,sGADI,EAEJ,GAFI,CAAN,CAlB0B;;EAuB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,SAAZ,EAAuB,KAAvB,CAAN,CAvB0B;;EAyB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,SAAZ,EAAuB,GAAvB,CAAN,CAzB0B;;EA2B1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,oBAAZ,EAAkC,OAAlC,CAAN,CA3B0B;;EA6B1B,MAAI,sBAAsBN,IAAtB,CAA2B7C,GAA3B,MAAoC,IAAxC,EAA8C;EAC5CA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,GAAZ,EAAiB,EAAjB,CAAN;EACD,GA/ByB;;;EAiC1B,MAAI,QAAQN,IAAR,CAAa7C,GAAb,MAAsB,KAA1B,EAAiC;EAC/BA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,UAAZ,EAAwB,EAAxB,CAAN;EACAnD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,kBAAZ,EAAgC,EAAhC,CAAN;EACAnD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN;EACD,GArCyB;;;EAuC1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACiD,IAAJ,EAAN,CAvC0B;;EAyC1B,MAAIjD,GAAG,KAAK,EAAZ,EAAgB;EACdA,IAAAA,GAAG,GAAGkD,QAAN;EACD,GA3CyB;;;EA6C1B,MAAIN,WAAS,CAAC5C,GAAD,CAAb,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAN;EACD,GA/CyB;;;EAiD1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,kBAAZ,EAAgC,MAAhC,CAAN;EACA,SAAOnD,GAAP;EACD,CAnDD;;EAqDA,WAAc,GAAG+C,KAAjB;;EC1DA;EACA,IAAMK,OAAO,GAAG,SAAVA,OAAU,CAASpD,GAAT,EAAc;;EAE5BA,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,QAAZ,EAAsB,EAAtB,CAAN;EACAnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,QAAZ,EAAsB,GAAtB,CAAN;EACA,SAAOnD,GAAP;EACD,CALD;;EAMA,UAAc,GAAGoD,OAAjB;;;;;ECDA,IAAMC,SAAS,GAAG,wNAAlB;EACA,IAAMC,OAAO,GAAG,yNAAhB;;EAGA,IAAMR,UAAQ,GAAG,IAAjB;EACA,IAAMS,aAAa,GAAG,MAAtB;EACA,IAAMC,UAAU,GAAG,qBAAnB;EACA,IAAMC,WAAW,GAAG,cAApB;;;;;EAKA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAA1D,GAAG,EAAI;EACvB,MAAIkD,QAAQ,GAAGlD,GAAf;EACA,MAAI2D,GAAG,GAAG,EAAV;EACA,MAAIC,IAAI,GAAG,EAAX;EACA5D,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYE,SAAZ,EAAuB,UAAAQ,KAAK,EAAI;EACpCF,IAAAA,GAAG,GAAGE,KAAN,CADoC;;EAGpC,QAAI,CAACF,GAAG,KAAK,GAAR,IAAeA,GAAG,KAAK,GAAvB,IAA8BA,GAAG,KAAK,GAAvC,KAA+CF,WAAW,CAACZ,IAAZ,CAAiB7C,GAAjB,CAAnD,EAA0E;EACxE2D,MAAAA,GAAG,GAAG,EAAN;EACA,aAAOE,KAAP;EACD;;EACD,WAAO,EAAP;EACD,GARK,CAAN;EASA7D,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYG,OAAZ,EAAqB,UAAAO,KAAK,EAAI;EAClCD,IAAAA,IAAI,GAAGC,KAAP,CADkC;;EAGlC,QAAIN,aAAa,CAACV,IAAd,CAAmBgB,KAAnB,KAA6B,YAAYhB,IAAZ,CAAiBK,QAAjB,CAA7B,IAA2DK,aAAa,CAACV,IAAd,CAAmBc,GAAnB,MAA4B,KAA3F,EAAkG;EAChGC,MAAAA,IAAI,GAAGA,IAAI,CAACT,OAAL,CAAaI,aAAb,EAA4B,EAA5B,CAAP;EACA;EACD,KANiC;;;EAQlC,QAAIC,UAAU,CAACX,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC4D,MAAAA,IAAI,GAAGA,IAAI,CAACT,OAAL,CAAa,IAAb,EAAmB,EAAnB,CAAP;EACA,aAAO,GAAP;EACD;;EACD,WAAO,EAAP;EACD,GAbK,CAAN,CAbuB;;EA4BvB,MAAInD,GAAG,KAAK,EAAZ,EAAgB;;EAEdkD,IAAAA,QAAQ,GAAGA,QAAQ,CAACC,OAAT,CAAiB,KAAjB,EAAwB,UAAAW,KAAK,EAAI;EAC1CF,MAAAA,IAAI,GAAGE,KAAK,IAAI,EAAhB;EACA,aAAO,EAAP;EACD,KAHU,CAAX;EAIA9D,IAAAA,GAAG,GAAGkD,QAAN;EACAS,IAAAA,GAAG,GAAG,EAAN;EACAC,IAAAA,IAAI,GAAGA,IAAP;EACD,GArCsB;;;EAuCvB,MAAIb,KAAK,GAAGgB,OAAS,CAAC/D,GAAD,CAArB;EACA,MAAMgE,MAAM,GAAG;EACb/D,IAAAA,IAAI,EAAED,GADO;EAEb+C,IAAAA,KAAK,EAAEA,KAFM;EAGbK,IAAAA,OAAO,EAAEa,MAAM,CAAClB,KAAD,CAHF;EAIbY,IAAAA,GAAG,EAAEA,GAJQ;EAKbC,IAAAA,IAAI,EAAEA;EALO,GAAf,CAxCuB;;EAgDvB,MAAId,UAAQ,CAACD,IAAT,CAAc7C,GAAd,CAAJ,EAAwB;EACtBA,IAAAA,GAAG,CAACF,KAAJ,CAAUgD,UAAV,EAAoBT,OAApB,CAA4B,UAAA6B,IAAI,EAAI;EAClCF,MAAAA,MAAM,CAACG,KAAP,GAAeH,MAAM,CAACG,KAAP,IAAgB,EAA/B;EACAH,MAAAA,MAAM,CAACG,KAAP,CAAaD,IAAI,CAACjB,IAAL,EAAb,IAA4B,IAA5B;EACD,KAHD;EAID;;EACD,SAAOe,MAAP;EACD,CAvDD;;EAwDA,SAAc,GAAGN,SAAjB;;;;;;;EC1EA,MAAMU,SAAS,GAAG,2BAAlB;EACA,MAAMC,SAAS,GAAG,YAAlB;;;EAGAC,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAUsE,WAAV,EAAZ;EACA,WAAO,IAAP;EACD,GAHD;;;;EAMAD,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAU+C,WAAV,EAAZ;EACA,WAAO,IAAP;EACD,GAHD;;;;;;EAQAsB,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAUkD,OAAV,CAAkB,uBAAlB,EAA2C,UAAApB,CAAC;EAAA,aAAIA,CAAC,CAACwC,WAAF,EAAJ;EAAA,KAA5C,CAAZ,CAD+B;;EAE/B,WAAO,IAAP;EACD,GAHD;;;;EAMAD,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAOD,SAAS,CAACxB,IAAV,CAAe,KAAK5C,IAApB,CAAP;EACD,GAFD;;;;EAIAqE,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAOF,SAAS,CAACvB,IAAV,CAAe,KAAK5C,IAApB,CAAP;EACD,GAFD;;EAGAqE,EAAAA,iBAAA,GAAoBA,OAAO,CAACE,WAA5B;;;;;;;;;;EC/BA;;EAEA,MAAMC,UAAU,GAAG,iIAAnB;EACA,MAAMC,QAAQ,GAAG,iIAAjB;;;EAGAJ,EAAAA,eAAA,GAAkB,UAASK,KAAT,EAAgB;EAChC,WAAO,KAAKf,IAAL,CAAUgB,OAAV,CAAkBD,KAAlB,MAA6B,CAAC,CAArC;EACD,GAFD;;;;EAIAL,EAAAA,cAAA,GAAiB,UAASK,KAAT,EAAgB;EAC/B,WAAO,KAAKhB,GAAL,CAASiB,OAAT,CAAiBD,KAAjB,MAA4B,CAAC,CAApC;EACD,GAFD;;;;EAKAL,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAOG,UAAU,CAAC5B,IAAX,CAAgB,KAAKc,GAArB,KAA6Be,QAAQ,CAAC7B,IAAT,CAAc,KAAKe,IAAnB,CAApC;EACD,GAFD;;EAGAU,EAAAA,oBAAA,GAAuBA,OAAO,CAACO,QAA/B;;;EAGAP,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;;;;EAKAR,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAKQ,OAAL,CAAa,GAAb,MAAsB,IAAtB,IAA8B,KAAKA,OAAL,CAAa,KAAb,MAAwB,KAA7D;EACD,GAFD;;;;EAKAR,EAAAA,sBAAA,GAAyB,YAAW;EAClC,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;;;;EAKAR,EAAAA,uBAAA,GAA0B,YAAW;EACnC,WAAO,KAAKQ,OAAL,CAAa,GAAb,KAAqB,KAAKA,OAAL,CAAa,GAAb,CAA5B;EACD,GAFD;;;;EAKAR,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAO,KAAKQ,OAAL,CAAa,IAAb,KAAsB,KAAKA,OAAL,CAAa,GAAb,CAAtB,IAA2C,KAAKC,MAAL,CAAY,IAAZ,CAA3C,IAAgE,KAAKA,MAAL,CAAY,GAAZ,CAAvE;EACD,GAFD;;;;EAKAT,EAAAA,oBAAA,GAAuB,YAAW;EAChC,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;;;;EAKAR,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKzB,IAAL,CAAU,KAAK5C,IAAf,CAAP;EACD,GAFD;;;;EAKAqE,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,QAAMU,MAAM,GAAG,SAAf;EACA,WAAOA,MAAM,CAACnC,IAAP,CAAY,KAAKe,IAAjB,KAA0BoB,MAAM,CAACnC,IAAP,CAAY,KAAKc,GAAjB,CAAjC;EACD,GAHD;;;;EAKAW,EAAAA,eAAA,GAAkB,YAAW;EAC3B,QAAMU,MAAM,GAAG,WAAf;EACA,WAAOA,MAAM,CAACnC,IAAP,CAAY,KAAKe,IAAjB,KAA0BoB,MAAM,CAACnC,IAAP,CAAY,KAAKc,GAAjB,CAAjC;EACD,GAHD;;;;EAMAW,EAAAA,sBAAA,GAAyB,YAAW;EAClC,WAAOW,OAAO,CAAC,KAAKC,QAAN,CAAd;EACD,GAFD;;;;EAKAZ,EAAAA,sBAAA,GAAyB,UAASK,KAAT,EAAgB;;EAEvC,QAAIA,KAAK,KAAK,GAAV,IAAiBA,KAAK,KAAK,GAA/B,EAAoC;EAClC,WAAKf,IAAL,GAAY,KAAKA,IAAL,CAAUT,OAAV,CAAkBwB,KAAlB,EAAyB,EAAzB,CAAZ;EACD;;EACD,SAAKf,IAAL,GAAYe,KAAK,GAAG,KAAKf,IAAzB;EACA,WAAO,IAAP;EACD,GAPD;;;;;;;;;;;;;;;;;;ECxEA;EACA,IAAIuB,SAAS,GAAG,qBAAW,EAA3B;;;;EAGA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASzD,CAAT,EAAY0D,GAAZ,EAAiBC,KAAjB,EAAwBhF,MAAxB,EAAgC;;EAEhD,MAAI+E,GAAG,CAACE,EAAJ,KAAW5D,CAAC,CAAC4D,EAAjB,EAAqB;EACnB,WAAO,IAAP;EACD,GAJ+C;;;EAMhD,MAAIF,GAAG,CAACG,QAAJ,KAAiB,IAArB,EAA2B;EACzB,WAAO,IAAP;EACD,GAR+C;;;EAUhD,MAAIH,GAAG,CAACI,KAAJ,KAAc,IAAd,IAAsBH,KAAK,KAAK,CAApC,EAAuC;EACrC,WAAO,KAAP;EACD,GAZ+C;;;EAchD,MAAID,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBJ,KAAK,KAAKhF,MAAM,GAAG,CAA3C,EAA8C;EAC5C,WAAO,KAAP;EACD,GAhB+C;;;EAkBhD,MAAI+E,GAAG,CAACnB,IAAJ,KAAayB,SAAjB,EAA4B;;EAE1B,QAAIhE,CAAC,CAACuD,QAAF,KAAe,IAAf,IAAuBvD,CAAC,CAACuD,QAAF,KAAeG,GAAG,CAACnB,IAA9C,EAAoD;EAClD,aAAO,IAAP;EACD,KAJyB;;;EAM1B,QAAIvC,CAAC,CAACwC,KAAF,KAAYwB,SAAZ,IAAyBhE,CAAC,CAACwC,KAAF,CAAQyB,cAAR,CAAuBP,GAAG,CAACnB,IAA3B,CAA7B,EAA+D;EAC7D,aAAO,IAAP;EACD,KARyB;;;EAU1B,QAAImB,GAAG,CAACQ,IAAJ,KAAa,IAAb,IAAqBR,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACmE,IAAxC,EAA8C;EAC5C,aAAO,IAAP;EACD,KAZyB;;;EAc1B,WAAOT,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACoB,KAAf,IAAwBsC,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAAC1B,IAAvC,IAA+CoF,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACyB,OAArE;EACD,GAjC+C;;;EAmChD,MAAIiC,GAAG,CAACU,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB,WAAOhE,CAAC,CAACqE,IAAF,CAAOX,GAAG,CAACU,GAAX,MAAoB,IAA3B;EACD,GArC+C;;;EAuChD,MAAIV,GAAG,CAACY,MAAJ,KAAeN,SAAnB,EAA8B;EAC5B,QAAI,OAAOhE,CAAC,CAAC0D,GAAG,CAACY,MAAL,CAAR,KAAyB,UAAzB,IAAuCtE,CAAC,CAAC0D,GAAG,CAACY,MAAL,CAAD,OAAoB,IAA/D,EAAqE;EACnE,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD,GA5C+C;;;EA8ChD,MAAIZ,GAAG,CAACa,KAAJ,KAAcP,SAAlB,EAA6B;EAC3B,WAAON,GAAG,CAACa,KAAJ,CAAUrD,IAAV,CAAelB,CAAC,CAACoB,KAAjB,CAAP;EACD,GAhD+C;;;EAkDhD,MAAIsC,GAAG,CAACc,OAAJ,KAAgBR,SAApB,EAA+B;;EAE7B,QAAIN,GAAG,CAACe,QAAJ,KAAiB,KAArB,EAA4B;;EAE1B,aAAOf,GAAG,CAACc,OAAJ,CAAYE,KAAZ,CAAkB,UAAA5E,CAAC;EAAA,eAAI0D,SAAS,CAACxD,CAAD,EAAIF,CAAJ,EAAO6D,KAAP,EAAchF,MAAd,CAAb;EAAA,OAAnB,CAAP;EACD,KAL4B;;;EAO7B,WAAO+E,GAAG,CAACc,OAAJ,CAAYG,IAAZ,CAAiB,UAAA7E,CAAC;EAAA,aAAI0D,SAAS,CAACxD,CAAD,EAAIF,CAAJ,EAAO6D,KAAP,EAAchF,MAAd,CAAb;EAAA,KAAlB,CAAP;EACD;;EACD,SAAO,KAAP;EACD,CA5DD;;;EA+DA6E,SAAS,GAAG,mBAASxD,CAAT,EAAY0D,GAAZ,EAAiBC,KAAjB,EAAwBhF,MAAxB,EAAgC;EAC1C,MAAIiG,MAAM,GAAGnB,SAAS,CAACzD,CAAD,EAAI0D,GAAJ,EAASC,KAAT,EAAgBhF,MAAhB,CAAtB;;EACA,MAAI+E,GAAG,CAACmB,QAAJ,KAAiB,IAArB,EAA2B;EACzB,WAAO,CAACD,MAAR;EACD;;EACD,SAAOA,MAAP;EACD,CAND;;EAQA,cAAc,GAAGpB,SAAjB;;ECvEA,IAAMsB,MAAM,GAAG,EAAf;;;EAGA,eAAiB,GAAG,oBAAA,CAASpB,GAAT,EAAcC,KAAd,EAAqBhF,MAArB,EAA6B;EAC/C,SAAO8E,UAAS,CAAC,IAAD,EAAOC,GAAP,EAAYC,KAAZ,EAAmBhF,MAAnB,CAAhB;EACD,CAFD;;;;EAKA,iBAAiB,GAAG,sBAAA,GAAW;EAC7B,SAAOsC,WAAS,CAAC,KAAK3C,IAAN,CAAhB;EACD,CAFD;;;;EAKA,cAAkB,GAAG,mBAAA,GAAW;EAC9B,SAAO,KAAKA,IAAL,KAAc,EAAd,IAAoBgF,OAAO,CAAC,KAAKC,QAAN,CAAlC;EACD,CAFD;;;;EAKA,WAAe,GAAG,gBAAA,GAAW;EAC3B,SAAO/C,MAAM,CAACC,IAAP,CAAY,KAAK4D,IAAjB,EAAuBM,IAAvB,CAA4B,UAAA3E,CAAC;EAAA,WAAI8E,MAAM,CAAC9E,CAAD,CAAN,KAAc,IAAlB;EAAA,GAA7B,CAAP;EACD,CAFD;;;;EAKA,WAAe,GAAG,gBAAA,CAAS+E,KAAT,EAAgB;EAChC,MAAIC,SAAS,GAAGD,KAAK,CAACE,UAAtB;EACA,MAAI5G,GAAG,GAAG,KAAKkF,QAAL,IAAiB,KAAKnC,KAAhC;;EACA,MAAI,KAAKiD,IAAL,CAAUa,MAAd,EAAsB;EACpB7G,IAAAA,GAAG,GAAG2G,SAAS,CAACG,UAAV,CAAqB9G,GAArB,EAA0B0G,KAA1B,CAAN;EACD;;EACD,MAAI,KAAKV,IAAL,CAAUe,IAAV,IAAkB,CAAC,KAAKf,IAAL,CAAUgB,QAA7B,IAAyC,CAAC,KAAKhB,IAAL,CAAUiB,UAAxD,EAAoE;EAClE,QAAIC,KAAK,GAAG,IAAZ;;EACA,QAAI,KAAKlB,IAAL,CAAUmB,SAAd,EAAyB;EACvBD,MAAAA,KAAK,GAAG,WAAR;EACD,KAFD,MAEO,IAAI,KAAKlB,IAAL,CAAUoB,MAAd,EAAsB;EAC3BF,MAAAA,KAAK,GAAG,QAAR;EACD,KAFM,MAEA,IAAI,KAAKlB,IAAL,CAAUqB,YAAd,EAA4B;EACjCH,MAAAA,KAAK,GAAG,cAAR;EACD,KAFM,MAEA,IAAI,KAAKlB,IAAL,CAAUsB,UAAd,EAA0B;EAC/BJ,MAAAA,KAAK,GAAG,YAAR;EACD,KAFM,MAEA,IAAI,KAAKlB,IAAL,CAAUuB,KAAd,EAAqB;EAC1BL,MAAAA,KAAK,GAAG,OAAR;EACD;;EACDlH,IAAAA,GAAG,GAAG2G,SAAS,CAACa,YAAV,CAAuBxH,GAAvB,EAA4B0G,KAA5B,EAAmCQ,KAAnC,CAAN;EACD;;EACD,OAAKpB,IAAL,GAAY9F,GAAZ;EACD,CAtBD;;;;;;;;;;EC1BA,IAAMyH,QAAQ,GAAG,OAAjB;EACA,IAAMC,WAAW,GAAG,WAApB;;;;;;EAOA,WAAe,GAAG,gBAAA,CAASC,OAAT,EAAkBC,OAAlB,EAA2BC,QAA3B,EAAqC;EACrDF,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,MAAIzD,IAAI,GAAG,KAAKjE,IAAhB;EACA,MAAI6H,MAAM,GAAG,KAAKnE,GAAlB;EACA,MAAIG,KAAK,GAAG,KAAKF,IAAjB,CAJqD;;EAOrD,MAAI+D,OAAO,CAACvE,OAAR,KAAoB,IAAxB,EAA8B;EAC5Bc,IAAAA,IAAI,GAAG,KAAKd,OAAL,IAAgB,EAAvB;EACD;;EACD,MAAIuE,OAAO,CAAC7B,IAAR,KAAiB,IAArB,EAA2B;EACzB5B,IAAAA,IAAI,GAAG,KAAK4B,IAAL,IAAa,EAApB;EACD;;EACD,MAAI6B,OAAO,CAACzC,QAAR,KAAqB,IAArB,IAA6B,KAAKA,QAAtC,EAAgD;EAC9ChB,IAAAA,IAAI,GAAG,KAAKgB,QAAL,IAAiB,EAAxB;EACD;;EACD,MAAIyC,OAAO,CAACI,MAAR,KAAmB,IAAvB,EAA6B;EAC3B7D,IAAAA,IAAI,GAAG,KAAKnB,KAAL,IAAc,KAAK9C,IAAnB,IAA2B,EAAlC;EACD;;EACD,MAAI0H,OAAO,CAAC7B,IAAR,KAAiB,IAArB,EAA2B;EACzB5B,IAAAA,IAAI,GAAG,KAAK4B,IAAL,IAAa,KAAK1C,OAAlB,IAA6B,EAApC;EACD;;EACD,MAAIuE,OAAO,CAACzF,OAAR,KAAoB,IAAxB,EAA8B;EAC5BgC,IAAAA,IAAI,GAAG5B,SAAW,CAAC4B,IAAD,CAAlB;EACD,GAxBoD;;;EA0BrD,MAAIyD,OAAO,CAACK,SAAR,KAAsB,IAA1B,EAAgC;EAC9B,QAAI,KAAKhC,IAAL,CAAUiC,UAAV,IAAwB,CAAC,KAAK7D,SAAL,EAA7B,EAA+C,CAA/C,MAEO,IAAI,KAAK4B,IAAL,CAAUkC,OAAd,EAAuB;EAC5BhE,MAAAA,IAAI,GAAGA,IAAI,CAACK,WAAL,EAAP,CAD4B;EAE7B,KAFM,MAEA,IAAImD,WAAW,CAAC7E,IAAZ,CAAiBqB,IAAjB,KAA0B,CAAC,KAAK8B,IAAL,CAAUkC,OAAzC,EAAkD;;EAEvDhE,MAAAA,IAAI,GAAGA,IAAI,CAAClB,WAAL,EAAP;EACD;EACF;;EACD,MAAI2E,OAAO,CAACQ,SAAR,KAAsB,IAA1B,EAAgC;EAC9BjE,IAAAA,IAAI,GAAGA,IAAI,CAAClB,WAAL,EAAP;EACD,GAtCoD;;;EAwCrD,MAAI2E,OAAO,CAACS,QAAR,KAAqB,IAArB,IAA6B,KAAKpC,IAAL,CAAUkC,OAA3C,EAAoD;EAClDhE,IAAAA,IAAI,GAAGA,IAAI,CAACf,OAAL,CAAa,KAAb,EAAoB,EAApB,CAAP;EACD,GA1CoD;;;EA6CrD,MAAIwE,OAAO,CAACU,UAAR,KAAuB,IAAvB,IAA+BV,OAAO,CAAC7B,IAAR,KAAiB,IAApD,EAA0D;EACxDgC,IAAAA,MAAM,GAAG,EAAT;EACAhE,IAAAA,KAAK,GAAG,GAAR;;EACA,QAAI,CAAC2D,QAAQ,CAAC5E,IAAT,CAAc,KAAKe,IAAnB,MAA6B,KAA7B,IAAsC+D,OAAO,CAACW,IAA/C,KAAwD,CAAC,KAAKpD,QAAlE,EAA4E;EAC1EpB,MAAAA,KAAK,GAAG,EAAR;EACD;EACF;;EACD,MAAI6D,OAAO,CAACY,WAAR,KAAwB,IAAxB,IAAgC,CAACZ,OAAO,CAAC7B,IAA7C,EAAmD;;EAEjD,QAAI,KAAKhB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EAC9BhB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFD,MAEO,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAK0E,WAAL,OAAuB,IAA3B,EAAiC;EACtC1E,MAAAA,KAAK,GAAG,QAAQA,KAAhB;EACD;EACF;;EACD,MAAI8D,OAAO,KAAK,IAAhB,EAAsB;EACpBE,IAAAA,MAAM,GAAG,EAAT;EACD;;EACD,MAAID,QAAQ,KAAK,IAAjB,EAAuB;;EAErB/D,IAAAA,KAAK,GAAG,EAAR,CAFqB;EAGtB,GAxEoD;;;EA0ErD,MAAI6D,OAAO,CAACc,aAAR,KAA0B,IAA1B,IAAkC,KAAKzC,IAAL,CAAU0C,YAAhD,EAA8D;EAC5D5E,IAAAA,KAAK,GAAGA,KAAK,CAACX,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAR;EACD;;EACD,SAAO2E,MAAM,GAAG5D,IAAT,GAAgBJ,KAAvB;EACD,CA9ED;;;;;;ECTA,IAAM6E,UAAU,GAAG;EACjBC,EAAAA,SAAS,EAAE,CADM;EAEjBC,EAAAA,UAAU,EAAE;EAFK,CAAnB;;;EAMA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAASC,IAAT,EAAerC,KAAf,EAAsB;EACrC,MAAIV,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY2G,IAAI,CAAC/C,IAAjB,CAAX;EACA,MAAMgD,MAAM,GAAGtC,KAAK,CAACV,IAArB;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACiD,IAAL,CAAU,UAACzI,CAAD,EAAIC,CAAJ,EAAU;;EAEzB,QAAIkI,UAAU,CAAClI,CAAD,CAAV,IAAiB,CAACuI,MAAM,CAACvI,CAAD,CAA5B,EAAiC;EAC/B,aAAO,CAAC,CAAR;EACD,KAJwB;;;EAMzB,QAAI,CAACuI,MAAM,CAACvI,CAAD,CAAX,EAAgB;EACd,aAAO,CAAP;EACD;;EACD,QAAI,CAACuI,MAAM,CAACxI,CAAD,CAAX,EAAgB;EACd,aAAO,CAAP;EACD,KAXwB;;;EAazB,QAAIwI,MAAM,CAACxI,CAAD,CAAN,CAAU0I,OAAV,CAAkB5I,MAAlB,GAA2B0I,MAAM,CAACvI,CAAD,CAAN,CAAUyI,OAAV,CAAkB5I,MAAjD,EAAyD;EACvD,aAAO,CAAP;EACD;;EACD,QAAI0I,MAAM,CAACxI,CAAD,CAAN,CAAU2I,GAAV,CAAc7I,MAAd,GAAuB0I,MAAM,CAACvI,CAAD,CAAN,CAAU0I,GAAV,CAAc7I,MAAzC,EAAiD;EAC/C,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GApBM,CAAP;EAqBA,SAAO0F,IAAP;EACD,CAzBD;;EA0BA,YAAc,GAAG8C,QAAjB;;EC9BA,IAAMM,WAAW,GAAG;EAClBnJ,EAAAA,IAAI,EAAE,IADY;EAElB+F,EAAAA,IAAI,EAAE,IAFY;EAGlBd,EAAAA,QAAQ,EAAE,IAHQ;EAKlBnC,EAAAA,KAAK,EAAE,KALW;EAMlBwC,EAAAA,EAAE,EAAE,KANc;EAOlBD,EAAAA,KAAK,EAAE,KAPW;EAQlB+D,EAAAA,MAAM,EAAE,KARU;EASlBhB,EAAAA,UAAU,EAAE,KATM;EAUlBiB,EAAAA,OAAO,EAAE;EAVS,CAApB;;;EAcA,QAAY,GAAG,aAAA,CAAS3B,OAAT,EAAkBjB,KAAlB,EAAyB;EACtCiB,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACAA,EAAAA,OAAO,GAAGxF,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBH,WAAlB,EAA+BzB,OAA/B,CAAV;EACA,MAAIpB,MAAM,GAAG,EAAb,CAHsC;;EAMtC,MAAIoB,OAAO,CAAC1H,IAAZ,EAAkB;EAChBsG,IAAAA,MAAM,CAACtG,IAAP,GAAc,KAAKA,IAAnB;EACD;;EACD,MAAI0H,OAAO,CAACI,MAAZ,EAAoB;EAClBxB,IAAAA,MAAM,CAACwB,MAAP,GAAgB,KAAKA,MAArB;EACD;;EAED,MAAIJ,OAAO,CAAC3B,IAAZ,EAAkB;EAChBO,IAAAA,MAAM,CAACP,IAAP,GAAc7D,MAAM,CAACC,IAAP,CAAY,KAAK4D,IAAjB,CAAd;EACD,GAfqC;;;EAkBtC,MAAI2B,OAAO,CAAC5E,KAAZ,EAAmB;EACjBwD,IAAAA,MAAM,CAACxD,KAAP,GAAe,KAAKA,KAApB;EACD;;EACD,MAAI4E,OAAO,CAACpC,EAAR,IAAcoC,OAAO,CAAC0B,MAA1B,EAAkC;EAChC9C,IAAAA,MAAM,CAAChB,EAAP,GAAY,KAAKA,EAAjB;EACD;;EACD,MAAIoC,OAAO,CAACzC,QAAR,IAAoB,KAAKA,QAAL,KAAkB,IAA1C,EAAgD;EAC9CqB,IAAAA,MAAM,CAACrB,QAAP,GAAkB,KAAKA,QAAvB;EACD;;EACD,MAAIyC,OAAO,CAACU,UAAZ,EAAwB;EACtB9B,IAAAA,MAAM,CAAC5C,GAAP,GAAa,KAAKA,GAAlB;EACA4C,IAAAA,MAAM,CAAC3C,IAAP,GAAc,KAAKA,IAAnB;EACD;;EACD,MAAI+D,OAAO,CAAC2B,OAAZ,EAAqB;EACnB/C,IAAAA,MAAM,CAAC+C,OAAP,GAAiBR,QAAQ,CAAC,IAAD,EAAOpC,KAAP,CAAR,CAAsB,CAAtB,CAAjB;EACD;;EAED,SAAOH,MAAP;EACD,CApCD;;;;;;EChBA,WAAc,GAAGpE,MAAM,CAACoH,MAAP,CACf,EADe,EAEfC,OAFe,EAGfC,cAHe,EAIfC,OAJe,EAKfC,OALe,EAMfC,OANe,CAAjB;;ECAA,SAASC,YAAT,GAAwB;EACtB,SAAO,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,QAA/C;EACD;;;;EAGD,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAShK,GAAT,EAAciK,KAAd,EAAqB;EAClCjK,EAAAA,GAAG,GAAGA,GAAG,CAACkK,QAAJ,EAAN;;EACA,SAAOlK,GAAG,CAACM,MAAJ,GAAa2J,KAApB,EAA2B;EACzBjK,IAAAA,GAAG,IAAI,GAAP;EACD;;EACD,SAAOA,GAAP;EACD,CAND;;;;EASA,UAAc,GAAG,eAAA,CAAS2B,CAAT,EAAYoE,GAAZ,EAAiBoE,MAAjB,EAAyB;EACxC,MAAIN,YAAY,EAAhB,EAAoB;EAClBO,IAAAA,OAAO,CAACC,GAAR,CAAY,OAAOL,MAAM,CAACrI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAb,GAA4B,MAA5B,GAAqCgD,GAArC,GAA2C,GAAvD,EAA4D,iBAA5D;EACA;EACD,GAJuC;;;EAMxC,MAAIsE,GAAG,GAAG,aAAaL,MAAM,CAACrI,CAAC,CAACoB,KAAH,EAAU,EAAV,CAAnB,GAAmC,oBAAnC,GAA0DgD,GAA1D,GAAgE,UAA1E;;EACA,MAAIoE,MAAJ,EAAY;EACVE,IAAAA,GAAG,GAAGL,MAAM,CAACK,GAAD,EAAM,EAAN,CAAN,GAAkB,GAAlB,GAAwBF,MAAxB,GAAiC,EAAvC;EACD;;EACDC,EAAAA,OAAO,CAACC,GAAR,CAAYA,GAAZ;EACD,CAXD;;;;EAcA,YAAgB,GAAG,iBAAA,CAAS1I,CAAT,EAAYoE,GAAZ,EAAiBoE,MAAjB,EAAyB;EAC1C,MAAIN,YAAY,EAAhB,EAAoB;EAClBO,IAAAA,OAAO,CAACC,GAAR,CAAY,OAAOL,MAAM,CAACrI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAb,GAA4B,MAA5B,GAAqCgD,GAArC,GAA2C,GAAvD,EAA4D,iBAA5D;EACA;EACD,GAJyC;;;EAM1C,MAAIsE,GAAG,GAAG,aAAaL,MAAM,CAACrI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAnB,GAAkC,eAAlC,GAAoDgD,GAApD,GAA0D,UAApE;;EACA,MAAIoE,MAAJ,EAAY;EACVE,IAAAA,GAAG,GAAGL,MAAM,CAACK,GAAD,EAAM,EAAN,CAAN,GAAkB,GAAlB,GAAwBF,MAA9B;EACD;;EACDC,EAAAA,OAAO,CAACC,GAAR,CAAYA,GAAZ;EACD,CAXD;;EAaA,WAAe,GAAG,gBAAA,CAASC,GAAT,EAAc;EAC9B,SAAOnI,MAAM,CAACoI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BF,GAA/B,MAAwC,gBAA/C;EACD,CAFD;;EAIA,aAAiB,GAAG,kBAAA,CAAAtK,GAAG,EAAI;EACzB,SAAOA,GAAG,CAACyK,MAAJ,CAAW,CAAX,EAAclG,WAAd,KAA8BvE,GAAG,CAAC0K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;;;;;;;;;EC3CA;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAShJ,CAAT,EAAYoE,GAAZ,EAAiBoE,MAAjB,EAAyBzD,KAAzB,EAAgC;EAC7C,MAAIkE,MAAM,GAAGlE,KAAK,CAACV,IAAnB,CAD6C;;EAG7C,MAAID,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,GAAtB,IAA6BA,GAAG,KAAK,GAAzC,EAA8C;EAC5C;EACD;;EACD,MAAIA,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAAC5C,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAN;EACD;;EACD4C,EAAAA,GAAG,GAAG8E,GAAG,CAACzG,SAAJ,CAAc2B,GAAd,CAAN,CAT6C;;EAW7C,MAAIpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,MAAgB,IAApB,EAA0B;EACxB;EACD,GAb4C;;;EAe7C,MAAM+E,SAAS,GAAGpE,KAAK,CAACoE,SAAN,EAAlB;;EACA,MAAIA,SAAS,KAAK,IAAlB,EAAwB;EACtBD,IAAAA,GAAG,CAACE,MAAJ,CAAWpJ,CAAX,EAAcoE,GAAd,EAAmBoE,MAAnB;EACD,GAlB4C;;;EAoB7CxI,EAAAA,CAAC,CAACqE,IAAF,CAAOD,GAAP,IAAc,IAAd,CApB6C;;;EAuB7C,MAAI6E,MAAM,CAAChF,cAAP,CAAsBG,GAAtB,MAA+B,IAAnC,EAAyC;;EAEvC6E,IAAAA,MAAM,CAAC7E,GAAD,CAAN,CAAYoD,GAAZ,CAAgB9G,OAAhB,CAAwB,UAAA2I,IAAI,EAAI;EAC9BrJ,MAAAA,CAAC,CAACqE,IAAF,CAAOgF,IAAP,IAAe,IAAf;;EACA,UAAIF,SAAS,KAAK,IAAlB,EAAwB;EACtBD,QAAAA,GAAG,CAACE,MAAJ,CAAWpJ,CAAX,EAAc,OAAOqJ,IAArB;EACD;EACF,KALD,EAFuC;;EASvCrJ,IAAAA,CAAC,CAACsJ,KAAF,CAAQL,MAAM,CAAC7E,GAAD,CAAN,CAAYmF,IAApB,EAA0B,GAA1B,EAA+BxE,KAA/B;EACD;EACF,CAlCD;;;;EAqCA,IAAMyE,OAAO,GAAG,SAAVA,OAAU,CAASpC,IAAT,EAAe/C,IAAf,EAAqBmE,MAArB,EAA6BzD,KAA7B,EAAoC;EAClD,MAAI,OAAOV,IAAP,KAAgB,QAApB,EAA8B;EAC5B,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpCyK,MAAAA,MAAM,CAAC5B,IAAD,EAAO/C,IAAI,CAAC9F,CAAD,CAAX,EAAgBiK,MAAhB,EAAwBzD,KAAxB,CAAN;EACD,KAH2B;;EAK7B,GALD,MAKO;EACLiE,IAAAA,MAAM,CAAC5B,IAAD,EAAO/C,IAAP,EAAamE,MAAb,EAAqBzD,KAArB,CAAN;EACD;EACF,CATD;;EAUA,OAAc,GAAGyE,OAAjB;;EChDA;;EACA,IAAMF,KAAK,GAAG,SAARA,KAAQ,CAAStJ,CAAT,EAAYoE,GAAZ,EAAiBoE,MAAjB,EAAyBzD,KAAzB,EAAgC;EAC5C,MAAMoE,SAAS,GAAGpE,KAAK,CAACoE,SAAN,EAAlB,CAD4C;;EAG5C,MAAI/E,GAAG,KAAK,GAAZ,EAAiB;EACfpE,IAAAA,CAAC,CAACqE,IAAF,GAAS,EAAT;EACA,WAAOrE,CAAP;EACD,GAN2C;;;EAQ5C,MAAIA,CAAC,CAACqE,IAAF,CAAOD,GAAP,MAAgB,IAApB,EAA0B;EACxB,WAAOpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,CAAP,CADwB;;EAGxB,QAAI+E,SAAS,KAAK,IAAlB,EAAwB;EACtBD,MAAAA,GAAG,CAACO,QAAJ,CAAazJ,CAAb,EAAgBoE,GAAhB,EAAqBoE,MAArB;EACD;EACF,GAd2C;;;EAgB5C,MAAMS,MAAM,GAAGlE,KAAK,CAACV,IAArB;;EACA,MAAI4E,MAAM,CAAC7E,GAAD,CAAV,EAAiB;EACf,QAAImD,OAAO,GAAG0B,MAAM,CAAC7E,GAAD,CAAN,CAAYmD,OAA1B;;EACA,SAAK,IAAIhJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgJ,OAAO,CAAC5I,MAA5B,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,UAAIyB,CAAC,CAACqE,IAAF,CAAOkD,OAAO,CAAChJ,CAAD,CAAd,MAAuB,IAA3B,EAAiC;EAC/B,eAAOyB,CAAC,CAACqE,IAAF,CAAOkD,OAAO,CAAChJ,CAAD,CAAd,CAAP;;EACA,YAAI4K,SAAS,KAAK,IAAlB,EAAwB;EACtBD,UAAAA,GAAG,CAACO,QAAJ,CAAazJ,CAAb,EAAgB,QAAQuH,OAAO,CAAChJ,CAAD,CAA/B;EACD;EACF;EACF;EACF;;EACD,SAAOyB,CAAP;EACD,CA7BD;;;EAgCA,IAAM0J,QAAQ,GAAG,SAAXA,QAAW,CAAStC,IAAT,EAAe/C,IAAf,EAAqBmE,MAArB,EAA6BzD,KAA7B,EAAoC;EACnD,MAAI,OAAOV,IAAP,KAAgB,QAAhB,IAA4BA,IAAhC,EAAsC;EACpC,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC+K,MAAAA,KAAK,CAAClC,IAAD,EAAO/C,IAAI,CAAC9F,CAAD,CAAX,EAAgBiK,MAAhB,EAAwBzD,KAAxB,CAAL;EACD;;EACD;EACD;;EACDuE,EAAAA,KAAK,CAAClC,IAAD,EAAO/C,IAAP,EAAamE,MAAb,EAAqBzD,KAArB,CAAL;EACD,CARD;;EASA,WAAc,GAAG2E,QAAjB;;ECzCA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAASvC,IAAT,EAAehD,GAAf,EAAoBW,KAApB,EAA2B;EACvC,MAAMkE,MAAM,GAAGlE,KAAK,CAACV,IAArB,CADuC;;EAGvC,MAAID,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAAC5C,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAN;EACD,GALsC;;;EAOvC,MAAIyH,MAAM,CAAC7E,GAAD,CAAN,KAAgBJ,SAApB,EAA+B;EAC7B,WAAO,IAAP;EACD,GATsC;;;EAWvC,MAAI4F,OAAO,GAAGX,MAAM,CAAC7E,GAAD,CAAN,CAAYmF,IAAZ,IAAoB,EAAlC;;EACA,OAAK,IAAIhL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqL,OAAO,CAACjL,MAA5B,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,QAAI6I,IAAI,CAAC/C,IAAL,CAAUuF,OAAO,CAACrL,CAAD,CAAjB,MAA0B,IAA9B,EAAoC;EAClC,aAAO,KAAP;EACD;EACF;;EACD,MAAI0K,MAAM,CAAC7E,GAAD,CAAN,CAAYoD,GAAZ,KAAoBxD,SAAxB,EAAmC;EACjC,WAAO2F,KAAK,CAACvC,IAAD,EAAO6B,MAAM,CAAC7E,GAAD,CAAN,CAAYoD,GAAnB,EAAwBzC,KAAxB,CAAZ,CADiC;EAElC;;EACD,SAAO,IAAP;EACD,CArBD;;EAuBA,WAAc,GAAG4E,KAAjB;;ECtBA;;;;;EAIA,SAAW,GAAG,cAAA,CAAStF,IAAT,EAAemE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC1C8E,EAAAA,GAAG,CAAC,IAAD,EAAOxF,IAAP,EAAamE,MAAb,EAAqBzD,KAArB,CAAH;EACA,SAAO,IAAP;EACD,CAHD;;;;EAMA,WAAe,GAAG,gBAAA,CAASV,IAAT,EAAemE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC9C,MAAI4E,OAAK,CAAC,IAAD,EAAOtF,IAAP,EAAaU,KAAb,CAAT,EAA8B;EAC5B8E,IAAAA,GAAG,CAAC,IAAD,EAAOxF,IAAP,EAAamE,MAAb,EAAqBzD,KAArB,CAAH;EACD;;EACD,SAAO,IAAP;EACD,CALD;;;;;;;EAWA,aAAa,GAAG,kBAAA,CAASV,IAAT,EAAemE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC5CuE,EAAAA,OAAK,CAAC,IAAD,EAAOjF,IAAP,EAAamE,MAAb,EAAqBzD,KAArB,CAAL;EACA,SAAO,IAAP;EACD,CAHD;;;;;;;EASA,aAAa,GAAG,kBAAA,CAASV,IAAT,EAAeU,KAAf,EAAsB;EACpC,SAAO4E,OAAK,CAAC,IAAD,EAAOtF,IAAP,EAAaU,KAAb,CAAZ;EACD,CAFD;;;;;;;;;MC7BM+E;;;EACJ,kBAAuB;EAAA,QAAXxL,IAAW,uEAAJ,EAAI;;EAAA;;EACrBA,IAAAA,IAAI,GAAGyL,MAAM,CAACzL,IAAD,CAAb;EACA,QAAI0L,GAAG,GAAGjI,KAAS,CAACzD,IAAD,CAAnB,CAFqB;;EAIrB,SAAKA,IAAL,GAAY0L,GAAG,CAAC1L,IAAJ,IAAY,EAAxB;EACA,SAAK8C,KAAL,GAAa4I,GAAG,CAAC5I,KAAjB;EACA,SAAKK,OAAL,GAAeuI,GAAG,CAACvI,OAAnB;EACA,SAAK0C,IAAL,GAAY6F,CAAY,IAAxB;EACA,SAAKzG,QAAL,GAAgByG,CAAgB,IAAhC;EAEA,SAAKhI,GAAL,GAAWgI,GAAG,CAAChI,GAAJ,IAAW,EAAtB;EACA,SAAKC,IAAL,GAAY+H,GAAG,CAAC/H,IAAJ,IAAY,EAAxB;EACA,SAAKoC,IAAL,GAAY,EAAZ;EACA,SAAK4F,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKtG,EAAL,GAAUxF,GAAM,CAAC4L,GAAG,CAAC5I,KAAL,CAAhB;EACA,SAAKoG,GAAL,GAAW,MAAX,CAhBqB;;;EAkBrB,QAAIwC,GAAG,CAACxH,KAAR,EAAe;EACb,WAAKA,KAAL,GAAawH,GAAG,CAACxH,KAAjB;EACD;EACF;;;;;;0BAEGnE,KAAK;EACP,UAAI2L,GAAG,GAAGjI,KAAS,CAAC1D,GAAD,CAAnB;EAEA,WAAKC,IAAL,GAAY0L,GAAG,CAAC1L,IAAhB;EACA,WAAK8C,KAAL,GAAa4I,GAAG,CAAC5I,KAAjB;EACA,aAAO,IAAP;EACD;;;;;;;;EAIH0I,IAAI,CAAClB,SAAL,CAAeuB,KAAf,GAAuB,YAAW;EAChC,MAAI/C,IAAI,GAAG,IAAI0C,IAAJ,CAAS,KAAKxL,IAAd,CAAX;EACA8I,EAAAA,IAAI,CAACpF,GAAL,GAAW,KAAKA,GAAhB;EACAoF,EAAAA,IAAI,CAACnF,IAAL,GAAY,KAAKA,IAAjB;EACAmF,EAAAA,IAAI,CAAC/C,IAAL,GAAY7D,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkB,KAAKvD,IAAvB,CAAZ,CAJgC;;;EAOhC,SAAO+C,IAAP;EACD,CARD;;EAUA5G,MAAM,CAACoH,MAAP,CAAckC,IAAI,CAAClB,SAAnB,EAA8BwB,OAA9B;EACA5J,MAAM,CAACoH,MAAP,CAAckC,IAAI,CAAClB,SAAnB,EAA8ByB,GAA9B;EAEA,UAAc,GAAGP,IAAjB;;ECpDA;EACA,SAAa,GAAG,eAASpK,CAAT,EAAY;EAC1B,MAAI,KAAKf,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,EAAP;EACD,GAHyB;;;EAK1B,MAAI,KAAK2L,KAAL,CAAWC,KAAf,EAAsB;EACpB,QAAI7K,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAKsG,KAAL,CAAWC,KAAX,CAAiB7K,CAAjB,CAAP;EACD;;EACD,WAAO,KAAK4K,KAAL,CAAWC,KAAlB;EACD;;EACD,MAAIA,KAAK,GAAG,CAAC,KAAKC,IAAL,CAAUC,GAAV,CAAc,KAAK3G,KAAnB,CAAD,CAAZ;;EACA,OAAK,IAAIvF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKI,MAAL,GAAc,CAAlC,EAAqCJ,CAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAIqF,EAAE,GAAG2G,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAL,CAAwBuL,IAAjC;;EACA,QAAItG,EAAE,KAAK,IAAX,EAAiB;;EAEf6E,MAAAA,OAAO,CAACiC,KAAR,CAAc,qDAAqD,KAAK5G,KAA1D,GAAkE,GAAhF;EACA;EACD;;EACD,QAAIsD,IAAI,GAAG,KAAKoD,IAAL,CAAUC,GAAV,CAAc7G,EAAd,CAAX;EACA2G,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX,EAR2C;;EAU3C,QAAI1H,CAAC,KAAKsE,SAAN,IAAmBtE,CAAC,KAAKnB,CAA7B,EAAgC;EAC9B,aAAOgM,KAAK,CAAC7K,CAAD,CAAZ;EACD;EACF,GAzByB;;;EA2B1B,MAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,WAAOuG,KAAK,CAAC7K,CAAD,CAAZ;EACD;;EACD,SAAO6K,KAAP;EACD,CA/BD;;;;EAkCA,SAAa,GAAG,cAAA,CAASK,SAAT,EAAoB;EAAA;;EAClC,MAAIA,SAAJ,EAAe;EACb,WAAO,KAAKC,SAAL,CAAe,KAAK/G,KAApB,EAA2B,KAAKnF,MAAhC,CAAP;EACD,GAHiC;;;EAKlC,MAAI4L,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAIO,QAAQ,GAAGP,KAAK,CAACQ,GAAN,CAAU,UAAA/K,CAAC;EAAA,WAAIA,CAAC,CAACmK,KAAF,EAAJ;EAAA,GAAX,CAAf,CANkC;;EAQlCW,EAAAA,QAAQ,CAACpK,OAAT,CAAiB,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEzB,IAAA,KAAI,CAACiM,IAAL,CAAUX,GAAV,CAAc7J,CAAd;;EACA,QAAI8K,QAAQ,CAACvM,CAAC,GAAG,CAAL,CAAZ,EAAqB;EACnByB,MAAAA,CAAC,CAACkK,IAAF,GAASY,QAAQ,CAACvM,CAAC,GAAG,CAAL,CAAR,CAAgBqF,EAAzB;EACD;;EACD,QAAIkH,QAAQ,CAACvM,CAAC,GAAG,CAAL,CAAZ,EAAqB;EACnByB,MAAAA,CAAC,CAACiK,IAAF,GAASa,QAAQ,CAACvM,CAAC,GAAG,CAAL,CAAR,CAAgBqF,EAAzB;EACD;EACF,GATD;EAUA,SAAO,KAAKiH,SAAL,CAAeC,QAAQ,CAAC,CAAD,CAAR,CAAYlH,EAA3B,EAA+BkH,QAAQ,CAACnM,MAAxC,CAAP;EACD,CAnBD;;;;EAsBA,YAAgB,GAAG,iBAAA,GAAW;EAC5B,MAAI4L,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,SAAOA,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAZ;EACD,CAHD;;;;EAMA,SAAa,GAAG,cAAA,CAASqM,MAAT,EAAiB;EAC/B,MAAI,KAAKrM,MAAL,KAAgB,CAAhB,IAAqB,CAACqM,MAA1B,EAAkC;EAChC,WAAO,KAAP;EACD;;EACD,MAAI,KAAKlH,KAAL,KAAekH,MAAnB,EAA2B;EACzB,WAAO,IAAP;EACD,GAN8B;;;EAQ/B,MAAI,KAAKV,KAAL,CAAWC,KAAf,EAAsB;EACpB,QAAIA,MAAK,GAAG,KAAKD,KAAL,CAAWC,KAAvB;;EACA,SAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,MAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIgM,MAAK,CAAChM,CAAD,CAAL,CAASqF,EAAT,KAAgBoH,MAApB,EAA4B;EAC1B,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD,GAhB8B;;;EAkB/B,MAAIC,MAAM,GAAG,KAAKnH,KAAlB;;EACA,OAAK,IAAIvF,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG,KAAKI,MAAL,GAAc,CAAlC,EAAqCJ,EAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAI6I,IAAI,GAAG,KAAKoD,IAAL,CAAUC,GAAV,CAAcQ,MAAd,CAAX;;EACA,QAAI7D,IAAI,KAAKpD,SAAb,EAAwB;EACtByE,MAAAA,OAAO,CAACiC,KAAR,+DAAqEO,MAArE,0BAA2F,KAAKnH,KAAhG,UADsB;;EAGtB,aAAO,KAAP;EACD;;EACD,QAAIsD,IAAI,CAAC8C,IAAL,KAAcc,MAAlB,EAA0B;EACxB,aAAO,IAAP;EACD;;EACDC,IAAAA,MAAM,GAAG7D,IAAI,CAAC8C,IAAd;EACD;;EACD,SAAO,KAAP;EACD,CAhCD;;;;EAmCA,aAAiB,GAAG,kBAAA,GAAW;EAC7B,SAAO,KAAKK,KAAL,GAAaW,MAAb,CAAoB,UAAAlL,CAAC;EAAA,WAAIA,CAAC,CAAC1B,IAAF,KAAW,EAAf;EAAA,GAArB,EAAwCK,MAA/C;EACD,CAFD;;;;;;;;;;EClGA,IAAMwM,OAAO,GAAG,SAAVA,OAAU,CAAS9M,GAAT,EAAc;EAC5B,SAAOA,GAAG,CAACmD,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAP;EACD,CAFD;;;;EAKA,QAAY,GAAG,gBAAwC;EAAA,MAA/BwE,OAA+B,uEAArB,EAAqB;EAAA,MAAjBoF,OAAiB;EAAA,MAARC,MAAQ;;EACrD,MAAI,OAAOrF,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,QAAIA,OAAO,KAAK,QAAhB,EAA0B;EACxBA,MAAAA,OAAO,GAAG;EACRU,QAAAA,UAAU,EAAE,IADJ;EAERnG,QAAAA,OAAO,EAAE,IAFD;EAGRiG,QAAAA,SAAS,EAAE,IAHH;EAIRI,QAAAA,WAAW,EAAE,IAJL;EAKRH,QAAAA,QAAQ,EAAE,IALF;EAMRK,QAAAA,aAAa,EAAE,IANP;EAORvD,QAAAA,QAAQ,EAAE,IAPF;EAQR6C,QAAAA,MAAM,EAAE;EARA,OAAV;EAUD,KAXD,MAWO,IAAIJ,OAAO,KAAK,OAAhB,EAAyB;EAC9BA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,IAHL;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRnG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE;EANF,OAAV;EAQD,KATM,MASA,IAAIyC,OAAO,KAAK,SAAhB,EAA2B;EAChCA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,KAHL;;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRnG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE,IANF;EAOR9B,QAAAA,OAAO,EAAE;EAPD,OAAV;EASD,KAVM,MAUA,IAAIuE,OAAO,KAAK,MAAhB,EAAwB;EAC7BA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,IAHL;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRnG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE,IANF;EAORY,QAAAA,IAAI,EAAE;EAPE,OAAV;EASD,KAVM,MAUA;EACL6B,MAAAA,OAAO,GAAG,EAAV;EACD;EACF;;EACD,MAAIuE,KAAK,GAAG,KAAKA,KAAL,EAAZ,CA9CqD;;EAgDrD,MAAIe,MAAM,GAAG,KAAb;;EACA,MAAIf,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAL,CAASN,IAAT,KAAkB,IAA9B,IAAsCM,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAL,CAAwBuL,IAAxB,KAAiC,IAA3E,EAAiF;EAC/EoB,IAAAA,MAAM,GAAG,IAAT;EACD;;EACD,MAAIhN,IAAI,GAAGiM,KAAK,CAACjI,MAAN,CAAa,UAACjE,GAAD,EAAM2B,CAAN,EAASzB,CAAT,EAAe;EACrCyH,IAAAA,OAAO,CAACW,IAAR,GAAe0E,MAAM,IAAI9M,CAAC,KAAKgM,KAAK,CAAC5L,MAAN,GAAe,CAA9C;EACA,QAAIsH,OAAO,GAAG,IAAd;EACA,QAAIC,QAAQ,GAAG,IAAf;;EACA,QAAIoF,MAAM,KAAK,KAAf,EAAsB;;EAEpB,UAAI/M,CAAC,KAAK,CAAN,IAAW6M,OAAf,EAAwB;EACtBnF,QAAAA,OAAO,GAAG,KAAV;EACD,OAJmB;;;EAMpB,UAAI1H,CAAC,KAAKgM,KAAK,CAAC5L,MAAN,GAAe,CAArB,IAA0B0M,MAA9B,EAAsC;EACpCnF,QAAAA,QAAQ,GAAG,KAAX;EACD;EACF;;EACD,QAAIqF,GAAG,GAAGvL,CAAC,CAACwL,OAAF,CAAUxF,OAAV,EAAmBC,OAAnB,EAA4BC,QAA5B,CAAV,CAdqC;;;;EAkBrC,WAAO7H,GAAG,GAAGkN,GAAb;EACD,GAnBU,EAmBR,EAnBQ,CAAX,CApDqD;;EAyErD,MAAID,MAAM,KAAK,IAAX,IAAmBD,MAAvB,EAA+B;EAC7B/M,IAAAA,IAAI,GAAG6M,OAAO,CAAC7M,IAAD,CAAd;EACD;;EACD,MAAI0H,OAAO,CAAC1E,IAAR,KAAiB,IAArB,EAA2B;EACzBhD,IAAAA,IAAI,GAAGA,IAAI,CAACgD,IAAL,EAAP;EACD;;EACD,SAAOhD,IAAP;EACD,CAhFD;;;;;;ECLA;EACA,QAAY,GAAG,aAAA,GAAW;EACxB,MAAIiM,KAAK,GAAG,KAAKA,KAAL,EAAZ;;EACA,MAAIA,KAAK,CAAC5L,MAAN,GAAe,CAAnB,EAAsB;;EAEpB4L,IAAAA,KAAK,CAAC,CAAD,CAAL,CAASvI,GAAT,GAAeuI,KAAK,CAAC,CAAD,CAAL,CAASvI,GAAT,CAAaR,OAAb,CAAqB,MAArB,EAA6B,EAA7B,CAAf,CAFoB;;EAIpB,QAAIiK,QAAQ,GAAGlB,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAApB;EACA8M,IAAAA,QAAQ,CAACxJ,IAAT,GAAgBwJ,QAAQ,CAACxJ,IAAT,CAAcT,OAAd,CAAsB,MAAtB,EAA8B,EAA9B,CAAhB;EACD;;EACD,SAAO,IAAP;EACD,CAVD;;;;;;ECDA,IAAMkK,aAAa,GAAG,WAAtB;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASxF,MAAT,EAAiBhE,KAAjB,EAAwB;;EAE1C,MAAIuJ,aAAa,CAACxK,IAAd,CAAmBiB,KAAnB,CAAJ,EAA+B;EAC7B,QAAIuE,UAAU,GAAGP,MAAM,CAACyF,KAAP,CAAa,MAAb,CAAjB;EACA,WAAOzJ,KAAK,GAAGuE,UAAf;EACD;;EACD,SAAOP,MAAP;EACD,CAPD;;;EAUA,IAAM0F,aAAa,GAAG,SAAhBA,aAAgB,CAASC,WAAT,EAAsBhB,QAAtB,EAAgC;;EAEpDA,EAAAA,QAAQ,CAAC,CAAD,CAAR,CAAY9I,GAAZ,GAAkB8J,WAAW,CAAC,CAAD,CAAX,CAAe9J,GAAjC;EACA,MAAIyJ,QAAQ,GAAGK,WAAW,CAACA,WAAW,CAACnN,MAAZ,GAAqB,CAAtB,CAA1B,CAHoD;;EAMpD,MAAIoN,OAAO,GAAGjB,QAAQ,CAACA,QAAQ,CAACnM,MAAT,GAAkB,CAAnB,CAAtB;EACAoN,EAAAA,OAAO,CAAC9J,IAAR,GAAe0J,WAAW,CAACF,QAAQ,CAACxJ,IAAV,EAAgB8J,OAAO,CAAC9J,IAAxB,CAA1B,CAPoD;;EASpDwJ,EAAAA,QAAQ,CAACxJ,IAAT,GAAgB,EAAhB,CAToD;;EAYpD,MAAIwJ,QAAQ,CAACxJ,IAAT,KAAkB,EAAtB,EAA0B;EACxBwJ,IAAAA,QAAQ,CAACxJ,IAAT,IAAiB,GAAjB;EACD;EACF,CAfD;;;EAkBA,IAAM+J,QAAQ,GAAG,SAAXA,QAAW,CAASF,WAAT,EAAsBhB,QAAtB,EAAgCN,IAAhC,EAAsC;EACrD,MAAIyB,UAAU,GAAGH,WAAW,CAACA,WAAW,CAACnN,MAAZ,GAAqB,CAAtB,CAA5B;EACA,MAAIuN,OAAO,GAAGpB,QAAQ,CAACA,QAAQ,CAACnM,MAAT,GAAkB,CAAnB,CAAtB;EACA,MAAIwN,OAAO,GAAGF,UAAU,CAAC/B,IAAzB,CAHqD;;EAKrD+B,EAAAA,UAAU,CAAC/B,IAAX,GAAkBY,QAAQ,CAAC,CAAD,CAAR,CAAYlH,EAA9B,CALqD;;EAOrDsI,EAAAA,OAAO,CAAChC,IAAR,GAAeiC,OAAf,CAPqD;;EASrD,MAAIA,OAAJ,EAAa;;EAEX,QAAIC,SAAS,GAAG5B,IAAI,CAACC,GAAL,CAAS0B,OAAT,CAAhB;EACAC,IAAAA,SAAS,CAACnC,IAAV,GAAiBiC,OAAO,CAACtI,EAAzB;EACD,GAboD;;;EAerD,MAAIyI,QAAQ,GAAGP,WAAW,CAAC,CAAD,CAAX,CAAelI,EAA9B;;EACA,MAAIyI,QAAJ,EAAc;EACZ,QAAIN,OAAO,GAAGjB,QAAQ,CAAC,CAAD,CAAtB;EACAiB,IAAAA,OAAO,CAAC9B,IAAR,GAAeoC,QAAf;EACD;EACF,CApBD;;;EAuBA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASC,IAAT,EAAe;EAC5B,SAAOA,IAAI,CAACrB,MAAL,CAAY,UAACvL,CAAD,EAAIpB,CAAJ,EAAU;EAC3B,WAAOgO,IAAI,CAACtJ,OAAL,CAAatD,CAAb,MAAoBpB,CAA3B;EACD,GAFM,CAAP;EAGD,CAJD;;;EAOA,IAAMiO,YAAY,GAAG,SAAfA,YAAe,CAASrG,MAAT,EAAiBsG,SAAjB,EAA4BC,GAA5B,EAAiC;EACpD,MAAIZ,WAAW,GAAG3F,MAAM,CAACmE,KAAP,CAAaC,KAAb,IAAsBpE,MAAM,CAACoE,KAAP,EAAxC;EACA,MAAIO,QAAQ,GAAG2B,SAAS,CAACnC,KAAV,CAAgBC,KAAhB,IAAyBkC,SAAS,CAAClC,KAAV,EAAxC,CAFoD;;EAIpDsB,EAAAA,aAAa,CAACC,WAAD,EAAchB,QAAd,CAAb,CAJoD;;EAMpDkB,EAAAA,QAAQ,CAACF,WAAD,EAAchB,QAAd,EAAwB3E,MAAM,CAACqE,IAA/B,CAAR,CANoD;;;EAUpD,MAAImC,SAAS,GAAG,CAACxG,MAAD,CAAhB;EACA,MAAIyG,KAAK,GAAGzG,MAAM,CAACrC,KAAnB;EACA,MAAI+I,IAAI,GAAG,CAACH,GAAD,CAAX;EAEAG,EAAAA,IAAI,GAAGA,IAAI,CAACC,MAAL,CAAYJ,GAAG,CAACK,OAAJ,EAAZ,CAAP,CAdoD;;EAgBpDF,EAAAA,IAAI,CAACnM,OAAL,CAAa,UAAAsM,MAAM,EAAI;;EAErB,QAAIC,YAAY,GAAGD,MAAM,CAACT,IAAP,CAAYrB,MAAZ,CAAmB,UAAAtL,CAAC,EAAI;EACzC,aAAOA,CAAC,CAACgN,KAAF,CAAQA,KAAR,CAAP;EACD,KAFkB,CAAnB;EAGAD,IAAAA,SAAS,GAAGA,SAAS,CAACG,MAAV,CAAiBG,YAAjB,CAAZ;EACD,GAND,EAhBoD;;EAwBpDN,EAAAA,SAAS,GAAGL,MAAM,CAACK,SAAD,CAAlB;EACAA,EAAAA,SAAS,CAACjM,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAACjB,MAAF,IAAY8N,SAAS,CAAC9N,MAAtB;EACD,GAFD;EAGA,SAAOwH,MAAP;EACD,CA7BD;;EA8BA,UAAc,GAAGqG,YAAjB;;EC3FA,IAAM1G,UAAQ,GAAG,GAAjB;;;EAIA,IAAM+F,eAAa,GAAG,SAAhBA,aAAgB,CAASf,QAAT,EAAmB;;;EAGvC,MAAIW,QAAQ,GAAGX,QAAQ,CAACA,QAAQ,CAACnM,MAAT,GAAkB,CAAnB,CAAvB;;EACA,MAAImH,UAAQ,CAAC5E,IAAT,CAAcuK,QAAQ,CAACxJ,IAAvB,MAAiC,KAArC,EAA4C;EAC1CwJ,IAAAA,QAAQ,CAACxJ,IAAT,IAAiB,GAAjB;EACD;;EACD;EACD,CARD;;;EAWA,IAAM+J,UAAQ,GAAG,SAAXA,QAAW,CAASkB,IAAT,EAAeT,SAAf,EAA0B3B,QAA1B,EAAoC;;EAEnD,MAAIW,QAAQ,GAAGX,QAAQ,CAACA,QAAQ,CAACnM,MAAT,GAAkB,CAAnB,CAAvB;EACA8M,EAAAA,QAAQ,CAACvB,IAAT,GAAgBgD,IAAI,CAACpJ,KAArB,CAHmD;;EAKnD,MAAI0G,IAAI,GAAG0C,IAAI,CAAC1C,IAAhB;EACA,MAAI1G,KAAK,GAAG0G,IAAI,CAACC,GAAL,CAASyC,IAAI,CAACpJ,KAAd,CAAZ;;EACA,MAAIA,KAAK,CAACmG,IAAV,EAAgB;EACd,QAAI9D,MAAM,GAAGqE,IAAI,CAACC,GAAL,CAAS3G,KAAK,CAACmG,IAAf,CAAb;EACA9D,IAAAA,MAAM,CAAC+D,IAAP,GAAcuC,SAAS,CAAC3I,KAAxB;EACD,GAVkD;;;;EAanDgH,EAAAA,QAAQ,CAAC,CAAD,CAAR,CAAYb,IAAZ,GAAmBiD,IAAI,CAAC3C,KAAL,CAAW,CAAX,EAAcN,IAAjC,CAbmD;;EAenDiD,EAAAA,IAAI,CAAC3C,KAAL,CAAW,CAAX,EAAcN,IAAd,GAAqBwB,QAAQ,CAAC7H,EAA9B;EACD,CAhBD;;EAkBA,IAAM0I,QAAM,GAAG,SAATA,MAAS,CAASC,IAAT,EAAe;EAC5B,SAAOA,IAAI,CAACrB,MAAL,CAAY,UAACvL,CAAD,EAAIpB,CAAJ,EAAU;EAC3B,WAAOgO,IAAI,CAACtJ,OAAL,CAAatD,CAAb,MAAoBpB,CAA3B;EACD,GAFM,CAAP;EAGD,CAJD;;;EAOA,IAAM4O,UAAU,GAAG,SAAbA,UAAa,CAAS5L,QAAT,EAAmBkL,SAAnB,EAA8BC,GAA9B,EAAmC;EACpD,MAAMU,SAAS,GAAG7L,QAAQ,CAACuC,KAA3B;EACA,MAAIgH,QAAQ,GAAG2B,SAAS,CAAClC,KAAV,EAAf,CAFoD;;EAIpDsB,EAAAA,eAAa,CAACf,QAAD,AAAA,CAAb,CAJoD;;EAMpDkB,EAAAA,UAAQ,CAACzK,QAAD,EAAWkL,SAAX,EAAsB3B,QAAtB,CAAR,CANoD;;EAQpD,MAAI6B,SAAS,GAAG,CAACpL,QAAD,CAAhB;EACA,MAAIsL,IAAI,GAAG,CAACH,GAAD,CAAX;EACAG,EAAAA,IAAI,GAAGA,IAAI,CAACC,MAAL,CAAYJ,GAAG,CAACK,OAAJ,EAAZ,CAAP;EACAF,EAAAA,IAAI,CAACnM,OAAL,CAAa,UAAA1B,CAAC,EAAI;;EAEhB,QAAIiO,YAAY,GAAGjO,CAAC,CAACuN,IAAF,CAAOrB,MAAP,CAAc,UAAAtL,CAAC,EAAI;EACpC,aAAOA,CAAC,CAACgN,KAAF,CAAQQ,SAAR,KAAsBxN,CAAC,CAACgN,KAAF,CAAQH,SAAS,CAAC3I,KAAlB,CAA7B;EACD,KAFkB,CAAnB;EAGA6I,IAAAA,SAAS,GAAGA,SAAS,CAACG,MAAV,CAAiBG,YAAjB,CAAZ;EACD,GAND,EAXoD;;EAmBpDN,EAAAA,SAAS,GAAGL,QAAM,CAACK,SAAD,CAAlB,CAnBoD;;EAqBpDA,EAAAA,SAAS,CAACjM,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAACjB,MAAF,IAAY8N,SAAS,CAAC9N,MAAtB,CADqB;;EAGrB,QAAIiB,CAAC,CAACkE,KAAF,KAAYsJ,SAAhB,EAA2B;EACzBxN,MAAAA,CAAC,CAACkE,KAAF,GAAU2I,SAAS,CAAC3I,KAApB;EACD;EACF,GAND;EAOA,SAAOvC,QAAP;EACD,CA7BD;;EA8BA,WAAc,GAAG4L,UAAjB;;ECtEA;EACA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAASX,GAAT,EAAc9I,EAAd,EAAkB0J,YAAlB,EAAgCnL,KAAhC,EAAuC;EACvD,MAAIwG,GAAG,GAAG+D,GAAG,CAACK,OAAJ,EAAV;EACApE,EAAAA,GAAG,CAACgC,IAAJ,CAAS+B,GAAT;EAEA/D,EAAAA,GAAG,CAACjI,OAAJ,CAAY,UAAA1B,CAAC,EAAI;;EAEf,QAAIuO,MAAM,GAAGvO,CAAC,CAACuN,IAAF,CAAOiB,IAAP,CAAY,UAAA5N,CAAC;EAAA,aAAIA,CAAC,CAACgN,KAAF,CAAQhJ,EAAR,CAAJ;EAAA,KAAb,CAAb;;EACA,QAAI,CAAC2J,MAAL,EAAa;EACX;EACD;;EACDA,IAAAA,MAAM,CAAC5O,MAAP,IAAiB2O,YAAjB,CANe;;EAQf,QAAIC,MAAM,CAACzJ,KAAP,KAAiBF,EAArB,EAAyB;EACvB2J,MAAAA,MAAM,CAACzJ,KAAP,GAAe3B,KAAK,CAACyB,EAArB;EACD;EACF,GAXD,EAJuD;;EAiBvD8I,EAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAASrB,MAAT,CAAgB,UAAAtL,CAAC,EAAI;EAC9B,QAAI,CAACA,CAAC,CAACkE,KAAH,IAAY,CAAClE,CAAC,CAACjB,MAAnB,EAA2B;EACzB,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD,GALU,CAAX;EAMD,CAvBD;;;;;;EA4BA,IAAM8O,YAAY,GAAG,SAAfA,YAAe,CAASF,MAAT,EAAiBb,GAAjB,EAAsB;EACzC,MAAIlC,IAAI,GAAGkC,GAAG,CAAClC,IAAJ,EAAX;EACA,MAAID,KAAK,GAAGgD,MAAM,CAACjD,KAAP,CAAaC,KAAb,IAAsBgD,MAAM,CAAChD,KAAP,EAAlC,CAFyC;;EAKzC,MAAIN,IAAI,GAAGO,IAAI,CAACC,GAAL,CAASF,KAAK,CAAC,CAAD,CAAL,CAASN,IAAlB,KAA2B,EAAtC;EACA,MAAI9H,KAAK,GAAGqI,IAAI,CAACC,GAAL,CAASF,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAL,CAAwBuL,IAAjC,KAA0C,EAAtD;;EAEA,MAAIK,KAAK,CAAC,CAAD,CAAL,CAAShH,QAAT,IAAqB0G,IAAI,CAAC1G,QAA9B,EAAwC;EACtC0G,IAAAA,IAAI,CAACyD,GAAL,CAASzD,IAAI,CAAC1G,QAAd;EACA0G,IAAAA,IAAI,CAAChI,IAAL,IAAa,GAAb;EACD,GAXwC;;;EAczCoL,EAAAA,SAAS,CAACX,GAAD,EAAMa,MAAM,CAACzJ,KAAb,EAAoByJ,MAAM,CAAC5O,MAA3B,EAAmCwD,KAAnC,CAAT,CAdyC;;EAiBzC,MAAI8H,IAAJ,EAAU;EACRA,IAAAA,IAAI,CAACC,IAAL,GAAY/H,KAAK,CAACyB,EAAlB;EACD,GAnBwC;;;EAqBzC,MAAIzB,KAAJ,EAAW;EACTA,IAAAA,KAAK,CAAC8H,IAAN,GAAaA,IAAI,CAACrG,EAAlB;EACD,GAvBwC;;;;;EA6B1C,CA7BD;;EA8BA,WAAc,GAAG6J,YAAjB;;;;ECrDA,YAAc,GAAG,iBAAA,CAAShB,SAAT,EAAoBC,GAApB,EAAyB;EACxCiB,EAAAA,MAAM,CAAC,IAAD,EAAOlB,SAAP,EAAkBC,GAAlB,CAAN;EACA,SAAO,IAAP;EACD,CAHD;;;;EAMA,aAAe,GAAG,kBAAA,CAASD,SAAT,EAAoBC,GAApB,EAAyB;EACzCkB,EAAAA,OAAO,CAAC,IAAD,EAAOnB,SAAP,EAAkBC,GAAlB,CAAP;EACA,SAAO,IAAP;EACD,CAHD;;EAKA,YAAc,GAAG,iBAAA,CAASA,GAAT,EAAc;EAC7Be,EAAAA,OAAY,CAAC,IAAD,EAAOf,GAAP,CAAZ;EACA,SAAO,IAAP;EACD,CAHD;;;EAMA,WAAe,GAAG,gBAAA,CAASD,SAAT,EAAoBC,GAApB,EAAyB;;EAEzC,MAAImB,WAAW,GAAG,KAAKlP,MAAvB;EACAgP,EAAAA,MAAM,CAAC,IAAD,EAAOlB,SAAP,EAAkBC,GAAlB,CAAN,CAHyC;;EAMzC,MAAIoB,GAAG,GAAG,KAAKjD,SAAL,CAAe,KAAK/G,KAApB,EAA2B,KAAKnF,MAAhC,CAAV;EACAmP,EAAAA,GAAG,CAACnP,MAAJ,GAAakP,WAAb;EACAJ,EAAAA,OAAY,CAACK,GAAD,EAAMpB,GAAN,CAAZ;EACD,CATD;;;;;;EAcA,WAAe,GAAG,gBAAA,CAAS9M,CAAT,EAAY;EAC5B,MAAI2K,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAI3F,MAAM,GAAG;EACXuB,IAAAA,MAAM,EAAE,IADG;EAEXyF,IAAAA,KAAK,EAAE,IAFI;EAGXzJ,IAAAA,KAAK,EAAE;EAHI,GAAb;EAKA,MAAIwB,KAAK,GAAG4G,KAAK,CAACwD,SAAN,CAAgB,UAAA/N,CAAC;EAAA,WAAIA,CAAC,CAAC4D,EAAF,KAAShE,CAAC,CAACkE,KAAf;EAAA,GAAjB,CAAZ;;EACA,MAAIH,KAAK,KAAK,CAAC,CAAf,EAAkB;EAChB,WAAOiB,MAAP;EACD,GAV2B;;;EAY5B,MAAId,KAAK,GAAGyG,KAAK,CAACyD,KAAN,CAAY,CAAZ,EAAerK,KAAf,CAAZ;;EACA,MAAIG,KAAK,CAACnF,MAAN,GAAe,CAAnB,EAAsB;EACpBiG,IAAAA,MAAM,CAACuB,MAAP,GAAgB,KAAK0E,SAAL,CAAe/G,KAAK,CAAC,CAAD,CAAL,CAASF,EAAxB,EAA4BE,KAAK,CAACnF,MAAlC,CAAhB;EACD;;EACD,MAAIiN,KAAK,GAAGrB,KAAK,CAACyD,KAAN,CAAYrK,KAAZ,EAAmBA,KAAK,GAAG/D,CAAC,CAACjB,MAA7B,CAAZ;;EACA,MAAIiN,KAAK,CAACjN,MAAN,GAAe,CAAnB,EAAsB;EACpBiG,IAAAA,MAAM,CAACgH,KAAP,GAAe,KAAKf,SAAL,CAAee,KAAK,CAAC,CAAD,CAAL,CAAShI,EAAxB,EAA4BgI,KAAK,CAACjN,MAAlC,CAAf;EACD;;EACD,MAAIoF,GAAG,GAAGwG,KAAK,CAACyD,KAAN,CAAYrK,KAAK,GAAG/D,CAAC,CAACjB,MAAtB,EAA8B4L,KAAK,CAAC5L,MAApC,CAAV;;EACA,MAAIoF,GAAG,CAACpF,MAAJ,GAAa,CAAjB,EAAoB;EAClBiG,IAAAA,MAAM,CAACzC,KAAP,GAAe,KAAK0I,SAAL,CAAe9G,GAAG,CAAC,CAAD,CAAH,CAAOH,EAAtB,EAA0BG,GAAG,CAACpF,MAA9B,EAAsC,KAAK6L,IAA3C,CAAf;EACD;;EACD,SAAO5F,MAAP;EACD,CAzBD;;;;;;;;;;ECrCA;EACA,UAAY,GAAG,aAAA,GAA8B;EAAA,MAArBoB,OAAqB,uEAAX,EAAW;EAAA,MAAPjB,KAAO;EAC3C,MAAIkJ,GAAG,GAAG,EAAV,CAD2C;;EAG3C,MAAIjI,OAAO,CAAC1H,IAAZ,EAAkB;EAChB2P,IAAAA,GAAG,CAAC3P,IAAJ,GAAW,KAAKA,IAAL,EAAX;EACD;;EACD,MAAI0H,OAAO,CAACI,MAAZ,EAAoB;EAClB6H,IAAAA,GAAG,CAAC7H,MAAJ,GAAa,KAAK9H,IAAL,CAAU,QAAV,CAAb;EACD;;EACD,MAAI0H,OAAO,CAAC5E,KAAZ,EAAmB;EACjB6M,IAAAA,GAAG,CAAC7M,KAAJ,GAAY,KAAK9C,IAAL,CAAU,OAAV,CAAZ;EACD;;EACD,MAAI0H,OAAO,CAACvE,OAAZ,EAAqB;EACnBwM,IAAAA,GAAG,CAACxM,OAAJ,GAAc,KAAKnD,IAAL,CAAU,SAAV,CAAd;EACD;;EACD,MAAI0H,OAAO,CAAC7B,IAAZ,EAAkB;EAChB8J,IAAAA,GAAG,CAAC9J,IAAJ,GAAW,KAAK7F,IAAL,CAAU,MAAV,CAAX;EACD;;EACD,MAAI0H,OAAO,CAAC1E,IAAZ,EAAkB;EAChB,QAAI2M,GAAG,CAAC3P,IAAR,EAAc;EACZ2P,MAAAA,GAAG,CAAC3P,IAAJ,GAAW2P,GAAG,CAAC3P,IAAJ,CAASgD,IAAT,EAAX;EACD;;EACD,QAAI2M,GAAG,CAAC7H,MAAR,EAAgB;EACd6H,MAAAA,GAAG,CAAC7H,MAAJ,GAAa6H,GAAG,CAAC7H,MAAJ,CAAW9E,IAAX,EAAb;EACD;;EACD,QAAI2M,GAAG,CAACxM,OAAR,EAAiB;EACfwM,MAAAA,GAAG,CAACxM,OAAJ,GAAcwM,GAAG,CAACxM,OAAJ,CAAYH,IAAZ,EAAd;EACD;EACF,GA5B0C;;;EA8B3C,MAAI0E,OAAO,CAACuE,KAAZ,EAAmB;EACjB,QAAIvE,OAAO,CAACuE,KAAR,KAAkB,IAAtB,EAA4B;EAC1BvE,MAAAA,OAAO,CAACuE,KAAR,GAAgB,EAAhB;EACD;;EACD0D,IAAAA,GAAG,CAAC1D,KAAJ,GAAY,KAAKA,KAAL,GAAaQ,GAAb,CAAiB,UAAA/K,CAAC;EAAA,aAAIA,CAAC,CAACkO,IAAF,CAAOlI,OAAO,CAACuE,KAAf,EAAsBxF,KAAtB,CAAJ;EAAA,KAAlB,CAAZ;EACD;;EACD,SAAOkJ,GAAP;EACD,CArCD;;;;;;ECDA;EACA,aAAiB,GAAG,kBAAA,CAASE,IAAT,EAAe;;EAEjC,MAAI,CAACA,IAAL,EAAW;EACTA,IAAAA,IAAI,GAAG,IAAP;EACD;;EACD,MAAI3D,IAAI,GAAG,KAAKA,IAAhB,CALiC;;EAOjC,MAAID,KAAK,GAAG,EAAZ;;EACA,MAAM6D,QAAQ,GAAG,SAAXA,QAAW,CAASxK,EAAT,EAAa;EAC5B,QAAIwD,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS7G,EAAT,CAAX;;EACA,QAAI,CAACwD,IAAL,EAAW;EACT;EACD;;EACDmD,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX;;EACA,QAAIA,IAAI,CAAC6C,IAAT,EAAe;EACbmE,MAAAA,QAAQ,CAAChH,IAAI,CAAC8C,IAAN,CAAR,CADa;EAEd;EACF,GATD;;EAUA,MAAImE,GAAG,GAAG,KAAK9D,KAAL,EAAV;EACA,MAAIkB,QAAQ,GAAG4C,GAAG,CAACA,GAAG,CAAC1P,MAAJ,GAAa,CAAd,CAAlB;EACAyP,EAAAA,QAAQ,CAAC3C,QAAQ,CAACvB,IAAV,CAAR;;EACA,MAAIK,KAAK,CAAC5L,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,EAAP;EACD,GAvBgC;;;EAyBjC,MAAIiB,CAAC,GAAG,KAAKiL,SAAL,CAAeN,KAAK,CAAC,CAAD,CAAL,CAAS3G,EAAxB,EAA4B2G,KAAK,CAAC5L,MAAlC,CAAR;EACA,SAAOiB,CAAC,CAACgM,KAAF,CAAQuC,IAAR,CAAP;EACD,CA3BD;;;;EA8BA,cAAkB,GAAG,mBAAA,CAASA,IAAT,EAAe;;EAElC,MAAI,CAACA,IAAL,EAAW;EACTA,IAAAA,IAAI,GAAG,IAAP;EACD;;EACD,MAAI3D,IAAI,GAAG,KAAKA,IAAhB,CALkC;;EAOlC,MAAID,KAAK,GAAG,EAAZ;;EACA,MAAM+D,SAAS,GAAG,SAAZA,SAAY,CAAS1K,EAAT,EAAa;EAC7B,QAAIwD,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS7G,EAAT,CAAX;;EACA,QAAI,CAACwD,IAAL,EAAW;EACT;EACD;;EACDmD,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX;;EACA,QAAIA,IAAI,CAAC6C,IAAT,EAAe;EACbqE,MAAAA,SAAS,CAAClH,IAAI,CAAC6C,IAAN,CAAT,CADa;EAEd;EACF,GATD;;EAUA,MAAI7C,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS,KAAK3G,KAAd,CAAX;EACAwK,EAAAA,SAAS,CAAClH,IAAI,CAAC6C,IAAN,CAAT;;EACA,MAAIM,KAAK,CAAC5L,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,EAAP;EACD,GAtBiC;;;EAwBlC,MAAIiB,CAAC,GAAG,KAAKiL,SAAL,CAAeN,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAL,CAAwBiF,EAAvC,EAA2C2G,KAAK,CAAC5L,MAAjD,CAAR;EACA,SAAOiB,CAAC,CAACgM,KAAF,CAAQuC,IAAR,CAAP;EACD,CA1BD;;;;;;;EC/BA,aAAc,GAAG3N,MAAM,CAACoH,MAAP,CACf,EADe,EAEfC,QAFe,EAGfC,OAHe,EAIfC,SAJe,EAKfC,SALe,EAMfC,SANe,EAOfsG,YAPe,CAAjB;;ECAA;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAS5O,CAAT,EAAYuO,IAAZ,EAAkB;EACjC,MAAIA,IAAI,CAACxP,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,IAAP;EACD;;EACD,OAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4P,IAAI,CAACxP,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAImF,GAAG,GAAGyK,IAAI,CAAC5P,CAAD,CAAd,CADuC;;EAIvC,QAAImF,GAAG,CAAC+K,QAAJ,KAAiB,IAAjB,IAAyB/K,GAAG,CAACmB,QAAJ,KAAiB,IAA9C,EAAoD;;EAElD,UAAInB,GAAG,CAACI,KAAJ,KAAc,IAAd,IAAsBvF,CAAC,GAAG,CAA9B,EAAiC;EAC/B,eAAO,IAAP;EACD,OAJiD;;;EAMlD,UAAIqB,CAAC,CAAC0K,KAAF,CAAQoE,KAAR,KAAkB1K,SAAlB,IAA+BN,GAAG,CAACnB,IAAJ,KAAayB,SAA5C,IAAyDpE,CAAC,CAAC0K,KAAF,CAAQoE,KAAR,CAAczK,cAAd,CAA6BP,GAAG,CAACnB,IAAjC,MAA2C,IAAxG,EAA8G;EAC5G,eAAO,IAAP;EACD;EACF,KAbsC;;;EAevC,QAAImB,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAAyBH,GAAG,CAACmB,QAAJ,KAAiB,IAA9C,EAAoD;EAClD,aAAO,IAAP;EACD;EACF;;EACD,SAAO,KAAP;EACD,CAxBD;;EAyBA,eAAc,GAAG2J,QAAjB;;EC1BA;;EAGA,IAAMG,SAAS,GAAG,SAAZA,SAAY,CAASpE,KAAT,EAAgBvK,CAAhB,EAAmB0D,GAAnB,EAAwBkL,KAAxB,EAA+BjL,KAA/B,EAAsChF,MAAtC,EAA8C;EAC9D,MAAImF,KAAK,GAAG9D,CAAZ;;EACA,SAAOA,CAAC,GAAGuK,KAAK,CAAC5L,MAAjB,EAAyBqB,CAAC,IAAI,CAA9B,EAAiC;;EAE/B,QAAI4O,KAAK,IAAIrE,KAAK,CAACvK,CAAD,CAAL,CAASyD,SAAT,CAAmBmL,KAAnB,EAA0BjL,KAAK,GAAG3D,CAAlC,EAAqCrB,MAArC,CAAb,EAA2D;EACzD,aAAOqB,CAAP;EACD;;EACD,QAAI6O,KAAK,GAAG7O,CAAC,GAAG8D,KAAJ,GAAY,CAAxB,CAL+B;;EAO/B,QAAIJ,GAAG,CAACoL,GAAJ,KAAY9K,SAAZ,IAAyB6K,KAAK,KAAKnL,GAAG,CAACoL,GAA3C,EAAgD;EAC9C,aAAO9O,CAAP;EACD,KAT8B;;;EAW/B,QAAIuK,KAAK,CAACvK,CAAD,CAAL,CAASyD,SAAT,CAAmBC,GAAnB,EAAwBC,KAAK,GAAG3D,CAAhC,EAAmCrB,MAAnC,MAA+C,KAAnD,EAA0D;;EAExD,UAAI+E,GAAG,CAACqL,GAAJ,KAAY/K,SAAZ,IAAyB6K,KAAK,GAAGnL,GAAG,CAACqL,GAAzC,EAA8C;EAC5C,eAAO,IAAP;EACD;;EACD,aAAO/O,CAAP;EACD;EACF;;EACD,SAAOA,CAAP;EACD,CAtBD;;;EAyBA,IAAMgP,QAAQ,GAAG,SAAXA,QAAW,CAASzE,KAAT,EAAgBvK,CAAhB,EAAmBiP,OAAnB,EAA4BtL,KAA5B,EAAmChF,MAAnC,EAA2C;;EAE1D,MAAI,CAACsQ,OAAL,EAAc;EACZ,WAAO1E,KAAK,CAAC5L,MAAb;EACD,GAJyD;;;EAM1D,SAAOqB,CAAC,GAAGuK,KAAK,CAAC5L,MAAjB,EAAyBqB,CAAC,IAAI,CAA9B,EAAiC;EAC/B,QAAIuK,KAAK,CAACvK,CAAD,CAAL,CAASyD,SAAT,CAAmBwL,OAAnB,EAA4BtL,KAAK,GAAG3D,CAApC,EAAuCrB,MAAvC,MAAmD,IAAvD,EAA6D;EAC3D,aAAOqB,CAAP;EACD;EACF,GAVyD;;;EAY1D,SAAO,IAAP;EACD,CAbD;;;;EAgBA,IAAMkP,OAAO,GAAG,SAAVA,OAAU,CAAS3E,KAAT,EAAgB4D,IAAhB,EAAsBxK,KAAtB,EAA6BhF,MAA7B,EAAqC;EACnD,MAAIwQ,QAAQ,GAAG,EAAf;EACA,MAAInP,CAAC,GAAG,CAAR,CAFmD;;EAInD,OAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,IAAI,CAACxP,MAAzB,EAAiCmB,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI4D,GAAG,GAAGyK,IAAI,CAACrO,CAAD,CAAd,CADuC;;EAIvC,QAAI,CAACyK,KAAK,CAACvK,CAAD,CAAV,EAAe;;EAEb,UAAMoP,QAAQ,GAAGjB,IAAI,CAACH,KAAL,CAAWlO,CAAX,EAAc6E,IAAd,CAAmB,UAAA0K,MAAM;EAAA,eAAI,CAACA,MAAM,CAACZ,QAAZ;EAAA,OAAzB,CAAjB;;EACA,UAAIW,QAAQ,KAAK,KAAjB,EAAwB;EACtB;EACD,OALY;;;EAOb,aAAO,KAAP;EACD,KAZsC;;;EAevC,QAAI1L,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAAyBH,GAAG,CAAC4L,MAAJ,KAAe,IAA5C,EAAkD;EAChD,UAAIC,MAAM,GAAGP,QAAQ,CAACzE,KAAD,EAAQvK,CAAR,EAAWmO,IAAI,CAACrO,CAAC,GAAG,CAAL,CAAf,EAAwB4D,GAAxB,EAA6BC,KAA7B,AAAA,CAArB,CADgD;;EAGhD,UAAID,GAAG,CAACqL,GAAJ,KAAY/K,SAAZ,IAAyBuL,MAAM,GAAGvP,CAAT,GAAa0D,GAAG,CAACqL,GAA9C,EAAmD;EACjD,eAAO,KAAP;EACD,OAL+C;;;EAOhD,UAAIrL,GAAG,CAACoL,GAAJ,KAAY9K,SAAZ,IAAyBuL,MAAM,GAAGvP,CAAT,GAAa0D,GAAG,CAACoL,GAA9C,EAAmD;EACjD9O,QAAAA,CAAC,GAAGA,CAAC,GAAG0D,GAAG,CAACoL,GAAZ;EACA;EACD,OAV+C;;;EAYhD,UAAIS,MAAM,KAAK,IAAf,EAAqB;EACnB,eAAO,KAAP,CADmB;EAEpB;;EACDvP,MAAAA,CAAC,GAAGuP,MAAJ;EACA;EACD,KAhCsC;;;;;;;EAuCvC,QAAI7L,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAA0BH,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBL,GAAG,CAAC4L,MAAJ,KAAe,IAAnC,IAA2C3L,KAAK,GAAG3D,CAAR,GAAYrB,MAAM,GAAG,CAAhE,IAAqE4L,KAAK,CAACvK,CAAD,CAAL,CAASyD,SAAT,CAAmBjD,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBlE,GAAlB,EAAuB;EAAEK,MAAAA,GAAG,EAAE;EAAP,KAAvB,CAAnB,EAA2DJ,KAAK,GAAG3D,CAAnE,EAAsErB,MAAtE,MAAkF,IAAjL,IAA0L4L,KAAK,CAACvK,CAAD,CAAL,CAASyD,SAAT,CAAmBC,GAAnB,EAAwBC,KAAK,GAAG3D,CAAhC,EAAmCrB,MAAnC,MAA+C,IAA7O,EAAmP;EACjP,UAAI6Q,OAAO,GAAGxP,CAAd,CADiP;;;EAIjP,UAAI0D,GAAG,CAAC+K,QAAJ,IAAgBN,IAAI,CAACrO,CAAC,GAAG,CAAL,CAAxB,EAAiC;;EAE/B,YAAIyK,KAAK,CAACvK,CAAD,CAAL,CAASyD,SAAT,CAAmB0K,IAAI,CAACrO,CAAC,GAAG,CAAL,CAAvB,EAAgC6D,KAAK,GAAG3D,CAAxC,EAA2CrB,MAA3C,MAAuD,IAA3D,EAAiE;;;EAG/D,cAAI,CAAC4L,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAN,IAAiBuK,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAayD,SAAb,CAAuB0K,IAAI,CAACrO,CAAC,GAAG,CAAL,CAA3B,EAAoC6D,KAAK,GAAG3D,CAA5C,EAA+CrB,MAA/C,MAA2D,KAAhF,EAAuF;EACrFmB,YAAAA,CAAC,IAAI,CAAL;EACD;EACF;EACF,OAbgP;;;EAejPE,MAAAA,CAAC,IAAI,CAAL,CAfiP;;EAiBjP,UAAI0D,GAAG,CAACK,GAAJ,KAAY,IAAhB,EAAsB;;EAEpB,YAAI/D,CAAC,KAAKuK,KAAK,CAAC5L,MAAZ,IAAsB+E,GAAG,CAAC4L,MAAJ,KAAe,IAAzC,EAA+C;EAC7C,iBAAO,KAAP;EACD;EACF,OAtBgP;;;EAwBjP,UAAI5L,GAAG,CAAC4L,MAAJ,KAAe,IAAnB,EAAyB;;;;;EAKvBtP,QAAAA,CAAC,GAAG2O,SAAS,CAACpE,KAAD,EAAQvK,CAAR,EAAWQ,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBlE,GAAlB,EAAuB;EAAEI,UAAAA,KAAK,EAAE,KAAT;EAAgBC,UAAAA,GAAG,EAAE;EAArB,SAAvB,CAAX,EAAiEoK,IAAI,CAACrO,CAAC,GAAG,CAAL,CAArE,EAA8E6D,KAA9E,EAAqFhF,MAArF,CAAb;;EACA,YAAIqB,CAAC,KAAK,IAAV,EAAgB;EACd,iBAAO,KAAP,CADc;EAEf,SARsB;;;;EAWvB,YAAI0D,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBJ,KAAK,GAAG3D,CAAR,KAAcrB,MAAtC,EAA8C;EAC5C,iBAAO,KAAP,CAD4C;EAE7C;EACF;;EACD,UAAI+E,GAAG,CAAC+L,OAAR,EAAiB;EACfN,QAAAA,QAAQ,CAACxE,IAAT,CAAc6E,OAAd,EADe;;EAGf,YAAIxP,CAAC,GAAG,CAAJ,IAAS0D,GAAG,CAAC4L,MAAjB,EAAyB;EACvBH,UAAAA,QAAQ,CAACxE,IAAT,CAAc3K,CAAC,GAAG,CAAlB;EACD;EACF;;EACD;EACD,KAtFsC;;;EAyFvC,QAAI0D,GAAG,CAAC+K,QAAJ,KAAiB,IAArB,EAA2B;EACzB;EACD,KA3FsC;;;EA6FvC,QAAIlE,KAAK,CAACvK,CAAD,CAAL,CAAS0P,UAAT,MAAyBvB,IAAI,CAACrO,CAAC,GAAG,CAAL,CAA7B,IAAwCyK,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAjD,EAA0D;;EAExD,UAAIuK,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAayD,SAAb,CAAuBC,GAAvB,EAA4BC,KAAK,GAAG3D,CAApC,EAAuCrB,MAAvC,CAAJ,EAAoD;EAClDqB,QAAAA,CAAC,IAAI,CAAL;EACA;EACD;EACF,KAnGsC;;;EAqGvC,WAAO,KAAP;EACD,GA1GkD;;;;EA8GnD,MAAImP,QAAQ,CAACxQ,MAAT,GAAkB,CAAtB,EAAyB;;EAEvB,QAAIgK,GAAG,GAAG4B,KAAK,CAACyD,KAAN,CAAYmB,QAAQ,CAAC,CAAD,CAApB,EAAyBA,QAAQ,CAACA,QAAQ,CAACxQ,MAAT,GAAkB,CAAnB,CAAR,GAAgC,CAAzD,CAAV,CAFuB;;EAIvB,SAAK,IAAImP,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG9N,CAAxB,EAA2B8N,GAAG,EAA9B,EAAkC;EAChCnF,MAAAA,GAAG,CAACmF,GAAD,CAAH,GAAWnF,GAAG,CAACmF,GAAD,CAAH,IAAY,IAAvB,CADgC;EAEjC;;EACD,WAAOnF,GAAP;EACD,GAtHkD;;;EAwHnD,SAAO4B,KAAK,CAACyD,KAAN,CAAY,CAAZ,EAAehO,CAAf,CAAP;EACD,CAzHD;;EA0HA,eAAc,GAAGkP,OAAjB;;ECtKA,IAAMS,WAAW,GAAG,SAAdA,WAAc,CAASpF,KAAT,EAAgB4D,IAAhB,EAAsByB,OAAtB,EAA+B;EACjD,MAAI,CAACA,OAAD,IAAYA,OAAO,CAACjR,MAAR,KAAmB,CAAnC,EAAsC;EACpC,WAAOiR,OAAP;EACD,GAHgD;;;EAKjD,MAAIC,KAAK,GAAG1B,IAAI,CAACxJ,IAAL,CAAU,UAAA7E,CAAC;EAAA,WAAIA,CAAC,CAACiE,GAAN;EAAA,GAAX,CAAZ;;EACA,MAAI8L,KAAJ,EAAW;EACT,QAAIpE,QAAQ,GAAGlB,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAApB;EACAiR,IAAAA,OAAO,GAAGA,OAAO,CAAC1E,MAAR,CAAe,UAAAvC,GAAG;EAAA,aAAIA,GAAG,CAAC1F,OAAJ,CAAYwI,QAAZ,MAA0B,CAAC,CAA/B;EAAA,KAAlB,CAAV;EACD;;EACD,SAAOmE,OAAP;EACD,CAXD;;EAYA,kBAAc,GAAGD,WAAjB;;ECZA;;;;;;;;;;;;;;;;;EAiBA,IAAMG,SAAS,GAAG,sBAAlB;EACA,IAAMC,OAAO,GAAG,IAAhB;;EAEA,IAAMtN,WAAS,GAAG,SAAZA,SAAY,CAAApE,GAAG,EAAI;EACvB,SAAOA,GAAG,CAACyK,MAAJ,CAAW,CAAX,EAAclG,WAAd,KAA8BvE,GAAG,CAAC0K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;;EAIA,IAAMhF,GAAG,GAAG,SAANA,GAAM,CAAS1F,GAAT,EAAc;EACxB,SAAOA,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAV;EACD,CAFD;;EAGA,IAAMmF,KAAK,GAAG,SAARA,KAAQ,CAASzF,GAAT,EAAc;EAC1B,SAAOA,GAAG,CAAC,CAAD,CAAV;EACD,CAFD;;EAGA,IAAM2R,UAAU,GAAG,SAAbA,UAAa,CAAS3R,GAAT,EAAc;EAC/B,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,CAAP;EACD,CAFD;;EAGA,IAAMkH,QAAQ,GAAG,SAAXA,QAAW,CAAS5R,GAAT,EAAc;EAC7B,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAc1K,GAAG,CAACM,MAAJ,GAAa,CAA3B,CAAP;EACD,CAFD;;EAGA,IAAMuR,SAAS,GAAG,SAAZA,SAAY,CAAS7R,GAAT,EAAc;EAC9BA,EAAAA,GAAG,GAAG2R,UAAU,CAAC3R,GAAD,CAAhB;EACAA,EAAAA,GAAG,GAAG4R,QAAQ,CAAC5R,GAAD,CAAd;EACA,SAAOA,GAAP;EACD,CAJD;;;EAOA,IAAM8R,UAAU,GAAG,SAAbA,UAAa,CAAShQ,CAAT,EAAY;EAC7B,MAAI6J,GAAG,GAAG,EAAV,CAD6B;;EAG7B,OAAK,IAAIzL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,IAAI,CAA5B,EAA+B;;EAE7B,QAAIwF,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB6J,MAAAA,GAAG,CAACsF,MAAJ,GAAa,IAAb;EACAnP,MAAAA,CAAC,GAAG8P,QAAQ,CAAC9P,CAAD,CAAZ;EACD;;EACD,QAAIA,CAAC,KAAK,GAAN,IAAa4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAxB,IAA+BA,CAAC,KAAK,KAAzC,EAAgD;EAC9C6J,MAAAA,GAAG,CAACsF,MAAJ,GAAa,IAAb;EACAnP,MAAAA,CAAC,GAAG8P,QAAQ,CAAC9P,CAAD,CAAZ;EACD;;EACD,QAAI4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB6J,MAAAA,GAAG,CAACyE,QAAJ,GAAe,IAAf;EACAtO,MAAAA,CAAC,GAAG8P,QAAQ,CAAC9P,CAAD,CAAZ;EACD;;EACD,QAAI4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB6J,MAAAA,GAAG,CAACjG,GAAJ,GAAU,IAAV;EACA5D,MAAAA,CAAC,GAAG8P,QAAQ,CAAC9P,CAAD,CAAZ;EACD,KAjB4B;;;EAmB7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB6J,MAAAA,GAAG,CAAClG,KAAJ,GAAY,IAAZ;EACA3D,MAAAA,CAAC,GAAG6P,UAAU,CAAC7P,CAAD,CAAd;EACD;;EACD,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB6J,MAAAA,GAAG,CAACnF,QAAJ,GAAe,IAAf;EACA1E,MAAAA,CAAC,GAAG6P,UAAU,CAAC7P,CAAD,CAAd;EACD,KA1B4B;;;EA4B7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;;EAEtC,UAAI4P,OAAO,CAAC7O,IAAR,CAAaf,CAAb,CAAJ,EAAqB;EACnB6J,QAAAA,GAAG,CAACxF,OAAJ,GAAcrE,CAAC,CAAChC,KAAF,CAAQ4R,OAAR,CAAd;EACA/F,QAAAA,GAAG,CAACvF,QAAJ,GAAe,KAAf;EACD,OAHD,MAGO;EACLuF,QAAAA,GAAG,CAACxF,OAAJ,GAAcrE,CAAC,CAAChC,KAAF,CAAQ,GAAR,CAAd;EACA6L,QAAAA,GAAG,CAACvF,QAAJ,GAAe,IAAf;EACD,OARqC;;;EAUtCuF,MAAAA,GAAG,CAACxF,OAAJ,CAAY,CAAZ,IAAiBwL,UAAU,CAAChG,GAAG,CAACxF,OAAJ,CAAY,CAAZ,CAAD,CAA3B;EACA,UAAImC,IAAI,GAAGqD,GAAG,CAACxF,OAAJ,CAAY7F,MAAZ,GAAqB,CAAhC;EACAqL,MAAAA,GAAG,CAACxF,OAAJ,CAAYmC,IAAZ,IAAoBsJ,QAAQ,CAACjG,GAAG,CAACxF,OAAJ,CAAYmC,IAAZ,CAAD,CAA5B,CAZsC;;EActCqD,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAYuG,GAAZ,CAAgB,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,OAAjB,CAAd;EACA0I,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAY0G,MAAZ,CAAmB,UAAAnL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAApB,CAAd,CAfsC;;EAiBtCiK,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAYuG,GAAZ,CAAgBoF,UAAhB,CAAd;EACAhQ,MAAAA,CAAC,GAAG,EAAJ;EACD,KA/C4B;;;EAiD7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtC6J,MAAAA,GAAG,CAACyF,OAAJ,GAAc,IAAd;EACAtP,MAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,EAAjB,CAAJ;EACArB,MAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,EAAjB,CAAJ;EACD,KArD4B;;;EAuD7B,QAAIsC,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtCA,MAAAA,CAAC,GAAG+P,SAAS,CAAC/P,CAAD,CAAb;EACA6J,MAAAA,GAAG,CAACzF,KAAJ,GAAY,IAAI6L,MAAJ,CAAWjQ,CAAX,CAAZ,CAFsC;;EAGtC,aAAO6J,GAAP;EACD,KA3D4B;;;EA6D7B,QAAIlG,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtCA,MAAAA,CAAC,GAAG+P,SAAS,CAAC/P,CAAD,CAAb;EACA6J,MAAAA,GAAG,CAAC9F,IAAJ,GAAW,IAAX;EACA8F,MAAAA,GAAG,CAACzH,IAAJ,GAAWpC,CAAX;EACA,aAAO6J,GAAP;EACD;EACF,GAtE4B;;;EAwE7B,MAAI8F,SAAS,CAAC5O,IAAV,CAAef,CAAf,MAAsB,IAA1B,EAAgC;EAC9BA,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAUsO,SAAV,EAAqB,UAACjR,CAAD,EAAIC,CAAJ,EAAU;EACjC,UAAI6J,GAAG,GAAG7J,CAAC,CAACX,KAAF,CAAQ,IAAR,CAAV;;EACA,UAAIwK,GAAG,CAAChK,MAAJ,KAAe,CAAnB,EAAsB;;EAEpBqL,QAAAA,GAAG,CAAC+E,GAAJ,GAAUsB,MAAM,CAAC1H,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACAqB,QAAAA,GAAG,CAAC8E,GAAJ,GAAUuB,MAAM,CAAC1H,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACD,OAJD,MAIO;;;EAGLqB,QAAAA,GAAG,CAAC+E,GAAJ,GAAUsB,MAAM,CAAC1H,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACAqB,QAAAA,GAAG,CAAC8E,GAAJ,GAAUuB,MAAM,CAAC1H,GAAG,CAAC,CAAD,CAAH,IAAU,GAAX,CAAhB;EACD;;EACDqB,MAAAA,GAAG,CAACsF,MAAJ,GAAa,IAAb;EACA,aAAO,EAAP;EACD,KAdG,CAAJ;EAeD,GAxF4B;;;EA2F7B,MAAIxL,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB6J,IAAAA,GAAG,CAAC5F,GAAJ,GAAU4L,UAAU,CAAC7P,CAAD,CAApB;EACA6J,IAAAA,GAAG,CAAC5F,GAAJ,GAAU3B,WAAS,CAACuH,GAAG,CAAC5F,GAAL,CAAnB;EACA,WAAO4F,GAAP;EACD,GA/F4B;;;EAiG7B,MAAIlG,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB6J,IAAAA,GAAG,CAAC1F,MAAJ,GAAa0L,UAAU,CAAC7P,CAAD,CAAvB;EACA,WAAO6J,GAAP;EACD;;EACD,MAAI7J,CAAC,KAAK,GAAV,EAAe;EACb6J,IAAAA,GAAG,CAACnG,QAAJ,GAAe,IAAf;EACA,WAAOmG,GAAP;EACD,GAxG4B;;;EA0G7B,MAAI7J,CAAC,KAAK,GAAV,EAAe;EACb6J,IAAAA,GAAG,CAACnG,QAAJ,GAAe,IAAf;EACAmG,IAAAA,GAAG,CAACsF,MAAJ,GAAa,IAAb;EACAtF,IAAAA,GAAG,CAACyE,QAAJ,GAAe,IAAf;EACA,WAAOzE,GAAP;EACD;;EACD,MAAI7J,CAAJ,EAAO;;EAELA,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAJ;EACArB,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAJ;EACAwI,IAAAA,GAAG,CAACzH,IAAJ,GAAWpC,CAAC,CAACkB,WAAF,EAAX;EACD;;EACD,SAAO2I,GAAP;EACD,CAvHD;;EAwHA,gBAAc,GAAGmG,UAAjB;;ECjKA,IAAMG,SAAO,GAAG,SAAVA,OAAU,CAAS3H,GAAT,EAAc;EAC5B,SAAOnI,MAAM,CAACoI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BF,GAA/B,MAAwC,gBAA/C;EACD,CAFD;;;EAKA,IAAM4H,aAAa,GAAG,SAAhBA,aAAgB,CAASlS,GAAT,EAAc;EAClC,MAAIsK,GAAG,GAAGtK,GAAG,CAACF,KAAJ,CAAU,gCAAV,CAAV;EACAwK,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAhL,CAAC;EAAA,WAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,GAAT,CAAN;EACA,SAAOqH,GAAP;EACD,CAJD;;EAMA,IAAM6H,OAAO,GAAG,SAAVA,OAAU,CAAS7H,GAAT,EAAc;EAC5B,MAAI+F,KAAK,GAAG,EAAZ;EACA/F,EAAAA,GAAG,CAACjI,OAAJ,CAAY,UAAA7B,CAAC,EAAI;;EAEf,QAAI,aAAaqC,IAAb,CAAkBrC,CAAC,CAAC,CAAD,CAAnB,CAAJ,EAA6B;EAC3B6P,MAAAA,KAAK,CAAC/D,IAAN,CAAW9L,CAAX;EACA;EACD;;EACD,QAAI0N,IAAI,GAAG1N,CAAC,CAACV,KAAF,CAAQ,GAAR,CAAX;EACAoO,IAAAA,IAAI,GAAGA,IAAI,CAACrB,MAAL,CAAY,UAAA/K,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAb,CAAP;EACAuO,IAAAA,KAAK,GAAGA,KAAK,CAAC5B,MAAN,CAAaP,IAAb,CAAR;EACD,GATD;EAUA,SAAOmC,KAAP;EACD,CAbD;;;EAgBA,IAAM+B,OAAO,GAAG,SAAVA,OAAU,CAAS9H,GAAT,EAAc;EAC5B,SAAO,CACL;EACEnE,IAAAA,OAAO,EAAEmE,GAAG,CAACoC,GAAJ,CAAQ,UAAAhL,CAAC,EAAI;EACpB,aAAO;EACLwC,QAAAA,IAAI,EAAExC;EADD,OAAP;EAGD,KAJQ;EADX,GADK,CAAP;EASD,CAVD;;EAYA,IAAM4P,aAAW,GAAG,SAAdA,WAAc,CAASe,MAAT,EAAiB;;EAEnC,MAAI7B,KAAK,GAAG6B,MAAM,CAACxF,MAAP,CAAc,UAAAlL,CAAC;EAAA,WAAIA,CAAC,CAACyP,OAAF,KAAc,IAAlB;EAAA,GAAf,EAAuC9Q,MAAnD;;EACA,MAAIkQ,KAAK,GAAG,CAAZ,EAAe;EACb,QAAI8B,UAAU,GAAGD,MAAM,CAAC3F,GAAP,CAAW,UAAA/K,CAAC;EAAA,aAAIA,CAAC,CAACyP,OAAN;EAAA,KAAZ,CAAjB;EACA,QAAImB,KAAK,GAAGD,UAAU,CAAC1N,OAAX,CAAmB,IAAnB,CAAZ;EACA,QAAI0D,IAAI,GAAGgK,UAAU,CAAChS,MAAX,GAAoB,CAApB,GAAwBgS,UAAU,CAACE,OAAX,GAAqB5N,OAArB,CAA6B,IAA7B,CAAnC,CAHa;;EAKb,SAAK,IAAI1E,CAAC,GAAGqS,KAAb,EAAoBrS,CAAC,GAAGoI,IAAxB,EAA8BpI,CAAC,EAA/B,EAAmC;EACjCmS,MAAAA,MAAM,CAACnS,CAAD,CAAN,CAAUkR,OAAV,GAAoB,IAApB;EACD;EACF;;EACD,SAAOiB,MAAP;EACD,CAbD;;EAeA,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAASpE,GAAT,EAAc;EAC5B,MAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACH,IAAb,IAAqB,CAACG,GAAG,CAACH,IAAJ,CAAS,CAAT,CAA1B,EAAuC;EACrC,WAAO,EAAP;EACD;;EACD,MAAIwE,GAAG,GAAG,EAAV;EACArE,EAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,IAAAA,CAAC,CAAC2K,KAAF,GAAU7J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB+Q,MAAAA,GAAG,CAACpG,IAAJ,CAAS;EAAE/G,QAAAA,EAAE,EAAE5D,CAAC,CAAC4D;EAAR,OAAT;EACD,KAFD;EAGD,GAJD;EAKA,SAAO,CAAC;EAAEY,IAAAA,OAAO,EAAEuM,GAAX;EAAgBzB,IAAAA,MAAM,EAAE;EAAxB,GAAD,CAAP;EACD,CAXD;;;;EAcA,IAAM0B,MAAM,GAAG,SAATA,MAAS,CAASC,KAAT,EAAgB;;EAE7B,MAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKjN,SAA5B,IAAyCiN,KAAK,KAAK,EAAvD,EAA2D;EACzD,WAAO,EAAP;EACD,GAJ4B;;;EAM7B,MAAI,QAAOA,KAAP,MAAiB,QAArB,EAA+B;EAC7B,QAAIX,SAAO,CAACW,KAAD,CAAX,EAAoB;EAClB,UAAIA,KAAK,CAACtS,MAAN,KAAiB,CAAjB,IAAsB,CAACsS,KAAK,CAAC,CAAD,CAAhC,EAAqC;EACnC,eAAO,EAAP;EACD,OAHiB;;;EAMlB,UAAI,QAAOA,KAAK,CAAC,CAAD,CAAZ,MAAoB,QAAxB,EAAkC;EAChC,eAAOA,KAAP;EACD,OARiB;;;EAUlB,UAAI,OAAOA,KAAK,CAAC,CAAD,CAAZ,KAAoB,QAAxB,EAAkC;EAChC,eAAOR,OAAO,CAACQ,KAAD,CAAd;EACD;EACF,KAd4B;;;EAgB7B,QAAIA,KAAK,IAAIA,KAAK,CAACzJ,GAAN,KAAc,KAA3B,EAAkC;EAChC,aAAOsJ,OAAO,CAACG,KAAD,CAAd;EACD;;EACD,WAAO,EAAP;EACD;;EACD,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7BA,IAAAA,KAAK,GAAGlH,MAAM,CAACkH,KAAD,CAAd,CAD6B;EAE9B;;EACD,MAAIP,MAAM,GAAGH,aAAa,CAACU,KAAD,CAA1B;EACAP,EAAAA,MAAM,GAAGF,OAAO,CAACE,MAAD,CAAhB;EACAA,EAAAA,MAAM,GAAGA,MAAM,CAAC3F,GAAP,CAAWoF,YAAX,CAAT,CAhC6B;;EAkC7BO,EAAAA,MAAM,GAAGf,aAAW,CAACe,MAAD,CAApB,CAlC6B;;EAoC7B,SAAOA,MAAP;EACD,CArCD;;EAsCA,YAAc,GAAGM,MAAjB;;ECvGA;;EACA,IAAME,QAAQ,GAAG,SAAXA,QAAW,CAAStR,CAAT,EAAYuO,IAAZ,EAAoC;EAAA,MAAlBgD,QAAkB,uEAAP,KAAO;;;EAEnD,MAAI,OAAOhD,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,IAAAA,IAAI,GAAG6C,QAAM,CAAC7C,IAAD,CAAb;EACD,GAJkD;;;EAMnD,MAAIK,WAAQ,CAAC5O,CAAD,EAAIuO,IAAJ,CAAR,KAAsB,IAA1B,EAAgC;EAC9B,WAAO,EAAP;EACD,GARkD;;;EAWnD,MAAMiD,SAAS,GAAGjD,IAAI,CAACjD,MAAL,CAAY,UAAApL,CAAC;EAAA,WAAIA,CAAC,CAAC2O,QAAF,KAAe,IAAnB;EAAA,GAAb,EAAsC9P,MAAxD;EACA,MAAI4L,KAAK,GAAG3K,CAAC,CAAC0K,KAAF,CAAQC,KAAR,IAAiB3K,CAAC,CAAC2K,KAAF,EAA7B;EACA,MAAIqF,OAAO,GAAG,EAAd,CAbmD;;EAgBnD,MAAIzB,IAAI,CAAC,CAAD,CAAJ,CAAQrK,KAAR,KAAkB,IAAtB,EAA4B;EAC1B,QAAI8H,KAAK,GAAGyF,WAAQ,CAAC9G,KAAD,EAAQ4D,IAAR,EAAc,CAAd,EAAiB5D,KAAK,CAAC5L,MAAvB,CAApB;;EACA,QAAIiN,KAAK,KAAK,KAAV,IAAmBA,KAAK,CAACjN,MAAN,GAAe,CAAtC,EAAyC;EACvCiR,MAAAA,OAAO,CAACjF,IAAR,CAAaiB,KAAb;EACD,KAJyB;;;EAM1BgE,IAAAA,OAAO,GAAGA,OAAO,CAAC7E,GAAR,CAAY,UAAApC,GAAG,EAAI;EAC3B,aAAOA,GAAG,CAACuC,MAAJ,CAAW,UAAAlL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAZ,CAAP;EACD,KAFS,CAAV;EAGA,WAAO2P,cAAW,CAACpF,KAAD,EAAQ4D,IAAR,EAAcyB,OAAd,CAAlB;EACD,GA1BkD;;;EA4BnD,OAAK,IAAIrR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;;EAExC,QAAIA,CAAC,GAAG6S,SAAJ,GAAgB7G,KAAK,CAAC5L,MAA1B,EAAkC;EAChC;EACD,KAJuC;;;EAMxC,QAAIiN,MAAK,GAAGyF,WAAQ,CAAC9G,KAAK,CAACyD,KAAN,CAAYzP,CAAZ,CAAD,EAAiB4P,IAAjB,EAAuB5P,CAAvB,EAA0BgM,KAAK,CAAC5L,MAAhC,CAApB;;EACA,QAAIiN,MAAK,KAAK,KAAV,IAAmBA,MAAK,CAACjN,MAAN,GAAe,CAAtC,EAAyC;;EAEvCJ,MAAAA,CAAC,IAAIqN,MAAK,CAACjN,MAAN,GAAe,CAApB,CAFuC;;EAIvCiN,MAAAA,MAAK,GAAGA,MAAK,CAACV,MAAN,CAAa,UAAAzL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACAmQ,MAAAA,OAAO,CAACjF,IAAR,CAAaiB,MAAb,EALuC;;EAOvC,UAAIuF,QAAQ,KAAK,IAAjB,EAAuB;EACrB,eAAOxB,cAAW,CAACpF,KAAD,EAAQ4D,IAAR,EAAcyB,OAAd,CAAlB;EACD;EACF;EACF;;EACD,SAAOD,cAAW,CAACpF,KAAD,EAAQ4D,IAAR,EAAcyB,OAAd,CAAlB;EACD,CAhDD;;EAiDA,eAAc,GAAGsB,QAAjB;;ECrDA;;;;EAGA,IAAMI,QAAQ,GAAG,SAAXA,QAAW,CAAS1R,CAAT,EAAYuO,IAAZ,EAAkB;EACjC,MAAIjM,KAAK,GAAG,EAAZ;EACA,MAAIyG,GAAG,GAAGuI,WAAQ,CAACtR,CAAD,EAAIuO,IAAJ,CAAlB;EACAxF,EAAAA,GAAG,CAACjI,OAAJ,CAAY,UAAA6Q,EAAE,EAAI;EAChBA,IAAAA,EAAE,CAAC7Q,OAAH,CAAW,UAAAV,CAAC,EAAI;EACdkC,MAAAA,KAAK,CAAClC,CAAC,CAAC4D,EAAH,CAAL,GAAc,IAAd;EACD,KAFD;EAGD,GAJD,EAHiC;;EASjC,MAAI2G,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACA,MAAI3F,MAAM,GAAG,EAAb;EACA,MAAI4M,OAAO,GAAG,EAAd;EACAjH,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,QAAIkC,KAAK,CAAClC,CAAC,CAAC4D,EAAH,CAAL,KAAgB,IAApB,EAA0B;EACxB,UAAI4N,OAAO,CAAC7S,MAAR,GAAiB,CAArB,EAAwB;EACtBiG,QAAAA,MAAM,CAAC+F,IAAP,CAAY6G,OAAZ;EACAA,QAAAA,OAAO,GAAG,EAAV;EACD;;EACD;EACD;;EACDA,IAAAA,OAAO,CAAC7G,IAAR,CAAa3K,CAAb;EACD,GATD;;EAUA,MAAIwR,OAAO,CAAC7S,MAAR,GAAiB,CAArB,EAAwB;EACtBiG,IAAAA,MAAM,CAAC+F,IAAP,CAAY6G,OAAZ;EACD;;EACD,SAAO5M,MAAP;EACD,CA1BD;;EA2BA,OAAc,GAAG0M,QAAjB;;EC7BA;;EACA,WAAa,GAAG,gBAAA,CAASjT,GAAT,EAA+B;EAAA;;EAAA,MAAjBoT,OAAiB,uEAAP,KAAO;EAC7C,MAAI7B,OAAO,GAAGsB,WAAQ,CAAC,IAAD,EAAO7S,GAAP,EAAYoT,OAAZ,CAAtB,CAD6C;;EAG7C7B,EAAAA,OAAO,GAAGA,OAAO,CAAC7E,GAAR,CAAY,UAAAwB,IAAI,EAAI;EAC5B,WAAO,KAAI,CAAC1B,SAAL,CAAe0B,IAAI,CAAC,CAAD,CAAJ,CAAQ3I,EAAvB,EAA2B2I,IAAI,CAAC5N,MAAhC,CAAP;EACD,GAFS,CAAV;EAGA,SAAOiR,OAAP;EACD,CAPD;;;;EAUA,OAAW,GAAG,YAAA,CAASvR,GAAT,EAAc;EAC1B,MAAIuR,OAAO,GAAGsB,WAAQ,CAAC,IAAD,EAAO7S,GAAP,EAAY,IAAZ,CAAtB;EACA,SAAOuR,OAAO,CAACjR,MAAR,GAAiB,CAAxB;EACD,CAHD;;;;EAMA,SAAW,GAAG,cAAA,CAASN,GAAT,EAAc;EAAA;;EAC1B,MAAIuR,OAAO,GAAG0B,GAAQ,CAAC,IAAD,EAAOjT,GAAP,CAAtB,CAD0B;;EAG1BuR,EAAAA,OAAO,GAAGA,OAAO,CAAC7E,GAAR,CAAY,UAAAwB,IAAI,EAAI;EAC5B,WAAO,MAAI,CAAC1B,SAAL,CAAe0B,IAAI,CAAC,CAAD,CAAJ,CAAQ3I,EAAvB,EAA2B2I,IAAI,CAAC5N,MAAhC,CAAP;EACD,GAFS,CAAV;EAGA,SAAOiR,OAAP;EACD,CAPD;;;;EAUA,WAAa,GAAG,cAAA,CAASxL,GAAT,EAAcW,KAAd,EAAqB;EAAA;;EACnC,MAAI2M,OAAO,GAAG,EAAd;EACA,MAAInH,KAAK,GAAG,KAAKD,KAAL,CAAWC,KAAX,IAAoB,KAAKA,KAAL,EAAhC;EACA,MAAIoH,QAAQ,GAAG,KAAf;;EACA,OAAK,IAAIpT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIqT,GAAG,GAAGrH,KAAK,CAAChM,CAAD,CAAL,CAASoL,KAAT,CAAevF,GAAf,EAAoBW,KAApB,CAAV;;EACA,QAAI6M,GAAG,KAAK,IAAZ,EAAkB;EAChB,UAAID,QAAQ,KAAK,IAAjB,EAAuB;;EAErBD,QAAAA,OAAO,CAACA,OAAO,CAAC/S,MAAR,GAAiB,CAAlB,CAAP,CAA4BgM,IAA5B,CAAiCJ,KAAK,CAAChM,CAAD,CAAtC;EACD,OAHD,MAGO;EACLmT,QAAAA,OAAO,CAAC/G,IAAR,CAAa,CAACJ,KAAK,CAAChM,CAAD,CAAN,CAAb,EADK;EAEN;;EACDoT,MAAAA,QAAQ,GAAGC,GAAX;EACD;EACF,GAfkC;;;EAiBnCF,EAAAA,OAAO,GAAGA,OAAO,CACdxG,MADO,CACA,UAAArM,CAAC;EAAA,WAAIA,CAAC,CAACF,MAAF,GAAW,CAAf;EAAA,GADD,EAEPoM,GAFO,CAEH,UAAApC,GAAG,EAAI;EACV,WAAO,MAAI,CAACkC,SAAL,CAAelC,GAAG,CAAC,CAAD,CAAH,CAAO/E,EAAtB,EAA0B+E,GAAG,CAAChK,MAA9B,CAAP;EACD,GAJO,CAAV;EAKA,SAAO+S,OAAP;EACD,CAvBD;;;;;;;;;MC1BMG,SACJ,gBAAYjO,EAAZ,EAAgBjF,MAAhB,EAAwB6L,IAAxB,EAA8B;EAAA;;EAC5B,OAAK1G,KAAL,GAAaF,EAAb;EACA,OAAKjF,MAAL,GAAcA,MAAd;EACA,OAAK6I,GAAL,GAAW,QAAX,CAH4B;;EAI5BhH,EAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,IAAAA,UAAU,EAAE,KADsB;EAElCC,IAAAA,QAAQ,EAAE,IAFwB;EAGlCC,IAAAA,KAAK,EAAEzH;EAH2B,GAApC;EAKAhK,EAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,IAAAA,UAAU,EAAE,KADuB;EAEnCC,IAAAA,QAAQ,EAAE,IAFyB;EAGnCC,IAAAA,KAAK,EAAE;EAH4B,GAArC;EAKD;;;;EAIHJ,MAAM,CAACjJ,SAAP,CAAiBiC,SAAjB,GAA6B,UAASjH,EAAT,EAAajF,MAAb,EAAqB;EAChD,MAAIiB,CAAC,GAAG,IAAIiS,MAAJ,CAAWjO,EAAX,EAAejF,MAAf,EAAuB,KAAK6L,IAA5B,CAAR;;EACA,MAAI,KAAKF,KAAT,EAAgB;EACd1K,IAAAA,CAAC,CAAC0K,KAAF,GAAU,KAAKA,KAAf;;EACA,QAAI3L,MAAM,KAAK,KAAKA,MAApB,EAA4B;EAC1BiB,MAAAA,CAAC,CAAC0K,KAAF,CAAQC,KAAR,GAAgB,IAAhB;EACD;EACF;;EACD,SAAO3K,CAAP;EACD,CATD;;;EAYAY,MAAM,CAACoH,MAAP,CAAciK,MAAM,CAACjJ,SAArB,EAAgCsJ,KAAhC;EACA1R,MAAM,CAACoH,MAAP,CAAciK,MAAM,CAACjJ,SAArB,EAAgCwB,SAAhC;;EAGA,IAAM+H,OAAO,GAAG;EACd/K,EAAAA,IAAI,EAAE;EADQ,CAAhB;EAGA5G,MAAM,CAACC,IAAP,CAAY0R,OAAZ,EAAqBzR,OAArB,CAA6B,UAAAnB,CAAC;EAAA,SAAKsS,MAAM,CAACjJ,SAAP,CAAiBrJ,CAAjB,IAAsBsS,MAAM,CAACjJ,SAAP,CAAiBuJ,OAAO,CAAC5S,CAAD,CAAxB,CAA3B;EAAA,CAA9B;EAEA,YAAc,GAAGsS,MAAjB;;EC5CA;MACMO;;;EACJ,kBAAwB;EAAA,QAAZ1D,KAAY,uEAAJ,EAAI;;EAAA;;;EAEtBlO,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAEvD;EAF4B,KAArC;EAID;;;;;;0BAEGtH,MAAM;EACR,WAAKsH,KAAL,CAAWtH,IAAI,CAACxD,EAAhB,IAAsBwD,IAAtB;EACA,aAAO,IAAP;EACD;;;;;0BAEGxD,IAAI;EACN,aAAO,KAAK8K,KAAL,CAAW9K,EAAX,CAAP;EACD;;;;;6BAEMA,IAAI;EACT,aAAO,KAAK8K,KAAL,CAAW9K,EAAX,CAAP;EACD;;;4BACK4G,MAAM;EACVhK,MAAAA,MAAM,CAACoH,MAAP,CAAc,KAAK8G,KAAnB,EAA0BlE,IAAI,CAACkE,KAA/B;EACA,aAAO,IAAP;EACD;;;;;8BAEO;EACN,aAAO;EACLA,QAAAA,KAAK,EAAElO,MAAM,CAACC,IAAP,CAAY,KAAKiO,KAAjB,EAAwB/P;EAD1B,OAAP;EAGD;;;;;;;;EAIHyT,IAAI,CAACxJ,SAAL,CAAeuB,KAAf,GAAuB,YAAW;EAAA;;EAChC,MAAI1J,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY,KAAKiO,KAAjB,CAAX;EACA,MAAIA,KAAK,GAAGjO,IAAI,CAAC6B,MAAL,CAAY,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EAChC,QAAIS,CAAC,GAAG,KAAI,CAAC0O,KAAL,CAAWnP,CAAX,EAAc4K,KAAd,EAAR;;EACA/K,IAAAA,CAAC,CAACY,CAAC,CAAC4D,EAAH,CAAD,GAAU5D,CAAV;EACA,WAAOZ,CAAP;EACD,GAJW,EAIT,EAJS,CAAZ;EAKA,SAAO,IAAIgT,IAAJ,CAAS1D,KAAT,CAAP;EACD,CARD;;EAUA,UAAc,GAAG0D,IAAjB;;EC7CA;;;;;;;;;;EAYA,IAAMC,SAAS,GAAG,uDAAlB;EACA,IAAMC,YAAY,GAAG,IAArB;EAEA,IAAMrR,WAAS,GAAG,kBAAlB;EACA,IAAMsR,UAAU,GAAG,sBAAnB;EACA,IAAMC,OAAO,GAAG,iBAAhB;;EACA,IAAMC,SAAS,GAAG,sHAAlB;EAEA,IAAMC,eAAe,GAAG,MAAxB;;EAGA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAASrU,IAAT,EAAe;EAClC,MAAI+P,GAAG,GAAG,EAAV,CADkC;;EAGlC,MAAIuE,KAAK,GAAGtU,IAAI,CAACH,KAAL,CAAWqU,OAAX,CAAZ;;EACA,OAAK,IAAIjU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqU,KAAK,CAACjU,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;;EAErC,QAAIoK,GAAG,GAAGiK,KAAK,CAACrU,CAAD,CAAL,CAASJ,KAAT,CAAekU,SAAf,CAAV;;EACA,SAAK,IAAI1S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgJ,GAAG,CAAChK,MAAxB,EAAgCgB,CAAC,EAAjC,EAAqC;EACnC0O,MAAAA,GAAG,CAAC1D,IAAJ,CAAShC,GAAG,CAAChJ,CAAD,CAAZ;EACD;EACF;;EACD,SAAO0O,GAAP;EACD,CAZD;;;;EAeA,IAAMwE,UAAU,GAAG,SAAbA,UAAa,CAASxU,GAAT,EAAcyU,OAAd,EAAuB;;EAExC,MAAI7R,WAAS,CAACC,IAAV,CAAe7C,GAAf,MAAwB,IAA5B,EAAkC;EAChC,WAAO,KAAP;EACD,GAJuC;;;EAMxC,MAAIkU,UAAU,CAACrR,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC,WAAO,KAAP;EACD,GARuC;;;EAUxC,MAAIoU,SAAS,CAACvR,IAAV,CAAe7C,GAAf,MAAwB,KAA5B,EAAmC;EACjC,WAAO,KAAP;EACD;;EAED,MAAIkN,GAAG,GAAGlN,GAAG,CAACmD,OAAJ,CAAY,yCAAZ,EAAuD,EAAvD,CAAV;EACA,MAAIkN,KAAK,GAAGnD,GAAG,CAACpN,KAAJ,CAAU,GAAV,CAAZ;EACA,MAAI4U,QAAQ,GAAGrE,KAAK,CAACA,KAAK,CAAC/P,MAAN,GAAe,CAAhB,CAAL,CAAwB0C,WAAxB,EAAf,CAhBwC;;EAkBxC,MAAIyR,OAAO,CAAC7O,cAAR,CAAuB8O,QAAvB,CAAJ,EAAsC;EACpC,WAAO,KAAP;EACD,GApBuC;;;;;;EAyBxC,SAAO,IAAP;EACD,CA1BD;;EA4BA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAS1U,IAAT,EAAeyG,KAAf,EAAsB;EAC3C,MAAI+N,OAAO,GAAG/N,KAAK,CAACuF,KAAN,CAAYxD,aAA1B;EAEAxI,EAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACAA,EAAAA,IAAI,GAAGyL,MAAM,CAACzL,IAAD,CAAb;EACA,MAAI2U,SAAS,GAAG,EAAhB,CAL2C;;EAO3C,MAAIC,MAAM,GAAG,EAAb,CAP2C;;EAS3C,MAAI,CAAC5U,IAAD,IAAS,OAAOA,IAAP,KAAgB,QAAzB,IAAqCgU,YAAY,CAACpR,IAAb,CAAkB5C,IAAlB,MAA4B,KAArE,EAA4E;EAC1E,WAAO2U,SAAP;EACD,GAX0C;;;EAa3C,MAAIE,MAAM,GAAGR,YAAY,CAACrU,IAAD,CAAzB,CAb2C;;EAe3C,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4U,MAAM,CAACxU,MAA3B,EAAmCJ,CAAC,EAApC,EAAwC;EACtC,QAAIwB,CAAC,GAAGoT,MAAM,CAAC5U,CAAD,CAAd;;EACA,QAAIwB,CAAC,KAAKiE,SAAN,IAAmBjE,CAAC,KAAK,EAA7B,EAAiC;EAC/B;EACD,KAJqC;;;EAMtC,QAAIuS,YAAY,CAACpR,IAAb,CAAkBnB,CAAlB,MAAyB,KAA7B,EAAoC;;EAElC,UAAImT,MAAM,CAACA,MAAM,CAACvU,MAAP,GAAgB,CAAjB,CAAV,EAA+B;EAC7BuU,QAAAA,MAAM,CAACA,MAAM,CAACvU,MAAP,GAAgB,CAAjB,CAAN,IAA6BoB,CAA7B;EACA;EACD,OAHD,MAGO,IAAIoT,MAAM,CAAC5U,CAAC,GAAG,CAAL,CAAV,EAAmB;;EAExB4U,QAAAA,MAAM,CAAC5U,CAAC,GAAG,CAAL,CAAN,GAAgBwB,CAAC,GAAGoT,MAAM,CAAC5U,CAAC,GAAG,CAAL,CAA1B;EACA;EACD;EACF,KAhBqC;;;EAkBtC2U,IAAAA,MAAM,CAACvI,IAAP,CAAY5K,CAAZ;EACD,GAlC0C;;;;EAsC3C,OAAK,IAAIxB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG2U,MAAM,CAACvU,MAA3B,EAAmCJ,EAAC,EAApC,EAAwC;EACtC,QAAIQ,CAAC,GAAGmU,MAAM,CAAC3U,EAAD,CAAd,CADsC;;EAGtC,QAAI2U,MAAM,CAAC3U,EAAC,GAAG,CAAL,CAAN,IAAiBsU,UAAU,CAAC9T,CAAD,EAAI+T,OAAJ,CAAV,KAA2B,KAAhD,EAAuD;EACrDI,MAAAA,MAAM,CAAC3U,EAAC,GAAG,CAAL,CAAN,GAAgBQ,CAAC,IAAImU,MAAM,CAAC3U,EAAC,GAAG,CAAL,CAAN,IAAiB,EAArB,CAAjB;EACD,KAFD,MAEO,IAAIQ,CAAC,IAAIA,CAAC,CAACJ,MAAF,GAAW,CAApB,EAAuB;;;EAG5BsU,MAAAA,SAAS,CAACtI,IAAV,CAAe5L,CAAf;EACAmU,MAAAA,MAAM,CAAC3U,EAAD,CAAN,GAAY,EAAZ;EACD;EACF,GAjD0C;;;EAmD3C,MAAI0U,SAAS,CAACtU,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAO,CAACL,IAAD,CAAP;EACD,GArD0C;;;;EAyD3C,OAAK,IAAIC,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG0U,SAAS,CAACtU,MAA9B,EAAsCJ,GAAC,IAAI,CAA3C,EAA8C;EAC5C,QAAI6U,EAAE,GAAGH,SAAS,CAAC1U,GAAD,CAAT,CAAaqN,KAAb,CAAmB8G,eAAnB,CAAT;;EACA,QAAIU,EAAE,KAAK,IAAX,EAAiB;EACfH,MAAAA,SAAS,CAAC1U,GAAC,GAAG,CAAL,CAAT,IAAoB6U,EAAE,CAAC,CAAD,CAAtB;EACAH,MAAAA,SAAS,CAAC1U,GAAD,CAAT,GAAe0U,SAAS,CAAC1U,GAAD,CAAT,CAAaiD,OAAb,CAAqBkR,eAArB,EAAsC,EAAtC,CAAf;EACD;EACF;;EACD,SAAOO,SAAP;EACD,CAjED;;EAmEA,gBAAc,GAAGD,cAAjB;;ECrIA,IAAMK,QAAQ,GAAG,IAAjB;EACA,IAAMC,UAAU,GAAG,UAAnB;EACA,IAAMC,WAAW,GAAG,OAApB;EACA,IAAMC,OAAO,GAAG,QAAhB;EAEA,IAAMC,OAAO,GAAG;EACd,OAAK,IADS;EAEd,OAAK,IAFS;;EAGd,OAAK,IAHS;;EAId,OAAK,IAJS;;EAKd,QAAM,IALQ;EAMd,SAAO,IANO;;EAAA,CAAhB;;EAUA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASrV,GAAT,EAAc;;EAE9B,MAAI,sBAAsB6C,IAAtB,CAA2B7C,GAA3B,MAAoC,IAAxC,EAA8C;EAC5C,WAAO,KAAP;EACD,GAJ6B;;;EAM9B,MAAIqF,GAAG,GAAG,6DAAV;;EACA,MAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,WAAO,IAAP;EACD,GAT6B;;;;;;;EAe9B,SAAO,KAAP;EACD,CAhBD;;;EAmBA,IAAMsV,cAAc,GAAG,SAAjBA,cAAiB,CAAShL,GAAT,EAAc;EACnC,OAAK,IAAIpK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoK,GAAG,CAAChK,MAAJ,GAAa,CAAjC,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,QAAIiV,OAAO,CAACtS,IAAR,CAAayH,GAAG,CAACpK,CAAD,CAAhB,CAAJ,EAA0B;EACxBoK,MAAAA,GAAG,CAACpK,CAAC,GAAG,CAAL,CAAH,IAAcoK,GAAG,CAACpK,CAAD,CAAH,GAASoK,GAAG,CAACpK,CAAC,GAAG,CAAL,CAA1B;EACAoK,MAAAA,GAAG,CAACpK,CAAD,CAAH,GAAS,IAAT;EACAoK,MAAAA,GAAG,CAACpK,CAAC,GAAG,CAAL,CAAH,GAAa,IAAb;EACD;EACF;;EACD,SAAOoK,GAAP;EACD,CATD;;EAWA,IAAMiL,YAAY,GAAG,SAAfA,YAAe,CAASrR,IAAT,EAAe;EAClC,MAAIoG,GAAG,GAAG,EAAV,CADkC;;EAGlC,MAAMkL,OAAO,GAAGtR,IAAI,CAACpE,KAAL,CAAW,OAAX,CAAhB;EACA,MAAI2V,SAAS,GAAG,GAAhB;EACA,MAAI5R,KAAK,GAAGK,IAAI,CAACqJ,KAAL,CAAW,OAAX,CAAZ;;EACA,MAAI1J,KAAK,IAAIA,KAAK,CAAC,CAAD,CAAlB,EAAuB;EACrB4R,IAAAA,SAAS,GAAG5R,KAAZ;EACD;;EACD,OAAK,IAAIvC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkU,OAAO,CAAClV,MAA5B,EAAoCgB,CAAC,EAArC,EAAyC;EACvC,QAAIA,CAAC,KAAKkU,OAAO,CAAClV,MAAR,GAAiB,CAA3B,EAA8B;EAC5BgK,MAAAA,GAAG,CAACgC,IAAJ,CAASkJ,OAAO,CAAClU,CAAD,CAAhB;EACD,KAFD,MAEO;EACLgJ,MAAAA,GAAG,CAACgC,IAAJ,CAASkJ,OAAO,CAAClU,CAAD,CAAP,GAAamU,SAAtB;EACD;EACF;;EACD,SAAOnL,GAAP;EACD,CAjBD;;;EAoBA,IAAMoL,UAAU,GAAG,SAAbA,UAAa,CAAS1V,GAAT,EAAc;EAC/B,MAAIuG,MAAM,GAAG,EAAb;EACA,MAAI+D,GAAG,GAAG,EAAV,CAF+B;;EAI/BtK,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;EACA,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;EAC3BA,IAAAA,GAAG,GAAG0L,MAAM,CAAC1L,GAAD,CAAZ;EACD;;EAED,MAAMqQ,KAAK,GAAGrQ,GAAG,CAACF,KAAJ,CAAUoV,WAAV,CAAd;;EACA,OAAK,IAAIhV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmQ,KAAK,CAAC/P,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;;EAErC,QAAImV,SAAS,CAAChF,KAAK,CAACnQ,CAAD,CAAN,CAAT,KAAwB,IAA5B,EAAkC;EAChCoK,MAAAA,GAAG,GAAGA,GAAG,CAACmE,MAAJ,CAAW8G,YAAY,CAAClF,KAAK,CAACnQ,CAAD,CAAN,CAAvB,CAAN;EACA;EACD;;EACDoK,IAAAA,GAAG,CAACgC,IAAJ,CAAS+D,KAAK,CAACnQ,CAAD,CAAd;EACD,GAjB8B;;;EAmB/B,MAAIyV,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAIzV,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGoK,GAAG,CAAChK,MAAxB,EAAgCJ,EAAC,EAAjC,EAAqC;EACnC,QAAIgE,IAAI,GAAGoG,GAAG,CAACpK,EAAD,CAAd,CADmC;;EAGnC,QAAI8U,QAAQ,CAACnS,IAAT,CAAcqB,IAAd,MAAwB,IAAxB,IAAgCkR,OAAO,CAACxP,cAAR,CAAuB1B,IAAvB,MAAiC,KAAjE,IAA0E+Q,UAAU,CAACpS,IAAX,CAAgBqB,IAAhB,MAA0B,KAAxG,EAA+G;;EAE7G,UAAIqC,MAAM,CAACjG,MAAP,GAAgB,CAApB,EAAuB;EACrBiG,QAAAA,MAAM,CAACA,MAAM,CAACjG,MAAP,GAAgB,CAAjB,CAAN,IAA6BqV,KAA7B;EACApP,QAAAA,MAAM,CAAC+F,IAAP,CAAYpI,IAAZ;EACD,OAHD,MAGO;;EAELqC,QAAAA,MAAM,CAAC+F,IAAP,CAAYqJ,KAAK,GAAGzR,IAApB;EACD;;EACDyR,MAAAA,KAAK,GAAG,EAAR;EACD,KAVD,MAUO;EACLA,MAAAA,KAAK,IAAIzR,IAAT;EACD;EACF,GApC8B;;;EAsC/B,MAAIyR,KAAJ,EAAW;EACT,QAAIpP,MAAM,CAACjG,MAAP,KAAkB,CAAtB,EAAyB;EACvBiG,MAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,EAAZ;EACD;;EACDA,IAAAA,MAAM,CAACA,MAAM,CAACjG,MAAP,GAAgB,CAAjB,CAAN,IAA6BqV,KAA7B,CAJS;EAKV,GA3C8B;;;EA6C/BpP,EAAAA,MAAM,GAAG+O,cAAc,CAAC/O,MAAD,CAAvB,CA7C+B;;EA+C/BA,EAAAA,MAAM,GAAGA,MAAM,CAACsG,MAAP,CAAc,UAAAnL,CAAC;EAAA,WAAIA,CAAJ;EAAA,GAAf,CAAT;EACA,SAAO6E,MAAP;EACD,CAjDD;;EAkDA,YAAc,GAAGmP,UAAjB;;EC3GA,IAAME,QAAQ,GAAG,SAAXA,QAAW,CAAA1J,KAAK,EAAI;EACxBA,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAC0G,IAAD,EAAO7I,CAAP,EAAa;EACzB,QAAIA,CAAC,GAAG,CAAR,EAAW;EACT6I,MAAAA,IAAI,CAAC6C,IAAL,GAAYM,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAL,CAAaqF,EAAzB;EACD;;EACD,QAAI2G,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAT,EAAkB;EAChB6I,MAAAA,IAAI,CAAC8C,IAAL,GAAYK,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAL,CAAaqF,EAAzB;EACD;EACF,GAPD;EAQD,CATD;;;;EAYA,IAAMsQ,QAAQ,GAAG,SAAXA,QAAW,GAAiC;EAAA,MAAxB5V,IAAwB,uEAAjB,EAAiB;EAAA,MAAbyG,KAAa;EAAA,MAANyF,IAAM;;;EAEhD,MAAI,OAAOlM,IAAP,KAAgB,QAApB,EAA8B;EAC5B,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,MAAAA,IAAI,GAAGyL,MAAM,CAACzL,IAAD,CAAb;EACD;EACF,GAN+C;;;EAQhD,MAAI2U,SAAS,GAAGD,YAAc,CAAC1U,IAAD,EAAOyG,KAAP,CAA9B;EACAkO,EAAAA,SAAS,GAAGA,SAAS,CAAClI,GAAV,CAAc,UAAA1M,GAAG;EAAA,WAAI8V,QAAU,CAAC9V,GAAD,CAAd;EAAA,GAAjB,CAAZ,CATgD;;EAYhDmM,EAAAA,IAAI,GAAGA,IAAI,IAAI,IAAI4H,MAAJ,EAAf;EAEA,MAAIgC,OAAO,GAAGnB,SAAS,CAAClI,GAAV,CAAc,UAAAR,KAAK,EAAI;EACnCA,IAAAA,KAAK,GAAGA,KAAK,CAACQ,GAAN,CAAU,UAAA1M,GAAG,EAAI;EACvB,UAAI+I,IAAI,GAAG,IAAI0C,MAAJ,CAASzL,GAAT,CAAX;EACAmM,MAAAA,IAAI,CAACX,GAAL,CAASzC,IAAT;EACA,aAAOA,IAAP;EACD,KAJO,CAAR,CADmC;;EAOnC6M,IAAAA,QAAQ,CAAC1J,KAAD,CAAR,CAPmC;;EAUnC,WAAO,IAAIsH,QAAJ,CAAWtH,KAAK,CAAC,CAAD,CAAL,CAAS3G,EAApB,EAAwB2G,KAAK,CAAC5L,MAA9B,EAAsC6L,IAAtC,CAAP;EACD,GAXa,CAAd,CAdgD;;EA2BhD,SAAO4J,OAAP;EACD,CA5BD;;;EA+BA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS/V,IAAT,EAAegW,OAAf,EAAwB;EACxC,SAAOhW,IAAI,CAACH,KAAL,CAAW,GAAX,EAAgB4M,GAAhB,CAAoB,UAAA1M,GAAG,EAAI;EAChC,QAAIkW,OAAO,GAAGlW,GAAG,CAACF,KAAJ,CAAU,GAAV,CAAd;EACAoW,IAAAA,OAAO,GAAGA,OAAO,CAACxJ,GAAR,CAAY,UAAArL,CAAC;EAAA,aAAI8U,QAAQ,CAAC9U,CAAD,EAAI,EAAJ,CAAZ;EAAA,KAAb,CAAV,CAFgC;;EAIhC,WAAO6U,OAAO,CAACxJ,GAAR,CAAY,UAAA0J,GAAG,EAAI;EACxB,UAAI,CAACH,OAAO,CAACG,GAAD,CAAZ,EAAmB;EACjBhM,QAAAA,OAAO,CAACiM,IAAR,CAAa,6CAA6CD,GAA1D;EACD;;EACD,aAAOH,OAAO,CAACG,GAAD,CAAd;EACD,KALM,CAAP;EAMD,GAVM,CAAP;EAWD,CAZD;;;;EAeA,IAAME,QAAQ,GAAG,SAAXA,QAAW,CAASzG,IAAT,EAAenJ,KAAf,EAAsB;EACrC,MAAI,OAAOmJ,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,IAAAA,IAAI,GAAG0G,IAAI,CAACC,KAAL,CAAW3G,IAAX,CAAP;EACD;;EACD,MAAI1D,IAAI,GAAG,IAAI4H,MAAJ,EAAX,CAJqC;;EAMrC,MAAIgC,OAAO,GAAGlG,IAAI,CAAC3B,IAAL,CAAUxB,GAAV,CAAc,UAAApL,CAAC,EAAI;;EAE/B,QAAI4K,KAAK,GAAG4J,QAAU,CAACxU,CAAC,CAAC,CAAD,CAAF,CAAtB,CAF+B;;EAI/B,QAAImV,MAAM,GAAGT,SAAS,CAAC1U,CAAC,CAAC,CAAD,CAAF,EAAOuO,IAAI,CAAC7J,IAAZ,CAAtB,CAJ+B;;EAM/BkG,IAAAA,KAAK,GAAGA,KAAK,CAACQ,GAAN,CAAU,UAAC1M,GAAD,EAAME,CAAN,EAAY;EAC5B,UAAI6I,IAAI,GAAG,IAAI0C,MAAJ,CAASzL,GAAT,CAAX;EACAyW,MAAAA,MAAM,CAACvW,CAAD,CAAN,CAAUmC,OAAV,CAAkB,UAAA0D,GAAG;EAAA,eAAIgD,IAAI,CAAChD,GAAL,CAASA,GAAT,EAAc,EAAd,EAAkBW,KAAlB,CAAJ;EAAA,OAArB;EACAyF,MAAAA,IAAI,CAACX,GAAL,CAASzC,IAAT;EACA,aAAOA,IAAP;EACD,KALO,CAAR,CAN+B;;EAa/B6M,IAAAA,QAAQ,CAAC1J,KAAD,CAAR,CAb+B;;EAe/B,WAAO,IAAIsH,QAAJ,CAAWtH,KAAK,CAAC,CAAD,CAAL,CAAS3G,EAApB,EAAwB2G,KAAK,CAAC5L,MAA9B,EAAsC6L,IAAtC,CAAP;EACD,GAhBa,CAAd;EAiBA,SAAO4J,OAAP;EACD,CAxBD;;EA0BA,gBAAc,GAAG;EACfF,EAAAA,QAAQ,EAARA,QADe;EAEfS,EAAAA,QAAQ,EAARA;EAFe,CAAjB;;EC5FA,YAAc,GAAG,QAAjB;;ECAA,SAAc,GAAC;EACb,iBAAe,aADF;EAEb,iBAAe,cAFF;EAGb,kBAAgB,gBAHH;EAIb,WAAS,YAJI;EAKb,UAAQ,oGALK;EAMb,YAAU,0BANG;EAOb,eAAa,iEAPA;EAQb,eAAa,gBARA;EASb,YAAU,6CATG;EAUb,cAAY,sBAVC;EAWb,kBAAgB,+CAXH;EAYb,YAAU,cAZG;EAab,iBAAe,0KAbF;EAcb,aAAW,gFAdE;EAeb,cAAY,2uBAfC;EAgBb,WAAS,+WAhBI;EAiBb,eAAa,2cAjBA;EAkBb,gBAAc,+8CAlBD;EAmBb,iBAAe,wgCAnBF;EAoBb,gBAAc,uhFApBD;EAqBb,UAAQ,8rBArBK;EAsBb,kBAAgB,u1EAtBH;EAuBb,aAAW,gzBAvBE;EAwBb,gBAAc,qGAxBD;EAyBb,cAAY,8SAzBC;EA0Bb,UAAQ,8lDA1BK;EA2Bb,kBAAgB,ubA3BH;EA4Bb,WAAS,ufA5BI;EA6Bb,aAAW,yyDA7BE;EA8Bb,YAAU,kvCA9BG;EA+Bb,gBAAc,0wKA/BD;EAgCb,aAAW,2DAhCE;EAiCb,WAAS,kGAjCI;EAkCb,eAAa,sLAlCA;EAmCb,cAAY,mhDAnCC;EAoCb,cAAY,88HApCC;EAqCb,YAAU,8gBArCG;EAsCb,UAAQ,kHAtCK;EAuCb,iBAAe,i6FAvCF;EAwCb,WAAS,wEAxCI;EAyCb,eAAa,6+FAzCA;EA0Cb,gBAAc,sqDA1CD;EA2Cb,eAAa,qNA3CA;EA4Cb,aAAW,8KA5CE;EA6Cb,cAAY,8JA7CC;EA8Cb,gBAAc,4UA9CD;EA+Cb,YAAU,4hBA/CG;EAgDb,iBAAe,wTAhDF;EAiDb,gBAAc;EAjDD,CAAf;;ECAA,IAAMI,MAAM,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,cAApB,CAAf;EAEA,SAAc,GAAG;EACfC,EAAAA,IAAI,EAAE;EACJzL,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB;EADF,GADS;;EAKf0L,EAAAA,QAAQ,EAAE;EACRzN,IAAAA,GAAG,EAAE,MADG;EAER+B,IAAAA,IAAI,EAAE;EAFE,GALK;;EAUfjD,EAAAA,UAAU,EAAE;EACVkB,IAAAA,GAAG,EAAE;EADK,GAVG;;EAef0N,EAAAA,MAAM,EAAE;EACN1N,IAAAA,GAAG,EAAE,CAAC,YAAD,EAAe,UAAf,CADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B;EAFA,GAfO;EAmBf4L,EAAAA,SAAS,EAAE;EACT3N,IAAAA,GAAG,EAAE;EADI,GAnBI;EAsBf4N,EAAAA,QAAQ,EAAE;EACR5N,IAAAA,GAAG,EAAE,WADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,YAAD,EAAe,UAAf;EAFE,GAtBK;EA0Bf8L,EAAAA,UAAU,EAAE;EACV7N,IAAAA,GAAG,EAAE,WADK;EAEV+B,IAAAA,IAAI,EAAE,CAAC,UAAD,EAAa,UAAb;EAFI,GA1BG;EA8Bf+L,EAAAA,QAAQ,EAAE;EACR9N,IAAAA,GAAG,EAAE,QADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,WAAD;EAFE,GA9BK;EAkCfgM,EAAAA,SAAS,EAAE;EACT/N,IAAAA,GAAG,EAAE,MADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,UAAd;EAFG,GAlCI;;EAwCfiM,EAAAA,KAAK,EAAE;EACLhO,IAAAA,GAAG,EAAE,UADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,cAAX;EAFD,GAxCQ;EA4CfkM,EAAAA,OAAO,EAAE;EACPjO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV,CADE;EAEP+B,IAAAA,IAAI,EAAE,CAAC,MAAD;EAFC,GA5CM;EAgDfmM,EAAAA,IAAI,EAAE;EACJlO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV,CADD;EAEJ+B,IAAAA,IAAI,EAAE,CAAC,SAAD;EAFF,GAhDS;EAoDfoM,EAAAA,MAAM,EAAE;EACNnO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV;EADC,GApDO;EAuDfoO,EAAAA,OAAO,EAAE;EACPpO,IAAAA,GAAG,EAAE;EADE,GAvDM;;EA4DfqO,EAAAA,YAAY,EAAE;EACZrO,IAAAA,GAAG,EAAE,CAAC,UAAD,EAAa,YAAb,CADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX;EAFM,GA5DC;EAgEfuM,EAAAA,UAAU,EAAE;EACVtO,IAAAA,GAAG,EAAE;EADK,GAhEG;EAmEfuO,EAAAA,MAAM,EAAE;EACNvO,IAAAA,GAAG,EAAE;EADC,GAnEO;EAsEfwO,EAAAA,OAAO,EAAE;EACPxO,IAAAA,GAAG,EAAE;EADE,GAtEM;;EA2EftC,EAAAA,MAAM,EAAE;EACNsC,IAAAA,GAAG,EAAE,MADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,UAAD;EAFA,GA3EO;;EAgFf0M,EAAAA,WAAW,EAAE;EACXzO,IAAAA,GAAG,EAAE;EADM,GAhFE;EAmFf0O,EAAAA,OAAO,EAAE;EACP1O,IAAAA,GAAG,EAAE,MADE;EAEP+B,IAAAA,IAAI,EAAEwL;EAFC,GAnFM;;EAwFfnP,EAAAA,KAAK,EAAE;EACL4B,IAAAA,GAAG,EAAE,MADA;EAEL+B,IAAAA,IAAI,EAAEwL;EAFD,GAxFQ;;EA6FfoB,EAAAA,QAAQ,EAAE;EACR3O,IAAAA,GAAG,EAAE,MADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX;EAFE,GA7FK;;EAkGf6M,EAAAA,IAAI,EAAE;EACJ5O,IAAAA,GAAG,EAAE,MADD;EAEJ+B,IAAAA,IAAI,EAAEwL;EAFF,GAlGS;;EAuGfsB,EAAAA,OAAO,EAAE;EACP7O,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,YAAT,CADE;EAEP+B,IAAAA,IAAI,EAAEwL;EAFC,GAvGM;;EA4Gf7N,EAAAA,UAAU,EAAE;EACVM,IAAAA,GAAG,EAAE,MADK;;EAAA;EA5GG,CAAjB;;ECFA,SAAc,GAAG;EACfpC,EAAAA,IAAI,EAAE;EACJmE,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB,EAAgC,OAAhC;EADF,GADS;;EAKf7D,EAAAA,YAAY,EAAE;EACZ8B,IAAAA,GAAG,EAAE,MADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd,EAAwB,aAAxB;EAFM,GALC;;EAUfjE,EAAAA,UAAU,EAAE;EACVkC,IAAAA,GAAG,EAAE,cADK;EAEV+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd;EAFI,GAVG;;EAef9D,EAAAA,MAAM,EAAE;EACN+B,IAAAA,GAAG,EAAE,cADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd,EAAwB,aAAxB;EAFA,GAfO;;EAoBf/D,EAAAA,SAAS,EAAE;EACTgC,IAAAA,GAAG,EAAE,MADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,aAAD;EAFG,GApBI;;EAyBf+M,EAAAA,WAAW,EAAE;EACX9O,IAAAA,GAAG,EAAE;EADM,GAzBE;;EA8Bf+O,EAAAA,MAAM,EAAE;EACN/O,IAAAA,GAAG,EAAE;EADC,GA9BO;;EAkCfgP,EAAAA,KAAK,EAAE;EACLhP,IAAAA,GAAG,EAAE,MADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,YAAD;EAFD,GAlCQ;;EAuCfkN,EAAAA,YAAY,EAAE;EACZjP,IAAAA,GAAG,EAAE,MADO;EAEZ+B,IAAAA,IAAI,EAAE;EAFM,GAvCC;EA2CfmN,EAAAA,UAAU,EAAE;EACVlP,IAAAA,GAAG,EAAE;EADK,GA3CG;;EA+Cf7B,EAAAA,UAAU,EAAE;EACV6B,IAAAA,GAAG,EAAE;EADK,GA/CG;;EAmDfmP,EAAAA,WAAW,EAAE;EACXnP,IAAAA,GAAG,EAAE;EADM,GAnDE;;EAuDfoP,EAAAA,QAAQ,EAAE;EACRpP,IAAAA,GAAG,EAAE;EADG;EAvDK,CAAjB;;ECAA,UAAc,GAAG;EACfqP,EAAAA,KAAK,EAAE;EACLtN,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB;EADD,GADQ;EAIfuN,EAAAA,OAAO,EAAE;EACPtP,IAAAA,GAAG,EAAE,OADE;EAEP+B,IAAAA,IAAI,EAAE,CAAC,UAAD;EAFC,GAJM;EAQfwN,EAAAA,QAAQ,EAAE;EACRvP,IAAAA,GAAG,EAAE,OADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,SAAD;EAFE,GARK;EAYfyN,EAAAA,YAAY,EAAE;EACZxP,IAAAA,GAAG,EAAE,UADO;;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,WAAZ;EAFM,GAZC;EAgBf0N,EAAAA,SAAS,EAAE;EACTzP,IAAAA,GAAG,EAAE,OADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,cAAD;EAFG,GAhBI;EAoBf2N,EAAAA,YAAY,EAAE;EACZ1P,IAAAA,GAAG,EAAE,OADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,WAAD;EAFM,GApBC;EAwBf4N,EAAAA,KAAK,EAAE;EACL3P,IAAAA,GAAG,EAAE;EADA,GAxBQ;EA2Bf4P,EAAAA,OAAO,EAAE;EACP5P,IAAAA,GAAG,EAAE;EADE;EA3BM,CAAjB;;ECAA,IAAM3D,QAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,QAA9B,EAAwC,OAAxC,CAAjB;EAEA,QAAc,GAAG;;EAEfwT,EAAAA,SAAS,EAAE;EACT9N,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,QAAjB,EAA2B,OAA3B;EADG,GAFI;;EAMf+N,EAAAA,UAAU,EAAE;EACV9P,IAAAA,GAAG,EAAE,CAAC,WAAD;EADK,GANG;;EAUf+P,EAAAA,WAAW,EAAE;EACX/P,IAAAA,GAAG,EAAE,CAAC,WAAD;EADM,GAVE;;EAcfgQ,EAAAA,WAAW,EAAE;EACXhQ,IAAAA,GAAG,EAAE,CAAC,WAAD,CADM;EAEX+B,IAAAA,IAAI,EAAE,CAAC,aAAD;EAFK,GAdE;EAmBfkO,EAAAA,WAAW,EAAE;EACXjQ,IAAAA,GAAG,EAAE,CAAC,aAAD;EADM,GAnBE;EAsBfkQ,EAAAA,MAAM,EAAE;EACNnO,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,OAA9B;EADA,GAtBO;;;EA4BfoO,EAAAA,IAAI,EAAE;EACJpO,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,aAAT,EAAwB,QAAxB,EAAkC,aAAlC,EAAiD,WAAjD;EADF,GA5BS;EA+BfqO,EAAAA,KAAK,EAAE;EACLpQ,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,UAAT,CADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,SAAT,EAAoB,MAApB;EAFD,GA/BQ;EAmCfsO,EAAAA,OAAO,EAAE;EACPrQ,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,MAAT;EADE,GAnCM;;EAuCfsQ,EAAAA,IAAI,EAAE;EACJtQ,IAAAA,GAAG,EAAE,CAAC,MAAD,CADD;EAEJ+B,IAAAA,IAAI,EAAE,CAAC,OAAD;EAFF,GAvCS;;EA6CfwO,EAAAA,UAAU,EAAE;EACVxO,IAAAA,IAAI,EAAE1F;EADI,GA7CG;EAgDfmU,EAAAA,WAAW,EAAE;EACXzO,IAAAA,IAAI,EAAE1F;EADK,GAhDE;EAmDfoU,EAAAA,WAAW,EAAE;EACX1O,IAAAA,IAAI,EAAE1F;EADK,GAnDE;;EAwDfqU,EAAAA,YAAY,EAAE;EACZ3O,IAAAA,IAAI,EAAE,CAAC,YAAD;EADM,GAxDC;;EA6Df4O,EAAAA,QAAQ,EAAE,EA7DK;;EA+DfC,EAAAA,UAAU,EAAE;EACV7O,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,EAA8B,QAA9B;EADI,GA/DG;;EAmEfxC,EAAAA,YAAY,EAAE,EAnEC;;EAsEfsR,EAAAA,GAAG,EAAE;EACH9O,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,aAAZ,EAA2B,MAA3B,EAAmC,WAAnC,EAAgD,OAAhD,EAAyD,WAAzD,EAAsE,OAAtE;EADH,GAtEU;EAyEf+O,EAAAA,WAAW,EAAE;EACX/O,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C,EAAuD,OAAvD;EADK,GAzEE;EA4EfgP,EAAAA,OAAO,EAAE,EA5EM;EA6EfC,EAAAA,SAAS,EAAE;EACThR,IAAAA,GAAG,EAAE,CAAC,MAAD,CADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,OAA1C;EAFG,GA7EI;EAiFfkP,EAAAA,KAAK,EAAE;EACLlP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADD,GAjFQ;EAoFfmP,EAAAA,QAAQ,EAAE;EACRnP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADE,GApFK;EAuFfoP,EAAAA,KAAK,EAAE;EACLpP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADD,GAvFQ;;EA4FftC,EAAAA,SAAS,EAAE;EACTsC,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,OAAtB;EADG,GA5FI;EA+FfhD,EAAAA,OAAO,EAAE;EACPgD,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,cAAX;EADC,GA/FM;EAkGflE,EAAAA,QAAQ,EAAE;EACRkE,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,OAAtB;EADE,GAlGK;;EAsGfqP,EAAAA,SAAS,EAAE;EACTrP,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,EAA8B,OAA9B;EADG;EAtGI,CAAjB;;ECFA;EACA,IAAMsP,QAAQ,GAAG;EACf7D,EAAAA,IAAI,EAAE,MADS;EAGf5P,EAAAA,IAAI,EAAE,OAHS;EAIfC,EAAAA,QAAQ,EAAE,OAJK;EAMfsS,EAAAA,IAAI,EAAE,KANS;EAOfd,EAAAA,KAAK,EAAE,KAPQ;EASfQ,EAAAA,SAAS,EAAE,SATI;EAWfY,EAAAA,WAAW,EAAE,MAXE;EAYfD,EAAAA,WAAW,EAAE,MAZE;EAafD,EAAAA,UAAU,EAAE,MAbG;EAcfL,EAAAA,MAAM,EAAE;EAdO,CAAjB;;;EAkBA,IAAMoB,SAAS,GAAG,SAAZA,SAAY,CAASzU,IAAT,EAAe;EAC/B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAIsZ,QAAQ,CAACtZ,CAAD,CAAZ,EAAiB;EACf8E,MAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQwZ,KAAR,GAAgBF,QAAQ,CAACtZ,CAAD,CAAxB;EACA;EACD;;EACD8E,IAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQiI,GAAR,CAAY7C,IAAZ,CAAiB,UAAA3E,CAAC,EAAI;EACpB,UAAI6Y,QAAQ,CAAC7Y,CAAD,CAAZ,EAAiB;EACfqE,QAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQwZ,KAAR,GAAgBF,QAAQ,CAAC7Y,CAAD,CAAxB;EACA,eAAO,IAAP;EACD;;EACD,aAAO,KAAP;EACD,KAND;EAOD,GAZD;EAaA,SAAOqE,IAAP;EACD,CAfD;;EAiBA,UAAc,GAAGyU,SAAjB;;ECpCA,IAAMxM,QAAM,GAAG,SAATA,MAAS,CAAS3D,GAAT,EAAc;EAC3B,SAAOA,GAAG,CAACuC,MAAJ,CAAW,UAAChL,CAAD,EAAI3B,CAAJ,EAAOM,CAAP;EAAA,WAAaA,CAAC,CAACoE,OAAF,CAAU/C,CAAV,MAAiB3B,CAA9B;EAAA,GAAX,CAAP;EACD,CAFD;;;EAKA,IAAMya,QAAQ,GAAG,SAAXA,QAAW,CAAS3U,IAAT,EAAe;EAC9B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA,QAAI0Z,GAAG,GAAG7U,GAAG,CAACoD,GAAJ,CAAQ7I,MAAlB;;EACA,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0a,GAApB,EAAyB1a,CAAC,EAA1B,EAA8B;EAC5B,UAAI8K,IAAI,GAAGjF,GAAG,CAACoD,GAAJ,CAAQjJ,CAAR,CAAX;;EACA,UAAI8F,IAAI,CAACgF,IAAD,CAAR,EAAgB;EACdjF,QAAAA,GAAG,CAACoD,GAAJ,GAAUpD,GAAG,CAACoD,GAAJ,CAAQsF,MAAR,CAAezI,IAAI,CAACgF,IAAD,CAAJ,CAAW7B,GAA1B,CAAV;EACD;EACF,KAR4B;;;EAU7BpD,IAAAA,GAAG,CAACoD,GAAJ,GAAU8E,QAAM,CAAClI,GAAG,CAACoD,GAAL,CAAhB;EACD,GAXD;EAYA,SAAOnD,IAAP;EACD,CAdD;;EAeA,QAAc,GAAG2U,QAAjB;;ECpBA,IAAM1M,QAAM,GAAG,SAATA,MAAS,CAAS3D,GAAT,EAAc;EAC3B,SAAOA,GAAG,CAACuC,MAAJ,CAAW,UAAChL,CAAD,EAAI3B,CAAJ,EAAOM,CAAP;EAAA,WAAaA,CAAC,CAACoE,OAAF,CAAU/C,CAAV,MAAiB3B,CAA9B;EAAA,GAAX,CAAP;EACD,CAFD;;;;EAMA,IAAM2a,SAAS,GAAG,SAAZA,SAAY,CAAS7U,IAAT,EAAe;EAC/B,MAAI5D,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4D,IAAZ,CAAX;EACA5D,EAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChB,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA6E,IAAAA,GAAG,CAACmF,IAAJ,GAAWnF,GAAG,CAACmF,IAAJ,IAAY,EAAvB;EACAnF,IAAAA,GAAG,CAACoD,GAAJ,CAAQ9G,OAAR,CAAgB,UAAA2I,IAAI,EAAI;EACtB,UAAIhF,IAAI,CAACgF,IAAD,CAAJ,IAAchF,IAAI,CAACgF,IAAD,CAAJ,CAAWE,IAA7B,EAAmC;;EAEjC,YAAIA,IAAI,GAAG,OAAOlF,IAAI,CAACgF,IAAD,CAAJ,CAAWE,IAAlB,KAA2B,QAA3B,GAAsC,CAAClF,IAAI,CAACgF,IAAD,CAAJ,CAAW7B,GAAZ,CAAtC,GAAyDnD,IAAI,CAACgF,IAAD,CAAJ,CAAWE,IAAX,IAAmB,EAAvF;EACAnF,QAAAA,GAAG,CAACmF,IAAJ,GAAWnF,GAAG,CAACmF,IAAJ,CAASuD,MAAT,CAAgBvD,IAAhB,CAAX;EACD;EACF,KAND,EAHgB;;EAWhB,SAAK,IAAIhL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAM4a,GAAG,GAAG1Y,IAAI,CAAClC,CAAD,CAAhB;;EACA,UAAI8F,IAAI,CAAC8U,GAAD,CAAJ,CAAU5P,IAAV,CAAetG,OAAf,CAAuB1D,CAAvB,MAA8B,CAAC,CAAnC,EAAsC;EACpC6E,QAAAA,GAAG,CAACmF,IAAJ,CAASoB,IAAT,CAAcwO,GAAd;EACD;EACF,KAhBe;;;EAkBhB/U,IAAAA,GAAG,CAACmF,IAAJ,GAAW+C,QAAM,CAAClI,GAAG,CAACmF,IAAL,CAAjB;EACD,GAnBD;EAoBA,SAAOlF,IAAP;EACD,CAvBD;;EAwBA,SAAc,GAAG6U,SAAjB;;EC9BA;EACA,IAAME,YAAY,GAAG,SAAfA,YAAe,CAAS/U,IAAT,EAAe;EAClC,MAAI5D,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4D,IAAZ,CAAX;EACA5D,EAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChB,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA6E,IAAAA,GAAG,CAACmD,OAAJ,GAAc,EAAd,CAFgB;;EAIhB,SAAK,IAAIhJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI8F,IAAI,CAAC5D,IAAI,CAAClC,CAAD,CAAL,CAAJ,CAAciJ,GAAd,CAAkBvE,OAAlB,CAA0B1D,CAA1B,MAAiC,CAAC,CAAtC,EAAyC;EACvC6E,QAAAA,GAAG,CAACmD,OAAJ,CAAYoD,IAAZ,CAAiBlK,IAAI,CAAClC,CAAD,CAArB;EACD;EACF;EACF,GATD;EAUA,SAAO8F,IAAP;EACD,CAbD;;EAcA,YAAc,GAAG+U,YAAjB;;ECVA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAShV,IAAT,EAAe;;EAE9B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd,CAD6B;;EAG7B6E,IAAAA,GAAG,CAACoD,GAAJ,GAAUpD,GAAG,CAACoD,GAAJ,IAAW,EAArB;;EACA,QAAI,OAAOpD,GAAG,CAACoD,GAAX,KAAmB,QAAvB,EAAiC;EAC/BpD,MAAAA,GAAG,CAACoD,GAAJ,GAAU,CAACpD,GAAG,CAACoD,GAAL,CAAV;EACD,KAN4B;;;EAQ7BpD,IAAAA,GAAG,CAACmF,IAAJ,GAAWnF,GAAG,CAACmF,IAAJ,IAAY,EAAvB;;EACA,QAAI,OAAOnF,GAAG,CAACmF,IAAX,KAAoB,QAAxB,EAAkC;EAChCnF,MAAAA,GAAG,CAACmF,IAAJ,GAAW,CAACnF,GAAG,CAACmF,IAAL,CAAX;EACD;EACF,GAZD;EAaA,SAAOlF,IAAP;EACD,CAhBD;;;EAmBA,IAAMiV,SAAS,GAAG,SAAZA,SAAY,CAASjV,IAAT,EAAe;;EAE/BA,EAAAA,IAAI,GAAGgV,QAAQ,CAAChV,IAAD,CAAf,CAF+B;;EAI/BA,EAAAA,IAAI,GAAG2U,IAAQ,CAAC3U,IAAD,CAAf,CAJ+B;;EAM/BA,EAAAA,IAAI,GAAG6U,KAAS,CAAC7U,IAAD,CAAhB,CAN+B;;EAQ/BA,EAAAA,IAAI,GAAGkV,MAAU,CAAClV,IAAD,CAAjB,CAR+B;;EAU/BA,EAAAA,IAAI,GAAGkD,QAAO,CAAClD,IAAD,CAAd;EACA,SAAOA,IAAP;EACD,CAZD;;EAaA,aAAc,GAAGiV,SAAjB;;EC9BA,IAAME,KAAK,GAAG,SAARA,KAAQ,CAASxP,GAAT,EAAc3F,IAAd,EAAoB;EAChC7D,EAAAA,MAAM,CAACC,IAAP,CAAYuJ,GAAZ,EAAiBtJ,OAAjB,CAAyB,UAAAnB,CAAC,EAAI;EAC5B8E,IAAAA,IAAI,CAAC9E,CAAD,CAAJ,GAAUyK,GAAG,CAACzK,CAAD,CAAb;EACD,GAFD;EAGD,CAJD;;EAMA,IAAMka,KAAK,GAAG,SAARA,KAAQ,GAAM;EAClB,MAAIpV,IAAI,GAAG,EAAX;EACAmV,EAAAA,KAAK,CAACE,KAAD,EAAQrV,IAAR,CAAL;EACAmV,EAAAA,KAAK,CAACG,KAAD,EAAQtV,IAAR,CAAL;EACAmV,EAAAA,KAAK,CAACI,MAAD,EAASvV,IAAT,CAAL;EACAmV,EAAAA,KAAK,CAACK,IAAD,EAAOxV,IAAP,CAAL,CALkB;;EAOlBA,EAAAA,IAAI,GAAGiV,SAAS,CAACjV,IAAD,CAAhB;EACA,SAAOA,IAAP;EACD,CATD;;EAUA,QAAc,GAAGoV,KAAK,EAAtB;;MCvB2BK,GAAG,GAAC,sCAAlB;EAAA,IAAyDxP,KAAK,GAACwP,GAAG,CAAC3b,KAAJ,CAAU,EAAV,EAAcmE,MAAd,CAAqB,UAAS5C,CAAT,EAAWC,CAAX,EAAaV,CAAb,EAAe;EAAC,SAAOS,CAAC,CAACC,CAAD,CAAD,GAAKV,CAAL,EAAOS,CAAd;EAAgB,CAArD,EAAsD,EAAtD,CAA/D;EAAA,IAAyHqa,WAAW,GAAC,SAAZA,WAAY,CAASra,CAAT,EAAW;EAAC,MAAG,KAAK,CAAL,KAASoa,GAAG,CAACpa,CAAD,CAAf,EAAmB,OAAOoa,GAAG,CAACpa,CAAD,CAAV;EAAc,MAAIC,CAAC,GAAC,CAAN;EAAA,MAAQV,CAAC,GAAC,EAAV;EAAA,MAAae,CAAC,GAAC,EAAf;;EAAkB,SAAKN,CAAC,IAAET,CAAR,EAAUS,CAAC,IAAET,CAAH,EAAKU,CAAC,EAAN,EAASV,CAAC,IAAE,EAAtB;AAAyB,EAAzB;;EAA0B,SAAKU,CAAC,EAAN,GAAU;EAAC,QAAMA,EAAC,GAACD,CAAC,GAAC,EAAV;;EAAaM,IAAAA,CAAC,GAAC+J,MAAM,CAACiQ,YAAP,CAAoB,CAACra,EAAC,GAAC,EAAF,GAAK,EAAL,GAAQ,EAAT,IAAaA,EAAjC,IAAoCK,CAAtC,EAAwCN,CAAC,GAAC,CAACA,CAAC,GAACC,EAAH,IAAM,EAAhD;EAAmD;;EAAA,SAAOK,CAAP;EAAS,CAAlT;EAAA,IAAmTia,aAAa,GAAC,SAAdA,aAAc,CAASva,CAAT,EAAW;EAAC,MAAG,KAAK,CAAL,KAAS4K,KAAK,CAAC5K,CAAD,CAAjB,EAAqB,OAAO4K,KAAK,CAAC5K,CAAD,CAAZ;EAAgB,MAAIC,CAAC,GAAC,CAAN;EAAA,MAAQV,CAAC,GAAC,CAAV;EAAA,MAAYe,CAAC,GAAC,EAAd;EAAA,MAAiBF,CAAC,GAAC,CAAnB;;EAAqB,SAAKb,CAAC,GAACS,CAAC,CAACf,MAAT,EAAgBgB,CAAC,IAAEK,CAAH,EAAKf,CAAC,EAAN,EAASe,CAAC,IAAE,EAA5B;AAA+B,EAA/B;;EAAgC,OAAI,IAAIf,EAAC,GAACS,CAAC,CAACf,MAAF,GAAS,CAAnB,EAAqBM,EAAC,IAAE,CAAxB,EAA0BA,EAAC,IAAGa,CAAC,IAAE,EAAjC,EAAoC;EAAC,QAAIE,EAAC,GAACN,CAAC,CAACwa,UAAF,CAAajb,EAAb,IAAgB,EAAtB;;EAAyBe,IAAAA,EAAC,GAAC,EAAF,KAAOA,EAAC,IAAE,CAAV,GAAaL,CAAC,IAAEK,EAAC,GAACF,CAAlB;EAAoB;;EAAA,SAAOH,CAAP;EAAS,CAAlgB;;EAAmgB,IAAIwa,QAAQ,GAAC;EAACJ,EAAAA,WAAW,EAACA,WAAb;EAAyBE,EAAAA,aAAa,EAACA;EAAvC,CAAb;EAAA,IAAmEG,OAAO,GAAC,SAARA,OAAQ,CAAS1a,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC,IAAIyQ,MAAJ,CAAW,yBAAX,CAAR;;EAA8C,OAAI,IAAInR,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACS,CAAC,CAAC2a,KAAF,CAAQ1b,MAAtB,EAA6BM,CAAC,EAA9B,EAAiC;EAAC,QAAMe,CAAC,GAACL,CAAC,CAAC2a,IAAF,CAAO5a,CAAC,CAAC2a,KAAF,CAAQpb,CAAR,CAAP,CAAR;;EAA2B,QAAG,CAACe,CAAJ,EAAM;EAACN,MAAAA,CAAC,CAAC6a,QAAF,GAAWtb,CAAX;EAAa;EAAM;;EAAAS,IAAAA,CAAC,CAAC8a,IAAF,CAAOL,QAAQ,CAACF,aAAT,CAAuBja,CAAC,CAAC,CAAD,CAAxB,CAAP,IAAqCma,QAAQ,CAACF,aAAT,CAAuBja,CAAC,CAAC,CAAD,CAAxB,CAArC;EAAkE;;EAAAN,EAAAA,CAAC,CAAC2a,KAAF,GAAQ3a,CAAC,CAAC2a,KAAF,CAAQrM,KAAR,CAActO,CAAC,CAAC6a,QAAhB,EAAyB7a,CAAC,CAAC2a,KAAF,CAAQ1b,MAAjC,CAAR;EAAiD,CAA/U;;EAAgV,IAAM8b,YAAY,GAAC,SAAbA,YAAa,CAAS/a,CAAT,EAAWC,CAAX,EAAaV,CAAb,EAAe;EAAC,MAAMe,CAAC,GAACma,QAAQ,CAACF,aAAT,CAAuBta,CAAvB,CAAR;EAAkC,SAAOK,CAAC,GAACN,CAAC,CAAC6a,QAAJ,GAAa7a,CAAC,CAAC8a,IAAF,CAAOxa,CAAP,CAAb,GAAuBf,CAAC,GAACe,CAAF,GAAI,CAAJ,GAAMN,CAAC,CAAC6a,QAAtC;EAA+C,CAApH;EAAA,IAAqHG,OAAO,GAAC,SAARA,OAAQ,CAAShb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC,EAAR;EAAA,MAAWV,CAAC,GAAC,SAAFA,CAAE,CAACe,CAAD,EAAGF,CAAH,EAAO;EAAC,QAAIC,CAAC,GAACL,CAAC,CAAC2a,KAAF,CAAQra,CAAR,CAAN;EAAiB,YAAMD,CAAC,CAAC,CAAD,CAAP,KAAaJ,CAAC,CAACgL,IAAF,CAAO7K,CAAP,GAAUC,CAAC,GAACA,CAAC,CAACiO,KAAF,CAAQ,CAAR,CAAzB;EAAqC,QAAMjP,CAAC,GAACgB,CAAC,CAAC5B,KAAF,CAAQ,eAAR,CAAR;;EAAiC,SAAI,IAAI4B,EAAC,GAAC,CAAV,EAAYA,EAAC,GAAChB,CAAC,CAACJ,MAAhB,EAAuBoB,EAAC,IAAE,CAA1B,EAA4B;EAAC,UAAME,CAAC,GAAClB,CAAC,CAACgB,EAAD,CAAT;EAAA,UAAaxB,CAAC,GAACQ,CAAC,CAACgB,EAAC,GAAC,CAAH,CAAhB;EAAsB,UAAG,CAACE,CAAJ,EAAM;EAAS,UAAMT,CAAC,GAACM,CAAC,GAACG,CAAV;;EAAY,UAAG,QAAM1B,CAAN,IAAS,KAAK,CAAL,KAASA,CAArB,EAAuB;EAACoB,QAAAA,CAAC,CAACgL,IAAF,CAAOnL,CAAP;EAAU;EAAS;;EAAA,UAAMN,CAAC,GAACub,YAAY,CAAC/a,CAAD,EAAGnB,CAAH,EAAKyB,CAAL,CAApB;EAA4Bf,MAAAA,CAAC,CAACC,CAAD,EAAGM,CAAH,CAAD;EAAO;EAAC,GAAzQ;;EAA0Q,SAAOP,CAAC,CAAC,CAAD,EAAG,EAAH,CAAD,EAAQU,CAAf;EAAiB,CAApa;EAAA,IAAqagb,MAAM,GAAC,SAAPA,MAAO,CAASjb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC;EAAC0a,IAAAA,KAAK,EAAC3a,CAAC,CAACvB,KAAF,CAAQ,GAAR,CAAP;EAAoBqc,IAAAA,IAAI,EAAC,EAAzB;EAA4BD,IAAAA,QAAQ,EAAC;EAArC,GAAR;EAAgD,SAAO7a,CAAC,CAACkM,KAAF,CAAQ,GAAR,KAAcwO,OAAO,CAACza,CAAD,CAArB,EAAyB+a,OAAO,CAAC/a,CAAD,CAAvC;EAA2C,CAAnhB;;EAAohB,IAAIib,QAAQ,GAACD,MAAb;EAAA,IAAoBE,UAAU,GAAC,SAAXA,UAAW,CAASnb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAACD,CAAC,CAACvB,KAAF,CAAQ,GAAR,EAAamE,MAAb,CAAoB,UAAC5C,CAAD,EAAGC,CAAH,EAAO;EAAC,QAAMV,CAAC,GAACU,CAAC,CAACxB,KAAF,CAAQ,GAAR,CAAR;EAAqB,WAAOuB,CAAC,CAACT,CAAC,CAAC,CAAD,CAAF,CAAD,GAAQA,CAAC,CAAC,CAAD,CAAT,EAAaS,CAApB;EAAsB,GAAvE,EAAwE,EAAxE,CAAR;EAAA,MAAoFT,CAAC,GAAC,EAAtF;EAAyF,SAAOuB,MAAM,CAACC,IAAP,CAAYd,CAAZ,EAAee,OAAf,CAAuB,UAAShB,CAAT,EAAW;EAAC,QAAMM,CAAC,GAAC4a,QAAQ,CAACjb,CAAC,CAACD,CAAD,CAAF,CAAhB;EAAuB,eAASA,CAAT,KAAaA,CAAC,GAAC,CAAC,CAAhB;;EAAmB,SAAI,IAAIC,GAAC,GAAC,CAAV,EAAYA,GAAC,GAACK,CAAC,CAACrB,MAAhB,EAAuBgB,GAAC,EAAxB,EAA2B;EAAC,UAAMG,CAAC,GAACE,CAAC,CAACL,GAAD,CAAT;EAAa,OAAC,CAAD,KAAKV,CAAC,CAACgF,cAAF,CAAiBnE,CAAjB,CAAL,GAAyB,CAAC,CAAD,KAAKgb,KAAK,CAACxK,OAAN,CAAcrR,CAAC,CAACa,CAAD,CAAf,CAAL,GAAyBb,CAAC,CAACa,CAAD,CAAD,GAAK,CAACb,CAAC,CAACa,CAAD,CAAF,EAAMJ,CAAN,CAA9B,GAAuCT,CAAC,CAACa,CAAD,CAAD,CAAK6K,IAAL,CAAUjL,CAAV,CAAhE,GAA6ET,CAAC,CAACa,CAAD,CAAD,GAAKJ,CAAlF;EAAoF;EAAC,GAA3M,GAA6MT,CAApN;EAAsN,CAA1V;;EAA2V,kBAAc,GAAC4b,UAAf;;ECA/sD;EACA,IAAME,OAAO,GAAG,SAAVA,OAAU,CAASxY,IAAT,EAAe6B,GAAf,EAAoB4W,GAApB,EAAyB;EACvC,MAAIA,GAAG,CAACzY,IAAD,CAAH,KAAcyB,SAAlB,EAA6B;EAC3B,QAAI,OAAOgX,GAAG,CAACzY,IAAD,CAAV,KAAqB,QAAzB,EAAmC;EACjCyY,MAAAA,GAAG,CAACzY,IAAD,CAAH,GAAY,CAACyY,GAAG,CAACzY,IAAD,CAAJ,CAAZ;EACD;;EACDyY,IAAAA,GAAG,CAACzY,IAAD,CAAH,CAAUoI,IAAV,CAAevG,GAAf;EACD,GALD,MAKO;EACL4W,IAAAA,GAAG,CAACzY,IAAD,CAAH,GAAY6B,GAAZ;EACD;EACF,CATD;;;EAYA,IAAM6W,OAAO,GAAG,SAAVA,OAAU,CAAS1Y,IAAT,EAAe6B,GAAf,EAAoBW,KAApB,EAA2B;EACzC,MAAImW,OAAO,GAAGnW,KAAK,CAAC2J,KAApB;EACA,MAAI1J,SAAS,GAAGD,KAAK,CAACE,UAAtB,CAFyC;;EAKzC,MAAIyJ,KAAK,GAAGnM,IAAI,CAACpE,KAAL,CAAW,GAAX,CAAZ;;EACA,MAAIuQ,KAAK,CAAC/P,MAAN,GAAe,CAAnB,EAAsB;;EAEpBoG,IAAAA,KAAK,CAACoW,WAAN,CAAkBzM,KAAK,CAAC,CAAD,CAAvB,IAA8B,IAA9B;EACD,GATwC;;;EAWzC,MAAItK,GAAG,KAAK,UAAZ,EAAwB;EACtB,QAAIgX,MAAM,GAAGpW,SAAS,CAACqW,QAAV,CAAmB9Y,IAAnB,EAAyBwC,KAAzB,CAAb;EACAmW,IAAAA,OAAO,CAACE,MAAD,CAAP,GAAkBF,OAAO,CAACE,MAAD,CAAP,IAAmB,QAArC,CAFsB;EAGvB,GAdwC;;;EAgBzC,MAAIhX,GAAG,KAAK,YAAZ,EAA0B;EACxB,QAAIkX,IAAI,GAAGtW,SAAS,CAACuW,SAAV,CAAoBhZ,IAApB,EAA0BwC,KAA1B,CAAX;EACA,QAAIV,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY6a,IAAZ,CAAX;;EACA,SAAK,IAAI/c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI4B,CAAC,GAAGmb,IAAI,CAACjX,IAAI,CAAC9F,CAAD,CAAL,CAAZ;EACA2c,MAAAA,OAAO,CAAC/a,CAAD,CAAP,GAAa+a,OAAO,CAAC/a,CAAD,CAAP,IAAckE,IAAI,CAAC9F,CAAD,CAA/B,CAFoC;EAGrC;EACF,GAvBwC;;;EAyBzC,MAAI6F,GAAG,KAAK,YAAZ,EAA0B;EACxB,QAAIkX,KAAI,GAAGtW,SAAS,CAACwW,UAAV,CAAqBjZ,IAArB,CAAX;;EACA,QAAI8B,KAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY6a,KAAZ,CAAX;;EACA,SAAK,IAAI/c,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG8F,KAAI,CAAC1F,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAI4B,EAAC,GAAGmb,KAAI,CAACjX,KAAI,CAAC9F,EAAD,CAAL,CAAZ;EACA2c,MAAAA,OAAO,CAAC/a,EAAD,CAAP,GAAa+a,OAAO,CAAC/a,EAAD,CAAP,IAAckE,KAAI,CAAC9F,EAAD,CAA/B,CAFoC;EAGrC;EACF,GAhCwC;;;EAkCzC,MAAI6F,GAAG,KAAK,aAAZ,EAA2B;;EAEzB2W,IAAAA,OAAO,CAACxY,IAAD,EAAO,YAAP,EAAqB2Y,OAArB,CAAP,CAFyB;;EAIzB,QAAII,MAAI,GAAGtW,SAAS,CAACuW,SAAV,CAAoB7M,KAAK,CAAC,CAAD,CAAzB,EAA8B3J,KAA9B,CAAX;;EACA,QAAIV,MAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY6a,MAAZ,CAAX;;EACA,SAAK,IAAI/c,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG8F,MAAI,CAAC1F,MAAzB,EAAiCJ,GAAC,EAAlC,EAAsC;;EAEpCwG,MAAAA,KAAK,CAACoW,WAAN,CAAkBG,MAAI,CAACjX,MAAI,CAAC9F,GAAD,CAAL,CAAtB,IAAmC,IAAnC,CAFoC;;EAIpC,UAAI4B,GAAC,GAAGmb,MAAI,CAACjX,MAAI,CAAC9F,GAAD,CAAL,CAAJ,GAAgB,GAAhB,GAAsBmQ,KAAK,CAAC,CAAD,CAAnC;;EAEAqM,MAAAA,OAAO,CAAC5a,GAAD,EAAIkE,MAAI,CAAC9F,GAAD,CAAR,EAAa2c,OAAb,CAAP;EACAH,MAAAA,OAAO,CAAC5a,GAAD,EAAI,aAAJ,EAAmB+a,OAAnB,CAAP;EACD;EACF,GAjDwC;;;EAmDzC,MAAI9W,GAAG,KAAK,SAAZ,EAAuB;EACrB,QAAIgX,OAAM,GAAGpW,SAAS,CAACqW,QAAV,CAAmB9Y,IAAnB,EAAyBwC,KAAzB,CAAb;;EACAmW,IAAAA,OAAO,CAACE,OAAD,CAAP,GAAkBF,OAAO,CAACE,OAAD,CAAP,IAAmB,CAAC,SAAD,EAAY,QAAZ,CAArC,CAFqB;EAGtB;EACF,CAvDD;;;;;;;;;;;EAkEA,YAAc,GAAG;EACfL,EAAAA,OAAO,EAAEA,OADM;EAEfE,EAAAA,OAAO,EAAEA;EAFM,CAAjB;;EC/EA;EACA,IAAMQ,aAAa,GAAG,SAAhBA,aAAgB,CAAS1W,KAAT,EAAgB;;EAEpC,MAAI2U,KAAK,GAAG3U,KAAK,CAAC2W,UAAN,CAAiBhC,KAA7B;EACA,MAAIhL,KAAK,GAAGlO,MAAM,CAACC,IAAP,CAAYiZ,KAAZ,CAAZ;;EACA,OAAK,IAAInb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmQ,KAAK,CAAC/P,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,QAAM4B,CAAC,GAAGuO,KAAK,CAACnQ,CAAD,CAAf;EACAwG,IAAAA,KAAK,CAAC2J,KAAN,CAAYvO,CAAZ,IAAiB,UAAjB;EACA4E,IAAAA,KAAK,CAAC2J,KAAN,CAAYgL,KAAK,CAACvZ,CAAD,CAAjB,IAAwB,QAAxB;EACD,GARmC;;;EAWpC,MAAIwZ,KAAK,GAAG5U,KAAK,CAAC2W,UAAN,CAAiB/B,KAA7B;EACA,MAAIlZ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYkZ,KAAZ,CAAX;;EAZoC,6BAa3Bpb,EAb2B;EAclC,QAAMod,GAAG,GAAGlb,IAAI,CAAClC,EAAD,CAAhB,CAdkC;;EAgBlCwG,IAAAA,KAAK,CAAC2J,KAAN,CAAYiN,GAAZ,IAAmB5W,KAAK,CAAC2J,KAAN,CAAYiN,GAAZ,KAAoB,YAAvC;EACA,QAAIC,KAAK,GAAG7W,KAAK,CAACE,UAAN,CAAiBsW,SAAjB,CAA2BI,GAA3B,EAAgC5W,KAAhC,CAAZ;EACA6W,IAAAA,KAAK,GAAGpb,MAAM,CAACoH,MAAP,CAAcgU,KAAd,EAAqBjC,KAAK,CAACgC,GAAD,CAA1B,CAAR,CAlBkC;;EAoBlCnb,IAAAA,MAAM,CAACC,IAAP,CAAYmb,KAAZ,EAAmBlb,OAAnB,CAA2B,UAAA0D,GAAG,EAAI;EAChCW,MAAAA,KAAK,CAAC2J,KAAN,CAAYkN,KAAK,CAACxX,GAAD,CAAjB,IAA0BW,KAAK,CAAC2J,KAAN,CAAYkN,KAAK,CAACxX,GAAD,CAAjB,KAA2BA,GAArD;EACD,KAFD;EApBkC;;EAapC,OAAK,IAAI7F,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EAAA,UAA7BA,EAA6B;EAUrC;EACF,CAxBD;;EAyBA,mBAAc,GAAGkd,aAAjB;;EC1BA;EACA,UAAc,GAAG;;EAEf,sBAAoB,cAFL;;EAIf,cAAY,cAJG;EAKf,cAAY,cALG;EAMfI,EAAAA,EAAE,EAAE,cANW;EAOf,aAAW,cAPI;EAQfC,EAAAA,GAAG,EAAE,cARU;EASfC,EAAAA,EAAE,EAAE,MATW;EAUfC,EAAAA,EAAE,EAAE,MAVW;EAWfC,EAAAA,EAAE,EAAE,MAXW;EAYfC,EAAAA,EAAE,EAAE;EAZW,CAAjB;;ECDA;;EAGA,WAAc,GAAG;EACfC,EAAAA,QAAQ,EAAE,SADK;EAEfC,EAAAA,IAAI,EAAE,OAFS;EAGfC,EAAAA,MAAM,EAAE,SAHO;EAIfC,EAAAA,OAAO,EAAE,QAJM;EAKfC,EAAAA,QAAQ,EAAE,UALK;EAMfC,EAAAA,OAAO,EAAE,UANM;EAOfC,EAAAA,QAAQ,EAAE,YAPK;EAQfC,EAAAA,OAAO,EAAE,UARM;EASfC,EAAAA,IAAI,EAAE,MATS;EAUfC,EAAAA,QAAQ,EAAE,SAVK;EAWfC,EAAAA,QAAQ,EAAE,UAXK;EAYfC,EAAAA,IAAI,EAAE,OAZS;EAafC,EAAAA,GAAG,EAAE,OAbU;EAcfC,EAAAA,MAAM,EAAE,OAdO;EAefC,EAAAA,OAAO,EAAE,UAfM;EAgBfC,EAAAA,KAAK,EAAE,UAhBQ;EAiBfC,EAAAA,MAAM,EAAE,UAjBO;EAkBfC,EAAAA,OAAO,EAAE,SAlBM;EAmBfC,EAAAA,MAAM,EAAE,SAnBO;EAoBfC,EAAAA,SAAS,EAAE,UApBI;EAqBfC,EAAAA,UAAU,EAAE,WArBG;EAsBfC,EAAAA,QAAQ,EAAE,WAtBK;EAuBfC,EAAAA,IAAI,EAAE,MAvBS;EAwBfC,EAAAA,SAAS,EAAE,WAxBI;EAyBfC,EAAAA,IAAI,EAAE,QAzBS;EA0BfC,EAAAA,OAAO,EAAE,WA1BM;EA2BfC,EAAAA,KAAK,EAAE,QA3BQ;EA4BfC,EAAAA,IAAI,EAAE,MA5BS;EA6BfC,EAAAA,OAAO,EAAE,UA7BM;EA8BfC,EAAAA,MAAM,EAAE,OA9BO;EA+BfC,EAAAA,KAAK,EAAE,QA/BQ;EAgCfC,EAAAA,KAAK,EAAE,OAhCQ;EAiCfC,EAAAA,IAAI,EAAE,OAjCS;EAkCfC,EAAAA,YAAY,EAAE,aAlCC;EAmCfza,EAAAA,KAAK,EAAE,SAnCQ;EAoCf0a,EAAAA,KAAK,EAAE,QApCQ;EAqCfC,EAAAA,IAAI,EAAE,QArCS;EAsCfC,EAAAA,QAAQ,EAAE,UAtCK;EAuCfC,EAAAA,IAAI,EAAE,QAvCS;EAwCfC,EAAAA,GAAG,EAAE,KAxCU;EAyCfC,EAAAA,MAAM,EAAE,UAzCO;EA0CfC,EAAAA,UAAU,EAAE,WA1CG;EA2CfC,EAAAA,OAAO,EAAE,QA3CM;EA4CfC,EAAAA,QAAQ,EAAE,YA5CK;EA6CfC,EAAAA,KAAK,EAAE,MA7CQ;EA8CfC,EAAAA,IAAI,EAAE,OA9CS;EA+CfC,EAAAA,MAAM,EAAE,SA/CO;EAgDfC,EAAAA,OAAO,EAAE,QAhDM;EAiDfC,EAAAA,OAAO,EAAE,QAjDM;EAkDfC,EAAAA,IAAI,EAAE,OAlDS;EAmDfC,EAAAA,IAAI,EAAE,KAnDS;EAoDfC,EAAAA,EAAE,EAAE,MApDW;EAqDfC,EAAAA,WAAW,EAAE,aArDE;EAsDfC,EAAAA,MAAM,EAAE,QAtDO;EAuDfC,EAAAA,UAAU,EAAE,WAvDG;EAwDfC,EAAAA,SAAS,EAAE,WAxDI;EAyDfC,EAAAA,IAAI,EAAE,SAzDS;EA0DfC,EAAAA,MAAM,EAAE,OA1DO;EA2DfC,EAAAA,UAAU,EAAE,WA3DG;EA4DfC,EAAAA,KAAK,EAAE,QA5DQ;EA6DfC,EAAAA,GAAG,EAAE,OA7DU;EA8DfC,EAAAA,IAAI,EAAE,OA9DS;EA+DfC,EAAAA,QAAQ,EAAE,WA/DK;EAgEfC,EAAAA,QAAQ,EAAE,SAhEK;EAiEfC,EAAAA,OAAO,EAAE,UAjEM;EAkEfC,EAAAA,QAAQ,EAAE,SAlEK;EAmEfC,EAAAA,QAAQ,EAAE,UAnEK;EAoEfC,EAAAA,OAAO,EAAE,UApEM;EAqEfC,EAAAA,MAAM,EAAE,QArEO;EAsEfC,EAAAA,KAAK,EAAE,SAtEQ;EAuEfC,EAAAA,KAAK,EAAE,OAvEQ;EAwEfC,EAAAA,OAAO,EAAE,UAxEM;EAyEfC,EAAAA,MAAM,EAAE,SAzEO;EA0EfC,EAAAA,QAAQ,EAAE,WA1EK;;;EAAA,CAAjB;;ECHA;;;;EAKA,IAAMC,OAAO,GAAG;EACdzhB,EAAAA,CAAC,EAAE,QADW;EAEd0hB,EAAAA,GAAG,EAAE,YAFS;EAGdC,EAAAA,IAAI,EAAE,cAHQ;EAIdC,EAAAA,GAAG,EAAE,WAJS;EAKdC,EAAAA,GAAG,EAAE,eALS;EAMdC,EAAAA,IAAI,EAAE,cANQ;EAOdC,EAAAA,OAAO,EAAE,YAPK;EAQdriB,EAAAA,CAAC,EAAE;EARW,CAAhB;;EAYA,IAAIsiB,YAAY,GAAG;EACjBC,EAAAA,GAAG,EAAE;EACHviB,IAAAA,CAAC,EAAE;EADA,GADY;EAIjBwiB,EAAAA,IAAI,EAAE;EACJN,IAAAA,GAAG,EAAE,OADD;EAEJ5hB,IAAAA,CAAC,EAAE;EAFC,GAJW;EAQjBmiB,EAAAA,GAAG,EAAE;EACHniB,IAAAA,CAAC,EAAE,QADA;EAEH4hB,IAAAA,GAAG,EAAE,MAFF;EAGHE,IAAAA,IAAI,EAAE;EAHH,GARY;EAajBM,EAAAA,GAAG,EAAE;EACH1iB,IAAAA,CAAC,EAAE,KADA;EAEHM,IAAAA,CAAC,EAAE,MAFA;EAGH4hB,IAAAA,GAAG,EAAE;EAHF,GAbY;EAkBjBS,EAAAA,KAAK,EAAE;EACLX,IAAAA,GAAG,EAAE,IADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAlBU;EAsBjBU,EAAAA,OAAO,EAAE;EACP5iB,IAAAA,CAAC,EAAE,MADI;EAEPkiB,IAAAA,GAAG,EAAE;EAFE,GAtBQ;EA0BjBW,EAAAA,GAAG,EAAE;EACH7iB,IAAAA,CAAC,EAAE,EADA;EAEHM,IAAAA,CAAC,EAAE,OAFA;EAGH4hB,IAAAA,GAAG,EAAE;EAHF,GA1BY;EA+BjBY,EAAAA,EAAE,EAAE;EACF9iB,IAAAA,CAAC,EAAE,EADD;EAEFM,IAAAA,CAAC,EAAE,IAFD;EAGF0hB,IAAAA,GAAG,EAAE,MAHH;EAIFE,IAAAA,GAAG,EAAE,KAJH;EAKFE,IAAAA,IAAI,EAAE;EALJ,GA/Ba;EAsCjBW,EAAAA,IAAI,EAAE;EACJ/iB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJ0hB,IAAAA,GAAG,EAAE;EAHD,GAtCW;EA2CjBgB,EAAAA,MAAM,EAAE;EACNhB,IAAAA,GAAG,EAAE;EADC,GA3CS;EA8CjBiB,EAAAA,KAAK,EAAE;EACL3iB,IAAAA,CAAC,EAAE,OADE;EAEL0hB,IAAAA,GAAG,EAAE,OAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA,GA9CU;EAmDjBgB,EAAAA,KAAK,EAAE;EACL5iB,IAAAA,CAAC,EAAE,KADE;EAEL4hB,IAAAA,GAAG,EAAE,MAFA;EAGLE,IAAAA,IAAI,EAAE;EAHD,GAnDU;EAwDjBe,EAAAA,IAAI,EAAE;EACJnB,IAAAA,GAAG,EAAE;EADD,GAxDW;EA2DjBoB,EAAAA,GAAG,EAAE;EACHpjB,IAAAA,CAAC,EAAE,MADA;EAEHgiB,IAAAA,GAAG,EAAE;EAFF,GA3DY;EA+DjBqB,EAAAA,IAAI,EAAE;EACJnB,IAAAA,GAAG,EAAE;EADD,GA/DW;EAkEjBoB,EAAAA,IAAI,EAAE;EACJhjB,IAAAA,CAAC,EAAE,QADC;EAEJ0hB,IAAAA,GAAG,EAAE,QAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GAlEW;EAuEjBqB,EAAAA,KAAK,EAAE;EACLvB,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAvEU;EA2EjBsB,EAAAA,IAAI,EAAE;EACJxB,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA3EW;EA+EjBuB,EAAAA,IAAI,EAAE;EACJzjB,IAAAA,CAAC,EAAE;EADC,GA/EW;EAkFjB0jB,EAAAA,KAAK,EAAE;EACL1B,IAAAA,GAAG,EAAE;EADA,GAlFU;EAqFjB,WAAO;EACLE,IAAAA,GAAG,EAAE;EADA,GArFU;EAwFjByB,EAAAA,KAAK,EAAE;EACLzB,IAAAA,GAAG,EAAE;EADA,GAxFU;EA2FjB0B,EAAAA,KAAK,EAAE;EACL5B,IAAAA,GAAG,EAAE,SADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA3FU;EA+FjB2B,EAAAA,SAAS,EAAE;EACT3B,IAAAA,GAAG,EAAE;EADI,GA/FM;EAkGjB4B,EAAAA,MAAM,EAAE;EACN5B,IAAAA,GAAG,EAAE;EADC,GAlGS;EAqGjBtH,EAAAA,KAAK,EAAE;EACLoH,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GArGU;EAyGjB6B,EAAAA,IAAI,EAAE;EACJ/B,IAAAA,GAAG,EAAE;EADD,GAzGW;EA4GjBgC,EAAAA,KAAK,EAAE;EACLhC,IAAAA,GAAG,EAAE;EADA,GA5GU;EA+GjBiC,EAAAA,GAAG,EAAE;EACHjC,IAAAA,GAAG,EAAE,QADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA/GY;EAmHjBnP,EAAAA,GAAG,EAAE;EACH/S,IAAAA,CAAC,EAAE,EADA;EAEHmiB,IAAAA,GAAG,EAAE,GAFF;EAGH7hB,IAAAA,CAAC,EAAE,EAHA;EAIH4hB,IAAAA,GAAG,EAAE,OAJF;EAKHD,IAAAA,IAAI,EAAE,OALH;EAMHI,IAAAA,OAAO,EAAE,OANN;EAOHD,IAAAA,IAAI,EAAE;EAPH,GAnHY;EA4HjB,WAAO;EACLF,IAAAA,GAAG,EAAE;EADA,GA5HU;EA+HjBgC,EAAAA,MAAM,EAAE;EACN5jB,IAAAA,CAAC,EAAE,UADG;EAEN0hB,IAAAA,GAAG,EAAE,QAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GA/HS;EAoIjBiC,EAAAA,KAAK,EAAE;EACLnC,IAAAA,GAAG,EAAE;EADA,GApIU;EAuIjBoC,EAAAA,IAAI,EAAE;EACJpC,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE,MAFD;EAGJ5hB,IAAAA,CAAC,EAAE;EAHC,GAvIW;EA4IjB+jB,EAAAA,OAAO,EAAE;EACPrkB,IAAAA,CAAC,EAAE,YADI;EAEPM,IAAAA,CAAC,EAAE,WAFI;EAGP4hB,IAAAA,GAAG,EAAE;EAHE,GA5IQ;EAiJjBoC,EAAAA,IAAI,EAAE;EACJpC,IAAAA,GAAG,EAAE;EADD,GAjJW;EAoJjBqC,EAAAA,KAAK,EAAE;EACLvC,IAAAA,GAAG,EAAE;EADA,GApJU;EAuJjBwC,EAAAA,GAAG,EAAE;EACHxC,IAAAA,GAAG,EAAE;EADF,GAvJY;EA0JjByC,EAAAA,IAAI,EAAE;EACJzC,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA1JW;EA8JjBwC,EAAAA,OAAO,EAAE;EACP1kB,IAAAA,CAAC,EAAE,KADI;EAEPM,IAAAA,CAAC,EAAE,MAFI;EAGP4hB,IAAAA,GAAG,EAAE;EAHE,GA9JQ;EAmKjByC,EAAAA,GAAG,EAAE;EACHrkB,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GAnKY;EAuKjB0C,EAAAA,GAAG,EAAE;EACHtkB,IAAAA,CAAC,EAAE,OADA;EAEH0hB,IAAAA,GAAG,EAAE,KAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GAvKY;EA4KjB2C,EAAAA,IAAI,EAAE;EACJ7C,IAAAA,GAAG,EAAE;EADD,GA5KW;EA+KjB,QAAI;EACFE,IAAAA,GAAG,EAAE,KADH;EAEFE,IAAAA,IAAI,EAAE;EAFJ,GA/Ka;EAmLjB0C,EAAAA,IAAI,EAAE;EACJ9C,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAnLW;EAuLjB6C,EAAAA,KAAK,EAAE;EACL/C,IAAAA,GAAG,EAAE;EADA,GAvLU;EA0LjBgD,EAAAA,KAAK,EAAE;EACLhD,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA1LU;EA8LjB+C,EAAAA,KAAK,EAAE;EACL3kB,IAAAA,CAAC,EAAE,SADE;EAEL0hB,IAAAA,GAAG,EAAE,IAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA,GA9LU;EAmMjBgD,EAAAA,IAAI,EAAE;EACJ5kB,IAAAA,CAAC,EAAE,OADC;EAEJ4hB,IAAAA,GAAG,EAAE;EAFD,GAnMW;EAuMjBiD,EAAAA,GAAG,EAAE;EACHnlB,IAAAA,CAAC,EAAE,KADA;EAEHM,IAAAA,CAAC,EAAE,MAFA;EAGH0hB,IAAAA,GAAG,EAAE,KAHF;EAIHE,IAAAA,GAAG,EAAE;EAJF,GAvMY;EA6MjBkD,EAAAA,IAAI,EAAE;EACJ9kB,IAAAA,CAAC,EAAE;EADC,GA7MW;EAgNjB+kB,EAAAA,GAAG,EAAE;EACHnD,IAAAA,GAAG,EAAE;EADF,GAhNY;EAmNjBoD,EAAAA,IAAI,EAAE;EACJtD,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAnNW;EAuNjBqD,EAAAA,IAAI,EAAE;EACJvD,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAvNW;EA2NjBsD,EAAAA,IAAI,EAAE;EACJxlB,IAAAA,CAAC,EAAE,KADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GA3NW;EA+NjBuD,EAAAA,KAAK,EAAE;EACLzD,IAAAA,GAAG,EAAE,QADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA/NU;EAmOjBvT,EAAAA,IAAI,EAAE;EACJuT,IAAAA,GAAG,EAAE;EADD,GAnOW;EAsOjBwD,EAAAA,IAAI,EAAE;EACJplB,IAAAA,CAAC,EAAE,MADC;EAEJ0hB,IAAAA,GAAG,EAAE;EAFD,GAtOW;EA0OjB2D,EAAAA,KAAK,EAAE;EACL3D,IAAAA,GAAG,EAAE;EADA,GA1OU;EA6OjB4D,EAAAA,GAAG,EAAE;EACH5D,IAAAA,GAAG,EAAE,OADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA7OY;EAiPjB2D,EAAAA,MAAM,EAAE;EACN3D,IAAAA,GAAG,EAAE;EADC,GAjPS;EAoPjB4D,EAAAA,MAAM,EAAE;EACNxlB,IAAAA,CAAC,EAAE,MADG;EAEN0hB,IAAAA,GAAG,EAAE,WAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GApPS;EAyPjB6D,EAAAA,OAAO,EAAE;EACPzlB,IAAAA,CAAC,EAAE,WADI;EAEP0hB,IAAAA,GAAG,EAAE,IAFE;EAGPE,IAAAA,GAAG,EAAE;EAHE,GAzPQ;EA8PjB8D,EAAAA,IAAI,EAAE;EACJhmB,IAAAA,CAAC,EAAE,EADC;EAEJM,IAAAA,CAAC,EAAE;EAFC,GA9PW;EAkQjB2lB,EAAAA,MAAM,EAAE;EACN3lB,IAAAA,CAAC,EAAE,UADG;EAEN0hB,IAAAA,GAAG,EAAE,QAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GAlQS;EAuQjBtW,EAAAA,GAAG,EAAE;EACHsW,IAAAA,GAAG,EAAE,KADF;EAEHF,IAAAA,GAAG,EAAE;EAFF,GAvQY;EA2QjBkE,EAAAA,IAAI,EAAE;EACJ5lB,IAAAA,CAAC,EAAE,QADC;EAEJ0hB,IAAAA,GAAG,EAAE,IAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GA3QW;EAgRjBiE,EAAAA,EAAE,EAAE;EACFnE,IAAAA,GAAG,EAAE,KADH;EAEFE,IAAAA,GAAG,EAAE,MAFH;EAGFE,IAAAA,IAAI,EAAE;EAHJ,GAhRa;EAqRjBgE,EAAAA,IAAI,EAAE;EACJpE,IAAAA,GAAG,EAAE;EADD,GArRW;EAwRjBqE,EAAAA,IAAI,EAAE;EACJrE,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAxRW;EA4RjBoE,EAAAA,IAAI,EAAE;EACJhmB,IAAAA,CAAC,EAAE,QADC;EAEJ0hB,IAAAA,GAAG,EAAE,KAFD;EAGJE,IAAAA,GAAG,EAAE,KAHD;EAIJE,IAAAA,IAAI,EAAE;EAJF,GA5RW;EAkSjBmE,EAAAA,IAAI,EAAE;EACJvE,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAlSW;EAsSjBsE,EAAAA,IAAI,EAAE;EACJxE,IAAAA,GAAG,EAAE,QADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAtSW;EA0SjBuE,EAAAA,GAAG,EAAE;EACHzE,IAAAA,GAAG,EAAE;EADF,GA1SY;EA6SjB0E,EAAAA,IAAI,EAAE;EACJ1E,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA7SW;EAiTjByE,EAAAA,IAAI,EAAE;EACJ3E,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAjTW;EAqTjB0E,EAAAA,GAAG,EAAE;EACHtmB,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GArTY;EAyTjB2E,EAAAA,KAAK,EAAE;EACL3E,IAAAA,GAAG,EAAE,SADA;EAELE,IAAAA,IAAI,EAAE;EAFD,GAzTU;EA6TjB0E,EAAAA,EAAE,EAAE;EACF9mB,IAAAA,CAAC,EAAE,EADD;EAEFM,IAAAA,CAAC,EAAE,OAFD;EAGF4hB,IAAAA,GAAG,EAAE,KAHH;EAIFE,IAAAA,IAAI,EAAE;EAJJ,GA7Ta;EAmUjB2E,EAAAA,IAAI,EAAE;EACJ/E,IAAAA,GAAG,EAAE;EADD,GAnUW;EAsUjBgF,EAAAA,KAAK,EAAE;EACLhF,IAAAA,GAAG,EAAE;EADA,GAtUU;EAyUjBiF,EAAAA,IAAI,EAAE;EACJjF,IAAAA,GAAG,EAAE;EADD,GAzUW;EA4UjBkF,EAAAA,GAAG,EAAE;EACHlF,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA5UY;EAgVjBiF,EAAAA,IAAI,EAAE;EACJnF,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAhVW;EAoVjBkF,EAAAA,IAAI,EAAE;EACJpF,IAAAA,GAAG,EAAE;EADD,GApVW;EAuVjBqF,EAAAA,KAAK,EAAE;EACLrF,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAvVU;EA2VjBoF,EAAAA,IAAI,EAAE;EACJtF,IAAAA,GAAG,EAAE;EADD,GA3VW;EA8VjBuF,EAAAA,GAAG,EAAE;EACHjnB,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GA9VY;EAkWjBsF,EAAAA,KAAK,EAAE;EACLxF,IAAAA,GAAG,EAAE,KADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAlWU;EAsWjBrY,EAAAA,GAAG,EAAE;EACHvJ,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GAtWY;EA0WjBuF,EAAAA,KAAK,EAAE;EACLzF,IAAAA,GAAG,EAAE;EADA,GA1WU;EA6WjB0F,EAAAA,IAAI,EAAE;EACJpnB,IAAAA,CAAC,EAAE,QADC;EAEJ4hB,IAAAA,GAAG,EAAE;EAFD,GA7WW;EAiXjByF,EAAAA,IAAI,EAAE;EACJ3F,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAjXW;EAqXjB0F,EAAAA,IAAI,EAAE;EACJ5F,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GArXW;EAyXjB2F,EAAAA,IAAI,EAAE;EACJ7nB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJ0hB,IAAAA,GAAG,EAAE,KAHD;EAIJE,IAAAA,GAAG,EAAE;EAJD,GAzXW;EA+XjB4F,EAAAA,IAAI,EAAE;EACJ1F,IAAAA,IAAI,EAAE;EADF,GA/XW;EAkYjB2F,EAAAA,IAAI,EAAE;EACJznB,IAAAA,CAAC,EAAE;EADC,GAlYW;EAqYjB0nB,EAAAA,GAAG,EAAE;EACHhG,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GArYY;EAyYjB+F,EAAAA,KAAK,EAAE;EACLjG,IAAAA,GAAG,EAAE;EADA,GAzYU;EA4YjBkG,EAAAA,IAAI,EAAE;EACJ5nB,IAAAA,CAAC,EAAE;EADC,GA5YW;EA+YjB6nB,EAAAA,GAAG,EAAE;EACHnG,IAAAA,GAAG,EAAE;EADF,GA/YY;EAkZjBoG,EAAAA,IAAI,EAAE;EACJpG,IAAAA,GAAG,EAAE;EADD,GAlZW;EAqZjBqG,EAAAA,IAAI,EAAE;EACJrG,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GArZW;EAyZjBoG,EAAAA,IAAI,EAAE;EACJtG,IAAAA,GAAG,EAAE;EADD,GAzZW;EA4ZjBuG,EAAAA,IAAI,EAAE;EACJvG,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA5ZW;EAgajBsG,EAAAA,IAAI,EAAE;EACJrG,IAAAA,GAAG,EAAE,cADD;EAEJ7hB,IAAAA,CAAC,EAAE,QAFC;EAGJ0hB,IAAAA,GAAG,EAAE,IAHD;EAIJE,IAAAA,GAAG,EAAE,MAJD;EAKJG,IAAAA,OAAO,EAAE;EALL,GAhaW;EAuajBoG,EAAAA,GAAG,EAAE;EACHnoB,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GAvaY;EA2ajBwG,EAAAA,GAAG,EAAE;EACHpoB,IAAAA,CAAC,EAAE,OADA;EAEH0hB,IAAAA,GAAG,EAAE,GAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GA3aY;EAgbjByG,EAAAA,GAAG,EAAE;EACH3G,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE,MAFF;EAGHE,IAAAA,IAAI,EAAE;EAHH,GAhbY;EAqbjBwG,EAAAA,IAAI,EAAE;EACJ5G,IAAAA,GAAG,EAAE;EADD,GArbW;EAwbjB6G,EAAAA,GAAG,EAAE;EACHvoB,IAAAA,CAAC,EAAE,MADA;EAEH0hB,IAAAA,GAAG,EAAE,IAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GAxbY;EA6bjB4G,EAAAA,IAAI,EAAE;EACJ9G,IAAAA,GAAG,EAAE;EADD,GA7bW;EAgcjB+G,EAAAA,IAAI,EAAE;EACJ/G,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAhcW;EAocjB8G,EAAAA,IAAI,EAAE;EACJhH,IAAAA,GAAG,EAAE;EADD,GApcW;EAucjBnT,EAAAA,GAAG,EAAE;EACHmT,IAAAA,GAAG,EAAE;EADF,GAvcY;EA0cjBiH,EAAAA,GAAG,EAAE;EACHjH,IAAAA,GAAG,EAAE;EADF,GA1cY;EA6cjBkH,EAAAA,KAAK,EAAE;EACLlH,IAAAA,GAAG,EAAE;EADA,GA7cU;EAgdjBmH,EAAAA,KAAK,EAAE;EACLnH,IAAAA,GAAG,EAAE;EADA,GAhdU;EAmdjBoH,EAAAA,IAAI,EAAE;EACJ9oB,IAAAA,CAAC,EAAE,OADC;EAEJ4hB,IAAAA,GAAG,EAAE,GAFD;EAGJE,IAAAA,IAAI,EAAE;EAHF,GAndW;EAwdjBiH,EAAAA,KAAK,EAAE;EACLrH,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAxdU;EA4djBoH,EAAAA,KAAK,EAAE;EACLtH,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA5dU;EAgejBqH,EAAAA,IAAI,EAAE;EACJrH,IAAAA,GAAG,EAAE;EADD,GAheW;EAmejBsH,EAAAA,IAAI,EAAE;EACJxH,IAAAA,GAAG,EAAE;EADD,GAneW;EAsejByH,EAAAA,IAAI,EAAE;EACJzH,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAteW;EA0ejBwH,EAAAA,IAAI,EAAE;EACJxH,IAAAA,GAAG,EAAE,MADD;EAEJG,IAAAA,OAAO,EAAE;EAFL,GA1eW;EA8ejBsH,EAAAA,GAAG,EAAE;EACHzH,IAAAA,GAAG,EAAE;EADF,GA9eY;EAifjB0H,EAAAA,GAAG,EAAE;EACH1H,IAAAA,GAAG,EAAE;EADF,GAjfY;EAofjB2H,EAAAA,IAAI,EAAE;EACJ7H,IAAAA,GAAG,EAAE;EADD,GApfW;EAufjB8H,EAAAA,KAAK,EAAE;EACL9H,IAAAA,GAAG,EAAE;EADA,GAvfU;EA0fjB+H,EAAAA,KAAK,EAAE;EACL/H,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA1fU;EA8fjB8H,EAAAA,KAAK,EAAE;EACL5H,IAAAA,IAAI,EAAE;EADD,GA9fU;EAigBjB6H,EAAAA,KAAK,EAAE;EACLjI,IAAAA,GAAG,EAAE;EADA,GAjgBU;EAogBjBkI,EAAAA,KAAK,EAAE;EACL/H,IAAAA,GAAG,EAAE,kBADA;EAELH,IAAAA,GAAG,EAAE,QAFA;EAGLE,IAAAA,GAAG,EAAE,OAHA;EAILD,IAAAA,IAAI,EAAE,aAJD;EAKLI,IAAAA,OAAO,EAAE;EALJ,GApgBU;EA2gBjB8H,EAAAA,KAAK,EAAE;EACLnI,IAAAA,GAAG,EAAE;EADA,GA3gBU;EA8gBjBoI,EAAAA,KAAK,EAAE;EACLpI,IAAAA,GAAG,EAAE;EADA,GA9gBU;EAihBjBqI,EAAAA,KAAK,EAAE;EACLrI,IAAAA,GAAG,EAAE,KADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAjhBU;EAqhBjBoI,EAAAA,IAAI,EAAE;EACJhqB,IAAAA,CAAC,EAAE,OADC;EAEJ0hB,IAAAA,GAAG,EAAE,MAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GArhBW;EA0hBjBqI,EAAAA,IAAI,EAAE;EACJvI,IAAAA,GAAG,EAAE;EADD,GA1hBW;EA6hBjB1iB,EAAAA,KAAK,EAAE;EACL0iB,IAAAA,GAAG,EAAE;EADA,GA7hBU;EAgiBjBwI,EAAAA,MAAM,EAAE;EACNtI,IAAAA,GAAG,EAAE;EADC,GAhiBS;EAmiBjBuI,EAAAA,MAAM,EAAE;EACNzI,IAAAA,GAAG,EAAE;EADC,GAniBS;EAsiBjB0I,EAAAA,KAAK,EAAE;EACLxI,IAAAA,GAAG,EAAE;EADA,GAtiBU;EAyiBjByI,EAAAA,KAAK,EAAE;EACL3qB,IAAAA,CAAC,EAAE,KADE;EAELkiB,IAAAA,GAAG,EAAE;EAFA,GAziBU;EA6iBjB0I,EAAAA,KAAK,EAAE;EACL1I,IAAAA,GAAG,EAAE;EADA,GA7iBU;EAgjBjB2I,EAAAA,KAAK,EAAE;EACL3I,IAAAA,GAAG,EAAE;EADA,GAhjBU;EAmjBjB4I,EAAAA,KAAK,EAAE;EACL9I,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAnjBU;EAujBjB6I,EAAAA,MAAM,EAAE;EACN/qB,IAAAA,CAAC,EAAE;EADG,GAvjBS;EA0jBjBgrB,EAAAA,KAAK,EAAE;EACLhJ,IAAAA,GAAG,EAAE;EADA,GA1jBU;EA6jBjBiJ,EAAAA,MAAM,EAAE;EACN3qB,IAAAA,CAAC,EAAE,UADG;EAEN4hB,IAAAA,GAAG,EAAE;EAFC,GA7jBS;EAikBjBgJ,EAAAA,IAAI,EAAE;EACJlrB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJ4hB,IAAAA,GAAG,EAAE;EAHD,GAjkBW;EAskBjBiJ,EAAAA,KAAK,EAAE;EACLnJ,IAAAA,GAAG,EAAE;EADA,GAtkBU;EAykBjBoJ,EAAAA,KAAK,EAAE;EACLlJ,IAAAA,GAAG,EAAE;EADA,GAzkBU;EA4kBjBmJ,EAAAA,KAAK,EAAE;EACLrJ,IAAAA,GAAG,EAAE;EADA,GA5kBU;EA+kBjBsJ,EAAAA,IAAI,EAAE;EACJhrB,IAAAA,CAAC,EAAE,OADC;EAEJ4hB,IAAAA,GAAG,EAAE;EAFD,GA/kBW;EAmlBjBqJ,EAAAA,KAAK,EAAE;EACLrJ,IAAAA,GAAG,EAAE;EADA,GAnlBU;EAslBjBsJ,EAAAA,IAAI,EAAE;EACJrJ,IAAAA,GAAG,EAAE,cADD;EAEJD,IAAAA,GAAG,EAAE,MAFD;EAGJD,IAAAA,IAAI,EAAE,SAHF;EAIJI,IAAAA,OAAO,EAAE;EAJL,GAtlBW;EA4lBjBoJ,EAAAA,KAAK,EAAE;EACLvJ,IAAAA,GAAG,EAAE,QADA;EAELE,IAAAA,IAAI,EAAE;EAFD,GA5lBU;EAgmBjBsJ,EAAAA,IAAI,EAAE;EACJxJ,IAAAA,GAAG,EAAE;EADD,GAhmBW;EAmmBjByJ,EAAAA,IAAI,EAAE;EACJzJ,IAAAA,GAAG,EAAE;EADD,GAnmBW;EAsmBjB0J,EAAAA,KAAK,EAAE;EACL1J,IAAAA,GAAG,EAAE;EADA,GAtmBU;EAymBjB2J,EAAAA,MAAM,EAAE;EACN7J,IAAAA,GAAG,EAAE;EADC,GAzmBS;EA4mBjB8J,EAAAA,GAAG,EAAE;EACHxrB,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GA5mBY;EAgnBjB6J,EAAAA,OAAO,EAAE;EACP/J,IAAAA,GAAG,EAAE;EADE,GAhnBQ;EAmnBjBgK,EAAAA,UAAU,EAAE;EACV9J,IAAAA,GAAG,EAAE;EADK,GAnnBK;EAsnBjB+J,EAAAA,KAAK,EAAE;EACLjK,IAAAA,GAAG,EAAE;EADA,GAtnBU;EAynBjBkK,EAAAA,IAAI,EAAE;EACJlsB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJ4hB,IAAAA,GAAG,EAAE;EAHD,GAznBW;EA8nBjBiK,EAAAA,IAAI,EAAE;EACJjK,IAAAA,GAAG,EAAE;EADD,GA9nBW;EAioBjBkK,EAAAA,IAAI,EAAE;EACJlK,IAAAA,GAAG,EAAE;EADD,GAjoBW;EAooBjBmK,EAAAA,KAAK,EAAE;EACLrK,IAAAA,GAAG,EAAE;EADA,GApoBU;EAuoBjBsK,EAAAA,GAAG,EAAE;EACHpK,IAAAA,GAAG,EAAE;EADF,GAvoBY;EA0oBjBqK,EAAAA,IAAI,EAAE;EACJvK,IAAAA,GAAG,EAAE;EADD,GA1oBW;EA6oBjBwK,EAAAA,GAAG,EAAE;EACHlsB,IAAAA,CAAC,EAAE,OADA;EAEH4hB,IAAAA,GAAG,EAAE;EAFF,GA7oBY;EAipBjBuK,EAAAA,IAAI,EAAE;EACJzK,IAAAA,GAAG,EAAE;EADD,GAjpBW;EAopBjB0K,EAAAA,QAAQ,EAAE;EACRxK,IAAAA,GAAG,EAAE;EADG,GAppBO;EAupBjByK,EAAAA,KAAK,EAAE;EACL3K,IAAAA,GAAG,EAAE;EADA,GAvpBU;EA0pBjB4K,EAAAA,KAAK,EAAE;EACLtsB,IAAAA,CAAC,EAAE,SADE;EAEL0hB,IAAAA,GAAG,EAAE,SAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA;EA1pBU,CAAnB;;EAkqBA,IAAItgB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY0gB,YAAZ,CAAX;;6BACS5iB;EACP,MAAMod,GAAG,GAAGlb,IAAI,CAAClC,CAAD,CAAhB;EACA,MAAImtB,MAAK,GAAG,EAAZ;EACAlrB,EAAAA,MAAM,CAACC,IAAP,CAAY0gB,YAAY,CAACxF,GAAD,CAAxB,EAA+Bjb,OAA/B,CAAuC,UAAAyY,GAAG,EAAI;EAC5C,QAAI9a,GAAG,GAAG8iB,YAAY,CAACxF,GAAD,CAAZ,CAAkBxC,GAAlB,CAAV,CAD4C;;EAG5C9a,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,GAAZ,EAAiBma,GAAjB,CAAN;EAEA,QAAIgQ,IAAI,GAAG/K,OAAO,CAACzH,GAAD,CAAlB;EACAuS,IAAAA,MAAK,CAACC,IAAD,CAAL,GAActtB,GAAd;EACD,GAPD;;EASA8iB,EAAAA,YAAY,CAACxF,GAAD,CAAZ,GAAoB+P,MAApB;;;EAZF,KAAK,IAAIntB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EAAA,QAA7BA,CAA6B;EAarC;;EAED,kBAAc,GAAG4iB,YAAjB;;ECnsBA,IAAMyK,QAAQ,GAAG;EACf9sB,EAAAA,CAAC,EAAE,CACD;EACE4E,IAAAA,GAAG,EAAE,sBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CADY;EAWfhtB,EAAAA,CAAC,EAAE,CACD;EACE0E,IAAAA,GAAG,EAAE,SADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACEvoB,IAAAA,GAAG,EAAE,SADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GAVC,EAmBD;EACEvoB,IAAAA,GAAG,EAAE,QADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJE,MAAAA,EAAE,EAAE,OAHA;EAIJD,MAAAA,EAAE,EAAE;EAJA;EAFR,GAnBC,EA4BD;EACEtoB,IAAAA,GAAG,EAAE,mBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GA5BC,CAXY;EAgDf/sB,EAAAA,CAAC,EAAE,CACD;EACEyE,IAAAA,GAAG,EAAE,UADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACEvoB,IAAAA,GAAG,EAAE,SADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GAVC,EAmBD;;EAEEvoB,IAAAA,GAAG,EAAE,gBAFP;EAGEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GAnBC,EA6BD;;EAEEvoB,IAAAA,GAAG,EAAE,UAFP;EAGEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GA7BC,EAuCD;;EAEEvoB,IAAAA,GAAG,EAAE,UAFP;EAGEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GAvCC,EAiDD;EACEvoB,IAAAA,GAAG,EAAE,8BADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;;EAAA;EAFR,GAjDC,EA0DD;EACEtoB,IAAAA,GAAG,EAAE,YADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GA1DC,EAkED;EACEtoB,IAAAA,GAAG,EAAE,SADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAlEC,CAhDY;EA4Hf7sB,EAAAA,CAAC,EAAE,CACD;EACEuE,IAAAA,GAAG,EAAE,mBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA5HY;EAsIf5sB,EAAAA,CAAC,EAAE,CACD;EACEsE,IAAAA,GAAG,EAAE,eADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,QADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAtIY;EAgJfzsB,EAAAA,CAAC,EAAE,CACD;EACEmE,IAAAA,GAAG,EAAE,SADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,CAhJY;EA4JfxsB,EAAAA,CAAC,EAAE,CACD;EACEiE,IAAAA,GAAG,EAAE,sBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA5JY;EAuKftsB,EAAAA,CAAC,EAAE,CACD;EACEgE,IAAAA,GAAG,EAAE,QADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAvKY;EAiLfpsB,EAAAA,CAAC,EAAE,CACD;EACE8D,IAAAA,GAAG,EAAE,WADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACEvoB,IAAAA,GAAG,EAAE,sBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAVC,EAkBD;EACEtoB,IAAAA,GAAG,EAAE,aADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAlBC,CAjLY;EA6MflsB,EAAAA,CAAC,EAAE,CACD;EACE4D,IAAAA,GAAG,EAAE,YADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,EASD;EACEtoB,IAAAA,GAAG,EAAE,QADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GATC,CA7MY;EA+NfjsB,EAAAA,CAAC,EAAE,CACD;EACE2D,IAAAA,GAAG,EAAE,iBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA/NY;EA0OfhsB,EAAAA,CAAC,EAAE,CACD;EACE0D,IAAAA,GAAG,EAAE,oBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,EASD;EACEtoB,IAAAA,GAAG,EAAE,UADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GATC,EAiBD;EACEtoB,IAAAA,GAAG,EAAE,aADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAjBC,EAyBD;EACEtoB,IAAAA,GAAG,EAAE,sBADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAzBC,CA1OY;EA6Qf7rB,EAAAA,CAAC,EAAE,CACD;EACEuD,IAAAA,GAAG,EAAE,YADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJnL,MAAAA,GAAG,EAAE;EAJD;EAFR,GADC,CA7QY;EAwRfxgB,EAAAA,CAAC,EAAE,CACD;EACEqD,IAAAA,GAAG,EAAE,eADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAxRY;EAmSf1rB,EAAAA,CAAC,EAAE,CACD;EACEoD,IAAAA,GAAG,EAAE,eADP;EAEEmoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC;EAnSY,CAAjB;EA+SA,YAAc,GAAGJ,QAAjB;;EC9SA,IAAMM,MAAM,GAAG;EACbJ,EAAAA,EAAE,EAAE,cADS;EAEbC,EAAAA,EAAE,EAAE,WAFS;EAGbC,EAAAA,EAAE,EAAE,QAHS;EAIbnL,EAAAA,GAAG,EAAE,YAJQ;EAKboL,EAAAA,EAAE,EAAE;EALS,CAAf;;EAQA,IAAME,WAAW,GAAG,SAAdA,WAAc,CAAS9tB,GAAT,EAAc2L,GAAd,EAAmB;EACrC,MAAI9H,KAAK,GAAG,EAAZ;EACA,MAAIzB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYuJ,GAAG,CAAC6hB,IAAhB,CAAX;;EACA,OAAK,IAAIttB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI6tB,GAAG,GAAG3rB,IAAI,CAAClC,CAAD,CAAd;EACA2D,IAAAA,KAAK,CAACgqB,MAAM,CAACE,GAAD,CAAP,CAAL,GAAqB/tB,GAAG,CAACmD,OAAJ,CAAYwI,GAAG,CAACtG,GAAhB,EAAqBsG,GAAG,CAAC6hB,IAAJ,CAASO,GAAT,CAArB,CAArB;EACD;;EACD,SAAOlqB,KAAP;EACD,CARD;;;EAWA,IAAMmqB,WAAW,GAAG,SAAdA,WAAc,GAAmB;EAAA,MAAVhuB,GAAU,uEAAJ,EAAI;EACrC,MAAIU,CAAC,GAAGV,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAX;;EACA,MAAI2tB,QAAQ,CAACroB,cAAT,CAAwBlF,CAAxB,MAA+B,IAAnC,EAAyC;EACvC,SAAK,IAAIe,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwsB,QAAQ,CAACvtB,CAAD,CAAR,CAAYJ,MAAhC,EAAwCmB,CAAC,IAAI,CAA7C,EAAgD;EAC9C,UAAM4D,GAAG,GAAG4oB,QAAQ,CAACvtB,CAAD,CAAR,CAAYe,CAAZ,EAAe4D,GAA3B;;EACA,UAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,eAAO8tB,WAAW,CAAC9tB,GAAD,EAAMiuB,QAAQ,CAACvtB,CAAD,CAAR,CAAYe,CAAZ,CAAN,CAAlB;EACD;EACF;EACF;;EACD,SAAO,EAAP;EACD,CAXD;;EAYA,eAAc,GAAGusB,WAAjB;;EChCA;EACA,IAAME,IAAI,GAAG,0BAAb;EAEA,IAAMC,OAAO,GAAG;EACd/mB,EAAAA,MAAM,EAAE,gBAAAkW,GAAG,EAAI;EACb,QAAIA,GAAG,CAAC7S,MAAJ,CAAW6S,GAAG,CAAChd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOgd,GAAG,CAACna,OAAJ,CAAY,IAAZ,EAAkB,KAAlB,CAAP;EACD;;EACD,WAAOma,GAAG,GAAG,KAAb;EACD,GANa;EAQdjW,EAAAA,YAAY,EAAE,sBAAAiW,GAAG,EAAI;EACnB,QAAIA,GAAG,CAAC7S,MAAJ,CAAW6S,GAAG,CAAChd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOgd,GAAG,GAAG,IAAb;EACD;;EACD,QAAI4Q,IAAI,CAACrrB,IAAL,CAAUya,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,aAAOA,GAAG,CAAC3N,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,IAAmB,KAA1B;EACD;;EACD,WAAO2N,GAAG,GAAG,GAAb;EACD,GAhBa;EAkBdnW,EAAAA,SAAS,EAAE,mBAAAmW,GAAG,EAAI;EAChB,QAAIA,GAAG,CAAC7S,MAAJ,CAAW6S,GAAG,CAAChd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOgd,GAAG,GAAG,GAAb;EACD;;EACD,QAAIA,GAAG,CAAC5S,MAAJ,CAAW,CAAC,CAAZ,MAAmB,IAAvB,EAA6B;EAC3B,aAAO4S,GAAP;EACD;;EACD,QAAI4Q,IAAI,CAACrrB,IAAL,CAAUya,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,aAAOA,GAAG,CAAC3N,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,IAAmB,KAA1B;EACD;;EACD,WAAO2N,GAAG,GAAG,IAAb;EACD;EA7Ba,CAAhB;EAgCA,cAAc,GAAG6Q,OAAjB;;;;EC9BA,IAAMjR,SAAS,GAAG,SAAZA,SAAY,GAA0B;EAAA,MAAjBI,GAAiB,uEAAX,EAAW;EAAA,MAAP5W,KAAO;EAC1C,MAAI7C,KAAK,GAAG,EAAZ,CAD0C;;;EAI1C,MAAI6C,KAAK,IAAIA,KAAK,CAAC2W,UAAnB,EAA+B;EAC7B,QAAI3W,KAAK,CAAC2W,UAAN,CAAiB/B,KAAjB,CAAuB1V,cAAvB,CAAsC0X,GAAtC,MAA+C,IAAnD,EAAyD;EACvDzZ,MAAAA,KAAK,GAAG1B,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkB7C,KAAK,CAAC2W,UAAN,CAAiB/B,KAAjB,CAAuBgC,GAAvB,CAAlB,CAAR;EACD;EACF,GARyC;;;EAU1CzZ,EAAAA,KAAK,GAAG1B,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBykB,WAAW,CAAC1Q,GAAD,CAA7B,EAAoCzZ,KAApC,CAAR,CAV0C;;;EAc1C,MAAIA,KAAK,CAACuD,MAAN,KAAiBzB,SAArB,EAAgC;EAC9B9B,IAAAA,KAAK,CAACuD,MAAN,GAAegnB,UAAW,CAAChnB,MAAZ,CAAmBkW,GAAnB,CAAf;EACD,GAhByC;;;EAkB1C,MAAIzZ,KAAK,CAACsD,SAAN,KAAoBxB,SAAxB,EAAmC;EACjC9B,IAAAA,KAAK,CAACsD,SAAN,GAAkBinB,UAAW,CAACjnB,SAAZ,CAAsBmW,GAAtB,CAAlB;EACD,GApByC;;;EAsB1C,MAAIzZ,KAAK,CAACwD,YAAN,KAAuB1B,SAA3B,EAAsC;EACpC9B,IAAAA,KAAK,CAACwD,YAAN,GAAqB+mB,UAAW,CAAC/mB,YAAZ,CAAyBiW,GAAzB,CAArB;EACD;;EACD,SAAOzZ,KAAP;EACD,CA1BD;;EA2BA,eAAc,GAAGqZ,SAAjB;;EChCA;EACA,IAAMmR,QAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,MAA1B,EAAkC,MAAlC,EAA0C,SAA1C,EAAqD,KAArD,EAA4D,MAA5D,EAAoE,OAApE,CAAjB;EACA,IAAMC,UAAU,GAAG,CAAC,MAAD,CAAnB;EAEA,IAAMjR,UAAU,GAAG;EACjBkR,EAAAA,IAAI,EAAE,QADW;EAEjBC,EAAAA,IAAI,EAAE,QAFW;EAGjBC,EAAAA,IAAI,EAAE,SAHW;EAIjBC,EAAAA,KAAK,EAAE,WAJU;EAKjBC,EAAAA,KAAK,EAAE,WALU;EAMjBC,EAAAA,GAAG,EAAE,UANY;EAOjBC,EAAAA,KAAK,EAAE,OAPU;EAQjBC,EAAAA,GAAG,EAAE,OARY;EASjBC,EAAAA,IAAI,EAAE,MATW;EAUjBC,EAAAA,GAAG,EAAE,SAVY;EAWjBC,EAAAA,KAAK,EAAE;EAXU,CAAnB;EAcA,IAAMroB,UAAU,GAAG,CACjB;EACEvB,EAAAA,GAAG,EAAE,KADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CADiB,EAKjB;EACEnoB,EAAAA,GAAG,EAAE,cADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CALiB,EASjB;EACEnoB,EAAAA,GAAG,EAAE,cADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CATiB,EAajB;EACEnoB,EAAAA,GAAG,EAAE,OADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CAbiB,EAiBjB;EACEnoB,EAAAA,GAAG,EAAE,eADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CAjBiB,CAAnB;;EAuBA,IAAM0B,cAAc,GAAG,SAAjBA,cAAiB,CAASlvB,GAAT,EAAc;;EAEnC,MAAIqd,UAAU,CAACzX,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAOqd,UAAU,CAACrd,GAAD,CAAjB;EACD,GAJkC;;;EAMnC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0G,UAAU,CAACtG,MAA/B,EAAuCJ,CAAC,EAAxC,EAA4C;EAC1C,QAAI0G,UAAU,CAAC1G,CAAD,CAAV,CAAcmF,GAAd,CAAkBxC,IAAlB,CAAuB7C,GAAvB,CAAJ,EAAiC;EAC/B,aAAOA,GAAG,CAACmD,OAAJ,CAAYyD,UAAU,CAAC1G,CAAD,CAAV,CAAcmF,GAA1B,EAA+BuB,UAAU,CAAC1G,CAAD,CAAV,CAAcstB,IAA7C,CAAP;EACD;EACF,GAVkC;;;EAYnC,OAAK,IAAIttB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGouB,UAAU,CAAChuB,MAA/B,EAAuCJ,EAAC,EAAxC,EAA4C;EAC1C,QAAIouB,UAAU,CAACpuB,EAAD,CAAV,CAAc2C,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,IAAP;EACD;EACF,GAhBkC;;;EAkBnC,OAAK,IAAIE,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGmuB,QAAQ,CAAC/tB,MAA7B,EAAqCJ,GAAC,EAAtC,EAA0C;EACxC,QAAImuB,QAAQ,CAACnuB,GAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC,UAAIA,GAAG,CAACyK,MAAJ,CAAWzK,GAAG,CAACM,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,eAAON,GAAG,GAAG,IAAb;EACD;;EACD,aAAOA,GAAG,GAAG,KAAb;EACD;EACF;;EACD,SAAOA,GAAG,GAAG,KAAb;EACD,CA3BD;;EA6BA,iBAAc,GAAGkvB,cAAjB;;ECtEA;EACA,IAAMb,UAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,MAA1B,EAAkC,MAAlC,EAA0C,SAA1C,EAAqD,KAArD,EAA4D,MAA5D,EAAoE,MAApE,EAA4E,SAA5E,CAAjB;EACA,IAAMC,YAAU,GAAG,CAAC,MAAD,EAAS,MAAT,CAAnB;EAEA,IAAMjR,YAAU,GAAG;EACjB8R,EAAAA,IAAI,EAAE,QADW;EAEjBC,EAAAA,IAAI,EAAE,QAFW;EAGjBC,EAAAA,KAAK,EAAE,SAHU;EAIjBC,EAAAA,MAAM,EAAE,UAJS;EAKjBC,EAAAA,GAAG,EAAE,QALY;EAMjBR,EAAAA,IAAI,EAAE,QANW;EAOjBS,EAAAA,IAAI,EAAE,QAPW;EAQjBV,EAAAA,GAAG,EAAE,OARY;EASjBW,EAAAA,GAAG,EAAE,QATY;EAUjBT,EAAAA,GAAG,EAAE;EAVY,CAAnB;EAaA,IAAMpoB,YAAU,GAAG,CACjB;EACEvB,EAAAA,GAAG,EAAE,KADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CADiB,EAKjB;EACEnoB,EAAAA,GAAG,EAAE,cADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CALiB,EASjB;EACEnoB,EAAAA,GAAG,EAAE,cADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CATiB,EAajB;EACEnoB,EAAAA,GAAG,EAAE,OADP;EAEEmoB,EAAAA,IAAI,EAAE;EAFR,CAbiB,CAAnB;;EAmBA,IAAMkC,cAAc,GAAG,SAAjBA,cAAiB,CAAS1vB,GAAT,EAAc;;EAEnC,MAAIqd,YAAU,CAACzX,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAOqd,YAAU,CAACrd,GAAD,CAAjB;EACD,GAJkC;;;EAMnC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0G,YAAU,CAACtG,MAA/B,EAAuCJ,CAAC,EAAxC,EAA4C;EAC1C,QAAI0G,YAAU,CAAC1G,CAAD,CAAV,CAAcmF,GAAd,CAAkBxC,IAAlB,CAAuB7C,GAAvB,MAAgC,IAApC,EAA0C;EACxC,aAAOA,GAAG,CAACmD,OAAJ,CAAYyD,YAAU,CAAC1G,CAAD,CAAV,CAAcmF,GAA1B,EAA+BuB,YAAU,CAAC1G,CAAD,CAAV,CAAcstB,IAA7C,CAAP;EACD;EACF,GAVkC;;;EAYnC,OAAK,IAAIttB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGouB,YAAU,CAAChuB,MAA/B,EAAuCJ,EAAC,EAAxC,EAA4C;EAC1C,QAAIouB,YAAU,CAACpuB,EAAD,CAAV,CAAc2C,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,IAAP;EACD;EACF,GAhBkC;;;EAkBnC,OAAK,IAAIE,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGmuB,UAAQ,CAAC/tB,MAA7B,EAAqCJ,GAAC,EAAtC,EAA0C;EACxC,QAAImuB,UAAQ,CAACnuB,GAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC,aAAOA,GAAG,GAAG,IAAb;EACD;EACF,GAtBkC;;;EAwBnC,MAAI,KAAK6C,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,WAAOA,GAAG,GAAG,GAAb;EACD;;EACD,SAAOA,GAAG,GAAG,IAAb;EACD,CA5BD;;EA8BA,iBAAc,GAAG0vB,cAAjB;;EClEA,IAAM7kB,KAAG,GAAG;EACV8kB,EAAAA,aAAa,EAAEnmB,aADL;EAEVomB,EAAAA,aAAa,EAAEnmB;EAFL,CAAZ;;;EAMA,IAAMyT,WAAS,GAAG,SAAZA,SAAY,CAASpb,CAAT,EAAY;EAC5B,MAAI8N,GAAG,GAAG,EAAV,CAD4B;;EAG5B,MAAIigB,GAAG,GAAGhlB,KAAG,CAAC8kB,aAAJ,CAAkB7tB,CAAlB,CAAV;;EACA,MAAI+tB,GAAJ,EAAS;EACPjgB,IAAAA,GAAG,CAACuJ,WAAJ,GAAkB0W,GAAlB;EACD,GAN2B;;;EAQ5B,MAAIC,IAAI,GAAGjlB,KAAG,CAAC+kB,aAAJ,CAAkB9tB,CAAlB,CAAX;;EACA,MAAIguB,IAAJ,EAAU;EACRlgB,IAAAA,GAAG,CAACsJ,WAAJ,GAAkB4W,IAAlB;EACD;;EACD,SAAOlgB,GAAP;EACD,CAbD;;EAcA,cAAc,GAAGsN,WAAjB;;ECpBA;EACA,IAAM+Q,UAAQ,GAAG;EACfztB,EAAAA,CAAC,EAAE,CAAC,CAAC,sCAAD,EAAyC,MAAzC,CAAD,EAAmD,CAAC,WAAD,EAAc,KAAd,CAAnD,CADY;EAGfI,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB,QAAlB,CADC,EAED,CAAC,UAAD,EAAa,KAAb,CAFC,EAGD,CAAC,eAAD,EAAkB,OAAlB,CAHC,EAID,CAAC,cAAD,EAAiB,OAAjB,CAJC,CAHY;EAUfC,EAAAA,CAAC,EAAE,CACD,CAAC,sCAAD,EAAyC,OAAzC,CADC,EAED,CAAC,kEAAD,EAAqE,OAArE,CAFC,CAVY;EAefX,EAAAA,CAAC,EAAE,CAAC,CAAC,gBAAD,EAAmB,KAAnB,CAAD,CAfY;EAiBfkB,EAAAA,CAAC,EAAE,CAAC,CAAC,YAAD,EAAe,KAAf,CAAD,CAjBY;EAmBfC,EAAAA,CAAC,EAAE,CAAC,CAAC,WAAD,EAAc,IAAd,CAAD,CAnBY;EAqBfC,EAAAA,CAAC,EAAE,CAAC,CAAC,2BAAD,EAA8B,OAA9B,CAAD,CArBY;EAuBfI,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB,MAAlB,CADC,EAED,CAAC,kBAAD,EAAqB,MAArB,CAFC,EAGD,CAAC,OAAD,EAAU,KAAV,CAHC,EAID,CAAC,SAAD,EAAY,OAAZ,CAJC,EAKD,CAAC,SAAD,EAAY,KAAZ,CALC,EAMD,CAAC,0BAAD,EAA6B,OAA7B,CANC,EAOD,CAAC,6CAAD,EAAgD,KAAhD,CAPC,CAvBY;EAiCfK,EAAAA,CAAC,EAAE,CAAC,CAAC,+BAAD,EAAkC,QAAlC,CAAD,EAA8C,CAAC,SAAD,EAAY,MAAZ,CAA9C,CAjCY;EAmCfC,EAAAA,CAAC,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD,CAnCY;EAqCfC,EAAAA,CAAC,EAAE,CAAC,CAAC,UAAD,EAAa,OAAb,CAAD;EArCY,CAAjB;EAwCA,UAAc,GAAGgsB,UAAjB;;ECxCA,IAAM8B,IAAI,GAAG,gBAAb;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAShwB,GAAT,EAAc;EAC9B,MAAIU,CAAC,GAAGV,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAX;;EACA,MAAI2vB,MAAK,CAACrqB,cAAN,CAAqBlF,CAArB,MAA4B,IAAhC,EAAsC;EACpC,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+vB,MAAK,CAACvvB,CAAD,CAAL,CAASJ,MAA7B,EAAqCJ,CAAC,IAAI,CAA1C,EAA6C;EAC3C,UAAImF,GAAG,GAAG4qB,MAAK,CAACvvB,CAAD,CAAL,CAASR,CAAT,EAAY,CAAZ,CAAV;;EACA,UAAImF,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,eAAOA,GAAG,CAACmD,OAAJ,CAAYkC,GAAZ,EAAiB4qB,MAAK,CAACvvB,CAAD,CAAL,CAASR,CAAT,EAAY,CAAZ,CAAjB,CAAP;EACD;EACF;EACF;;EACD,SAAO,IAAP;EACD,CAXD;;;;;;EAgBA,IAAMgwB,SAAS,GAAG,SAAZA,SAAY,GAA0B;EAAA,MAAjBlwB,GAAiB,uEAAX,EAAW;EAAA,MAAP0G,KAAO;EAC1C,MAAI2W,UAAU,GAAG3W,KAAK,CAAC2W,UAAN,CAAiBhC,KAAlC,CAD0C;;EAI1C,MAAIgC,UAAU,CAACzX,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAOqd,UAAU,CAACrd,GAAD,CAAjB;EACD,GANyC;;;EAS1C,MAAI+c,MAAM,GAAGiT,SAAS,CAAChwB,GAAD,CAAtB;;EACA,MAAI+c,MAAM,KAAK,IAAf,EAAqB;EACnB,WAAOA,MAAP;EACD,GAZyC;;;EAc1C,MAAIgT,IAAI,CAACltB,IAAL,CAAU7C,GAAV,CAAJ,EAAoB;EAClB,WAAOA,GAAG,GAAG,IAAb;EACD,GAhByC;;;EAkB1C,SAAOA,GAAG,GAAG,GAAb;EACD,CAnBD;;EAoBA,YAAc,GAAGkwB,SAAjB;;ECvCA;EACA,YAAc,GAAG,CACf,CAAC,aAAD,EAAgB,KAAhB,CADe,EAEf,CAAC,QAAD,EAAW,MAAX,CAFe,EAGf,CAAC,oBAAD,EAAuB,OAAvB,CAHe,EAIf,CAAC,oEAAD,EAAuE,KAAvE,CAJe,EAKf,CAAC,wCAAD,EAA2C,KAA3C,CALe,EAMf,CAAC,uCAAD,EAA0C,KAA1C,CANe,EAOf,CAAC,8CAAD,EAAiD,MAAjD,CAPe,EAQf,CAAC,8BAAD,EAAiC,KAAjC,CARe;EAUf,CAAC,kBAAD,EAAqB,IAArB,CAVe,EAWf,CAAC,yBAAD,EAA4B,MAA5B,CAXe,EAYf,CAAC,uBAAD,EAA0B,MAA1B,CAZe,EAaf,CAAC,sBAAD,EAAyB,IAAzB,CAbe,EAcf,CAAC,OAAD,EAAU,KAAV,CAde,EAef,CAAC,UAAD,EAAa,OAAb,CAfe,EAgBf,CAAC,WAAD,EAAc,MAAd,CAhBe,EAiBf,CAAC,qBAAD,EAAwB,KAAxB,CAjBe,EAkBf,CAAC,YAAD,EAAe,SAAf,CAlBe,EAmBf,CAAC,YAAD,EAAe,QAAf,CAnBe,EAoBf,CAAC,cAAD,EAAiB,QAAjB,CApBe,EAqBf,CAAC,oBAAD,EAAuB,MAAvB,CArBe,EAsBf,CAAC,oBAAD,EAAuB,IAAvB,CAtBe,EAuBf,CAAC,QAAD,EAAW,IAAX,CAvBe,EAwBf,CAAC,SAAD,EAAY,IAAZ,CAxBe,EAyBf,CAAC,KAAD,EAAQ,EAAR,CAzBe,CAAjB;;ECCA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASxkB,GAAT,EAAc;EAC9B,SAAOxJ,MAAM,CAACC,IAAP,CAAYuJ,GAAZ,EAAiB1H,MAAjB,CAAwB,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EACvCH,IAAAA,CAAC,CAAC4K,GAAG,CAACzK,CAAD,CAAJ,CAAD,GAAYA,CAAZ;EACA,WAAOH,CAAP;EACD,GAHM,EAGJ,EAHI,CAAP;EAID,CALD;;EAOA,IAAM+F,UAAU,GAAG,SAAbA,UAAa,CAAS9G,GAAT,EAAc0G,KAAd,EAAqB;EACtC,MAAI2W,UAAU,GAAG3W,KAAK,CAAC2W,UAAN,CAAiBhC,KAAlC;EACA,MAAI+U,MAAM,GAAGD,SAAS,CAAC9S,UAAD,CAAtB,CAFsC;;EAKtC,MAAI+S,MAAM,CAACxqB,cAAP,CAAsB5F,GAAtB,CAAJ,EAAgC;EAC9B,WAAOowB,MAAM,CAACpwB,GAAD,CAAb;EACD,GAPqC;;;EAUtC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+vB,QAAK,CAAC3vB,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,QAAI+vB,QAAK,CAAC/vB,CAAD,CAAL,CAAS,CAAT,EAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClCA,MAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY8sB,QAAK,CAAC/vB,CAAD,CAAL,CAAS,CAAT,CAAZ,EAAyB+vB,QAAK,CAAC/vB,CAAD,CAAL,CAAS,CAAT,CAAzB,CAAN;EACA,aAAOF,GAAP;EACD;EACF;;EACD,SAAOA,GAAP;EACD,CAjBD;;EAkBA,gBAAc,GAAG8G,UAAjB;;EC3BA;EACA,IAAImpB,KAAK,GAAG;EACV3oB,EAAAA,UAAU,EAAE,CACV;EACEjC,IAAAA,GAAG,EAAE,OADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GADU,EAKV;EACEhrB,IAAAA,GAAG,EAAE,gBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GALU,CADF;EAYV9oB,EAAAA,KAAK,EAAE,CACL;EACElC,IAAAA,GAAG,EAAE,UADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GADK,CAZG;EAmBVhpB,EAAAA,YAAY,EAAE,CACZ;EACEhC,IAAAA,GAAG,EAAE,aADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GADY,EAKZ;EACEhrB,IAAAA,GAAG,EAAE,cADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GALY,EASZ;EACEhrB,IAAAA,GAAG,EAAE,aADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GATY,EAaZ;EACEhrB,IAAAA,GAAG,EAAE,yBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAbY,EAiBZ;EACEhrB,IAAAA,GAAG,EAAE,0CADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjBY,EAqBZ;EACEhrB,IAAAA,GAAG,EAAE,SADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArBY,EAyBZ;EACEhrB,IAAAA,GAAG,EAAE,SADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzBY,EA6BZ;EACEhrB,IAAAA,GAAG,EAAE,cADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GA7BY,EAiCZ;EACEhrB,IAAAA,GAAG,EAAE,SADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjCY,EAqCZ;EACEhrB,IAAAA,GAAG,EAAE,SADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArCY,EAyCZ;EACEhrB,IAAAA,GAAG,EAAE,UADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzCY,EA6CZ;EACEhrB,IAAAA,GAAG,EAAE,MADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GA7CY,EAiDZ;EACEhrB,IAAAA,GAAG,EAAE,KADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjDY,CAnBJ;EA0EVjpB,EAAAA,MAAM,EAAE,CACN;;EAEE/B,IAAAA,GAAG,EAAE,uBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GADM,EAMN;;EAEEhrB,IAAAA,GAAG,EAAE,iBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GANM,EAWN;EACEhrB,IAAAA,GAAG,EAAE,kBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAXM,EAeN;EACEhrB,IAAAA,GAAG,EAAE,gBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAfM,EAmBN;;EAEEhrB,IAAAA,GAAG,EAAE,oBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAnBM,EAwBN;;EAEEhrB,IAAAA,GAAG,EAAE,cAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAxBM;EA8BN;;EAEEhrB,IAAAA,GAAG,EAAE,UAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GA9BM,EAmCN;;EAEEhrB,IAAAA,GAAG,EAAE,kBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAnCM,EAwCN;;EAEEhrB,IAAAA,GAAG,EAAE,iBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAxCM,EA6CN;;EAEEhrB,IAAAA,GAAG,EAAE,uBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GA7CM,EAkDN;;EAEEhrB,IAAAA,GAAG,EAAE,iBAFP;;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAlDM,EAuDN;;EAEEhrB,IAAAA,GAAG,EAAE,UAFP;;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAvDM;;;;;EAkEN;;EAEEhrB,IAAAA,GAAG,EAAE,WAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GAlEM,CA1EE;EAmJVlpB,EAAAA,SAAS,EAAE,CACT;EACE9B,IAAAA,GAAG,EAAE,SADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GADS,EAKT;EACEhrB,IAAAA,GAAG,EAAE,kBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GALS,EAST;EACEhrB,IAAAA,GAAG,EAAE,iBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GATS,EAaT;EACEhrB,IAAAA,GAAG,EAAE,aADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAbS,EAiBT;EACEhrB,IAAAA,GAAG,EAAE,gBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjBS,EAqBT;EACEhrB,IAAAA,GAAG,EAAE,aADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArBS,EAyBT;EACEhrB,IAAAA,GAAG,EAAE,cADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzBS,EA6BT;EACEhrB,IAAAA,GAAG,EAAE,UADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GA7BS,EAiCT;EACEhrB,IAAAA,GAAG,EAAE,QADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjCS,EAqCT;EACEhrB,IAAAA,GAAG,EAAE,QADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArCS,EAyCT;EACEhrB,IAAAA,GAAG,EAAE,YADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzCS,EA6CT;EACEhrB,IAAAA,GAAG,EAAE,YADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GA7CS,EAiDT;EACEhrB,IAAAA,GAAG,EAAE,yBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjDS,EAqDT;EACEhrB,IAAAA,GAAG,EAAE,iBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArDS,EAyDT;EACEhrB,IAAAA,GAAG,EAAE,wFADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzDS,EA6DT;EACEhrB,IAAAA,GAAG,EAAE,WADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GA7DS,EAiET;EACEhrB,IAAAA,GAAG,EAAE,WADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjES,EAqET;EACEhrB,IAAAA,GAAG,EAAE,UADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArES,EAyET;EACEhrB,IAAAA,GAAG,EAAE,mBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzES,EA6ET;EACEhrB,IAAAA,GAAG,EAAE,WADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GA7ES,EAiFT;EACEhrB,IAAAA,GAAG,EAAE,UADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAjFS,EAqFT;EACEhrB,IAAAA,GAAG,EAAE,WADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GArFS,EAyFT;EACEhrB,IAAAA,GAAG,EAAE,kBADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAzFS,EA6FT;;EAEEhrB,IAAAA,GAAG,EAAE,uBAFP;EAGEgrB,IAAAA,EAAE,EAAE;EAHN,GA7FS,EAkGT;EACEhrB,IAAAA,GAAG,EAAE,YADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAlGS,EAsGT;EACEhrB,IAAAA,GAAG,EAAE,WADP;EAEEgrB,IAAAA,EAAE,EAAE;EAFN,GAtGS;EAnJD,CAAZ;EA+PA,cAAc,GAAGJ,KAAjB;;EChQA,IAAIK,SAAS,GAAG;EACdlpB,EAAAA,MAAM,EAAE,CAAC,KAAD,CADM;EAEdG,EAAAA,KAAK,EAAE,CAAC,MAAD,CAFO;EAGdN,EAAAA,UAAU,EAAE,CACV,KADU,EAEV,KAFU,EAGV,MAHU,EAIV,MAJU,EAKV,MALU,EAMV,MANU,EAOV,KAPU,EAQV,KARU,EASV,KATU,EAUV,KAVU,EAWV,KAXU,EAYV,KAZU,EAaV,KAbU,EAcV,KAdU,EAeV,KAfU,EAgBV,KAhBU,EAiBV,KAjBU,EAkBV,KAlBU,EAmBV,KAnBU,EAoBV,KApBU,EAqBV,KArBU,EAsBV,KAtBU,EAuBV,KAvBU,EAwBV,KAxBU,EAyBV,KAzBU,EA0BV,KA1BU,EA2BV,KA3BU,EA4BV,KA5BU,EA6BV,KA7BU,EA8BV,KA9BU,EA+BV,KA/BU,EAgCV,KAhCU,EAiCV,KAjCU,EAkCV,KAlCU,EAmCV,KAnCU,EAoCV,KApCU,EAqCV,IArCU,EAsCV,IAtCU,EAuCV,KAvCU,EAwCV,KAxCU,EAyCV,KAzCU,EA0CV,IA1CU,CAHE;EA+CdE,EAAAA,SAAS,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,CA/CG;EAgDdE,EAAAA,YAAY,EAAE,CACZ,KADY,EAEZ,KAFY,EAGZ,KAHY,EAIZ,KAJY,EAKZ,KALY,EAMZ,KANY,EAOZ,KAPY,EAQZ,KARY,EASZ,KATY,EAUZ,MAVY,EAWZ,MAXY,EAYZ,MAZY,EAaZ,MAbY,EAcZ,MAdY,EAeZ,MAfY,EAgBZ,KAhBY,EAiBZ,KAjBY,EAkBZ,KAlBY,EAmBZ,KAnBY,EAoBZ,KApBY,EAqBZ,KArBY,EAsBZ,KAtBY,EAuBZ,KAvBY,EAwBZ,KAxBY,EAyBZ,KAzBY,EA0BZ,KA1BY,EA2BZ,KA3BY,EA4BZ,KA5BY,EA6BZ,KA7BY,EA8BZ,KA9BY,EA+BZ,IA/BY,EAgCZ,IAhCY,EAiCZ,IAjCY;EAhDA,CAAhB;;EAqFAipB,SAAS,GAAGnuB,MAAM,CAACC,IAAP,CAAYkuB,SAAZ,EAAuBrsB,MAAvB,CAA8B,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EAClDovB,EAAAA,SAAS,CAACpvB,CAAD,CAAT,CAAamB,OAAb,CAAqB,UAAA7B,CAAC;EAAA,WAAKO,CAAC,CAACP,CAAD,CAAD,GAAOU,CAAZ;EAAA,GAAtB;EACA,SAAOH,CAAP;EACD,CAHW,EAGT,EAHS,CAAZ;EAIA,UAAc,GAAGuvB,SAAjB;;ECtFA;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAASvwB,GAAT,EAAc;EAC/B,MAAIwwB,KAAK,GAAGxwB,GAAG,CAAC0K,MAAJ,CAAW1K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAZ;;EACA,MAAImwB,MAAK,CAAC7qB,cAAN,CAAqB4qB,KAArB,MAAgC,IAApC,EAA0C;EACxC,WAAOC,MAAK,CAACD,KAAD,CAAZ;EACD;;EACD,MAAIE,GAAG,GAAG1wB,GAAG,CAAC0K,MAAJ,CAAW1K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAV;;EACA,MAAImwB,MAAK,CAAC7qB,cAAN,CAAqB8qB,GAArB,MAA8B,IAAlC,EAAwC;EACtC,WAAOD,MAAK,CAACC,GAAD,CAAZ;EACD;;EACD,MAAIC,GAAG,GAAG3wB,GAAG,CAAC0K,MAAJ,CAAW1K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAV;;EACA,MAAIqwB,GAAG,KAAK,GAAZ,EAAiB;EACf,WAAO,cAAP;EACD;;EACD,SAAO,IAAP;EACD,CAdD;;EAgBA,IAAMnpB,YAAY,GAAG,SAAfA,YAAe,CAASxH,GAAT,EAAc0G,KAAd,EAAqBQ,KAArB,EAA4B;EAC/C,MAAI,CAAClH,GAAL,EAAU;EACR,WAAO,EAAP;EACD,GAH8C;;;EAK/C,MAAI0G,KAAK,CAAC2J,KAAN,CAAYzK,cAAZ,CAA2B5F,GAA3B,MAAoC,IAAxC,EAA8C;EAC5C,QAAI4wB,MAAM,GAAGlqB,KAAK,CAAC2W,UAAN,CAAiB/B,KAA9B;EACA,QAAIlZ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYwuB,MAAZ,CAAX;;EACA,SAAK,IAAI1wB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAIqd,KAAK,GAAGpb,MAAM,CAACC,IAAP,CAAYwuB,MAAM,CAACxuB,IAAI,CAAClC,CAAD,CAAL,CAAlB,CAAZ;;EACA,WAAK,IAAIoB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGic,KAAK,CAACjd,MAA1B,EAAkCgB,CAAC,EAAnC,EAAuC;EACrC,YAAItB,GAAG,KAAK4wB,MAAM,CAACxuB,IAAI,CAAClC,CAAD,CAAL,CAAN,CAAgBqd,KAAK,CAACjc,CAAD,CAArB,CAAZ,EAAuC;EACrC,iBAAOc,IAAI,CAAClC,CAAD,CAAX;EACD;EACF;EACF;EACF,GAhB8C;;;EAmB/CgH,EAAAA,KAAK,GAAGA,KAAK,IAAIqpB,UAAU,CAACvwB,GAAD,CAA3B;;EACA,MAAIkH,KAAK,IAAI+oB,UAAK,CAAC/oB,KAAD,CAAlB,EAA2B;EACzB,SAAK,IAAIhH,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG+vB,UAAK,CAAC/oB,KAAD,CAAL,CAAa5G,MAAjC,EAAyCJ,EAAC,EAA1C,EAA8C;EAC5C,UAAM2wB,IAAI,GAAGZ,UAAK,CAAC/oB,KAAD,CAAL,CAAahH,EAAb,CAAb;;EACA,UAAI2wB,IAAI,CAACxrB,GAAL,CAASxC,IAAT,CAAc7C,GAAd,MAAuB,IAA3B,EAAiC;EAC/B,eAAOA,GAAG,CAACmD,OAAJ,CAAY0tB,IAAI,CAACxrB,GAAjB,EAAsBwrB,IAAI,CAACR,EAA3B,CAAP;EACD;EACF;EACF;;EACD,SAAOrwB,GAAP;EACD,CA7BD;;EA8BA,kBAAc,GAAGwH,YAAjB;;ECxCA,IAAM6V,YAAU,GAAG;EACjBhC,EAAAA,KAAK,EAAE7R,OADU;EAEjB8R,EAAAA,KAAK,EAAE7R;EAFU,CAAnB;;EAMA,IAAM7C,YAAU,GAAG;EACjBsW,EAAAA,SAAS,EAAExT,WADM;EAEjByT,EAAAA,UAAU,EAAExT,UAFK;EAGjBqT,EAAAA,QAAQ,EAAEpT,QAHO;EAIjB9C,EAAAA,UAAU,EAAEoJ,YAJK;EAKjB1I,EAAAA,YAAY,EAAEspB;EALG,CAAnB;EAQA,IAAIhmB,UAAS,GAAG,KAAhB;;;MAGMimB;;;EACJ,mBAAc;EAAA;;;EAEZ5uB,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAE4H,MAF4B;EAGnC7H,MAAAA,QAAQ,EAAE;EAHyB,KAArC;EAKAxR,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,aAA5B,EAA2C;EACzCC,MAAAA,UAAU,EAAE,KAD6B;EAEzCE,MAAAA,KAAK,EAAE,EAFkC;EAGzCD,MAAAA,QAAQ,EAAE;EAH+B,KAA3C;EAKAxR,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,YAA5B,EAA0C;EACxCC,MAAAA,UAAU,EAAE,KAD4B;EAExCE,MAAAA,KAAK,EAAEyJ,YAFiC;EAGxC1J,MAAAA,QAAQ,EAAE;EAH8B,KAA1C;EAKAxR,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,MAAAA,UAAU,EAAE,KADsB;EAElCE,MAAAA,KAAK,EAAEzR,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBynB,IAAlB,CAF2B;EAGlCrd,MAAAA,QAAQ,EAAE;EAHwB,KAApC;EAKAxR,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,YAA5B,EAA0C;EACxCC,MAAAA,UAAU,EAAE,KAD4B;EAExCE,MAAAA,KAAK,EAAEhN,YAFiC;EAGxC+M,MAAAA,QAAQ,EAAE;EAH8B,KAA1C;EAMAxR,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,SAA5B,EAAuC;EACrCC,MAAAA,UAAU,EAAE,KADyB;EAErCE,MAAAA,KAAK,EAAE,EAF8B;EAGrCD,MAAAA,QAAQ,EAAE;EAH2B,KAAvC,EA5BY;;EAkCZ,SAAKsd,WAAL,CAAiBC,KAAjB,EAlCY;;EAoCZ,SAAK9T,aAAL,GApCY;;EAuCZjb,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAE;EACLnL,QAAAA,aAAa,EAAE,KAAK0oB,QAAL,CAAc,cAAd;EADV;EAF4B,KAArC;EAMD;;;;;;8BAGOC,MAAM;EACZtmB,MAAAA,UAAS,GAAGsmB,IAAZ;EACA,aAAO,IAAP;EACD;;;kCACW;EACV,aAAOtmB,UAAP;EACD;;;;;+BAGQ/E,KAAK;EACZ,UAAI4W,GAAG,GAAG,KAAKtM,KAAf;EACA,UAAIT,GAAG,GAAG,EAAV;EACA,UAAIS,KAAK,GAAGlO,MAAM,CAACC,IAAP,CAAYua,GAAZ,CAAZ;;EACA,WAAK,IAAIzc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmQ,KAAK,CAAC/P,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,YAAI,OAAOyc,GAAG,CAACtM,KAAK,CAACnQ,CAAD,CAAN,CAAV,KAAyB,QAA7B,EAAuC;EACrC,cAAIyc,GAAG,CAACtM,KAAK,CAACnQ,CAAD,CAAN,CAAH,KAAkB6F,GAAtB,EAA2B;EACzB6J,YAAAA,GAAG,CAACS,KAAK,CAACnQ,CAAD,CAAN,CAAH,GAAgB,IAAhB;EACD;EACF,SAJD,MAIO,IAAIyc,GAAG,CAACtM,KAAK,CAACnQ,CAAD,CAAN,CAAH,CAAcoG,IAAd,CAAmB,UAAA3E,CAAC;EAAA,iBAAIA,CAAC,KAAKoE,GAAV;EAAA,SAApB,CAAJ,EAAwC;EAC7C6J,UAAAA,GAAG,CAACS,KAAK,CAACnQ,CAAD,CAAN,CAAH,GAAgB,IAAhB;EACD;EACF;;EACD,aAAO0P,GAAP;EACD;;;;;kCAGW+M,KAAK;EACf,UAAI3W,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYua,GAAZ,CAAX;;EACA,WAAK,IAAIzc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,YAAImQ,KAAK,GAAGlO,MAAM,CAACC,IAAP,CAAYka,cAAM,CAACK,GAAG,CAAC3W,IAAI,CAAC9F,CAAD,CAAL,CAAJ,CAAlB,CAAZ;;EACA,aAAK,IAAI4B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuO,KAAK,CAAC/P,MAA1B,EAAkCwB,CAAC,EAAnC,EAAuC;EACrCuvB,UAAAA,QAAM,CAAC3U,OAAP,CAAerM,KAAK,CAACvO,CAAD,CAApB,EAAyBkE,IAAI,CAAC9F,CAAD,CAA7B,EAAkC,KAAKmQ,KAAvC,EADqC;;EAGrCghB,UAAAA,QAAM,CAACzU,OAAP,CAAevM,KAAK,CAACvO,CAAD,CAApB,EAAyBkE,IAAI,CAAC9F,CAAD,CAA7B,EAAkC,IAAlC;EACD;EACF;EACF;;;;;iCAEQyL,KAAK;EACZ,UAAIvJ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYuJ,GAAZ,CAAX;;EACA,WAAK,IAAIzL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,YAAIgE,IAAI,GAAG9B,IAAI,CAAClC,CAAD,CAAJ,CAAQ8C,WAAR,EAAX;EACAquB,QAAAA,QAAM,CAAC3U,OAAP,CAAexY,IAAf,EAAqByH,GAAG,CAACvJ,IAAI,CAAClC,CAAD,CAAL,CAAxB,EAAmC,KAAKmQ,KAAxC,EAFoC;;EAIpCghB,QAAAA,QAAM,CAACzU,OAAP,CAAe1Y,IAAf,EAAqByH,GAAG,CAACvJ,IAAI,CAAClC,CAAD,CAAL,CAAxB,EAAmC,IAAnC;EACD;EACF;;;sCAEe;EACdkd,MAAAA,eAAa,CAAC,IAAD,CAAb;;EACA,aAAO,IAAP;EACD;;;;;8BAGOpX,MAAM;EACZA,MAAAA,IAAI,GAAG7D,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBvD,IAAlB,CAAP;EACA,WAAKA,IAAL,GAAY7D,MAAM,CAACoH,MAAP,CAAc,KAAKvD,IAAnB,EAAyBA,IAAzB,CAAZ,CAFY;;EAIZ,WAAKA,IAAL,GAAYsrB,SAAW,CAAC,KAAKtrB,IAAN,CAAvB;EACA,aAAO,IAAP;EACD;;;;;kCAEWurB,IAAI;EACd,WAAKC,OAAL,CAAallB,IAAb,CAAkBilB,EAAlB;EACA,aAAO,IAAP;EACD;;;;;8BAGO;EACN,aAAO;EACLlhB,QAAAA,KAAK,EAAElO,MAAM,CAACC,IAAP,CAAY,KAAKiO,KAAjB,EAAwB/P,MAD1B;EAELmxB,QAAAA,OAAO,EAAEtvB,MAAM,CAACC,IAAP,CAAY,KAAKib,UAAL,CAAgBhC,KAA5B,EAAmC/a,MAFvC;EAGLwiB,QAAAA,YAAY,EAAE3gB,MAAM,CAACC,IAAP,CAAY,KAAKib,UAAL,CAAgB/B,KAA5B,EAAmChb,MAH5C;EAILoxB,QAAAA,SAAS,EAAEvvB,MAAM,CAACC,IAAP,CAAY,KAAK0a,WAAjB,EAA8Bxc,MAJpC;EAKLqxB,QAAAA,cAAc,EAAE,KAAKH,OAAL,CAAalxB;EALxB,OAAP;EAOD;;;;;;;EAIH,IAAMwL,OAAK,GAAG,SAARA,KAAQ,CAASH,GAAT,EAAc;EAC1B,SAAO4K,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACqb,SAAL,CAAejmB,GAAf,CAAX,CAAP;EACD,CAFD;;;;EAKAolB,KAAK,CAACxmB,SAAN,CAAgBuB,KAAhB,GAAwB,YAAW;EACjC,MAAI+lB,EAAE,GAAG,IAAId,KAAJ,EAAT,CADiC;;EAGjCc,EAAAA,EAAE,CAACxhB,KAAH,GAAWlO,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkB,KAAK8G,KAAvB,CAAX;EACAwhB,EAAAA,EAAE,CAAC/U,WAAH,GAAiB3a,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkB,KAAKuT,WAAvB,CAAjB,CAJiC;;EAMjC+U,EAAAA,EAAE,CAACxU,UAAH,GAAgBvR,OAAK,CAAC,KAAKuR,UAAN,CAArB;EACAwU,EAAAA,EAAE,CAAC7rB,IAAH,GAAU8F,OAAK,CAAC,KAAK9F,IAAN,CAAf,CAPiC;;EASjC6rB,EAAAA,EAAE,CAACjrB,UAAH,GAAgB,KAAKA,UAArB;EACAirB,EAAAA,EAAE,CAACL,OAAH,GAAa,KAAKA,OAAlB;EACA,SAAOK,EAAP;EACD,CAZD;;EAaA,WAAc,GAAGd,KAAjB;;;EC9KA;EACAzsB,EAAAA,WAAA,GAAc,YAAW;EACvB,WAAO,KAAKoK,OAAL,GAAe,CAAf,KAAqB,IAA5B;EACD,GAFD;;;;EAKApK,EAAAA,cAAA,GAAiB,YAAW;EAC1B,QAAI,KAAKwtB,IAAT,EAAe;EACb,aAAO,KAAKA,IAAZ;EACD;;EACD,WAAO,IAAP;EACD,GALD;;;;EAQAxtB,EAAAA,eAAA,GAAkB,UAASjD,CAAT,EAAY;EAC5B,QAAIiJ,GAAG,GAAG,EAAV;;EACA,QAAMynB,SAAS,GAAG,SAAZA,SAAY,CAAS1jB,GAAT,EAAc;EAC9B,UAAIA,GAAG,CAACyjB,IAAR,EAAc;EACZxnB,QAAAA,GAAG,CAACgC,IAAJ,CAAS+B,GAAG,CAACyjB,IAAb;EACAC,QAAAA,SAAS,CAAC1jB,GAAG,CAACyjB,IAAL,CAAT;EACD;EACF,KALD;;EAMAC,IAAAA,SAAS,CAAC,IAAD,CAAT;EACAznB,IAAAA,GAAG,GAAGA,GAAG,CAACkI,OAAJ,EAAN;;EACA,QAAI,OAAOnR,CAAP,KAAa,QAAjB,EAA2B;EACzB,aAAOiJ,GAAG,CAACjJ,CAAD,CAAV;EACD;;EACD,WAAOiJ,GAAP;EACD,GAdD;;;;EAiBAhG,EAAAA,aAAA,GAAgB,UAAS0tB,SAAT,EAAoB;EAClC,QAAI9jB,IAAI,GAAG,KAAKA,IAAL,CAAUxB,GAAV,CAAc,UAAAwG,EAAE;EAAA,aAAIA,EAAE,CAACpH,KAAH,CAASkmB,SAAT,CAAJ;EAAA,KAAhB,CAAX;EACA,QAAIviB,GAAG,GAAG,KAAKjD,SAAL,CAAe0B,IAAf,CAAV;EACA,WAAOuB,GAAP;EACD,GAJD;;;;EAOAnL,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAK4J,IAAL,CAAUjK,MAAV,CAAiB,UAACuM,KAAD,EAAQjP,CAAR,EAAc;EACpCiP,MAAAA,KAAK,IAAIjP,CAAC,CAAC0wB,SAAF,EAAT;EACA,aAAOzhB,KAAP;EACD,KAHM,EAGJ,CAHI,CAAP;EAID,GALD;;EAMAlM,EAAAA,iBAAA,GAAoBA,OAAO,CAAC2tB,SAA5B;;;;;;;;;;;EAWA3tB,EAAAA,aAAA,GAAgB,UAASqD,OAAT,EAAkB;EAAA;;EAChCA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,SAAKuG,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI8O,KAAK,GAAG,EAAZ;EACA9O,MAAAA,CAAC,CAAC0K,KAAF,GAAU1K,CAAC,CAAC0K,KAAF,IAAW,EAArB;EACA1K,MAAAA,CAAC,CAAC0K,KAAF,CAAQC,KAAR,GAAgB3K,CAAC,CAAC0K,KAAF,CAAQC,KAAR,IAAiB3K,CAAC,CAAC2K,KAAF,EAAjC,CAHqB;;EAKrB3K,MAAAA,CAAC,CAAC0K,KAAF,CAAQC,KAAR,CAAc7J,OAAd,CAAsB,UAAAV,CAAC,EAAI;EACzB0O,QAAAA,KAAK,CAAC1O,CAAC,CAACoB,KAAH,CAAL,GAAiB,IAAjB;EACAsN,QAAAA,KAAK,CAAC1O,CAAC,CAACyB,OAAH,CAAL,GAAmB,IAAnB;EACAiN,QAAAA,KAAK,CAAC1O,CAAC,CAAC1B,IAAF,CAAO+C,WAAP,EAAD,CAAL,GAA8B,IAA9B;;EACA,YAAIrB,CAAC,CAACuD,QAAN,EAAgB;EACdmL,UAAAA,KAAK,CAAC1O,CAAC,CAACuD,QAAH,CAAL,GAAoB,IAApB;EACD;;EACD,YAAIvD,CAAC,CAACmE,IAAN,EAAY;EACVuK,UAAAA,KAAK,CAAC1O,CAAC,CAACmE,IAAH,CAAL,GAAgB,IAAhB;EACD;;EACD,YAAInE,CAAC,CAACwC,KAAF,KAAYwB,SAAhB,EAA2B;EACzB0K,UAAAA,KAAK,GAAGlO,MAAM,CAACoH,MAAP,CAAc8G,KAAd,EAAqB1O,CAAC,CAACwC,KAAvB,CAAR;EACD;;EACD,YAAIwD,OAAO,CAAC7B,IAAZ,EAAkB;EAChBnE,UAAAA,CAAC,CAACuwB,OAAF,CAAU,KAAI,CAACxrB,KAAf;EACA2J,UAAAA,KAAK,CAAC1O,CAAC,CAACmE,IAAH,CAAL,GAAgB,IAAhB;EACD;EACF,OAjBD;EAkBA,aAAOuK,KAAK,CAAC,EAAD,CAAZ;EACA9O,MAAAA,CAAC,CAAC0K,KAAF,CAAQoE,KAAR,GAAgBA,KAAhB;EACD,KAzBD;EA0BA,WAAO,IAAP;EACD,GA7BD;;;;EAgCA/L,EAAAA,eAAA,GAAkB,YAAW;EAC3B,SAAK4J,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,MAAAA,CAAC,CAAC0K,KAAF,GAAU,EAAV;EACD,KAFD,EAD2B;;EAK3B,SAAKyC,OAAL,GAAerM,OAAf,CAAuB,UAAAgM,GAAG,EAAI;EAC5BA,MAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,QAAAA,CAAC,CAAC0K,KAAF,GAAU,EAAV;EACD,OAFD;EAGD,KAJD;EAKA,WAAO,IAAP;EACD,GAXD;;;;;;;;;;;;ECvFA;EACA3H,EAAAA,aAAA,GAAgB,UAASjD,CAAT,EAAY;EAC1B,QAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAKyG,GAAL,CAAS,CAAT,CAAP;EACD;;EACD,WAAO,KAAKuD,KAAL,CAAW,CAAX,EAActO,CAAd,CAAP;EACD,GALD;;;;EAQAiD,EAAAA,YAAA,GAAe,UAASjD,CAAT,EAAY;EACzB,QAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAKyG,GAAL,CAAS,KAAK8B,IAAL,CAAU5N,MAAV,GAAmB,CAA5B,CAAP;EACD;;EACD,QAAIoF,GAAG,GAAG,KAAKwI,IAAL,CAAU5N,MAApB;EACA,WAAO,KAAKqP,KAAL,CAAWjK,GAAG,GAAGrE,CAAjB,EAAoBqE,GAApB,CAAP;EACD,GAND;;;;EASApB,EAAAA,aAAA,GAAgB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EACnC,QAAIwI,IAAI,GAAG,KAAKA,IAAL,CAAUyB,KAAV,CAAgBlK,KAAhB,EAAuBC,GAAvB,CAAX;EACA,WAAO,KAAK8G,SAAL,CAAe0B,IAAf,CAAP;EACD,GAHD;;;;EAMA5J,EAAAA,UAAA,GAAa,UAASjD,CAAT,EAAY;EACvB,QAAIE,CAAC,GAAG,KAAK2M,IAAL,CAAU7M,CAAV,CAAR;;EACA,QAAIE,CAAC,KAAKoE,SAAV,EAAqB;EACnB,aAAO,KAAK6G,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,WAAO,KAAKA,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAP;EACD,GAND;;EAOA+C,EAAAA,WAAA,GAAcA,OAAO,CAAC6tB,EAAtB;;;EAGA7tB,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAKiJ,KAAL,CAAW,IAAX,CAAP;EACD,GAFD;;;;EAIAjJ,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKiJ,KAAL,CAAW,IAAX,CAAP;EACD,GAFD;;;;EAKAjJ,EAAAA,gBAAA,GAAmB,UAAS8R,GAAT,EAAc;EAC/B,QAAI9L,GAAG,GAAG,EAAV,CAD+B;;EAG/B,SAAK,IAAIpK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKgO,IAAL,CAAU5N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAIgM,KAAK,GAAG,KAAKgC,IAAL,CAAUhO,CAAV,EAAagM,KAAb,EAAZ;;EACA,WAAK,IAAI5K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,KAAK,CAAC5L,MAA1B,EAAkCgB,CAAC,EAAnC,EAAuC;EACrCgJ,QAAAA,GAAG,CAACgC,IAAJ,CAASJ,KAAK,CAAC5K,CAAD,CAAd,EADqC;;EAGrC,YAAI8U,GAAG,KAAKzQ,SAAR,IAAqB2E,GAAG,CAAC8L,GAAD,CAAH,KAAazQ,SAAtC,EAAiD;EAC/C,iBAAO2E,GAAG,CAAC8L,GAAD,CAAV;EACD;EACF;EACF;;EACD,WAAO9L,GAAP;EACD,GAdD;;;;;;;;;;;;ECzCA;EACAhG,EAAAA,aAAA,GAAgB,UAASe,GAAT,EAAc;;EAE5B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;;EACA,QAAIyK,IAAI,CAACxP,MAAL,KAAgB,CAApB,EAAuB;EACrB,aAAO,KAAKkM,SAAL,CAAe,EAAf,CAAP;EACD,KAL2B;;;EAO5B,QAAI+E,OAAO,GAAG,KAAKrD,IAAL,CAAUjK,MAAV,CAAiB,UAACqG,GAAD,EAAM/I,CAAN,EAAY;EACzC,aAAO+I,GAAG,CAACmE,MAAJ,CAAWlN,CAAC,CAACgM,KAAF,CAAQuC,IAAR,CAAX,CAAP;EACD,KAFa,EAEX,EAFW,CAAd;EAGA,WAAO,KAAKtD,SAAL,CAAe+E,OAAf,CAAP;EACD,GAXD;;;;EAcAjN,EAAAA,WAAA,GAAc,UAASe,GAAT,EAAc;;EAE1B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB,CAF0B;;EAI1B,QAAIyK,IAAI,CAACxP,MAAL,KAAgB,CAApB,EAAuB;EACrB,aAAO,IAAP;EACD,KANyB;;;EAQ1B,QAAIiR,OAAO,GAAG,KAAKrD,IAAL,CAAUjK,MAAV,CAAiB,UAACqG,GAAD,EAAM/I,CAAN,EAAY;EACzC,aAAO+I,GAAG,CAACmE,MAAJ,CAAWlN,CAAC,CAAC8wB,GAAF,CAAMviB,IAAN,CAAX,CAAP;EACD,KAFa,EAEX,EAFW,CAAd;EAGA,WAAO,KAAKtD,SAAL,CAAe+E,OAAf,CAAP;EACD,GAZD;;;;EAeAjN,EAAAA,gBAAA,GAAmB,UAASe,GAAT,EAAc;EAC/B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;;EACA,SAAK,IAAInF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKgO,IAAL,CAAU5N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAIqN,KAAK,GAAG,KAAKW,IAAL,CAAUhO,CAAV,EAAaqN,KAAb,CAAmBuC,IAAnB,EAAyB,IAAzB,CAAZ;EACA,aAAO,KAAKtD,SAAL,CAAee,KAAf,CAAP;EACD;;EACD,WAAO,KAAKf,SAAL,CAAe,EAAf,CAAP;EACD,GAPD;;;;EAUAlI,EAAAA,aAAA,GAAa,UAASe,GAAT,EAAc;EACzB,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIxB,KAAK,GAAG,KAAKqK,IAAL,CAAUrB,MAAV,CAAiB,UAAAtL,CAAC;EAAA,aAAIA,CAAC,CAAC+wB,GAAF,CAAMxiB,IAAN,MAAgB,IAApB;EAAA,KAAlB,CAAZ;EACA,WAAO,KAAKtD,SAAL,CAAe3I,KAAf,CAAP;EACD,GAJD;;;;EAOAS,EAAAA,YAAA,GAAe,UAASe,GAAT,EAAc;EAC3B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIxB,KAAK,GAAG,KAAKqK,IAAL,CAAUrB,MAAV,CAAiB,UAAAtL,CAAC;EAAA,aAAIA,CAAC,CAAC+wB,GAAF,CAAMxiB,IAAN,MAAgB,KAApB;EAAA,KAAlB,CAAZ;EACA,WAAO,KAAKtD,SAAL,CAAe3I,KAAf,CAAP;EACD,GAJD;;;;EAOAS,EAAAA,WAAA,GAAc,UAASe,GAAT,EAAc;EAC1B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,WAAO,KAAK6I,IAAL,CAAU5H,IAAV,CAAe,UAAA/E,CAAC;EAAA,aAAIA,CAAC,CAAC+wB,GAAF,CAAMxiB,IAAN,MAAgB,IAApB;EAAA,KAAhB,CAAP;EACD,GAHD;;;;EAMAxL,EAAAA,iBAAA,GAAoB,UAASe,GAAT,EAAc;;EAEhC,QAAI,CAACA,GAAL,EAAU;EACRA,MAAAA,GAAG,GAAG,IAAN;EACD;;EACD,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIkM,OAAO,GAAG,EAAd;EACA,SAAKrD,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBgQ,MAAAA,OAAO,GAAGA,OAAO,CAAC9C,MAAR,CAAelN,CAAC,CAACgxB,SAAF,CAAYziB,IAAZ,CAAf,CAAV;EACD,KAFD;EAGAyB,IAAAA,OAAO,GAAGA,OAAO,CAAC1E,MAAR,CAAe,UAAAtL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKiL,SAAL,CAAe+E,OAAf,CAAP;EACD,GAZD;;EAaAjN,EAAAA,iBAAA,GAAoBA,OAAO,CAACiuB,SAA5B;;;EAGAjuB,EAAAA,kBAAA,GAAqB,UAASe,GAAT,EAAc;;EAEjC,QAAI,CAACA,GAAL,EAAU;EACRA,MAAAA,GAAG,GAAG,IAAN;EACD;;EACD,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIkM,OAAO,GAAG,EAAd;EACA,SAAKrD,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBgQ,MAAAA,OAAO,GAAGA,OAAO,CAAC9C,MAAR,CAAelN,CAAC,CAACixB,UAAF,CAAa1iB,IAAb,CAAf,CAAV;EACD,KAFD;EAGAyB,IAAAA,OAAO,GAAGA,OAAO,CAAC1E,MAAR,CAAe,UAAAtL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKiL,SAAL,CAAe+E,OAAf,CAAP;EACD,GAZD;;EAaAjN,EAAAA,kBAAA,GAAqBA,OAAO,CAACkuB,UAA7B;;;EAGAluB,EAAAA,cAAA,GAAiB,UAASe,GAAT,EAAc;EAC7B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB,CAD6B;;EAG7B,QAAI0Q,OAAO,GAAG,WAAQjG,IAAR,EAAc5B,IAA5B;EACA,QAAIukB,OAAO,GAAG1c,OAAO,CAACrJ,GAAR,CAAY,UAAAnL,CAAC,EAAI;EAC7B,UAAImR,GAAG,GAAGnR,CAAC,CAAC2K,KAAF,GAAUQ,GAAV,CAAc,UAAA/K,CAAC;EAAA,eAAIA,CAAC,CAAC4D,EAAN;EAAA,OAAf,CAAV,CAD6B;;EAG7B,UAAInE,CAAC,GAAGG,CAAC,CAACgM,KAAF,CAAQuC,IAAR,EAAc,CAAd,CAAR;EACA,UAAIxK,KAAK,GAAGoN,GAAG,CAAC9N,OAAJ,CAAYxD,CAAC,CAACqE,KAAd,CAAZ,CAJ6B;;EAM7B,UAAIH,KAAK,KAAK,CAAV,IAAeA,KAAK,KAAK,CAAC,CAA9B,EAAiC;EAC/B,eAAO,IAAP;EACD;;EACD,aAAO/D,CAAC,CAACiL,SAAF,CAAYjL,CAAC,CAACkE,KAAd,EAAqBH,KAArB,CAAP;EACD,KAVa,CAAd;EAWAmtB,IAAAA,OAAO,GAAGA,OAAO,CAAC5lB,MAAR,CAAe,UAAAtL,CAAC;EAAA,aAAIA,CAAC,KAAK,IAAV;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKiL,SAAL,CAAeimB,OAAf,CAAP;EACD,GAjBD;;;;EAoBAnuB,EAAAA,aAAA,GAAgB,UAASe,GAAT,EAAc;EAC5B,QAAIyK,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB,CAD4B;;EAG5B,QAAI0Q,OAAO,GAAG,WAAQjG,IAAR,EAAc5B,IAA5B;EACA,QAAIukB,OAAO,GAAG1c,OAAO,CAACrJ,GAAR,CAAY,UAAAnL,CAAC,EAAI;EAC7B,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACA,UAAIwG,GAAG,GAAGxG,KAAK,CAACQ,GAAN,CAAU,UAAA/K,CAAC;EAAA,eAAIA,CAAC,CAAC4D,EAAN;EAAA,OAAX,CAAV,CAF6B;;EAI7B,UAAInE,CAAC,GAAGG,CAAC,CAACgM,KAAF,CAAQuC,IAAR,EAAc,CAAd,CAAR;EACA,UAAIxK,KAAK,GAAGoN,GAAG,CAAC9N,OAAJ,CAAYxD,CAAC,CAACqE,KAAd,CAAZ,CAL6B;;EAO7B,UAAIH,KAAK,KAAK,CAAC,CAAX,IAAgB,CAAC4G,KAAK,CAAC5G,KAAK,GAAGlE,CAAC,CAACd,MAAX,CAA1B,EAA8C;EAC5C,eAAO,IAAP;EACD,OAT4B;;;EAW7B,UAAIiF,EAAE,GAAG2G,KAAK,CAAC5G,KAAK,GAAGlE,CAAC,CAACd,MAAX,CAAL,CAAwBiF,EAAjC;EACA,UAAIqV,GAAG,GAAGrZ,CAAC,CAACjB,MAAF,GAAWgF,KAAX,GAAmBlE,CAAC,CAACd,MAA/B;EACA,aAAOiB,CAAC,CAACiL,SAAF,CAAYjH,EAAZ,EAAgBqV,GAAhB,CAAP;EACD,KAda,CAAd;EAeA6X,IAAAA,OAAO,GAAGA,OAAO,CAAC5lB,MAAR,CAAe,UAAAtL,CAAC;EAAA,aAAIA,CAAC,KAAK,IAAV;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKiL,SAAL,CAAeimB,OAAf,CAAP;EACD,GArBD;;;;;;;;;;;;;;EClHA;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAS3sB,GAAT,EAAcsI,GAAd,EAAmBskB,IAAnB,EAAyBxoB,MAAzB,EAAiC;EAChD,MAAI8L,OAAO,GAAG,EAAd;;EACA,MAAI,OAAOlQ,GAAP,KAAe,QAAnB,EAA6B;EAC3BkQ,IAAAA,OAAO,GAAGlQ,GAAG,CAACjG,KAAJ,CAAU,GAAV,CAAV;EACD,GAJ+C;;;EAOhDuO,EAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI2K,KAAK,GAAG3K,CAAC,CAAC0K,KAAF,CAAQC,KAAR,IAAiB3K,CAAC,CAAC2K,KAAF,EAA7B,CADoB;;EAGpB,QAAIymB,IAAI,KAAK,IAAb,EAAmB;EACjBzmB,MAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CAAa,UAAAlL,CAAC;EAAA,eAAIA,CAAC,CAAC2J,KAAF,CAAQvF,GAAR,EAAasI,GAAG,CAAC3H,KAAjB,CAAJ;EAAA,OAAd,CAAR;EACD;;EACDwF,IAAAA,KAAK,CAAC7J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtB,UAAI+V,OAAO,CAAC3V,MAAR,GAAiB,CAArB,EAAwB;EACtB,YAAI2V,OAAO,CAAC/V,CAAD,CAAP,IAAc+V,OAAO,CAAC/V,CAAD,CAAP,KAAe,GAAjC,EAAsC;EACpCyB,UAAAA,CAAC,CAACoE,GAAF,CAAMkQ,OAAO,CAAC/V,CAAD,CAAb,EAAkBiK,MAAlB,EAA0BkE,GAAG,CAAC3H,KAA9B;EACD;EACF,OAJD,MAIO;;EAEL/E,QAAAA,CAAC,CAACoE,GAAF,CAAMA,GAAN,EAAWoE,MAAX,EAAmBkE,GAAG,CAAC3H,KAAvB;EACD;EACF,KAVD;EAWD,GAjBD;EAkBA;EACD,CA1BD;;EA2BA,WAAc,GAAGgsB,QAAjB;;EC1BA;;EACA,SAAW,GAAG,YAAA,CAAS1sB,IAAT,EAAe4sB,GAAf,EAAoB;EAChC,MAAI,CAAC5sB,IAAL,EAAW;EACT,WAAO,IAAP;EACD;;EACD6sB,EAAAA,OAAM,CAAC7sB,IAAD,EAAO,IAAP,EAAa,KAAb,EAAoB4sB,GAApB,CAAN;EACA,SAAO,IAAP;EACD,CAND;;;;EASA,aAAe,GAAG,gBAAA,CAAS5sB,IAAT,EAAe4sB,GAAf,EAAoB;EACpC,MAAI,CAAC5sB,IAAL,EAAW;EACT,WAAO,IAAP;EACD;;EACD6sB,EAAAA,OAAM,CAAC7sB,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB4sB,GAAnB,CAAN;EACA,SAAO,IAAP;EACD,CAND;;;;EASA,WAAa,GAAG,cAAA,CAAS5sB,IAAT,EAAe4sB,GAAf,EAAoB;EAAA;;EAClC,OAAK1kB,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAAC2K,KAAF,GAAU7J,OAAV,CAAkB,UAAAV,CAAC;EAAA,aAAIA,CAAC,CAACsJ,KAAF,CAAQjF,IAAR,EAAc4sB,GAAd,EAAmB,KAAI,CAAClsB,KAAxB,CAAJ;EAAA,KAAnB;EACD,GAFD;EAGA,SAAO,IAAP;EACD,CALD;;;;EAQA,WAAa,GAAG,cAAA,CAASX,GAAT,EAAc;EAC5B,MAAI,CAACA,GAAL,EAAU;EACR,WAAO,IAAP;EACD;;EACD,MAAIW,KAAK,GAAG,KAAKA,KAAjB;EACA,MAAI6K,OAAO,GAAG,KAAKrD,IAAL,CAAUjK,MAAV,CAAiB,UAACqG,GAAD,EAAM/I,CAAN,EAAY;EACzC,WAAO+I,GAAG,CAACmE,MAAJ,CAAWlN,CAAC,CAAC+J,KAAF,CAAQvF,GAAR,EAAaW,KAAb,CAAX,CAAP;EACD,GAFa,EAEX,EAFW,CAAd;EAGA,SAAO,KAAK8F,SAAL,CAAe+E,OAAf,CAAP;EACD,CATD;;;;;;;;;EC7BA;EACA,OAAW,GAAG,YAAA,CAASggB,EAAT,EAAa;EAAA;;EACzB,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIrjB,IAAI,GAAG,KAAKA,IAAL,CAAUxB,GAAV,CAAc,UAACnL,CAAD,EAAIrB,CAAJ,EAAU;EACjC,QAAImO,GAAG,GAAG,KAAI,CAAC7B,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAV;;EACA8M,IAAAA,GAAG,CAACyjB,IAAJ,GAAW,IAAX,CAFiC;;EAGjC,QAAIliB,GAAG,GAAG2hB,EAAE,CAACljB,GAAD,EAAMnO,CAAN,CAAZ;;EACA,QAAI0P,GAAG,CAAC1B,IAAJ,IAAY0B,GAAG,CAAC1B,IAAJ,CAAS,CAAT,CAAhB,EAA6B;EAC3B,aAAO0B,GAAG,CAAC1B,IAAJ,CAAS,CAAT,CAAP;EACD;;EACD,WAAO0B,GAAP;EACD,GARU,CAAX;;EASA,MAAI1B,IAAI,CAAC5N,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,KAAKkM,SAAL,CAAe0B,IAAf,CAAP;EACD,GAfwB;;;EAiBzB,MAAI,QAAOA,IAAI,CAAC,CAAD,CAAX,MAAmB,QAAnB,IAA+BA,IAAI,CAAC,CAAD,CAAJ,CAAQ/E,GAAR,KAAgB,QAAnD,EAA6D;EAC3D,WAAO+E,IAAP;EACD;;EACD,SAAO,KAAK1B,SAAL,CAAe0B,IAAf,CAAP;EACD,CArBD;;;;EAwBA,WAAe,GAAG,gBAAA,CAASqjB,EAAT,EAAauB,YAAb,EAA2B;EAAA;;EAC3C,MAAI,CAACvB,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,OAAKrjB,IAAL,CAAU7L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1B,QAAI6yB,GAAG,GAAG,MAAI,CAACvmB,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAV,CAD0B;;;EAG1B,QAAIuxB,YAAY,KAAK,IAArB,EAA2B;EACzBC,MAAAA,GAAG,CAACjB,IAAJ,GAAW,IAAX,CADyB;EAE1B;;EACDP,IAAAA,EAAE,CAACwB,GAAD,EAAM7yB,CAAN,CAAF;EACD,GAPD;EAQA,SAAO,IAAP;EACD,CAbD;;;;EAgBA,UAAc,GAAG,eAAA,CAASqxB,EAAT,EAAa;EAAA;;EAC5B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIrjB,IAAI,GAAG,KAAKA,IAAL,CAAUrB,MAAV,CAAiB,UAACtL,CAAD,EAAIrB,CAAJ,EAAU;EACpC,QAAImO,GAAG,GAAG,MAAI,CAAC7B,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAV;;EACA8M,IAAAA,GAAG,CAACyjB,IAAJ,GAAW,IAAX,CAFoC;;EAGpC,WAAOP,EAAE,CAACljB,GAAD,EAAMnO,CAAN,CAAT;EACD,GAJU,CAAX;EAKA,SAAO,KAAKsM,SAAL,CAAe0B,IAAf,CAAP;EACD,CAVD;;;;EAaA,QAAY,GAAG,aAAA,CAASqjB,EAAT,EAAa;EAAA;;EAC1B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIriB,MAAM,GAAG,KAAKhB,IAAL,CAAUiB,IAAV,CAAe,UAAC5N,CAAD,EAAIrB,CAAJ,EAAU;EACpC,QAAImO,GAAG,GAAG,MAAI,CAAC7B,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAV;;EACA8M,IAAAA,GAAG,CAACyjB,IAAJ,GAAW,IAAX,CAFoC;;EAGpC,WAAOP,EAAE,CAACljB,GAAD,EAAMnO,CAAN,CAAT;EACD,GAJY,CAAb;;EAKA,MAAIgP,MAAJ,EAAY;EACV,WAAO,KAAK1C,SAAL,CAAe,CAAC0C,MAAD,CAAf,CAAP;EACD;;EACD,SAAOvJ,SAAP;EACD,CAbD;;;;EAgBA,QAAY,GAAG,aAAA,CAAS4rB,EAAT,EAAa;EAAA;;EAC1B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,SAAO,KAAKrjB,IAAL,CAAU5H,IAAV,CAAe,UAAC/E,CAAD,EAAIrB,CAAJ,EAAU;EAC9B,QAAImO,GAAG,GAAG,MAAI,CAAC7B,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAV;;EACA8M,IAAAA,GAAG,CAACyjB,IAAJ,GAAW,IAAX,CAF8B;;EAG9B,WAAOP,EAAE,CAACljB,GAAD,EAAMnO,CAAN,CAAT;EACD,GAJM,CAAP;EAKD,CATD;;;;EAYA,UAAc,GAAG,eAAA,CAASmB,CAAT,EAAY;EAC3B,MAAI,CAAC,KAAKwC,KAAV,EAAiB;EACf,WAAO,IAAP;EACD;;EACD,MAAIpC,CAAC,GAAGtB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,KAAK6N,IAAL,CAAU5N,MAArC,CAAR;;EACA,MAAIe,CAAC,KAAKsE,SAAV,EAAqB;EACnB,QAAIuI,IAAI,GAAG,CAAC,KAAKA,IAAL,CAAUzM,CAAV,CAAD,CAAX;EACA,WAAO,KAAK+K,SAAL,CAAe0B,IAAf,CAAP;EACD,GAR0B;;;EAU3B,MAAIzM,CAAC,GAAGJ,CAAJ,GAAQ,KAAKf,MAAjB,EAAyB;EACvBmB,IAAAA,CAAC,GAAG,KAAKnB,MAAL,GAAce,CAAlB;EACAI,IAAAA,CAAC,GAAGA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAhB;EACD;;EACD,SAAO,KAAKkO,KAAL,CAAWlO,CAAX,EAAcA,CAAC,GAAGJ,CAAlB,CAAP;EACD,CAfD;;;;;;;;;;;;;;;;;;;;;;EChFA;EACA,MAAM+D,SAAS,GAAG,SAAZA,SAAY,CAAS2D,IAAT,EAAe/I,GAAf,EAAoB;EACpC,QAAIA,GAAG,KAAK,EAAZ,EAAgB;EACd,aAAO,KAAP;EACD;;EACD,WAAO+I,IAAI,CAAC3F,OAAL,KAAiBpD,GAAjB,IAAwB+I,IAAI,CAAC7D,QAAL,KAAkBlF,GAA1C,IAAiD+I,IAAI,CAACjD,IAAL,KAAc9F,GAA/D,IAAsE+I,IAAI,CAAC9I,IAAL,CAAU+C,WAAV,OAA4BhD,GAAzG;EACD,GALD;;;EAQA,MAAMgzB,SAAS,GAAG,SAAZA,SAAY,CAAS1oB,GAAT,EAAc4B,KAAd,EAAqB;EAAA,+BAE5BhM,CAF4B;EAGnC,UAAIkF,SAAS,CAAC8G,KAAK,CAAChM,CAAD,CAAN,EAAWoK,GAAG,CAAC,CAAD,CAAd,CAAb,EAAiC;EAC/B,YAAIA,GAAG,CAACjE,KAAJ,CAAU,UAAC7F,CAAD,EAAIa,CAAJ;EAAA,iBAAU+D,SAAS,CAAC8G,KAAK,CAAChM,CAAC,GAAGmB,CAAL,CAAN,EAAeb,CAAf,CAAT,KAA+B,IAAzC;EAAA,SAAV,CAAJ,EAA8D;EAC5D;EAAA,eAAO0L,KAAK,CAAChM,CAAD,CAAL,CAASqF;EAAhB;EACD;EACF;EAPkC;;;EAErC,SAAK,IAAIrF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EAAA,uBAA9BA,CAA8B;;EAAA;EAMtC;;EACD,WAAO,KAAP;EACD,GAVD;;;;EAaAoE,EAAAA,cAAA,GAAiB,UAASgG,GAAT,EAAc;EAAA;;EAC7B,QAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;EAC3BA,MAAAA,GAAG,GAAG,CAACA,GAAD,CAAN;EACD;;EACD,QAAI2oB,OAAO,GAAG3oB,GAAG,CAACoC,GAAJ,CAAQ,UAAA1M,GAAG,EAAI;EAC3BA,MAAAA,GAAG,GAAGA,GAAG,CAACgD,WAAJ,EAAN;EACA,UAAIqN,KAAK,GAAG6iB,QAAQ,CAAClzB,GAAD,CAApB;EACAqQ,MAAAA,KAAK,GAAGA,KAAK,CAAC3D,GAAN,CAAU,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,OAAX,CAAR;EACA,aAAOoN,KAAP;EACD,KALa,CAAd;EAMA,SAAKpE,KAAL;EACA,QAAIpI,KAAK,GAAG,EAAZ,CAX6B;;EAa7BovB,IAAAA,OAAO,CAAC5wB,OAAR,CAAgB,UAAA7B,CAAC,EAAI;;EAEnB,MAAA,KAAI,CAAC0N,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,YAAIA,CAAC,CAAC0K,KAAF,CAAQoE,KAAR,CAAc7P,CAAC,CAAC,CAAD,CAAf,MAAwB,IAA5B,EAAkC;EAChC;EACD,SAJoB;;;EAMrB,YAAI0L,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACA,YAAI3G,EAAE,GAAGytB,SAAS,CAACxyB,CAAD,EAAI0L,KAAJ,CAAlB;;EACA,YAAI3G,EAAE,KAAK,KAAX,EAAkB;;EAEhB,cAAI2J,MAAM,GAAG3N,CAAC,CAACiL,SAAF,CAAYjH,EAAZ,EAAgB/E,CAAC,CAACF,MAAlB,CAAb;EACAuD,UAAAA,KAAK,CAACyI,IAAN,CAAW4C,MAAX;EACA;EACD;EACF,OAdD;EAeD,KAjBD;EAkBA,WAAO,KAAK1C,SAAL,CAAe3I,KAAf,CAAP;EACD,GAhCD;;EAiCAS,EAAAA,cAAA,GAAiBA,OAAO,CAAC6uB,MAAzB;;;;;ECvDA,IAAM/uB,WAAS,GAAG,SAAZA,SAAY,CAAApE,GAAG,EAAI;EACvB,SAAOA,GAAG,CAACyK,MAAJ,CAAW,CAAX,EAAclG,WAAd,KAA8BvE,GAAG,CAAC0K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;;;;EAKA,eAAmB,GAAG,oBAAA,CAASvH,OAAT,EAAgC;EAAA;;EAAA,MAAdwE,OAAc,uEAAJ,EAAI;;EACpD,MAAI,CAACxE,OAAL,EAAc;EACZ,WAAO,gBAAP;EACD,GAHmD;;;EAKpD,MAAIwE,OAAO,KAAK,IAAhB,EAAsB;EACpBA,IAAAA,OAAO,GAAG;EAAEyrB,MAAAA,QAAQ,EAAE;EAAZ,KAAV;EACD;;EACD,MAAIzrB,OAAO,KAAK,KAAhB,EAAuB;EACrBA,IAAAA,OAAO,GAAG;EAAEyrB,MAAAA,QAAQ,EAAE;EAAZ,KAAV;EACD;;EACDzrB,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAXoD;;EAcpD,OAAK0rB,OAAL,GAdoD;;EAgBpD,OAAKnlB,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,QAAIqR,KAAK,GAAGzP,OAAZ,CADqB;;EAGrB,QAAI,OAAOA,OAAP,KAAmB,UAAvB,EAAmC;EACjCyP,MAAAA,KAAK,GAAGzP,OAAO,CAAC5B,CAAD,CAAf;EACD;;EACD,QAAI+xB,UAAJ,CANqB;;EAQrB,QAAI1gB,KAAK,IAAI,QAAOA,KAAP,MAAiB,QAA1B,IAAsCA,KAAK,CAACzJ,GAAN,KAAc,KAAxD,EAA+D;EAC7DmqB,MAAAA,UAAU,GAAG1gB,KAAK,CAAC1E,IAAnB;;EACA,MAAA,KAAI,CAAC/B,IAAL,GAAYonB,KAAZ,CAAkB3gB,KAAK,CAACzG,IAAN,EAAlB;EACD,KAHD,MAGO,IAAI,OAAOyG,KAAP,KAAiB,QAArB,EAA+B;;EAEpC,UAAIjL,OAAO,CAAC6rB,QAAR,KAAqB,KAArB,IAA8BjyB,CAAC,CAAC2K,KAAF,CAAQ,CAAR,EAAW1H,WAAX,EAAlC,EAA4D;EAC1DoO,QAAAA,KAAK,GAAGxO,WAAS,CAACwO,KAAD,CAAjB;EACD;;EACD0gB,MAAAA,UAAU,GAAGJ,YAAQ,CAACrd,QAAT,CAAkBjD,KAAlB,EAAyB,KAAI,CAAClM,KAA9B,EAAqC,KAAI,CAACyF,IAAL,EAArC,CAAb,CALoC;;EAOpC,UAAIsnB,MAAM,GAAG,KAAI,CAACjnB,SAAL,CAAe8mB,UAAf,CAAb;;EACAG,MAAAA,MAAM,CAACC,MAAP;EACD,KATM,MASA;EACL,aADK;EAEN,KAtBoB;;;EAyBrB,QAAI/rB,OAAO,CAACyrB,QAAR,KAAqB,IAAzB,EAA+B;EAC7B,UAAIO,OAAO,GAAGpyB,CAAC,CAACsO,IAAF,CAAO;EAAE3D,QAAAA,KAAK,EAAE;EAAElG,UAAAA,IAAI,EAAE;EAAR;EAAT,OAAP,EAAkCkG,KAAhD;EACAonB,MAAAA,UAAU,CAAC,CAAD,CAAV,CAAcpnB,KAAd,GAAsB7J,OAAtB,CAA8B,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtC,YAAIyzB,OAAO,CAACzzB,CAAD,CAAX,EAAgB;EACdyB,UAAAA,CAAC,CAACiyB,OAAF,CAAUD,OAAO,CAACzzB,CAAD,CAAP,CAAW8F,IAArB,EAA2B,SAA3B,EAAsC,KAAI,CAACU,KAA3C;EACD;EACF,OAJD;EAKD;;EACDnF,IAAAA,CAAC,CAAC4B,OAAF,CAAUmwB,UAAU,CAAC,CAAD,CAApB,EAAyB,KAAzB,EAjCqB;EAkCtB,GAlCD;EAmCA,SAAO,IAAP;EACD,CApDD;;;;EAuDA,aAAe,GAAG,iBAAS/lB,KAAT,EAAgBpK,QAAhB,EAAyBwE,OAAzB,EAAkC;;EAElD,MAAIxE,QAAO,KAAKwC,SAAhB,EAA2B;EACzB,WAAO,KAAKkuB,WAAL,CAAiBtmB,KAAjB,EAAwB5F,OAAxB,CAAP;EACD;;EACD,OAAK4F,KAAL,CAAWA,KAAX,EAAkBsmB,WAAlB,CAA8B1wB,QAA9B,EAAuCwE,OAAvC;EACA,SAAO,IAAP;EACD,CAPD;;;;;;;;EC5DA;EACArD,EAAAA,cAAA,GAAiB,UAAStE,GAAT,EAAc;EAAA;;EAC7B,QAAI,CAACA,GAAL,EAAU;EACR,aAAO,IAAP;EACD,KAH4B;;;EAK7B,SAAKqzB,OAAL,GAL6B;;EAO7B,SAAKnlB,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,UAAI2N,MAAM,GAAGgkB,YAAQ,CAACrd,QAAT,CAAkB7V,GAAlB,EAAuB,KAAI,CAAC0G,KAA5B,EAAmC,KAAI,CAACyF,IAAL,EAAnC,EAAgD,CAAhD,CAAb,CAFqB;;;EAIrB,UAAIsnB,MAAM,GAAG,KAAI,CAACjnB,SAAL,CAAe,CAAC0C,MAAD,CAAf,CAAb;;EACAukB,MAAAA,MAAM,CAACC,MAAP,GALqB;;EAOrBnyB,MAAAA,CAAC,CAAC+N,MAAF,CAASJ,MAAT,EAAiB,KAAjB;EACD,KARD;EASA,WAAO,IAAP;EACD,GAjBD;;EAkBA5K,EAAAA,mBAAA,GAAsBA,OAAO,CAACgL,MAA9B;EACAhL,EAAAA,gBAAA,GAAmBA,OAAO,CAACgL,MAA3B;;;EAGAhL,EAAAA,eAAA,GAAkB,UAAStE,GAAT,EAAc;EAAA;;EAC9B,QAAI,CAACA,GAAL,EAAU;EACR,aAAO,IAAP;EACD,KAH6B;;;EAK9B,SAAKqzB,OAAL,GAL8B;;EAO9B,SAAKnlB,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,UAAI2N,MAAM,GAAGgkB,YAAQ,CAACrd,QAAT,CAAkB7V,GAAlB,EAAuB,MAAI,CAAC0G,KAA5B,EAAmC,MAAI,CAACyF,IAAL,EAAnC,EAAgD,CAAhD,CAAb,CAFqB;;;EAIrB,UAAIsnB,MAAM,GAAG,MAAI,CAACjnB,SAAL,CAAe,CAAC0C,MAAD,CAAf,CAAb;;EACAukB,MAAAA,MAAM,CAACC,MAAP,GALqB;;EAOrBnyB,MAAAA,CAAC,CAACgO,OAAF,CAAUL,MAAV,EAAkB,MAAlB;EACD,KARD;EASA,WAAO,IAAP;EACD,GAjBD;;EAkBA5K,EAAAA,oBAAA,GAAuBA,OAAO,CAACiL,OAA/B;;;EAGAjL,EAAAA,cAAA,GAAiB,YAAW;;EAE1B,SAAK+uB,OAAL;EACA,QAAInlB,IAAI,GAAG,KAAKA,IAAL,CAAUyB,KAAV,CAAgB,CAAhB,CAAX,CAH0B;;EAK1B,SAAK,IAAIzP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4zB,SAAS,CAACxzB,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAI6zB,GAAG,GAAGD,SAAS,CAAC5zB,CAAD,CAAnB,CADyC;;EAGzC,UAAI,OAAO6zB,GAAP,KAAe,QAAnB,EAA6B;EAC3B,YAAIzpB,GAAG,GAAG4oB,YAAQ,CAACrd,QAAT,CAAkBke,GAAlB,EAAuB,KAAKrtB,KAA5B,CAAV,CAD2B;;EAG3BwH,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYnE,GAAZ,CAAP;EACD,OAJD,MAIO,IAAIypB,GAAG,CAAC5qB,GAAJ,KAAY,KAAhB,EAAuB;EAC5B+E,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYslB,GAAG,CAAC7lB,IAAhB,CAAP;EACD,OAFM,MAEA,IAAI6lB,GAAG,CAAC5qB,GAAJ,KAAY,QAAhB,EAA0B;EAC/B+E,QAAAA,IAAI,CAAC5B,IAAL,CAAUynB,GAAV;EACD;EACF;;EACD,WAAO,KAAKvnB,SAAL,CAAe0B,IAAf,CAAP;EACD,GAnBD;;;;EAsBA5J,EAAAA,iBAAA,GAAiB,UAASiJ,KAAT,EAAgB;EAAA;;;EAE/B,SAAK8lB,OAAL;EACA,QAAIW,QAAQ,GAAG,IAAf;;EACA,QAAIzmB,KAAJ,EAAW;EACTymB,MAAAA,QAAQ,GAAG,KAAKzmB,KAAL,CAAWA,KAAX,CAAX;EACD;;EACDymB,IAAAA,QAAQ,CAAC9lB,IAAT,CAAc7L,OAAd,CAAsB,UAAA6M,MAAM;EAAA,aAAIA,MAAM,UAAN,CAAc,MAAd,CAAJ;EAAA,KAA5B;EACA,WAAO,IAAP;EACD,GATD;;;EAWA5K,EAAAA,cAAA,GAAiBA,OAAO,UAAxB;;;;;;;;;;EC/EA,IAAM2vB,UAAU,GAAG;EACjBlxB,EAAAA,KAAK,EAAE,IADU;EAEjBK,EAAAA,OAAO,EAAE,IAFQ;EAGjB0C,EAAAA,IAAI,EAAE;EAHW,CAAnB;;;EAOA,UAAY,GAAG,aAAA,CAAS6B,OAAT,EAAkB;EAAA;;EAC/BA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAD+B;;EAG/B,MAAIusB,QAAQ,GAAG,KAAf;;EACA,MAAI,KAAKxlB,OAAL,GAAepO,MAAf,KAA0B,CAA9B,EAAiC;EAC/B4zB,IAAAA,QAAQ,GAAG,IAAX;EACD,GAN8B;;;EAQ/B,MAAIvsB,OAAO,KAAK,MAAZ,IAAuB,QAAOA,OAAP,MAAmB,QAAnB,IAA+BA,OAAO,CAAC7B,IAAlE,EAAyE;EACvE,SAAKoI,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,MAAAA,CAAC,CAAC2K,KAAF,GAAU7J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB,YAAIA,CAAC,CAACmE,IAAF,KAAW,IAAf,EAAqB;EACnBnE,UAAAA,CAAC,CAACuwB,OAAF,CAAU,KAAI,CAACxrB,KAAf;EACD;EACF,OAJD;EAKD,KAND;EAOD;;EAED,MAAIwG,GAAG,GAAG,KAAKgB,IAAL,CAAUjK,MAAV,CAAiB,UAACjE,GAAD,EAAMuB,CAAN,EAASrB,CAAT,EAAe;EACxC,QAAMi0B,OAAO,GAAG,CAACD,QAAD,IAAah0B,CAAC,KAAK,CAAnC;EACA,QAAMk0B,QAAQ,GAAG,CAACF,QAAD,IAAah0B,CAAC,KAAK,KAAI,CAACgO,IAAL,CAAU5N,MAAV,GAAmB,CAAvD;EACA,WAAON,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO0H,OAAP,EAAgBwsB,OAAhB,EAAyBC,QAAzB,CAAb;EACD,GAJS,EAIP,EAJO,CAAV,CAlB+B;;EAyB/B,MAAIH,UAAU,CAACtsB,OAAD,CAAV,KAAwB,IAAxB,IAAgCA,OAAO,CAACvE,OAAR,KAAoB,IAApD,IAA4DuE,OAAO,CAAC5E,KAAR,KAAkB,IAA9E,IAAsF4E,OAAO,CAAC7B,IAAR,KAAiB,IAA3G,EAAiH;EAC/GoH,IAAAA,GAAG,GAAGA,GAAG,CAACjK,IAAJ,EAAN;EACD;;EACD,SAAOiK,GAAP;EACD,CA7BD;;;;;;;ECPA,MAAMmnB,YAAY,GAAG;EAAEp0B,IAAAA,IAAI,EAAE,IAAR;EAAciM,IAAAA,KAAK,EAAE,IAArB;EAA2BjJ,IAAAA,IAAI,EAAE;EAAjC,GAArB;;EAGA,MAAMqxB,WAAW,GAAG,SAAdA,WAAc,CAASjmB,GAAT,EAAc;EAChC,QAAIkmB,OAAO,GAAG,CAAd;EACA,QAAIjvB,KAAK,GAAG,CAAZ;EACA,QAAIkvB,OAAO,GAAG,EAAd;EACAnmB,IAAAA,GAAG,CAAComB,QAAJ,GAAepyB,OAAf,CAAuB,UAAA0G,IAAI,EAAI;EAC7ByrB,MAAAA,OAAO,CAACzrB,IAAI,CAACxD,EAAN,CAAP,GAAmB;EACjBD,QAAAA,KAAK,EAAEA,KADU;EAEjBG,QAAAA,KAAK,EAAE8uB,OAAO,GAAGxrB,IAAI,CAACpF,GAAL,CAASrD,MAFT;EAGjBA,QAAAA,MAAM,EAAEyI,IAAI,CAAC9I,IAAL,CAAUK;EAHD,OAAnB;EAKAi0B,MAAAA,OAAO,IAAIxrB,IAAI,CAACpF,GAAL,CAASrD,MAAT,GAAkByI,IAAI,CAAC9I,IAAL,CAAUK,MAA5B,GAAqCyI,IAAI,CAACnF,IAAL,CAAUtD,MAA1D;EACAgF,MAAAA,KAAK,IAAI,CAAT;EACD,KARD;EASA,WAAOkvB,OAAP;EACD,GAdD;;;;EAiBAlwB,EAAAA,YAAA,GAAe,YAAuB;EAAA;;EAAA,QAAdqD,OAAc,uEAAJ,EAAI;;;EAEpC,QAAI,OAAOA,OAAP,KAAmB,QAAnB,IAA+B,KAAKuG,IAAL,CAAUvG,OAAV,CAAnC,EAAuD;EACrD,aAAO,KAAKuG,IAAL,CAAUvG,OAAV,EAAmBkI,IAAnB,CAAwBwkB,YAAxB,CAAP;EACD;;EACD1sB,IAAAA,OAAO,GAAGxF,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkB8qB,YAAlB,EAAgC1sB,OAAhC,CAAV,CALoC;;EAQpC,QAAIA,OAAO,KAAK,MAAZ,IAAuB,QAAOA,OAAP,MAAmB,QAAnB,IAA+BA,OAAO,CAAC7B,IAAlE,EAAyE;EACvE,WAAKoI,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,QAAAA,CAAC,CAAC2K,KAAF,GAAU7J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB,cAAIA,CAAC,CAACmE,IAAF,KAAW,IAAf,EAAqB;EACnBnE,YAAAA,CAAC,CAACuwB,OAAF,CAAU,KAAI,CAACxrB,KAAf;EACD;EACF,SAJD;EAKD,OAND;EAOD;;EAED,QAAIiB,OAAO,CAACsG,MAAZ,EAAoB;EAClBtG,MAAAA,OAAO,CAACvE,OAAR,GAAkB,IAAlB;EACD;;EACD,QAAIuE,OAAO,CAAC0B,MAAZ,EAAoB;EAClB1B,MAAAA,OAAO,CAACuE,KAAR,GAAgBvE,OAAO,CAACuE,KAAR,KAAkB,IAAlB,GAAyB,EAAzB,GAA8BvE,OAAO,CAACuE,KAAtD;EACAvE,MAAAA,OAAO,CAACuE,KAAR,CAAc7C,MAAd,GAAuB,IAAvB;EACD;;EACD,QAAI1B,OAAO,CAACrC,KAAR,IAAiBqC,OAAO,CAACuE,KAAR,CAAc5G,KAAnC,EAA0C;EACxCqC,MAAAA,OAAO,CAACuE,KAAR,GAAgBvE,OAAO,CAACuE,KAAR,KAAkB,IAAlB,GAAyB,EAAzB,GAA8BvE,OAAO,CAACuE,KAAtD;EACAvE,MAAAA,OAAO,CAACuE,KAAR,CAAc3G,EAAd,GAAmB,IAAnB;EACD;;EACD,QAAIgB,MAAM,GAAG,KAAK2H,IAAL,CAAUxB,GAAV,CAAc,UAAAnL,CAAC,EAAI;EAC9B,aAAOA,CAAC,CAACsO,IAAF,CAAOlI,OAAP,EAAgB,KAAI,CAACjB,KAArB,CAAP;EACD,KAFY,CAAb,CA7BoC;;EAiCpC,QAAIiB,OAAO,CAACuE,KAAR,CAAc7C,MAAd,IAAwB1B,OAAO,CAAC0B,MAAhC,IAA0C1B,OAAO,CAACuE,KAAR,CAAc5G,KAAxD,IAAiEqC,OAAO,CAACrC,KAA7E,EAAoF;;EAElF,UAAIkvB,OAAO,GAAGF,WAAW,CAAC,KAAKtkB,GAAL,EAAD,CAAzB,CAFkF;;EAIlF,UAAIrI,OAAO,CAACuE,KAAR,CAAc5G,KAAd,IAAuBqC,OAAO,CAACrC,KAAnC,EAA0C;EACxCiB,QAAAA,MAAM,CAAClE,OAAP,CAAe,UAAAf,CAAC,EAAI;EAClBA,UAAAA,CAAC,CAAC4K,KAAF,CAAQ7J,OAAR,CAAgB,UAAAV,CAAC,EAAI;EACnBA,YAAAA,CAAC,CAAC2D,KAAF,GAAUkvB,OAAO,CAAC7yB,CAAC,CAAC4D,EAAH,CAAP,CAAcD,KAAxB;EACD,WAFD;EAGAhE,UAAAA,CAAC,CAACgE,KAAF,GAAUhE,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAW5G,KAArB;EACD,SALD;EAMD,OAXiF;;;EAalF,UAAIqC,OAAO,CAACuE,KAAR,CAAc7C,MAAd,IAAwB1B,OAAO,CAAC0B,MAApC,EAA4C;EAC1C9C,QAAAA,MAAM,CAAClE,OAAP,CAAe,UAAAf,CAAC,EAAI;EAClBA,UAAAA,CAAC,CAAC4K,KAAF,CAAQ7J,OAAR,CAAgB,UAAAV,CAAC,EAAI;EACnBA,YAAAA,CAAC,CAAC0H,MAAF,GAAWmrB,OAAO,CAAC7yB,CAAC,CAAC4D,EAAH,CAAP,IAAiB,EAA5B;EACD,WAFD;EAGA,cAAIqV,GAAG,GAAGtZ,CAAC,CAAC4K,KAAF,CAAQjI,MAAR,CAAe,UAAC5C,CAAD,EAAIM,CAAJ,EAAU;EACjCN,YAAAA,CAAC,IAAIM,CAAC,CAAC0H,MAAF,CAAS/I,MAAT,IAAmB,CAAxB;EACA,mBAAOe,CAAP;EACD,WAHS,EAGP,CAHO,CAAV;EAIAC,UAAAA,CAAC,CAAC+H,MAAF,GAAW/H,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAW7C,MAAtB;EACA/H,UAAAA,CAAC,CAAC+H,MAAF,CAAS/I,MAAT,GAAkBsa,GAAlB;EACD,SAVD;EAWD;EACF,KA3DmC;;;EA6DpC,QAAIjT,OAAO,CAAC+sB,SAAR,IAAqB/sB,OAAO,CAACgtB,IAA7B,IAAqChtB,OAAO,CAAC6I,KAAjD,EAAwD;EACtD,UAAI7E,GAAG,GAAG,EAAV;EACA,WAAKuC,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,YAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO,SAAP,CAAV;EACA0L,QAAAA,GAAG,CAAC3L,GAAD,CAAH,GAAW2L,GAAG,CAAC3L,GAAD,CAAH,IAAY,CAAvB;EACA2L,QAAAA,GAAG,CAAC3L,GAAD,CAAH,IAAY,CAAZ;EACD,OAJD;EAKA,WAAKkO,IAAL,CAAU7L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1BqG,QAAAA,MAAM,CAACrG,CAAD,CAAN,CAAUsQ,KAAV,GAAkB7E,GAAG,CAACpK,CAAC,CAACtB,IAAF,CAAO,SAAP,CAAD,CAArB;EACD,OAFD;EAGD,KAvEmC;;;EAyEpC,QAAI0H,OAAO,CAACsG,MAAZ,EAAoB;EAClB,UAAI2mB,OAAO,GAAG,EAAd;EACAruB,MAAAA,MAAM,GAAGA,MAAM,CAACsG,MAAP,CAAc,UAAAvL,CAAC,EAAI;EAC1B,YAAIszB,OAAO,CAACtzB,CAAC,CAAC8B,OAAH,CAAP,KAAuB,IAA3B,EAAiC;EAC/B,iBAAO,KAAP;EACD;;EACDwxB,QAAAA,OAAO,CAACtzB,CAAC,CAAC8B,OAAH,CAAP,GAAqB,IAArB;EACA,eAAO,IAAP;EACD,OANQ,CAAT;EAOD;;EACD,WAAOmD,MAAP;EACD,GApFD;;;EAuFAjC,EAAAA,YAAA,GAAeA,OAAO,CAACuL,IAAvB;;;;;;ECzGA;EACA,MAAMglB,KAAK,GAAG,SAAd;;EAEA,MAAM7qB,MAAM,GAAG,SAATA,MAAS,CAAShK,GAAT,EAAciK,KAAd,EAAqB;EAClCjK,IAAAA,GAAG,GAAGA,GAAG,CAACkK,QAAJ,EAAN;;EACA,WAAOlK,GAAG,CAACM,MAAJ,GAAa2J,KAApB,EAA2B;EACzBjK,MAAAA,GAAG,IAAI,GAAP;EACD;;EACD,WAAOA,GAAP;EACD,GAND;;EAQA,WAAS6J,YAAT,GAAwB;EACtB,WAAO,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,QAA/C;EACD;;;EAGD,MAAM+qB,GAAG,GAAG;EACVzF,IAAAA,KAAK,EAAE,SADG;EAEVE,IAAAA,GAAG,EAAE,SAFK;EAGVwF,IAAAA,IAAI,EAAE,SAHI;EAIVC,IAAAA,OAAO,EAAE,SAJC;EAKVC,IAAAA,IAAI,EAAE,SALI;EAMV3F,IAAAA,MAAM,EAAE,SANE;EAOV4F,IAAAA,KAAK,EAAE;EAPG,GAAZ;;EAUA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAS9mB,GAAT,EAAc;EAClCA,IAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB6I,MAAAA,OAAO,CAACC,GAAR,CAAY,UAAU9I,CAAC,CAACtB,IAAF,EAAV,GAAqB,GAAjC,EAAsC,iBAAtC;EACA,UAAIiM,KAAK,GAAG3K,CAAC,CAAC0K,KAAF,CAAQC,KAAR,IAAiB3K,CAAC,CAAC2K,KAAF,EAA7B;EACAA,MAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAIqE,MAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAAX;EACA,YAAI/F,IAAI,GAAG0B,CAAC,CAAC1B,IAAF,IAAU,GAArB;;EACA,YAAI0B,CAAC,CAACuD,QAAN,EAAgB;EACdjF,UAAAA,IAAI,GAAG,MAAM0B,CAAC,CAACuD,QAAR,GAAmB,GAA1B;EACD;;EACD,YAAIhB,IAAI,GAAG,MAAMjE,IAAN,GAAa,GAAxB;EACAiE,QAAAA,IAAI,GAAG8F,MAAM,CAAC9F,IAAD,EAAO,CAAP,CAAb;EACA,YAAIL,KAAK,GAAGmC,MAAI,CAACmJ,IAAL,CAAU,UAAApJ,GAAG;EAAA,iBAAI6E,IAAM,CAAC7E,GAAD,CAAN,IAAe6E,IAAM,CAAC7E,GAAD,CAAN,CAAY2U,KAA/B;EAAA,SAAb,CAAZ;EACA,YAAIA,KAAK,GAAG,WAAZ;;EACA,YAAI9P,IAAM,CAAC/G,KAAD,CAAV,EAAmB;EACjB6W,UAAAA,KAAK,GAAG9P,IAAM,CAAC/G,KAAD,CAAN,CAAc6W,KAAtB;EACAA,UAAAA,KAAK,GAAGoa,GAAG,CAACpa,KAAD,CAAX;EACD;;EACDtQ,QAAAA,OAAO,CAACC,GAAR,cAAkBnG,IAAlB,oBAAgC8B,MAAI,CAACzD,IAAL,CAAU,IAAV,CAAhC,oBAA6DmY,KAAK,IAAI,WAAtE;EACD,OAfD;EAgBD,KAnBD;EAoBD,GArBD;;;EAwBA,MAAM0a,GAAG,GAAG;EACV/F,IAAAA,KAAK,EAAE,eAASrvB,GAAT,EAAc;EACnB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD,KAHS;EAIVtF,IAAAA,GAAG,EAAE,aAASvvB,GAAT,EAAc;EACjB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD,KANS;EAOVE,IAAAA,IAAI,EAAE,cAAS/0B,GAAT,EAAc;EAClB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD,KATS;EAUVG,IAAAA,OAAO,EAAE,iBAASh1B,GAAT,EAAc;EACrB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD,KAZS;EAaVI,IAAAA,IAAI,EAAE,cAASj1B,GAAT,EAAc;EAClB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD,KAfS;EAgBVvF,IAAAA,MAAM,EAAE,gBAAStvB,GAAT,EAAc;EACpB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD,KAlBS;EAmBVK,IAAAA,KAAK,EAAE,eAASl1B,GAAT,EAAc;EACnB,aAAO,aAAaA,GAAb,GAAmB60B,KAA1B;EACD;EArBS,GAAZ;;EAwBA,MAAMQ,SAAS,GAAG,SAAZA,SAAY,CAASrvB,MAAT,EAAe;EAC/BA,IAAAA,MAAI,GAAGA,MAAI,CAAC0G,GAAL,CAAS,UAAA3G,GAAG,EAAI;EACrB,UAAI,CAAC6E,IAAM,CAAChF,cAAP,CAAsBG,GAAtB,CAAL,EAAiC;EAC/B,eAAOA,GAAP;EACD;;EACD,UAAMrF,CAAC,GAAGkK,IAAM,CAAC7E,GAAD,CAAN,CAAY2U,KAAZ,IAAqB,MAA/B;EACA,aAAO0a,GAAG,CAAC10B,CAAD,CAAH,CAAOqF,GAAP,CAAP;EACD,KANM,CAAP;EAOA,WAAOC,MAAI,CAACzD,IAAL,CAAU,IAAV,CAAP;EACD,GATD;;;EAYA,MAAM+yB,KAAK,GAAG,SAARA,KAAQ,CAASjnB,GAAT,EAAc;EAC1B,QAAIxE,YAAY,EAAhB,EAAoB;EAClBsrB,MAAAA,aAAa,CAAC9mB,GAAD,CAAb;EACA,aAAOA,GAAP;EACD;;EACDjE,IAAAA,OAAO,CAACC,GAAR,CAAY+qB,GAAG,CAACL,IAAJ,CAAS,OAAT,CAAZ;EACA1mB,IAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB6I,MAAAA,OAAO,CAACC,GAAR,CAAY+qB,GAAG,CAACL,IAAJ,CAAS,SAAT,CAAZ;EACA,UAAI7oB,KAAK,GAAG3K,CAAC,CAAC0K,KAAF,CAAQC,KAAR,IAAiB3K,CAAC,CAAC2K,KAAF,EAA7B;EACAA,MAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAIqE,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAAX;EACA,YAAI/F,IAAI,GAAG0B,CAAC,CAAC1B,IAAF,IAAU,GAArB;;EACA,YAAI0B,CAAC,CAACuD,QAAN,EAAgB;EACdjF,UAAAA,IAAI,GAAG,MAAM0B,CAAC,CAACuD,QAAR,GAAmB,GAA1B;EACD;;EACD,QAAiC;EAC/BjF,UAAAA,IAAI,GAAGm1B,GAAG,CAAC9F,MAAJ,CAAWrvB,IAAX,CAAP;EACD;;EACD,YAAIiE,IAAI,GAAG,MAAMjE,IAAN,GAAa,GAAxB;EACAiE,QAAAA,IAAI,GAAG8F,MAAM,CAAC9F,IAAD,EAAO,EAAP,CAAb;EACA,YAAIlE,GAAG,GAAGo1B,GAAG,CAACL,IAAJ,CAAS,MAAT,IAAmB7wB,IAAnB,GAA0B,MAA1B,GAAmCmxB,SAAS,CAACrvB,IAAD,CAAtD;EACAoE,QAAAA,OAAO,CAACC,GAAR,CAAYrK,GAAZ;EACD,OAbD;EAcD,KAjBD;EAkBAoK,IAAAA,OAAO,CAACC,GAAR,CAAY,EAAZ;EACA,WAAOgE,GAAP;EACD,GA1BD;;EA2BAknB,EAAAA,cAAA,GAAiBD,KAAjB;;;ECnHA,IAAME,IAAI,GAAG,SAAPA,IAAO,CAASnnB,GAAT,EAAc;EACzB,MAAIH,IAAI,GAAGG,GAAG,CAACwB,IAAJ,CAAS;EAAE5P,IAAAA,IAAI,EAAE,KAAR;EAAeiM,IAAAA,KAAK,EAAE,KAAtB;EAA6B9I,IAAAA,OAAO,EAAE;EAAtC,GAAT,CAAX,CADyB;;EAGzB,MAAIuI,GAAG,GAAG,EAAV;EACAuC,EAAAA,IAAI,CAAC7L,OAAL,CAAa,UAAAf,CAAC,EAAI;EAChB,QAAI,CAACqK,GAAG,CAACrK,CAAC,CAAC8B,OAAH,CAAR,EAAqB;EACnB9B,MAAAA,CAAC,CAACkP,KAAF,GAAU,CAAV;EACA7E,MAAAA,GAAG,CAACrK,CAAC,CAAC8B,OAAH,CAAH,GAAiB9B,CAAjB;EACD;;EACDqK,IAAAA,GAAG,CAACrK,CAAC,CAAC8B,OAAH,CAAH,CAAeoN,KAAf,IAAwB,CAAxB;EACD,GAND;EAOA,MAAIlG,GAAG,GAAGnI,MAAM,CAACC,IAAP,CAAYuJ,GAAZ,EAAiBe,GAAjB,CAAqB,UAAAxL,CAAC;EAAA,WAAIyK,GAAG,CAACzK,CAAD,CAAP;EAAA,GAAtB,CAAV,CAXyB;;EAazBoJ,EAAAA,GAAG,CAACrB,IAAJ,CAAS,UAACzI,CAAD,EAAIC,CAAJ,EAAU;EACjB,QAAID,CAAC,CAACgQ,KAAF,GAAU/P,CAAC,CAAC+P,KAAhB,EAAuB;EACrB,aAAO,CAAC,CAAR;EACD,KAFD,MAEO,IAAIhQ,CAAC,CAACgQ,KAAF,GAAU/P,CAAC,CAAC+P,KAAhB,EAAuB;EAC5B,aAAO,CAAP;EACD;;EACD,WAAO,CAAP;EACD,GAPD;EAQA,SAAOlG,GAAP;EACD,CAtBD;;EAuBA,SAAc,GAAGkrB,IAAjB;;ECpBA;;EACA,WAAa,GAAG,gBAAA,GAAW;EACzBF,EAAAA,MAAK,CAAC,IAAD,CAAL;EACA,SAAO,IAAP;EACD,CAHD;;;;EAMA,OAAW,GAAG,YAAA,CAASrvB,MAAT,EAAiB;EAC7B,MAAIA,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAKhG,IAAL,EAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,QAAf,EAAyB;EACvB,WAAO,KAAKhG,IAAL,CAAU,QAAV,CAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAK4J,IAAL,EAAP;EACD;;EACD,MAAI5J,MAAM,KAAK,QAAX,IAAuBA,MAAM,KAAK,SAAtC,EAAiD;EAC/C,WAAO,KAAK4J,IAAL,CAAU;EAAExG,MAAAA,MAAM,EAAE;EAAV,KAAV,CAAP;EACD;;EACD,MAAIpD,MAAM,KAAK,OAAf,EAAwB;EACtB,WAAO,KAAK4J,IAAL,CAAU;EAAE3D,MAAAA,KAAK,EAAE;EAAT,KAAV,EAA4BQ,GAA5B,CAAgC,UAAAf,GAAG;EAAA,aAAIA,GAAG,CAAC1L,IAAR;EAAA,KAAnC,CAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,WAApC,EAAiD;EAC/C,WAAOuvB,KAAI,CAAC,IAAD,CAAX;EACD;;EACD,MAAIvvB,MAAM,KAAK,OAAf,EAAwB;EACtB,QAAIiI,IAAI,GAAG,EAAX;EACA,SAAK2B,IAAL,CAAU;EAAE5P,MAAAA,IAAI,EAAE,KAAR;EAAeiM,MAAAA,KAAK,EAAE;EAAEjM,QAAAA,IAAI,EAAE;EAAR;EAAtB,KAAV,EAAkDoC,OAAlD,CAA0D,UAAAsJ,GAAG,EAAI;EAC/D,UAAIO,KAAK,GAAGP,GAAG,CAACO,KAAJ,CAAUQ,GAAV,CAAc,UAAA/K,CAAC;EAAA,eAAIA,CAAC,CAAC1B,IAAN;EAAA,OAAf,CAAZ;EACAiM,MAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CAAa,UAAAlL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACAuM,MAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYvC,KAAZ,CAAP;EACD,KAJD;EAKA,WAAOgC,IAAP;EACD;;EACD,MAAIjI,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAKiI,IAAL,CAAUxB,GAAV,CAAc,UAAAnL,CAAC,EAAI;EACxB,aAAOA,CAAC,CAAC2K,KAAF,GAAUjI,MAAV,CAAiB,UAAClD,CAAD,EAAIY,CAAJ,EAAU;EAChCZ,QAAAA,CAAC,CAACY,CAAC,CAACoB,KAAF,IAAWpB,CAAC,CAACuD,QAAd,CAAD,GAA2B/C,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAA3B;EACA,eAAOjF,CAAP;EACD,OAHM,EAGJ,EAHI,CAAP;EAID,KALM,CAAP;EAMD;;EACD,MAAIkF,MAAM,KAAK,OAAf,EAAwB;EACtBqvB,IAAAA,MAAK,CAAC,IAAD,CAAL;EACA,WAAO,IAAP;EACD;;EACD,SAAO,KAAKr1B,IAAL,EAAP;EACD,CAzCD;;;;;;;ECVA;EACA,IAAMu1B,MAAI,GAAG,SAAPA,IAAO,CAAStnB,IAAT,EAAe;EAC1B,MAAIunB,MAAM,GAAG,EAAb;EACAvnB,EAAAA,IAAI,CAAC7L,OAAL,CAAa,UAAA7B,CAAC,EAAI;EAChBi1B,IAAAA,MAAM,CAACj1B,CAAD,CAAN,GAAYi1B,MAAM,CAACj1B,CAAD,CAAN,IAAa,CAAzB;EACAi1B,IAAAA,MAAM,CAACj1B,CAAD,CAAN,IAAa,CAAb;EACD,GAHD;EAIA,MAAI8J,GAAG,GAAGnI,MAAM,CAACC,IAAP,CAAYqzB,MAAZ,CAAV;EACAnrB,EAAAA,GAAG,GAAGA,GAAG,CAACrB,IAAJ,CAAS,UAACzI,CAAD,EAAIC,CAAJ,EAAU;EACvB,QAAIg1B,MAAM,CAACj1B,CAAD,CAAN,GAAYi1B,MAAM,CAACh1B,CAAD,CAAtB,EAA2B;EACzB,aAAO,CAAC,CAAR;EACD,KAFD,MAEO;EACL,aAAO,CAAP;EACD;EACF,GANK,CAAN,CAP0B;;EAe1B,SAAO6J,GAAG,CAACoC,GAAJ,CAAQ,UAAAlM,CAAC;EAAA,WAAI,CAACA,CAAD,EAAIi1B,MAAM,CAACj1B,CAAD,CAAV,CAAJ;EAAA,GAAT,CAAP;EACD,CAhBD;;;EAmBA,IAAMk1B,UAAU,GAAG,SAAbA,UAAa,CAAS1vB,IAAT,EAAeU,KAAf,EAAsB;EACvC,MAAIkE,MAAM,GAAGlE,KAAK,CAACV,IAAnB;EACA,MAAI2vB,OAAO,GAAG,EAAd;EACA3vB,EAAAA,IAAI,CAAC3D,OAAL,CAAa,UAAA0D,GAAG,EAAI;EAClB,QAAI6E,MAAM,CAAC7E,GAAD,CAAN,IAAe6E,MAAM,CAAC7E,GAAD,CAAN,CAAYoD,GAA/B,EAAoC;EAClCwsB,MAAAA,OAAO,GAAGA,OAAO,CAAClnB,MAAR,CAAe7D,MAAM,CAAC7E,GAAD,CAAN,CAAYoD,GAA3B,CAAV;EACD;EACF,GAJD;EAKAwsB,EAAAA,OAAO,GAAGA,OAAO,CAAC1xB,MAAR,CAAe,UAAClD,CAAD,EAAIgF,GAAJ,EAAY;EACnChF,IAAAA,CAAC,CAACgF,GAAD,CAAD,GAAS,IAAT;EACA,WAAOhF,CAAP;EACD,GAHS,EAGP,EAHO,CAAV;EAIAiF,EAAAA,IAAI,GAAGA,IAAI,CAAC6G,MAAL,CAAY,UAAA9G,GAAG;EAAA,WAAI,CAAC4vB,OAAO,CAAC5vB,GAAD,CAAZ;EAAA,GAAf,CAAP,CAZuC;;EAcvC,SAAOC,IAAP;EACD,CAfD;;;;EAkBA,YAAc,GAAG,iBAAA,GAAW;EAAA;;EAC1B,MAAI4vB,UAAU,GAAG,KAAK/lB,IAAL,CAAU;EAAE5P,IAAAA,IAAI,EAAE,IAAR;EAAcgD,IAAAA,IAAI,EAAE,KAApB;EAA2BiJ,IAAAA,KAAK,EAAE;EAAElG,MAAAA,IAAI,EAAE,IAAR;EAAcqC,MAAAA,UAAU,EAAE;EAA1B;EAAlC,GAAV,CAAjB,CAD0B;;EAG1B,MAAIwtB,OAAO,GAAG,EAAd;EACAD,EAAAA,UAAU,CAACvzB,OAAX,CAAmB,UAAAd,CAAC,EAAI;EACtBA,IAAAA,CAAC,CAAC2K,KAAF,CAAQ7J,OAAR,CAAgB,UAAAV,CAAC,EAAI;;EAEnB,UAAIqE,IAAI,GAAG0vB,UAAU,CAAC/zB,CAAC,CAACqE,IAAH,EAAS,KAAI,CAACU,KAAd,CAArB;EACAmvB,MAAAA,OAAO,GAAGA,OAAO,CAACpnB,MAAR,CAAezI,IAAf,CAAV;EACD,KAJD;EAKD,GAND,EAJ0B;;EAY1B6vB,EAAAA,OAAO,GAAGL,MAAI,CAACK,OAAD,CAAd;EACA,MAAIC,MAAM,GAAG,EAAb;EACAD,EAAAA,OAAO,CAACxzB,OAAR,CAAgB,UAAC7B,CAAD,EAAIN,CAAJ,EAAU;EACxB41B,IAAAA,MAAM,CAACt1B,CAAC,CAAC,CAAD,CAAF,CAAN,GAAeN,CAAf;EACD,GAFD,EAd0B;;EAmB1B01B,EAAAA,UAAU,GAAGA,UAAU,CAAClpB,GAAX,CAAe,UAAAnL,CAAC,EAAI;EAC/B,QAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,CAAQQ,GAAR,CAAY,UAAA3D,IAAI,EAAI;EAC9B,UAAI/C,IAAI,GAAG+C,IAAI,CAAC/C,IAAhB;EACAA,MAAAA,IAAI,GAAG0vB,UAAU,CAAC1vB,IAAD,EAAO,KAAI,CAACU,KAAZ,CAAjB;EACAV,MAAAA,IAAI,GAAGA,IAAI,CAAC0G,GAAL,CAAS,UAAA3G,GAAG;EAAA,eAAI+vB,MAAM,CAAC/vB,GAAD,CAAV;EAAA,OAAZ,CAAP;EACAC,MAAAA,IAAI,GAAGA,IAAI,CAACzD,IAAL,CAAU,GAAV,CAAP;EACA,aAAOyD,IAAP;EACD,KANW,CAAZ;EAOAkG,IAAAA,KAAK,GAAGA,KAAK,CAAC3J,IAAN,CAAW,GAAX,CAAR;EACA,WAAO,CAAChB,CAAC,CAACtB,IAAH,EAASiM,KAAT,CAAP;EACD,GAVY,CAAb;EAYA,SAAO;EACLlG,IAAAA,IAAI,EAAE7D,MAAM,CAACC,IAAP,CAAY0zB,MAAZ,CADD;;EAGL5nB,IAAAA,IAAI,EAAE0nB;EAHD,GAAP;EAKD,CApCD;;;;;;ECtCA,IAAM7pB,SAAO,GAAG;;EAEdgqB,EAAAA,KAAK,EAAE,eAACv1B,CAAD,EAAIC,CAAJ,EAAU;EACf,QAAIu1B,IAAI,GAAGx1B,CAAC,CAACP,IAAF,CAAO,OAAP,CAAX;EACA,QAAIg2B,KAAK,GAAGx1B,CAAC,CAACR,IAAF,CAAO,OAAP,CAAZ;;EACA,QAAI+1B,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,WAAO,CAAP;EACD,GAZa;;;EAed31B,EAAAA,MAAM,EAAE,gBAACE,CAAD,EAAIC,CAAJ,EAAU;EAChB,QAAIu1B,IAAI,GAAGx1B,CAAC,CAACP,IAAF,GAASgD,IAAT,GAAgB3C,MAA3B;EACA,QAAI21B,KAAK,GAAGx1B,CAAC,CAACR,IAAF,GAASgD,IAAT,GAAgB3C,MAA5B;;EACA,QAAI01B,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAzBa;;;EA4BdhE,EAAAA,SAAS,EAAE,mBAACzxB,CAAD,EAAIC,CAAJ,EAAU;EACnB,QAAIu1B,IAAI,GAAGx1B,CAAC,CAACyxB,SAAF,EAAX;EACA,QAAIgE,KAAK,GAAGx1B,CAAC,CAACwxB,SAAF,EAAZ;;EACA,QAAI+D,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD;EAtCa,CAAhB;;;EA0CA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAS7nB,GAAT,EAAc;EAC3B,MAAIonB,MAAM,GAAG,EAAb;EACA,MAAM9tB,OAAO,GAAG;EACd,YAAM,IADQ;EAEdY,IAAAA,WAAW,EAAE,KAFC;EAGdF,IAAAA,UAAU,EAAE,IAHE;EAIdnG,IAAAA,OAAO,EAAE;EAJK,GAAhB;EAMAmM,EAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO0H,OAAP,CAAV;EACA8tB,IAAAA,MAAM,CAACz1B,GAAD,CAAN,GAAcy1B,MAAM,CAACz1B,GAAD,CAAN,IAAe,CAA7B;EACAy1B,IAAAA,MAAM,CAACz1B,GAAD,CAAN,IAAe,CAAf;EACD,GAJD,EAR2B;;EAc3BqO,EAAAA,GAAG,CAACH,IAAJ,CAASjF,IAAT,CAAc,UAACzI,CAAD,EAAIC,CAAJ,EAAU;EACtB,QAAIu1B,IAAI,GAAGP,MAAM,CAACj1B,CAAC,CAACP,IAAF,CAAO0H,OAAP,CAAD,CAAjB;EACA,QAAIsuB,KAAK,GAAGR,MAAM,CAACh1B,CAAC,CAACR,IAAF,CAAO0H,OAAP,CAAD,CAAlB;;EACA,QAAIquB,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAVD;EAWA,SAAO5nB,GAAP;EACD,CA1BD;;;EA6BA,IAAM8nB,cAAc,GAAG,SAAjBA,cAAiB,CAAS9nB,GAAT,EAAc;EACnC,MAAI+nB,KAAK,GAAG,EAAZ;EACA/nB,EAAAA,GAAG,CAACwB,IAAJ,CAAS;EAAE3D,IAAAA,KAAK,EAAE;EAAE7C,MAAAA,MAAM,EAAE;EAAV;EAAT,GAAT,EAAsChH,OAAtC,CAA8C,UAAAf,CAAC,EAAI;EACjD80B,IAAAA,KAAK,CAAC90B,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAW3G,EAAZ,CAAL,GAAuBjE,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAW7C,MAAX,CAAkB5D,KAAzC;EACD,GAFD;EAGA4I,EAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAASjF,IAAT,CAAc,UAACzI,CAAD,EAAIC,CAAJ,EAAU;EACjC,QAAI21B,KAAK,CAAC51B,CAAC,CAACiF,KAAH,CAAL,GAAiB2wB,KAAK,CAAC31B,CAAC,CAACgF,KAAH,CAA1B,EAAqC;EACnC,aAAO,CAAP;EACD,KAFD,MAEO,IAAI2wB,KAAK,CAAC51B,CAAC,CAACiF,KAAH,CAAL,GAAiB2wB,KAAK,CAAC31B,CAAC,CAACgF,KAAH,CAA1B,EAAqC;EAC1C,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAPU,CAAX;EAQA,SAAO4I,GAAP;EACD,CAdD;;;AAiBAtC,WAAO,CAACsqB,YAAR,GAAuBtqB,SAAO,CAACgqB,KAA/B;AACAhqB,WAAO,CAACuqB,SAAR,GAAoBvqB,SAAO,CAACkmB,SAA5B;;EAGA,IAAMsE,QAAQ,GAAG;EACfjxB,EAAAA,KAAK,EAAE,IADQ;EAEfkxB,EAAAA,QAAQ,EAAE,IAFK;EAGf/a,EAAAA,GAAG,EAAE,IAHU;EAIfgb,EAAAA,UAAU,EAAE,IAJG;EAKfC,EAAAA,KAAK,EAAE,IALQ;EAMfC,EAAAA,aAAa,EAAE;EANA,CAAjB;;;EAUA,QAAY,GAAG,aAAA,CAAS/jB,KAAT,EAAgB;EAC7BA,EAAAA,KAAK,GAAGA,KAAK,IAAI,OAAjB,CAD6B;;EAG7B,MAAIA,KAAK,KAAK,MAAV,IAAoBA,KAAK,KAAK,WAA9B,IAA6CA,KAAK,KAAK,MAA3D,EAAmE;EACjE,WAAOsjB,MAAM,CAAC,IAAD,CAAb;EACD;;EACD,MAAIK,QAAQ,CAAC3wB,cAAT,CAAwBgN,KAAxB,CAAJ,EAAoC;EAClC,WAAOujB,cAAc,CAAC,IAAD,CAArB;EACD;;EAEDvjB,EAAAA,KAAK,GAAG7G,SAAO,CAAC6G,KAAD,CAAP,IAAkBA,KAA1B,CAV6B;;EAY7B,MAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;EAC/B,SAAK1E,IAAL,GAAY,KAAKA,IAAL,CAAUjF,IAAV,CAAe2J,KAAf,CAAZ;EACA,WAAO,IAAP;EACD;;EACD,SAAO,IAAP;EACD,CAjBD;;;;EAoBA,WAAe,GAAG,gBAAA,GAAW;EAC3B,MAAI1E,IAAI,GAAG,GAAGO,MAAH,CAAU,KAAKP,IAAf,CAAX;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACsE,OAAL,EAAP;EACA,SAAO,KAAKhG,SAAL,CAAe0B,IAAf,CAAP;EACD,CAJD;;;;EAOA,YAAc,GAAG,eAAA,GAAW;EAC1B,MAAIA,IAAI,GAAG,GAAGO,MAAH,CAAU,KAAKP,IAAf,CAAX;EACA,MAAIvC,GAAG,GAAG,EAAV;EACAuC,EAAAA,IAAI,GAAGA,IAAI,CAACrB,MAAL,CAAY,UAAAtL,CAAC,EAAI;EACtB,QAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO,SAAP,EAAkBgD,IAAlB,EAAV;;EACA,QAAI0I,GAAG,CAAC/F,cAAJ,CAAmB5F,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,KAAP;EACD;;EACD2L,IAAAA,GAAG,CAAC3L,GAAD,CAAH,GAAW,IAAX;EACA,WAAO,IAAP;EACD,GAPM,CAAP;EAQA,SAAO,KAAKwM,SAAL,CAAe0B,IAAf,CAAP;EACD,CAZD;;;;;;;;EChIA,IAAM0oB,OAAO,GAAG,mEAAhB;EACA,IAAMC,MAAM,GAAG,eAAf;EAEA,IAAM9qB,SAAO,GAAG;;EAEd1D,EAAAA,UAAU,EAAE,oBAASgG,GAAT,EAAc;EACxB,QAAIyoB,OAAO,GAAGzoB,GAAG,CAACH,IAAJ,CAASxB,GAAT,CAAa,UAAAwG,EAAE;EAAA,aAAIA,EAAE,CAAChH,KAAH,EAAJ;EAAA,KAAf,CAAd;EACA4qB,IAAAA,OAAO,CAACz0B,OAAR,CAAgB,UAAC6J,KAAD,EAAQ5K,CAAR,EAAc;EAC5B4K,MAAAA,KAAK,CAAC7J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtB,YAAIyB,CAAC,CAACo1B,OAAF,OAAgB,IAApB,EAA0B;EACxBp1B,UAAAA,CAAC,CAACiC,IAAF,GAAS,KAAT;EACA;EACD,SALqB;;;EAOtBjC,QAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAR;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT,CARsB;;EAUtB,YAAI+I,KAAK,CAAC5L,MAAN,GAAe,CAAf,KAAqBJ,CAArB,IAA0B,CAAC42B,OAAO,CAACx1B,CAAC,GAAG,CAAL,CAAtC,EAA+C;EAC7C;EACD,SAZqB;;;EActB,YAAIK,CAAC,CAACuD,QAAF,IAAcD,OAAO,CAACtD,CAAC,CAAC1B,IAAH,CAAP,KAAoB,IAAtC,EAA4C;EAC1C;EACD,SAhBqB;;;EAkBtB,YAAI0B,CAAC,CAAC0T,SAAF,OAAkB,IAAtB,EAA4B;EAC1B;EACD;;EAED1T,QAAAA,CAAC,CAACiC,IAAF,IAAU,GAAV;EACD,OAvBD;EAwBD,KAzBD;EA0BD,GA9Ba;EAgCd2E,EAAAA,WAAW,EAAE,qBAASksB,QAAT,EAAmB;EAC9BA,IAAAA,QAAQ,CAACpyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;;EAEpB,UAAIA,CAAC,CAAC0T,SAAF,OAAkB,IAAtB,EAA4B;EAC1B1T,QAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;;EACDjC,MAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAcyzB,OAAd,EAAuB,EAAvB,CAAR;EACAj1B,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAeyzB,OAAf,EAAwB,EAAxB,CAAT,CANoB;;EAQpBj1B,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,QAAf,EAAyB,EAAzB,CAAT,CARoB;;EAUpB,UAAI,IAAIN,IAAJ,CAASlB,CAAC,CAACiC,IAAX,MAAqB,IAAzB,EAA+B;EAC7BjC,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAT;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD,OAbmB;;;EAepB,UAAI,KAAKf,IAAL,CAAUlB,CAAC,CAACiC,IAAZ,MAAsB,IAA1B,EAAgC;EAC9BjC,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,QAAf,EAAyB,EAAzB,CAAT;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD;EACF,KAnBD;EAoBD,GArDa;EAuDd1B,EAAAA,OAAO,EAAE,iBAASuyB,QAAT,EAAmB;EAC1BA,IAAAA,QAAQ,CAACpyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;EACpB,UAAIA,CAAC,CAAC0P,UAAF,OAAmB,IAAvB,EAA6B;EAC3B;EACD;;EACD1P,MAAAA,CAAC,CAAC1B,IAAF,GAASqC,SAAW,CAACX,CAAC,CAAC1B,IAAH,CAApB;EACD,KALD;EAMD,GA9Da;EAgEd+2B,EAAAA,UAAU,EAAE,oBAASvC,QAAT,EAAmB;EAC7BA,IAAAA,QAAQ,CAACpyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;EACpBA,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe0zB,MAAf,EAAuB,EAAvB,CAAT;EACAl1B,MAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAc0zB,MAAd,EAAsB,EAAtB,CAAR;EACD,KAHD;EAID,GArEa;EAuEdI,EAAAA,OAAO,EAAE,iBAAS5oB,GAAT,EAAc;EACrBA,IAAAA,GAAG,CACAd,KADH,CACS,SADT,EAEG8kB,GAFH,CAEO,oDAFP,EAGG6E,MAHH;EAID,GA5Ea;;EA+EdzuB,EAAAA,aAAa,EAAE,uBAAS4F,GAAT,EAAc;EAC3BA,IAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAA6Q,EAAE,EAAI;EACrB,UAAIhH,KAAK,GAAGgH,EAAE,CAAChH,KAAH,EAAZ;EACAA,MAAAA,KAAK,CAAC7J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,YAAIyB,CAAC,CAACqE,IAAF,CAAO0C,YAAP,KAAwB,IAAxB,IAAgCwD,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAzC,EAAkD;EAChDyB,UAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACD;EACF,OAJD;EAKD,KAPD;EAQD;EAxFa,CAAhB;EA0FA,YAAc,GAAG4I,SAAjB;;EC5FA,IAAMorB,QAAQ,GAAG;;EAEf9uB,EAAAA,UAAU,EAAE,IAFG;EAGfnG,EAAAA,OAAO,EAAE,IAHM;EAIfqG,EAAAA,WAAW,EAAE,IAJE;EAKf6uB,EAAAA,KAAK,EAAE,IALQ;EAMfhvB,EAAAA,QAAQ,EAAE,IANK;EAOfK,EAAAA,aAAa,EAAE,IAPA;;EAUf,UAAM,KAVS;EAWf4uB,EAAAA,YAAY,EAAE,KAXC;EAYfC,EAAAA,WAAW,EAAE,KAZE;EAafN,EAAAA,UAAU,EAAE,KAbG;EAcfC,EAAAA,OAAO,EAAE,KAdM;;EAiBfM,EAAAA,WAAW,EAAE,KAjBE;EAkBfjc,EAAAA,KAAK,EAAE,KAlBQ;EAmBfD,EAAAA,KAAK,EAAE,KAnBQ;EAoBfmc,EAAAA,UAAU,EAAE,KApBG;;EAAA,CAAjB;EAwBA,IAAMjV,SAAO,GAAG;EACdyF,EAAAA,KAAK,EAAE,EADO;EAEdyP,EAAAA,MAAM,EAAE;EAAE,YAAM,IAAR;EAAcJ,IAAAA,YAAY,EAAE,IAA5B;EAAkCC,IAAAA,WAAW,EAAE,IAA/C;EAAqDN,IAAAA,UAAU,EAAE,IAAjE;EAAuEC,IAAAA,OAAO,EAAE;EAAhF;EAFM,CAAhB;AAIA1U,WAAO,CAACmV,KAAR,GAAgBv1B,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkBgZ,SAAO,CAACkV,MAA1B,EAAkC;EAAEF,EAAAA,WAAW,EAAE,IAAf;EAAqBjc,EAAAA,KAAK,EAAE,IAA5B;EAAkCD,EAAAA,KAAK,EAAE,IAAzC;EAA+Cmc,EAAAA,UAAU,EAAE;EAA3D,CAAlC,CAAhB;;;EAGA,aAAiB,GAAG,kBAAA,CAAS7vB,OAAT,EAAkB;EACpCA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CADoC;;EAGpC,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/BA,IAAAA,OAAO,GAAG4a,SAAO,CAAC5a,OAAD,CAAP,IAAoB,EAA9B;EACD,GALmC;;;EAOpCA,EAAAA,OAAO,GAAGxF,MAAM,CAACoH,MAAP,CAAc,EAAd,EAAkB4tB,QAAlB,EAA4BxvB,OAA5B,CAAV,CAPoC;;EASpC,OAAK0rB,OAAL;EAEA,MAAIoB,QAAQ,GAAG,KAAKA,QAAL,EAAf,CAXoC;;EAcpC,MAAI9sB,OAAO,QAAX,EAAkB;EAChB,SAAK3E,WAAL;EACD,GAhBmC;;;EAmBpC,MAAI2E,OAAO,CAACU,UAAZ,EAAwB;EACtB0D,IAAAA,QAAO,CAAC1D,UAAR,CAAmB,IAAnB;EACD,GArBmC;;;EAwBpC,MAAIV,OAAO,CAACzF,OAAZ,EAAqB;EACnB6J,IAAAA,QAAO,CAAC7J,OAAR,CAAgBuyB,QAAhB;EACD,GA1BmC;;;EA6BpC,MAAI9sB,OAAO,CAACY,WAAZ,EAAyB;EACvBwD,IAAAA,QAAO,CAACxD,WAAR,CAAoBksB,QAApB;EACD,GA/BmC;;;EAkCpC,MAAI9sB,OAAO,CAACyvB,KAAZ,EAAmB;EACjB,SAAKF,MAAL,CAAY,oBAAZ;EACD,GApCmC;;;EAuCpC,MAAIvvB,OAAO,CAACS,QAAZ,EAAsB;EACpB,SAAKA,QAAL,GAAgBuvB,KAAhB,GADoB;EAGrB,GA1CmC;;;EA4CpC,MAAIhwB,OAAO,CAACc,aAAZ,EAA2B;EACzBsD,IAAAA,QAAO,CAACtD,aAAR,CAAsB,IAAtB;EACD,GA9CmC;;;;EAmDpC,MAAId,OAAO,CAACiwB,WAAR,IAAuBjwB,OAAO,CAAC0vB,YAAnC,EAAiD;EAC/C,SAAKA,YAAL,GAAoBQ,MAApB;EACD,GArDmC;;;EAwDpC,MAAIlwB,OAAO,CAAC2vB,WAAZ,EAAyB;EACvB,SAAKA,WAAL,GAAmBQ,MAAnB;EACD,GA1DmC;;;EA4DpC,MAAInwB,OAAO,CAACqvB,UAAR,IAAsBrvB,OAAO,CAACkvB,MAAlC,EAA0C;EACxC9qB,IAAAA,QAAO,CAACirB,UAAR,CAAmBvC,QAAnB;EACD,GA9DmC;;;EAiEpC,MAAI9sB,OAAO,CAACsvB,OAAZ,EAAqB;EACnBlrB,IAAAA,QAAO,CAACkrB,OAAR,CAAgB,IAAhB;EACD,GAnEmC;;;;EAwEpC,MAAItvB,OAAO,CAACowB,UAAR,IAAsBpwB,OAAO,CAAC4vB,WAAlC,EAA+C;EAC7C,SAAKA,WAAL,GAAmBI,KAAnB;EACD,GA1EmC;;;EA4EpC,MAAIhwB,OAAO,CAAC2T,KAAZ,EAAmB;EACjB,SAAKA,KAAL,GAAa9T,YAAb;EACD,GA9EmC;;;EAgFpC,MAAIG,OAAO,CAAC0T,KAAR,IAAiB1T,OAAO,CAAC8pB,OAA7B,EAAsC;EACpC,SAAKpW,KAAL,GAAavU,UAAb;EACD,GAlFmC;;;EAoFpC,MAAIa,OAAO,CAAC6vB,UAAZ,EAAwB;EACtB,SAAKN,MAAL,CAAY,YAAZ;EACD;;EAED,SAAO,IAAP;EACD,CAzFD;;;;;;;EC/BA;;;EAGA5yB,EAAAA,eAAA,GAAkB,UAASe,GAAT,EAAc;;EAE9B,QAAI,CAACA,GAAL,EAAU;EACR,UAAIsJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACqpB,OAAP,CAAe,IAAf,CAAP;EACD,KAL6B;;;EAO9B,QAAIloB,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIkM,OAAO,GAAG,EAAd;EACA,SAAKrD,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI02B,OAAO,GAAG12B,CAAC,CAACgM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAImoB,OAAO,CAAC33B,MAAR,KAAmB,CAAvB,EAA0B;EACxBiR,QAAAA,OAAO,CAACjF,IAAR,CAAa/K,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIoU,KAAK,GAAGpU,CAAZ;EACA02B,MAAAA,OAAO,CAAC51B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIq0B,KAAK,GAAGviB,KAAK,CAACqiB,OAAN,CAAcn0B,KAAd,CAAZ,CADuB;;EAGvB,YAAIq0B,KAAK,CAACpwB,MAAV,EAAkB;EAChByJ,UAAAA,OAAO,CAACjF,IAAR,CAAa4rB,KAAK,CAACpwB,MAAnB;EACD;;EACD,YAAIowB,KAAK,CAAC3qB,KAAV,EAAiB;EACfgE,UAAAA,OAAO,CAACjF,IAAR,CAAa4rB,KAAK,CAAC3qB,KAAnB;EACD,SARsB;;;EAUvBoI,QAAAA,KAAK,GAAGuiB,KAAK,CAACp0B,KAAd;EACD,OAXD,EATqB;;EAsBrB,UAAI6R,KAAJ,EAAW;EACTpE,QAAAA,OAAO,CAACjF,IAAR,CAAaqJ,KAAb;EACD;EACF,KAzBD;EA0BA,WAAO,KAAKnJ,SAAL,CAAe+E,OAAf,CAAP;EACD,GApCD;;;;;;EAyCAjN,EAAAA,kBAAA,GAAqB,UAASe,GAAT,EAAc;;EAEjC,QAAI,CAACA,GAAL,EAAU;EACR,UAAIsJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACwpB,UAAP,CAAkB,IAAlB,CAAP;EACD,KALgC;;;EAOjC,QAAIroB,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIkM,OAAO,GAAG,EAAd;EACA,SAAKrD,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI02B,OAAO,GAAG12B,CAAC,CAACgM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAImoB,OAAO,CAAC33B,MAAR,KAAmB,CAAvB,EAA0B;EACxBiR,QAAAA,OAAO,CAACjF,IAAR,CAAa/K,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIoU,KAAK,GAAGpU,CAAZ;EACA02B,MAAAA,OAAO,CAAC51B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIq0B,KAAK,GAAGviB,KAAK,CAACqiB,OAAN,CAAcn0B,KAAd,CAAZ,CADuB;;EAGvB,YAAIq0B,KAAK,CAACpwB,MAAN,IAAgBowB,KAAK,CAAC3qB,KAA1B,EAAiC;;EAE/B2qB,UAAAA,KAAK,CAACpwB,MAAN,CAAaxH,MAAb,IAAuB43B,KAAK,CAAC3qB,KAAN,CAAYjN,MAAnC;EACAiR,UAAAA,OAAO,CAACjF,IAAR,CAAa4rB,KAAK,CAACpwB,MAAnB;EACD,SAJD,MAIO,IAAIowB,KAAK,CAAC3qB,KAAV,EAAiB;EACtBgE,UAAAA,OAAO,CAACjF,IAAR,CAAa4rB,KAAK,CAAC3qB,KAAnB;EACD,SATsB;;;EAWvBoI,QAAAA,KAAK,GAAGuiB,KAAK,CAACp0B,KAAd;EACD,OAZD,EATqB;;EAuBrB,UAAI6R,KAAJ,EAAW;EACTpE,QAAAA,OAAO,CAACjF,IAAR,CAAaqJ,KAAb;EACD;EACF,KA1BD;EA2BA,WAAO,KAAKnJ,SAAL,CAAe+E,OAAf,CAAP;EACD,GArCD;;EAsCAjN,EAAAA,aAAA,GAAgBA,OAAO,CAAC6zB,UAAxB;;;;EAGA7zB,EAAAA,mBAAA,GAAsB,UAASe,GAAT,EAAc;;EAElC,QAAI,CAACA,GAAL,EAAU;EACR,UAAIsJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACypB,WAAP,CAAmB,IAAnB,CAAP;EACD,KALiC;;;EAOlC,QAAItoB,IAAI,GAAGsiB,QAAW,CAAC/sB,GAAD,CAAtB;EACA,QAAIkM,OAAO,GAAG,EAAd;EACA,SAAKrD,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI02B,OAAO,GAAG12B,CAAC,CAACgM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAImoB,OAAO,CAAC33B,MAAR,KAAmB,CAAvB,EAA0B;EACxBiR,QAAAA,OAAO,CAACjF,IAAR,CAAa/K,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIoU,KAAK,GAAGpU,CAAZ;EACA02B,MAAAA,OAAO,CAAC51B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIq0B,KAAK,GAAGviB,KAAK,CAACqiB,OAAN,CAAcn0B,KAAd,CAAZ,CADuB;;EAGvB,YAAIq0B,KAAK,CAACpwB,MAAV,EAAkB;EAChByJ,UAAAA,OAAO,CAACjF,IAAR,CAAa4rB,KAAK,CAACpwB,MAAnB;EACD,SALsB;;;EAOvB,YAAIowB,KAAK,CAAC3qB,KAAN,IAAe2qB,KAAK,CAACp0B,KAAzB,EAAgC;EAC9Bo0B,UAAAA,KAAK,CAAC3qB,KAAN,CAAYjN,MAAZ,IAAsB43B,KAAK,CAACp0B,KAAN,CAAYxD,MAAlC;EACD,SATsB;;;EAWvBqV,QAAAA,KAAK,GAAGuiB,KAAK,CAAC3qB,KAAd;EACD,OAZD,EATqB;;EAuBrB,UAAIoI,KAAJ,EAAW;EACTpE,QAAAA,OAAO,CAACjF,IAAR,CAAaqJ,KAAb;EACD;EACF,KA1BD;EA2BA,WAAO,KAAKnJ,SAAL,CAAe+E,OAAf,CAAP;EACD,GArCD;;;;EAwCAjN,EAAAA,eAAA,GAAkB,UAASwL,IAAT,EAAenI,OAAf,EAAwB;EACxCmI,IAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACAnI,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE1H,MAAAA,IAAI,EAAE;EAAR,KAArB;EACA,QAAIoO,GAAG,GAAG,IAAV;EACA,QAAIjM,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY0N,IAAZ,CAAX,CAJwC;;EAMxC1N,IAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChBmN,MAAAA,GAAG,GAAGA,GAAG,CAAC2pB,OAAJ,CAAY92B,CAAZ,CAAN;EACD,KAFD,EANwC;;EAUxCmN,IAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,WAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,YAAIqB,CAAC,CAAC+wB,GAAF,CAAMlwB,IAAI,CAAClC,CAAD,CAAV,CAAJ,EAAoB;EAClBqB,UAAAA,CAAC,CAAC82B,OAAF,GAAYvoB,IAAI,CAAC1N,IAAI,CAAClC,CAAD,CAAL,CAAhB;EACA;EACD;EACF;EACF,KAPD;EAQA,WAAOmO,GAAG,CAACH,IAAJ,CAASxB,GAAT,CAAa,UAAAnL,CAAC,EAAI;EACvB,UAAIqO,GAAG,GAAGrO,CAAC,CAACsO,IAAF,CAAOlI,OAAP,CAAV;EACAiI,MAAAA,GAAG,CAACyoB,OAAJ,GAAc92B,CAAC,CAAC82B,OAAF,IAAa,IAA3B;EACA,aAAOzoB,GAAP;EACD,KAJM,CAAP;EAKD,GAvBD;;;;;;;;EC/HA,IAAM0oB,QAAQ,GAAG,SAAXA,QAAW,CAASjqB,GAAT,EAAckjB,EAAd,EAAkB;EACjC,MAAI7qB,KAAK,GAAG2H,GAAG,CAAC3H,KAAhB;EACA2H,EAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,IAAAA,CAAC,CAAC2K,KAAF,GAAU7J,OAAV,CAAkB,UAAAV,CAAC;EAAA,aAAIA,CAAC,CAAC4vB,EAAD,CAAD,CAAM7qB,KAAN,CAAJ;EAAA,KAAnB;EACD,GAFD;EAGA,SAAO2H,GAAP;EACD,CAND;;;;EASA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOiqB,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;;;;EAKA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOA,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;;;;EAKA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOA,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;;;;EAIA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,OAAKpqB,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,QAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACAA,IAAAA,KAAK,CAAC7J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,UAAIA,CAAC,KAAK,CAAV,EAAa;EACXyB,QAAAA,CAAC,CAAC42B,WAAF;EACD;;EACD,UAAIr4B,CAAC,KAAKgM,KAAK,CAAC5L,MAAN,GAAe,CAAzB,EAA4B;EAC1BqB,QAAAA,CAAC,CAACiC,IAAF,GAAS,EAAT;EACD;EACF,KAPD;EAQD,GAXD,EAD+B;;EAc/B,SAAO,IAAP;EACD,CAfD;;;;;;;;;;ECvBA;EACAU,EAAAA,WAAA,GAAc,UAAStE,GAAT,EAAcyO,MAAd,EAAsB;EAClC,QAAIzO,GAAG,KAAK2F,SAAZ,EAAuB;EACrB,aAAO,KAAKuI,IAAL,CAAU,CAAV,EAAahC,KAAb,CAAmB,CAAnB,EAAsBvI,GAA7B;EACD;;EACD,SAAKuK,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIwH,IAAI,GAAGxH,CAAC,CAAC2K,KAAF,CAAQ,CAAR,CAAX;;EACA,UAAIuC,MAAM,KAAK,IAAf,EAAqB;EACnB1F,QAAAA,IAAI,CAACpF,GAAL,IAAY3D,GAAZ;EACD,OAFD,MAEO;EACL+I,QAAAA,IAAI,CAACpF,GAAL,GAAW3D,GAAX;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAbD;;;;EAgBAsE,EAAAA,YAAA,GAAe,UAAStE,GAAT,EAAcyO,MAAd,EAAsB;;EAEnC,QAAIzO,GAAG,KAAK2F,SAAZ,EAAuB;EACrB,aAAO,KAAKuI,IAAL,CAAUxB,GAAV,CAAc,UAAAnL,CAAC,EAAI;EACxB,YAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACA,YAAInD,IAAI,GAAGmD,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAhB;EACA,eAAOyI,IAAI,CAACnF,IAAZ;EACD,OAJM,CAAP;EAKD,KARkC;;;EAUnC,SAAKsK,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACA,UAAInD,IAAI,GAAGmD,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAhB;;EACA,UAAImO,MAAM,KAAK,IAAf,EAAqB;EACnB1F,QAAAA,IAAI,CAACnF,IAAL,IAAa5D,GAAb;EACD,OAFD,MAEO;EACL+I,QAAAA,IAAI,CAACnF,IAAL,GAAY5D,GAAZ;EACD;EACF,KARD;EASA,WAAO,IAAP;EACD,GApBD;;;;EAuBAsE,EAAAA,YAAA,GAAe,YAAW;EACxB,SAAK4J,IAAL,GAAY,KAAKA,IAAL,CAAUxB,GAAV,CAAc,UAAAnL,CAAC;EAAA,aAAIA,CAAC,CAAC0B,IAAF,EAAJ;EAAA,KAAf,CAAZ;EACA,WAAO,IAAP;EACD,GAHD;;;;EAMAqB,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,SAAK4J,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ,CADqB;;EAGrBA,MAAAA,KAAK,CAAC7J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,YAAIA,CAAC,KAAK,CAAV,EAAa;EACXyB,UAAAA,CAAC,CAACgC,GAAF,GAAQ,EAAR;EACD;;EACD,YAAIuI,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAT,EAAkB;EAChByB,UAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;EACF,OAPD;EAQD,KAXD;EAYA,WAAO,IAAP;EACD,GAdD;;;;EAiBAU,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,QAAM+Q,SAAS,GAAG,SAAlB;EACA,SAAKnH,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ,CADqB;;EAGrBA,MAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAI0T,SAAS,CAACxS,IAAV,CAAelB,CAAC,CAACiC,IAAjB,CAAJ,EAA4B;EAC1BjC,UAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;EACF,OAJD;EAKD,KARD;EASA,WAAO,IAAP;EACD,GAZD;;EAaAU,EAAAA,mBAAA,GAAsBA,OAAO,CAACk0B,WAA9B;;;EAGAl0B,EAAAA,oBAAA,GAAuB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EAC1CD,IAAAA,KAAK,GAAGA,KAAK,QAAb;EACAC,IAAAA,GAAG,GAAGA,GAAG,QAAT;EACA,SAAKwI,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,CAASvI,GAAT,GAAe8B,KAAK,GAAGyG,KAAK,CAAC,CAAD,CAAL,CAASvI,GAAhC;EACA,UAAI2E,IAAI,GAAG4D,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAhB;EACAgI,MAAAA,IAAI,CAAC1E,IAAL,GAAY8B,GAAG,GAAG4C,IAAI,CAAC1E,IAAvB;EACD,KALD;EAMA,WAAO,IAAP;EACD,GAVD;;EAWAU,EAAAA,mBAAA,GAAsBA,OAAO,CAACm0B,YAA9B;;;EAGAn0B,EAAAA,qBAAA,GAAwB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EAC3CD,IAAAA,KAAK,GAAGA,KAAK,OAAb;EACAC,IAAAA,GAAG,GAAGA,GAAG,OAAT;EACA,SAAKwI,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,CAASvI,GAAT,GAAe8B,KAAK,GAAGyG,KAAK,CAAC,CAAD,CAAL,CAASvI,GAAhC;EACA,UAAI2E,IAAI,GAAG4D,KAAK,CAACA,KAAK,CAAC5L,MAAN,GAAe,CAAhB,CAAhB;EACAgI,MAAAA,IAAI,CAAC1E,IAAL,GAAY8B,GAAG,GAAG4C,IAAI,CAAC1E,IAAvB;EACD,KALD;EAMA,WAAO,IAAP;EACD,GAVD;;;;;;;;;;;;EC7FA;EACA,QAAY,GAAG,aAAA,CAAS5D,GAAT,EAAc;;EAE3B,OAAKqzB,OAAL,GAF2B;;EAI3B,MAAIxkB,IAAI,GAAG,KAAKX,IAAL,CAAU,CAAV,CAAX;EACA,MAAIpG,MAAM,GAAG+G,IAAI,CAACvO,MAAlB;EACA,MAAIo4B,OAAO,GAAG,EAAd;;EACA,OAAK,IAAIx4B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKgO,IAAL,CAAU5N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,QAAMqB,CAAC,GAAG,KAAK2M,IAAL,CAAUhO,CAAV,CAAV;EACAw4B,IAAAA,OAAO,CAACn3B,CAAC,CAACkE,KAAH,CAAP,GAAmB,IAAnB;EACA,QAAIsD,IAAI,GAAG8F,IAAI,CAACzB,QAAL,EAAX,CAHyC;;EAKzC,QAAIpN,GAAJ,EAAS;EACP+I,MAAAA,IAAI,CAACnF,IAAL,IAAa5D,GAAb;EACD,KAPwC;;;EASzC+I,IAAAA,IAAI,CAAC8C,IAAL,GAAYtK,CAAC,CAACkE,KAAd,CATyC;;EAWzClE,IAAAA,CAAC,CAAC2K,KAAF,CAAQ,CAAR,EAAWN,IAAX,GAAkB7C,IAAI,CAACxD,EAAvB;EACAsJ,IAAAA,IAAI,CAACvO,MAAL,IAAeiB,CAAC,CAACjB,MAAjB;EACD,GApB0B;;;;EAwB3B,MAAIq4B,QAAQ,GAAG9pB,IAAI,CAACvO,MAAL,GAAcwH,MAA7B;EACA,OAAK4G,OAAL,GAAerM,OAAf,CAAuB,UAAAgM,GAAG,EAAI;;EAE5BA,IAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;;EACA,WAAK,IAAIhM,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,EAAC,EAAnC,EAAuC;EACrC,YAAIgM,KAAK,CAAChM,EAAD,CAAL,CAASqF,EAAT,KAAgBsJ,IAAI,CAACpJ,KAAzB,EAAgC;EAC9BlE,UAAAA,CAAC,CAACjB,MAAF,IAAYq4B,QAAZ;EACA;EACD;EACF;EACF,KARD,EAF4B;;EAY5BtqB,IAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAASrB,MAAT,CAAgB,UAAAtL,CAAC;EAAA,aAAIm3B,OAAO,CAACn3B,CAAC,CAACkE,KAAH,CAAP,KAAqB,IAAzB;EAAA,KAAjB,CAAX;EACD,GAbD,EAzB2B;;EAwC3B,SAAO,KAAK+G,SAAL,CAAe,CAACqC,IAAD,CAAf,CAAP;EACD,CAzCD;;;;;;ECDA,IAAM+pB,SAAS,GAAG,kBAAlB;;;;;EAMA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAASz3B,CAAT,EAAY03B,MAAZ,EAAoB;EACzC,MAAI,CAAC13B,CAAC,CAACyC,KAAP,EAAc;EACZ;EACD;;EACD,MAAIqI,KAAK,GAAG9K,CAAC,CAACqzB,QAAF,EAAZ,CAJyC;;EAMzC,OAAK,IAAIv0B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAAN,GAAe,CAAnC,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,QAAMyB,CAAC,GAAGuK,KAAK,CAAChM,CAAD,CAAf;;EACA,QAAI04B,SAAS,CAAC/1B,IAAV,CAAelB,CAAC,CAACiC,IAAjB,CAAJ,EAA4B;EAC1B;EACD;EACF,GAXwC;;;EAczCsI,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBA,IAAAA,CAAC,CAACuD,QAAF,GAAavD,CAAC,CAACoB,KAAf;EACD,GAFD,EAdyC;;EAkBzCmJ,EAAAA,KAAK,CAAC,CAAD,CAAL,CAASjM,IAAT,IAAiB64B,MAAjB,CAlByC;;EAoBzC5sB,EAAAA,KAAK,CAACyD,KAAN,CAAY,CAAZ,EAAetN,OAAf,CAAuB,UAAAV,CAAC,EAAI;EAC1BA,IAAAA,CAAC,CAAC1B,IAAF,GAAS,EAAT;EACD,GAFD;;EAGA,OAAK,IAAIC,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGgM,KAAK,CAAC5L,MAAN,GAAe,CAAnC,EAAsCJ,EAAC,EAAvC,EAA2C;EACzC,QAAMyB,EAAC,GAAGuK,KAAK,CAAChM,EAAD,CAAf;EACAyB,IAAAA,EAAC,CAACiC,IAAF,GAASjC,EAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,GAAf,EAAoB,EAApB,CAAT;EACD;EACF,CA3BD;;;;EA8BA,YAAgB,GAAG,iBAAA,GAAW;EAC5B,MAAIkL,GAAG,GAAG,KAAKgkB,GAAL,CAAS,iBAAT,CAAV,CAD4B;;EAG5B,MAAIjxB,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,mBAAV,CAAR;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,QAAd,CAJ4B;;EAM5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,8BAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,QAAd,CAP4B;;EAS5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,wBAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,OAAd,CAV4B;;EAY5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,YAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,OAAd,CAb4B;;EAe5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,eAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,OAAd,CAhB4B;;EAkB5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,0DAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,QAAd,CAnB4B;;EAqB5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,kBAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,QAAd,CAtB4B;;EAwB5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,2BAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,QAAd,CAzB4B;;EA2B5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,MAAV,CAAJ;EACAsrB,EAAAA,cAAc,CAACz3B,CAAD,OAAd,CA5B4B;;EA8B5BA,EAAAA,CAAC,GAAGiN,GAAG,CAACd,KAAJ,CAAU,UAAV,CAAJ;EACA,SAAO,IAAP;EACD,CAhCD;;;;;;ECpCA,aAAc,GAAGpL,MAAM,CAACoH,MAAP,CACf,EADe,EAEfC,UAFe,EAGfC,YAHe,EAIfC,QAJe,EAKfC,MALe,EAMfC,QANe,EAOfsG,SAPe,EASf4gB,UATe,EAUfiI,SAVe,EAYfC,OAZe,EAafC,OAbe,EAcfC,MAde,EAefC,SAfe,EAiBfC,OAjBe,EAkBfC,YAlBe,EAmBfC,QAnBe,EAoBfC,OApBe,EAqBfC,aArBe,EAsBfC,OAtBe,EAuBfC,WAvBe,CAAjB;;ECAA,IAAI3tB,SAAO,GAAG,EAAd;;EAGA,IAAMzB,GAAG,GAAG,CACV,CAAC,OAAD,EAAU,GAAV,CADU,EAEV,CAAC,YAAD,EAAe,cAAf,CAFU,EAGV,CAAC,YAAD,EAAe,YAAf,CAHU,EAIV,CAAC,UAAD,EAAa,UAAb,CAJU,EAKV,CAAC,QAAD,EAAW,QAAX,CALU,EAMV,CAAC,OAAD,EAAU,QAAV,CANU,EAOV,CAAC,WAAD,EAAc,WAAd,CAPU,EAQV,CAAC,YAAD,EAAe,YAAf,CARU,EASV,CAAC,MAAD,EAAS,MAAT,CATU,EAUV,CAAC,SAAD,EAAY,SAAZ,CAVU,EAWV,CAAC,UAAD,EAAa,UAAb,CAXU,EAYV,CAAC,cAAD,EAAiB,cAAjB,CAZU,EAaV,CAAC,cAAD,EAAiB,cAAjB,CAbU,CAAZ;EAeAA,GAAG,CAACjI,OAAJ,CAAY,UAAA7B,CAAC,EAAI;EACfuL,EAAAA,SAAO,CAACvL,CAAC,CAAC,CAAD,CAAF,CAAP,GAAgB,UAASa,CAAT,EAAY;EAC1B,QAAID,CAAC,GAAG,KAAKmM,KAAL,CAAW/M,CAAC,CAAC,CAAD,CAAZ,CAAR;;EACA,QAAI,OAAOa,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,WAAOD,CAAP;EACD,GAND;EAOD,CARD;;AAUA2K,WAAO,CAAC4tB,MAAR,GAAiB5tB,SAAO,CAACqrB,KAAzB;AACArrB,WAAO,CAAC6tB,UAAR,GAAqB7tB,SAAO,CAAC8tB,UAA7B;AACA9tB,WAAO,CAACsE,KAAR,GAAgBtE,SAAO,CAACG,KAAxB;;;AAGAH,WAAO,CAAC+tB,YAAR,GAAuB,UAASz4B,CAAT,EAAY;EACjC,MAAID,CAAC,GAAG,KAAK+2B,UAAL,CAAgB,WAAhB,CAAR;EACA/2B,EAAAA,CAAC,GAAGA,CAAC,CAACmM,KAAF,CAAQ,eAAR,CAAJ;;EACA,MAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAPD;;;;AAUA2K,WAAO,CAACguB,KAAR,GAAgB,UAAS14B,CAAT,EAAY;EAC1B,MAAID,CAAC,GAAG,KAAKmM,KAAL,CAAW,mBAAX,CAAR;;EACA,MAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAND;;;;AASA2K,WAAO,CAACiuB,MAAR,GAAiB,UAAS34B,CAAT,EAAY;;EAE3B,MAAIkmB,IAAI,GAAG,KAAKha,KAAL,CAAW,yCAAX,CAAX,CAF2B;;EAI3B,MAAInM,CAAC,GAAG,KAAKixB,GAAL,CAAS9K,IAAT,EAAe4Q,UAAf,CAA0B,WAA1B,CAAR,CAJ2B;;EAM3B/2B,EAAAA,CAAC,GAAGA,CAAC,CAACqN,MAAF,CAAS8Y,IAAT,CAAJ;EACAnmB,EAAAA,CAAC,CAAC6H,IAAF,CAAO,OAAP;EACA7H,EAAAA,CAAC,GAAGA,CAAC,CAACmM,KAAF,CAAQ,SAAR,CAAJ;;EACA,MAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAbD;;;;AAgBA2K,WAAO,CAACkuB,aAAR,GAAwB,UAAS54B,CAAT,EAAY;EAClC,MAAID,CAAC,GAAG,KAAK84B,OAAL,EAAR;EACA94B,EAAAA,CAAC,GAAGA,CAAC,CAACmM,KAAF,CAAQ,gBAAR,CAAJ;;EACA,MAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAPD;;;AAUA2K,WAAO,CAACouB,QAAR,GAAmB,UAAS94B,CAAT,EAAY;EAC7B,MAAII,CAAC,GAAG,KAAKy4B,OAAL,EAAR,CAD6B;;EAG7B,MAAIE,GAAG,GAAG34B,CAAC,CAAC44B,MAAF,EAAV;EACAD,EAAAA,GAAG,GAAGA,GAAG,CAAC3rB,MAAJ,CAAWhN,CAAC,CAACu4B,MAAF,EAAX,CAAN;EACAI,EAAAA,GAAG,GAAGA,GAAG,CAAC3rB,MAAJ,CAAWhN,CAAC,CAACw4B,aAAF,EAAX,CAAN;EACA,MAAIK,MAAM,GAAG,CAAC,SAAD,EAAY,KAAZ,EAAmB,OAAnB,EAA4B,QAA5B,EAAsC,SAAtC,EAAiD,QAAjD,EAA2D,QAA3D,CAAb;EACAF,EAAAA,GAAG,GAAGA,GAAG,CAAC/H,GAAJ,CAAQiI,MAAR,CAAN,CAP6B;;EAS7BF,EAAAA,GAAG,CAACnxB,IAAJ,CAAS,UAAT,EAT6B;;EAW7B,MAAI,OAAO5H,CAAP,KAAa,QAAjB,EAA2B;EACzB+4B,IAAAA,GAAG,GAAGA,GAAG,CAAChuB,GAAJ,CAAQ/K,CAAR,CAAN;EACD;;EACD,SAAO+4B,GAAP;EACD,CAfD;;;AAiBAruB,WAAO,CAACwuB,MAAR,GAAiBxuB,SAAO,CAACouB,QAAzB;AACApuB,WAAO,CAACyuB,MAAR,GAAiBzuB,SAAO,CAACouB,QAAzB;;;AAGApuB,WAAO,CAAC6I,SAAR,GAAoB,YAAW;EAC7B,SAAO,KAAK5E,GAAL,EAAP;EACD,CAFD;;EAIA,WAAc,GAAGjE,SAAjB;;ECvGA,IAAM0uB,SAAS,GAAG,iBAAlB;;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASxuB,KAAT,EAAgBvK,CAAhB,EAAmB+E,KAAnB,EAA0B;EAC5C,MAAIiW,GAAG,GAAGjW,KAAK,CAAC2J,KAAhB,CAD4C;;EAG5C,MAAInD,GAAG,GAAGhB,KAAK,CAACvK,CAAD,CAAL,CAASyB,OAAT,GAAmB,GAAnB,GAAyB8I,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAAhD;;EACA,MAAIuZ,GAAG,CAACzP,GAAD,CAAH,KAAavH,SAAb,IAA0BgX,GAAG,CAAC/W,cAAJ,CAAmBsH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DhB,IAAAA,KAAK,CAACvK,CAAD,CAAL,CAASoE,GAAT,CAAa4W,GAAG,CAACzP,GAAD,CAAhB,EAAuB,aAAvB,EAAsCxG,KAAtC;EACAwF,IAAAA,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiB4W,GAAG,CAACzP,GAAD,CAApB,EAA2B,aAA3B,EAA0CxG,KAA1C;EACA,WAAO,CAAP;EACD,GAR2C;;;EAU5C,MAAI/E,CAAC,GAAG,CAAJ,GAAQuK,KAAK,CAAC5L,MAAlB,EAA0B;EACxB4M,IAAAA,GAAG,IAAI,MAAMhB,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAA1B;;EACA,QAAIuZ,GAAG,CAACzP,GAAD,CAAH,KAAavH,SAAb,IAA0BgX,GAAG,CAAC/W,cAAJ,CAAmBsH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DhB,MAAAA,KAAK,CAACvK,CAAD,CAAL,CAASoE,GAAT,CAAa4W,GAAG,CAACzP,GAAD,CAAhB,EAAuB,eAAvB,EAAwCxG,KAAxC;EACAwF,MAAAA,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiB4W,GAAG,CAACzP,GAAD,CAApB,EAA2B,eAA3B,EAA4CxG,KAA5C;EACAwF,MAAAA,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiB4W,GAAG,CAACzP,GAAD,CAApB,EAA2B,eAA3B,EAA4CxG,KAA5C;EACA,aAAO,CAAP;EACD;EACF,GAlB2C;;;EAoB5C,MAAI/E,CAAC,GAAG,CAAJ,GAAQuK,KAAK,CAAC5L,MAAlB,EAA0B;EACxB4M,IAAAA,GAAG,IAAI,MAAMhB,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAA1B;;EACA,QAAIuZ,GAAG,CAACzP,GAAD,CAAH,KAAavH,SAAb,IAA0BgX,GAAG,CAAC/W,cAAJ,CAAmBsH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DhB,MAAAA,KAAK,CAACvK,CAAD,CAAL,CAASoE,GAAT,CAAa4W,GAAG,CAACzP,GAAD,CAAhB,EAAuB,cAAvB,EAAuCxG,KAAvC;EACAwF,MAAAA,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiB4W,GAAG,CAACzP,GAAD,CAApB,EAA2B,cAA3B,EAA2CxG,KAA3C;EACAwF,MAAAA,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiB4W,GAAG,CAACzP,GAAD,CAApB,EAA2B,cAA3B,EAA2CxG,KAA3C;EACAwF,MAAAA,KAAK,CAACvK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiB4W,GAAG,CAACzP,GAAD,CAApB,EAA2B,cAA3B,EAA2CxG,KAA3C;EACA,aAAO,CAAP;EACD;EACF;;EACD,SAAO,CAAP;EACD,CA/BD;;;;EAkCA,IAAMi0B,YAAY,GAAG,SAAfA,YAAe,CAASzuB,KAAT,EAAgBxF,KAAhB,EAAuB;EAC1C,MAAIiW,GAAG,GAAGjW,KAAK,CAAC2J,KAAhB;EACA,MAAIyM,WAAW,GAAGpW,KAAK,CAACoW,WAAxB,CAF0C;;;EAI1C,OAAK,IAAInb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuK,KAAK,CAAC5L,MAA1B,EAAkCqB,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI3B,GAAG,GAAGkM,KAAK,CAACvK,CAAD,CAAL,CAASoB,KAAnB,CADwC;;EAGxC,QAAI+Z,WAAW,CAAC9c,GAAD,CAAX,KAAqB,IAArB,IAA6B2B,CAAC,GAAG,CAAJ,GAAQuK,KAAK,CAAC5L,MAA/C,EAAuD;EACrD,UAAIs6B,UAAU,GAAGF,WAAW,CAACxuB,KAAD,EAAQvK,CAAR,EAAW+E,KAAX,CAA5B;;EACA,UAAIk0B,UAAU,GAAG,CAAjB,EAAoB;EAClBj5B,QAAAA,CAAC,IAAIi5B,UAAL,CADkB;;EAElB;EACD;EACF,KATuC;;;EAWxC,QAAIje,GAAG,CAAC3c,GAAD,CAAH,KAAa2F,SAAb,IAA0BgX,GAAG,CAAC/W,cAAJ,CAAmB5F,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DkM,MAAAA,KAAK,CAACvK,CAAD,CAAL,CAASoE,GAAT,CAAa4W,GAAG,CAAC3c,GAAD,CAAhB,EAAuB,SAAvB,EAAkC0G,KAAlC;EACA;EACD,KAduC;;;EAgBxC,QAAI1G,GAAG,KAAKkM,KAAK,CAACvK,CAAD,CAAL,CAASyB,OAAjB,IAA4BuZ,GAAG,CAAC/W,cAAJ,CAAmBsG,KAAK,CAACvK,CAAD,CAAL,CAASyB,OAA5B,MAAyC,IAAzE,EAA+E;EAC7E8I,MAAAA,KAAK,CAACvK,CAAD,CAAL,CAASoE,GAAT,CAAa4W,GAAG,CAACzQ,KAAK,CAACvK,CAAD,CAAL,CAASyB,OAAV,CAAhB,EAAoC,SAApC,EAA+CsD,KAA/C;EACA;EACD,KAnBuC;;;EAqBxC,QAAI+zB,SAAS,CAAC53B,IAAV,CAAe7C,GAAf,MAAwB,IAA5B,EAAkC;EAChC,UAAI66B,QAAQ,GAAG76B,GAAG,CAACmD,OAAJ,CAAYs3B,SAAZ,EAAuB,EAAvB,CAAf;;EACA,UAAI9d,GAAG,CAAC/W,cAAJ,CAAmBi1B,QAAnB,MAAiC,IAArC,EAA2C;EACzC3uB,QAAAA,KAAK,CAACvK,CAAD,CAAL,CAASoE,GAAT,CAAa4W,GAAG,CAACke,QAAD,CAAhB,EAA4B,kBAA5B,EAAgDn0B,KAAhD;EACD;EACF;EACF;;EACD,SAAOwF,KAAP;EACD,CAjCD;;EAkCA,cAAc,GAAGyuB,YAAjB;;ECvEA,IAAMG,WAAW,GAAG,cAApB;EACA,IAAMr4B,kBAAgB,GAAG,gBAAzB;EAEA,IAAMs4B,aAAa,GAAG;EACpB/5B,EAAAA,CAAC,EAAE,IADiB;EAEpBg6B,EAAAA,CAAC,EAAE;EAFiB,CAAtB;;EAKA,IAAMp4B,WAAS,GAAG,SAAZA,SAAY,CAASmG,IAAT,EAAerC,KAAf,EAAsB;EACtC,MAAI1G,GAAG,GAAG+I,IAAI,CAAC3F,OAAf,CADsC;;EAGtC,MAAI2F,IAAI,CAAC/C,IAAL,CAAUkC,OAAd,EAAuB;EACrB,WAAO,IAAP;EACD,GALqC;;;;;;EAUtC,MAAIlI,GAAG,CAACM,MAAJ,GAAa,CAAb,IAAkBoG,KAAK,CAAC2J,KAAN,CAAYrQ,GAAZ,CAAtB,EAAwC;EACtC,WAAO,KAAP;EACD;;EACD,SAAO+I,IAAI,CAACnG,SAAL,EAAP;EACD,CAdD;;;EAiBA,IAAMq4B,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAS/uB,KAAT,EAAgBhM,CAAhB,EAAmBwG,KAAnB,EAA0B;EACjD,MAAIqC,IAAI,GAAGmD,KAAK,CAAChM,CAAD,CAAhB,CADiD;;;;;;;;;;;EAcjD,MAAI46B,WAAW,CAACj4B,IAAZ,CAAiBkG,IAAI,CAAC9I,IAAtB,CAAJ,EAAiC;EAC/B,QAAI,CAAC66B,WAAW,CAACj4B,IAAZ,CAAiBkG,IAAI,CAACpF,GAAtB,CAAD,IAA+B,CAACm3B,WAAW,CAACj4B,IAAZ,CAAiBkG,IAAI,CAACnF,IAAtB,CAAhC,IAA+DmF,IAAI,CAAChG,KAAL,CAAWzC,MAAX,GAAoB,CAAvF,EAA0F;EACxF,UAAI46B,OAAO,GAAGnyB,IAAI,CAAChG,KAAL,CAAWgG,IAAI,CAAChG,KAAL,CAAWzC,MAAX,GAAoB,CAA/B,CAAd,CADwF;;EAGxF,UAAI46B,OAAO,KAAK,GAAhB,EAAqB;EACnBnyB,QAAAA,IAAI,CAAChD,GAAL,CAAS,CAAC,YAAD,EAAe,MAAf,CAAT,EAAiC,UAAjC,EAA6CW,KAA7C;EACA;EACD,OANuF;;;EAQxF,UAAIw0B,OAAO,KAAK,GAAhB,EAAqB;EACnBnyB,QAAAA,IAAI,CAAChD,GAAL,CAAS,CAAC,QAAD,CAAT,EAAqB,SAArB,EAAgCW,KAAhC;EACD;EACF;EACF,GA3BgD;;;EA6BjD,MAAI9D,WAAS,CAACmG,IAAD,EAAOrC,KAAP,CAAb,EAA4B;EAC1BqC,IAAAA,IAAI,CAAChD,GAAL,CAAS,SAAT,EAAoB,cAApB,EAAoCW,KAApC;EACAqC,IAAAA,IAAI,CAAChD,GAAL,CAAS,MAAT,EAAiB,eAAjB,EAAkCW,KAAlC;EACD,GAHD,MAGO,IAAI,CAACq0B,aAAa,CAACn1B,cAAd,CAA6BmD,IAAI,CAAC9I,IAAlC,CAAD,IAA4CwC,kBAAgB,CAACI,IAAjB,CAAsBkG,IAAI,CAAC9I,IAA3B,CAAhD,EAAkF;EACvF8I,IAAAA,IAAI,CAAChD,GAAL,CAAS,SAAT,EAAoB,oBAApB,EAA0CW,KAA1C;EACAqC,IAAAA,IAAI,CAAChD,GAAL,CAAS,MAAT,EAAiB,kBAAjB,EAAqCW,KAArC;EACD;EACF,CApCD;;EAqCA,oBAAc,GAAGu0B,gBAAjB;;EC9DA;;EAEA,cAAc,GAAG;EAEf,CAAC,uBAAD,EAA0B,OAA1B,CAFe;EAGf,CAAC,+BAAD,EAAkC,SAAlC,CAHe,EAIf,CAAC,WAAD,EAAc,WAAd,CAJe,EAKf,CAAC,qCAAD,EAAwC,KAAxC,CALe;EAMf,CAAC,+DAAD,EAAkE,KAAlE,CANe;;EASf,CAAC,yCAAD,EAA4C,MAA5C,CATe;EAUf,CAAC,oDAAD,EAAuD,MAAvD,CAVe;EAWf,CAAC,oDAAD,EAAuD,MAAvD,CAXe;EAYf,CAAC,YAAD,EAAe,MAAf,CAZe;EAaf,CAAC,qBAAD,EAAwB,MAAxB,CAbe;EAcf,CAAC,wBAAD,EAA2B,MAA3B,CAde;EAef,CAAC,oCAAD,EAAuC,MAAvC,CAfe;EAgBf,CAAC,sCAAD,EAAyC,MAAzC,CAhBe;;EAmBf,CAAC,WAAD,EAAc,UAAd,CAnBe;EAoBf,CAAC,eAAD,EAAkB,UAAlB,CApBe;EAqBf,CAAC,eAAD,EAAkB,UAAlB,CArBe;;EAwBf,CAAC,cAAD,EAAiB,YAAjB,CAxBe;EAyBf,CAAC,qCAAD,EAAwC,MAAxC,CAzBe;EA2Bf,CAAC,sCAAD,EAAyC,MAAzC,CA3Be;;EA8Bf,CAAC,qBAAD,EAAwB,aAAxB,CA9Be;EA+Bf,CAAC,kCAAD,EAAqC,aAArC,CA/Be;;;;;EAsCf,CACE,yLADF,EAEE,CAAC,OAAD,EAAU,OAAV,CAFF,CAtCe;EA2Cf,CACE,yKADF,EAEE,CAAC,OAAD,EAAU,OAAV,CAFF,CA3Ce;EAgDf,CAAC,0EAAD,EAA6E,CAAC,OAAD,EAAU,OAAV,CAA7E,CAhDe;;EAoDf,CAAC,yCAAD,EAA4C,CAAC,UAAD,EAAa,cAAb,CAA5C,CApDe,EAqDf,CAAC,mDAAD,EAAsD,CAAC,SAAD,EAAY,cAAZ,CAAtD,CArDe;EAuDf,CAAC,eAAD,EAAkB,CAAC,UAAD,EAAa,cAAb,CAAlB,CAvDe;EA0Df,CAAC,0CAAD,EAA6C,CAAC,SAAD,EAAY,UAAZ,EAAwB,cAAxB,CAA7C,CA1De;EA2Df,CAAC,aAAD,EAAgB,CAAC,SAAD,EAAY,UAAZ,EAAwB,cAAxB,CAAhB,CA3De;;EA6Df,CAAC,0BAAD,EAA6B,UAA7B,CA7De;;EA+Df,CAAC,6BAAD,EAAgC,CAAC,OAAD,EAAU,aAAV,CAAhC,CA/De;EAgEf,CAAC,2DAAD,EAA8D,aAA9D,CAhEe;;EAkEf,CAAC,uBAAD,EAA0B,OAA1B,CAlEe;;;;EAAA,CAAjB;;ECAA,IAAME,YAAY,GAAG,iBAArB;EACA,IAAMC,aAAa,GAAG,0DAAtB;;;EAGA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAStyB,IAAT,EAAerC,KAAf,EAAsB;EACvC,MAAI1G,GAAG,GAAG+I,IAAI,CAAC9I,IAAf,CADuC;;EAGvC,OAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyE,UAAK,CAAC5F,MAA1B,EAAkCmB,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIyE,UAAK,CAACzE,CAAD,CAAL,CAAS,CAAT,EAAYoB,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC+I,MAAAA,IAAI,CAAC6qB,OAAL,CAAa1tB,UAAK,CAACzE,CAAD,CAAL,CAAS,CAAT,CAAb,EAA0B,aAAaA,CAAvC,EAA0CiF,KAA1C;EACA;EACD;EACF,GARsC;;;;EAWvC,MAAIqC,IAAI,CAAC9I,IAAL,CAAUK,MAAV,IAAoB,CAApB,IAAyB66B,YAAY,CAACt4B,IAAb,CAAkB7C,GAAlB,CAAzB,IAAmDo7B,aAAa,CAACv4B,IAAd,CAAmB7C,GAAnB,CAAvD,EAAgF;EAC9E+I,IAAAA,IAAI,CAAChD,GAAL,CAAS,cAAT,EAAyB,MAAzB,EAAiCW,KAAjC;EACD;EACF,CAdD;;EAeA,eAAc,GAAG20B,UAAjB;;ECrBA;;;EAGA,IAAMC,GAAG,GAAG,WAAZ;EACA,IAAMC,GAAG,GAAG,YAAZ;EACA,IAAMC,IAAI,GAAG,cAAb;EACA,IAAMC,IAAI,GAAG,UAAb;EACA,IAAMC,IAAI,GAAG,WAAb;EACA,IAAMriB,MAAM,GAAG,QAAf;EACA,IAAMsiB,GAAG,GAAG,YAAZ;EACA,IAAMp0B,KAAK,GAAG,OAAd;EACA,IAAMR,IAAI,GAAG,MAAb;EACA,IAAM4P,IAAI,GAAG,MAAb;EACA,IAAMilB,IAAI,GAAG,UAAb;;;EAIA,cAAc,GAAG;EACfp7B,EAAAA,CAAC,EAAE,CACD,CAAC,aAAD,EAAgBmW,IAAhB,CADC,EAED,CAAC,iBAAD,EAAoBilB,IAApB,CAFC;EAGD,GAAC,eAAD,EAAkBH,IAAlB,CAHC,EAID,CAAC,aAAD,EAAgBE,GAAhB,CAJC;EAAA,GADY;EAOfj7B,EAAAA,CAAC,EAAE,CAAC,CAAC,cAAD,EAAiB46B,GAAjB,CAAD,CAPY;EAQf36B,EAAAA,CAAC,EAAE;;EAGD,GAAC,2CAAD,EAA8C+6B,IAA9C,CAHC;;EAKD,GAAC,yBAAD,EAA4BA,IAA5B,CALC;;EAOD,GAAC,kBAAD,EAAqBA,IAArB,CAPC;;EASD,GAAC,cAAD,EAAiBA,IAAjB,CATC;EAUD,GAAC,iBAAD,EAAoBA,IAApB,CAVC;;EAYD,GAAC,eAAD,EAAkBA,IAAlB,CAZC;EAaD,GAAC,eAAD,EAAkBA,IAAlB,CAbC;;EAeD,GAAC,YAAD,EAAeA,IAAf,CAfC;EAgBD,GAAC,kBAAD,EAAqBA,IAArB,CAhBC;;EAkBD,GAAC,sBAAD,EAAyBA,IAAzB,CAlBC;;EAoBD,GAAC,oBAAD,EAAuBA,IAAvB,CApBC;;EAsBD,GAAC,kBAAD,EAAqBA,IAArB,CAtBC;;EAwBD,GAAC,cAAD,EAAiBA,IAAjB,CAxBC;EAyBD,GAAC,yBAAD,EAA4BA,IAA5B,CAzBC;;EA2BD,GAAC,mBAAD,EAAsBA,IAAtB,CA3BC;EA6BD,GAAC,cAAD,EAAiBD,IAAjB,CA7BC;EA8BD,GAAC,oBAAD,EAAuBH,GAAvB,CA9BC,EA+BD,CAAC,WAAD,EAAcA,GAAd,CA/BC,CARY;EAyCf16B,EAAAA,CAAC,EAAE,CACD,CAAC,YAAD,EAAe26B,GAAf,CADC,EAED,CAAC,eAAD,EAAkBA,GAAlB,CAFC,EAGD,CAAC,aAAD,EAAgBA,GAAhB,CAHC,EAID,CAAC,mBAAD,EAAsBD,GAAtB,CAJC,EAKD,CAAC,iBAAD,EAAoBA,GAApB,CALC,EAMD,CAAC,WAAD,EAAcA,GAAd,CANC,CAzCY;EAiDfv6B,EAAAA,CAAC,EAAE,CACD,CAAC,gBAAD,EAAmBu6B,GAAnB,CADC,EAED,CAAC,WAAD,EAAcM,IAAd,CAFC;EAGD,GAAC,SAAD,EAAYD,GAAZ,CAHC;EAID,GAAC,aAAD,EAAgBA,GAAhB,CAJC;EAAA,GAjDY;EAuDfz7B,EAAAA,CAAC,EAAE,CACD,CAAC,iBAAD,EAAoB07B,IAApB,CADC;EAAA,GAvDY;EA0Df16B,EAAAA,CAAC,EAAE,CACD,CAAC,QAAD,EAAWy6B,GAAX,CADC;EAAA,GA1DY;EA6Dfx6B,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAcm6B,GAAd,CADC,EAED,CAAC,eAAD,EAAkBA,GAAlB,CAFC,EAGD,CAAC,eAAD,EAAkBA,GAAlB,CAHC,EAID,CAAC,kBAAD,EAAqBA,GAArB,CAJC,CA7DY;EAmEfl6B,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkBq6B,IAAlB,CADC,EAED,CAAC,cAAD,EAAiBA,IAAjB,CAFC,EAGD,CAAC,UAAD,EAAaE,GAAb,CAHC;EAID,GAAC,cAAD,EAAiB,MAAjB,CAJC,CAnEY;EAyEft6B,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkBi6B,GAAlB,CADC,EAED,CAAC,gBAAD,EAAmB/zB,KAAnB,CAFC,EAGD,CAAC,kBAAD,EAAqB,QAArB,CAHC;EAAA,GAzEY;EA8EfjG,EAAAA,CAAC,EAAE,CACD,CAAC,OAAD,EAAUq6B,GAAV,CADC;EAED,GAAC,SAAD,EAAYA,GAAZ,CAFC;EAGD,GAAC,aAAD,EAAgBA,GAAhB,CAHC;EAAA,GA9EY;EAmFfl6B,EAAAA,CAAC,EAAE,CACD,CAAC,iBAAD,EAAoB,MAApB,CADC,EAED,CAAC,WAAD,EAAc,aAAd,CAFC,EAGD,CAAC,iBAAD,EAAoBg6B,IAApB,CAHC,EAID,CAAC,UAAD,EAAaF,GAAb,CAJC,EAKD,CAAC,oBAAD,EAAuBh0B,KAAvB,CALC,CAnFY;EA0Ff5F,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc,aAAd,CADC,EAED,CAAC,iBAAD,EAAoB25B,GAApB,CAFC,EAGD,CAAC,eAAD,EAAkBA,GAAlB,CAHC,EAID,CAAC,WAAD,EAAcv0B,IAAd,CAJC,CA1FY;EAgGfrF,EAAAA,CAAC,EAAE,CACD,CAAC,aAAD,EAAgB85B,IAAhB,CADC,EAED,CAAC,WAAD,EAAcz0B,IAAd,CAFC,EAGD,CAAC,aAAD,EAAgB00B,IAAhB,CAHC,EAID,CAAC,cAAD,EAAiBD,IAAjB,CAJC;EAKD,GAAC,cAAD,EAAiBA,IAAjB,CALC;EAMD,GAAC,oBAAD,EAAuBC,IAAvB,CANC,EAOD,CAAC,WAAD,EAAc9kB,IAAd,CAPC,EAQD,CAAC,QAAD,EAAWglB,GAAX,CARC;EAAA,GAhGY;EA0Gf95B,EAAAA,CAAC,EAAE,CACD,CAAC,uBAAD,EAA0B+5B,IAA1B,CADC;EAAA,GA1GY;EA6Gf55B,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAcs5B,GAAd,CADC,EAED,CAAC,UAAD,EAAaA,GAAb,CAFC,EAGD,CAAC,SAAD,EAAYA,GAAZ,CAHC,EAID,CAAC,YAAD,EAAeA,GAAf,CAJC,EAKD,CAAC,UAAD,EAAaG,IAAb,CALC,EAMD,CAAC,eAAD,EAAkBpiB,MAAlB,CANC,EAOD,CAAC,SAAD,EAAYA,MAAZ,CAPC,EAQD,CAAC,cAAD,EAAiBiiB,GAAjB,CARC,EASD,CAAC,gBAAD,EAAmBA,GAAnB,CATC,EAUD,CAAC,aAAD,EAAgBA,GAAhB,CAVC,EAWD,CAAC,YAAD,EAAeA,GAAf,CAXC,EAYD,CAAC,eAAD,EAAkBG,IAAlB,CAZC;EA7GY,CAAjB;;ECjBA;EACA,IAAMH,KAAG,GAAG,WAAZ;EACA,IAAMC,KAAG,GAAG,YAAZ;EACA,IAAMC,MAAI,GAAG,cAAb;EACA,IAAMC,MAAI,GAAG,UAAb;EACA,IAAMC,MAAI,GAAG,WAAb;EACA,IAAMG,GAAG,GAAG,QAAZ;EACA,IAAMC,IAAI,GAAG,QAAb;EACA,IAAMv0B,OAAK,GAAG,OAAd;EACA,IAAMw0B,EAAE,GAAG,MAAX;EACA,IAAMplB,MAAI,GAAG,MAAb;EACA,IAAMilB,MAAI,GAAG,UAAb;EACA,IAAMzjB,KAAK,GAAG,OAAd;;EAGA,aAAc,GAAG,CACf,IADe;EAEf,IAFe;EAGf;;EAEE6jB,EAAAA,EAAE,EAAEP,MAFN;EAGEQ,EAAAA,EAAE,EAAEtlB,MAHN;EAIEulB,EAAAA,EAAE,EAAEZ,KAJN;EAKEa,EAAAA,EAAE,EAAEN,GALN;EAME,QAAME,EANR;EAOE,QAAMA;EAPR,CAHe,EAYf;;EAEEK,EAAAA,GAAG,EAAEV,MAFP;EAGEW,EAAAA,GAAG,EAAEX,MAHP;EAIEY,EAAAA,GAAG,EAAEZ,MAJP;EAME,SAAOG,GANT;EAOE,SAAO1jB,KAPT;EAQE,SAAO,QART;EASEokB,EAAAA,GAAG,EAAEjB,KATP;EAUE51B,EAAAA,GAAG,EAAEq2B,EAVP;EAWES,EAAAA,GAAG,EAAEd,MAXP;EAYEe,EAAAA,GAAG,EAAEnB,KAZP;EAaEoB,EAAAA,GAAG,EAAEnB,KAbP;EAcEoB,EAAAA,GAAG,EAAE,QAdP;;EAeEC,EAAAA,GAAG,EAAErB,KAfP;EAgBEsB,EAAAA,GAAG,EAAEvB,KAhBP;EAiBEwB,EAAAA,GAAG,EAAExB,KAjBP;EAkBEyB,EAAAA,GAAG,EAAEvB,MAlBP;EAmBEwB,EAAAA,GAAG,EAAE1B,KAnBP;EAoBE2B,EAAAA,GAAG,EAAE3B,KApBP;EAqBE4B,EAAAA,GAAG,EAAE5B,KArBP;EAsBE6B,EAAAA,GAAG,EAAE7B,KAtBP;EAuBE8B,EAAAA,GAAG,EAAE9B,KAvBP;EAwBE+B,EAAAA,GAAG,EAAE5B,MAxBP;EAyBE6B,EAAAA,GAAG,EAAE7B,MAzBP;EA0BE8B,EAAAA,GAAG,EAAE/B;EA1BP,CAZe,EAwCf;;EAEEgC,EAAAA,IAAI,EAAE9B,MAFR;EAGE+B,EAAAA,IAAI,EAAE/B,MAHR;EAIEgC,EAAAA,IAAI,EAAEhC,MAJR;EAKEiC,EAAAA,IAAI,EAAEjC,MALR;EAMEkC,EAAAA,IAAI,EAAElC,MANR;EAOEmC,EAAAA,IAAI,EAAEnC,MAPR;EAQEoC,EAAAA,IAAI,EAAEpC,MARR;EAUEqC,EAAAA,IAAI,EAAEnC,MAVR;;EAWEoC,EAAAA,IAAI,EAAEzC,KAXR;EAYE0C,EAAAA,IAAI,EAAErC,MAZR;;EAaEsC,EAAAA,IAAI,EAAEtC,MAbR;;EAcEuC,EAAAA,IAAI,EAAE3C,MAdR;EAeE4C,EAAAA,IAAI,EAAErC,EAfR;EAgBEsC,EAAAA,IAAI,EAAEzC,MAhBR;;EAiBE0C,EAAAA,IAAI,EAAE7C,MAjBR;EAkBE8C,EAAAA,IAAI,EAAE/C,MAlBR;EAmBEgD,EAAAA,IAAI,EAAE3C,GAnBR;EAoBE4C,EAAAA,IAAI,EAAElD,KApBR;EAqBEmD,EAAAA,IAAI,EAAEpD,KArBR;EAsBEqD,EAAAA,IAAI,EAAE7C,IAtBR;EAuBE8C,EAAAA,IAAI,EAAE9C,IAvBR;EAwBE+C,EAAAA,IAAI,EAAE/C,IAxBR;EAyBEgD,EAAAA,IAAI,EAAEjD,GAzBR;EA0BEkD,EAAAA,IAAI,EAAEzD,KA1BR;EA2BE0D,EAAAA,IAAI,EAAE1D,KA3BR;EA4BE2D,EAAAA,IAAI,EAAErD,MA5BR;;EA6BEsD,EAAAA,IAAI,EAAE1D,MA7BR;EA8BE2D,EAAAA,IAAI,EAAEhnB,KA9BR;EA+BE7R,EAAAA,IAAI,EAAEg1B,KA/BR;EAgCE8D,EAAAA,IAAI,EAAExD,MAhCR;;EAiCEyD,EAAAA,IAAI,EAAE9D,KAjCR;EAkCE+D,EAAAA,IAAI,EAAE,OAlCR;EAmCEC,EAAAA,IAAI,EAAE9D,MAnCR;EAoCE+D,EAAAA,IAAI,EAAElE,KApCR;EAqCEmE,EAAAA,IAAI,EAAE9oB,MArCR;EAsCE+oB,EAAAA,IAAI,EAAEjE;EAtCR,CAxCe,EAgFf;;EAEEkE,EAAAA,KAAK,EAAEjE,MAFT;EAGEkE,EAAAA,KAAK,EAAElE,MAHT;EAIEmE,EAAAA,KAAK,EAAEnE,MAJT;EAMEoE,EAAAA,KAAK,EAAEhE,IANT;EAOEiE,EAAAA,KAAK,EAAEzE,KAPT;EAQE0E,EAAAA,KAAK,EAAElE,IART;EASEmE,EAAAA,KAAK,EAAEpE,GATT;EAUEqE,EAAAA,KAAK,EAAE1E,MAVT;EAWE2E,EAAAA,KAAK,EAAErE,IAXT;EAYEsE,EAAAA,KAAK,EAAExE,MAZT;;EAaEyE,EAAAA,KAAK,EAAEzE,MAbT;;EAcE0E,EAAAA,KAAK,EAAE3pB,MAdT;EAeE4pB,EAAAA,KAAK,EAAEzE,IAfT;EAgBE0E,EAAAA,KAAK,EAAElF,KAhBT;EAiBEmF,EAAAA,KAAK,EAAEjF,MAjBT;EAkBEkF,EAAAA,KAAK,EAAE,SAlBT;EAmBEC,EAAAA,KAAK,EAAE7E,IAnBT;EAoBE8E,EAAAA,KAAK,EAAE/E,GApBT;EAqBEgF,EAAAA,KAAK,EAAEhF;EArBT,CAhFe,EAuGf;;EAEEiF,EAAAA,MAAM,EAAElF,MAFV;;EAGEmF,EAAAA,MAAM,EAAEx5B,OAHV;EAIEy5B,EAAAA,MAAM,EAAEz5B,OAJV;EAKE05B,EAAAA,MAAM,EAAE;EALV,CAvGe,EA8Gf;;EAEEC,EAAAA,OAAO,EAAEtF,MAFX;;EAGEuF,EAAAA,OAAO,EAAEvF,MAHX;;EAAA,CA9Ge,CAAjB;;ECZA,IAAMwF,SAAS,GAAG,SAAZA,SAAY,CAASr4B,IAAT,EAAerC,KAAf,EAAsB;EACtC,MAAI1G,GAAG,GAAG+I,IAAI,CAAChG,KAAf;EACA,MAAIs+B,KAAI,GAAGrhC,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAd;;EACA,MAAIitB,UAAQ,CAAC3nB,cAAT,CAAwBy7B,KAAxB,MAAkC,IAAtC,EAA4C;EAC1C,QAAIvxB,IAAI,GAAGyd,UAAQ,CAAC8T,KAAD,CAAnB;;EACA,SAAK,IAAI5/B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,IAAI,CAACxP,MAAzB,EAAiCmB,CAAC,IAAI,CAAtC,EAAyC;EACvC,UAAIqO,IAAI,CAACrO,CAAD,CAAJ,CAAQ,CAAR,EAAWoB,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC+I,QAAAA,IAAI,CAAC6qB,OAAL,CAAa9jB,IAAI,CAACrO,CAAD,CAAJ,CAAQ,CAAR,CAAb,mBAAmC4/B,KAAnC,eAA4C5/B,CAA5C,GAAiDiF,KAAjD;EACA;EACD;EACF;EACF;EACF,CAZD;;;EAeA,IAAM46B,aAAa,GAAG,SAAhBA,aAAgB,CAASv4B,IAAT,EAAerC,KAAf,EAAsB;EAC1C,MAAMkU,GAAG,GAAG7R,IAAI,CAAChG,KAAL,CAAWzC,MAAvB;EACA,MAAImQ,GAAG,GAAG,CAAV;;EACA,MAAImK,GAAG,IAAInK,GAAX,EAAgB;EACdA,IAAAA,GAAG,GAAGmK,GAAG,GAAG,CAAZ;EACD;;EACD,OAAK,IAAI1a,CAAC,GAAGuQ,GAAb,EAAkBvQ,CAAC,GAAG,CAAtB,EAAyBA,CAAC,IAAI,CAA9B,EAAiC;EAC/B,QAAIF,GAAG,GAAG+I,IAAI,CAAChG,KAAL,CAAW2H,MAAX,CAAkBkQ,GAAG,GAAG1a,CAAxB,EAA2B0a,GAA3B,CAAV;;EACA,QAAI2mB,SAAS,CAACvhC,GAAG,CAACM,MAAL,CAAT,CAAsBsF,cAAtB,CAAqC5F,GAArC,MAA8C,IAAlD,EAAwD;EACtD,UAAI+F,GAAG,GAAGw7B,SAAS,CAACvhC,GAAG,CAACM,MAAL,CAAT,CAAsBN,GAAtB,CAAV;EACA+I,MAAAA,IAAI,CAAC6qB,OAAL,CAAa7tB,GAAb,EAAkB,aAAa/F,GAA/B,EAAoC0G,KAApC;EACA;EACD;EACF;EACF,CAdD;;;EAiBA,IAAM20B,YAAU,GAAG,SAAbA,UAAa,CAAStyB,IAAT,EAAerC,KAAf,EAAsB;EACvC46B,EAAAA,aAAa,CAACv4B,IAAD,EAAOrC,KAAP,CAAb;EACA06B,EAAAA,SAAS,CAACr4B,IAAD,EAAOrC,KAAP,CAAT;EACD,CAHD;;EAIA,eAAc,GAAG20B,YAAjB;;ECvCA;;;EAGA,aAAc,GAAG;EACf,QAAM,IADS;EAEf,QAAM,IAFS;EAGf,QAAM,IAHS;EAIf,QAAM,IAJS;EAKf,QAAM,IALS;EAMf,QAAM,IANS;EAOf,QAAM,IAPS;EAQf,QAAM,IARS;EASf,SAAO,IATQ;EAUf,QAAM,IAVS;EAWf,QAAM,IAXS;EAYf,QAAM,IAZS;EAaf,SAAO,IAbQ;EAcf,SAAO,IAdQ;EAef,SAAO,IAfQ;EAgBf,SAAO,IAhBQ;EAiBf,SAAO,IAjBQ;EAkBf,SAAO,IAlBQ;EAmBf,SAAO,IAnBQ;EAoBf,SAAO,IApBQ;EAqBf,UAAQ,IArBO;EAsBf,SAAO,IAtBQ;EAuBf,SAAO,IAvBQ;EAwBf,SAAO,IAxBQ;EAyBf,SAAO,IAzBQ;EA0Bf,SAAO,IA1BQ;EA2Bf,SAAO,IA3BQ;EA4Bf,SAAO,IA5BQ;EA6Bf,SAAO,IA7BQ;EA8Bf,SAAO,IA9BQ;EA+Bf,SAAO,IA/BQ;EAgCf,SAAO,IAhCQ;EAiCf,UAAQ,IAjCO;EAkCf,SAAO,IAlCQ;EAmCf,SAAO,IAnCQ;EAoCf,SAAO,IApCQ;EAqCf,QAAM,IArCS;EAsCf,QAAM,IAtCS;EAuCf,QAAM,IAvCS;EAwCf,QAAM,IAxCS;EAyCf,SAAO,IAzCQ;EA0Cf,SAAO,IA1CQ;EA2Cf,SAAO,IA3CQ;EA4Cf,SAAO,IA5CQ;EA6Cf,SAAO,IA7CQ;EA8Cf,SAAO,IA9CQ;EA+Cf,SAAO,IA/CQ;EAgDf,SAAO,IAhDQ;EAiDf,QAAM,IAjDS;EAkDf,SAAO,IAlDQ;EAmDf,UAAQ;EAnDO,CAAjB;;ECFA,IAAMmG,QAAQ,GAAG,oGAAjB;;;;;;;EASA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAAC,GAAG,EAAI;EAC1B,MAAIA,GAAG,CAACj3B,MAAJ,CAAW,CAAX,MAAkB,GAAtB,EAA2B;;EAEzB,QAAIi3B,GAAG,CAACn0B,KAAJ,CAAU,MAAV,MAAsB,IAA1B,EAAgC;EAC9B,aAAO,KAAP;EACD,KAJwB;;;EAMzB,QAAIm0B,GAAG,CAACn0B,KAAJ,CAAU,GAAV,CAAJ,EAAoB;EAClB,aAAO,KAAP;EACD,KARwB;;;EAUzB,QAAIm0B,GAAG,CAACphC,MAAJ,GAAa,EAAjB,EAAqB;EACnB,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAjBD;;;EAoBA,IAAMqhC,UAAU,GAAG,SAAbA,UAAa,CAAA3hC,GAAG,EAAI;EACxBA,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,OAAZ,EAAqB,GAArB,CAAN,CADwB;;EAExB,SAAOy+B,SAAQ,CAACh8B,cAAT,CAAwB5F,GAAxB,CAAP;EACD,CAHD;;EAKA,IAAM6hC,QAAQ,GAAG,SAAXA,QAAW,CAAC94B,IAAD,EAAOrC,KAAP,EAAiB;EAChC,MAAIg7B,GAAG,GAAG34B,IAAI,CAACpF,GAAL,GAAWoF,IAAI,CAAC9I,IAAhB,GAAuB8I,IAAI,CAACnF,IAAtC;EACA89B,EAAAA,GAAG,GAAGA,GAAG,CAACz+B,IAAJ,EAAN,CAFgC;;EAIhCy+B,EAAAA,GAAG,GAAGA,GAAG,CAACv+B,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,CAAN,CAJgC;;EAMhC,MAAIs+B,YAAY,CAACC,GAAD,CAAZ,KAAsB,IAA1B,EAAgC;EAC9B34B,IAAAA,IAAI,CAAChD,GAAL,CAAS,OAAT,EAAkB,aAAlB,EAAiCW,KAAjC;EACAqC,IAAAA,IAAI,CAAC9I,IAAL,GAAYyhC,GAAZ;EACA34B,IAAAA,IAAI,CAACpF,GAAL,GAAWoF,IAAI,CAACpF,GAAL,CAASR,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAX;EACA4F,IAAAA,IAAI,CAACnF,IAAL,GAAYmF,IAAI,CAACnF,IAAL,CAAUT,OAAV,CAAkB,GAAlB,EAAuB,EAAvB,CAAZ;EACD,GAX+B;;;EAahC,MAAI4F,IAAI,CAAC9I,IAAL,CAAUsN,KAAV,CAAgBi0B,QAAhB,CAAJ,EAA+B;EAC7Bz4B,IAAAA,IAAI,CAAChD,GAAL,CAAS,OAAT,EAAkB,eAAlB,EAAmCW,KAAnC;EACAqC,IAAAA,IAAI,CAAC9I,IAAL,GAAYyhC,GAAZ;EACD,GAhB+B;;;EAkBhC,MAAIC,UAAU,CAACD,GAAD,CAAV,KAAoB,IAAxB,EAA8B;EAC5B34B,IAAAA,IAAI,CAAChD,GAAL,CAAS,UAAT,EAAqB,gBAArB,EAAuCW,KAAvC;EACAqC,IAAAA,IAAI,CAAC9I,IAAL,GAAYyhC,GAAZ;EACD;EACF,CAtBD;;EAwBA,YAAc,GAAGG,QAAjB;;EC3DA,IAAMC,KAAK,GAAG;EACZjlB,EAAAA,OAAO,EAAErT,UADG;EAEZjB,EAAAA,WAAW,EAAEkB,gBAFD;EAGZvD,EAAAA,KAAK,EAAEwD,WAHK;EAIZovB,EAAAA,MAAM,EAAEnvB,WAJI;EAKZytB,EAAAA,KAAK,EAAExtB;EALK,CAAd;;EASA,IAAMqpB,OAAO,GAAG,SAAVA,OAAU,CAAS5kB,GAAT,EAAcnC,KAAd,EAAqB;EACnC,MAAIxF,KAAK,GAAG2H,GAAG,CAAC3H,KAAhB,CADmC;;EAGnCo7B,EAAAA,KAAK,CAACjlB,OAAN,CAAc3Q,KAAd,EAAqBxF,KAArB,EAHmC;;EAMnC,OAAK,IAAIxG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI6I,IAAI,GAAGmD,KAAK,CAAChM,CAAD,CAAhB,CADwC;;EAGxC4hC,IAAAA,KAAK,CAACv5B,WAAN,CAAkB2D,KAAlB,EAAyBhM,CAAzB,EAA4BwG,KAA5B,EAHwC;;EAKxCo7B,IAAAA,KAAK,CAAC57B,KAAN,CAAY6C,IAAZ,EAAkBrC,KAAlB,EALwC;;EAOxCo7B,IAAAA,KAAK,CAAChJ,MAAN,CAAa/vB,IAAb,EAAmBrC,KAAnB,EAPwC;;EASxCo7B,IAAAA,KAAK,CAAC1K,KAAN,CAAYruB,IAAZ,EAAkBrC,KAAlB;EACD;;EACD,SAAO2H,GAAP;EACD,CAlBD;;EAmBA,WAAc,GAAG4kB,OAAjB;;EC5BA;;;;EAKA,IAAI8O,aAAa,GAAG;EAClB7hC,EAAAA,CAAC,EAAE,MADe;;EAElBqS,EAAAA,KAAK,EAAE,MAFW;;EAGlByvB,EAAAA,EAAE,EAAE,MAHc;;EAIlBC,EAAAA,KAAK,EAAE,MAJW;;EAKlB5P,EAAAA,GAAG,EAAE,MALa;;EAMlB6P,EAAAA,OAAO,EAAE,MANS;;EAOlB,QAAI,MAPc;;EAQlBC,EAAAA,GAAG,EAAE,MARa;;EASlBC,EAAAA,GAAG,EAAE,MATa;;EAUlB,UAAM,MAVY;;EAWlBC,EAAAA,GAAG,EAAE,MAXa;;EAYlBC,EAAAA,IAAI,EAAE,MAZY;;EAalBC,EAAAA,GAAG,EAAE,MAba;;EAclBC,EAAAA,IAAI,EAAE,WAdY;;EAelBC,EAAAA,GAAG,EAAE,MAfa;;EAgBlBC,EAAAA,KAAK,EAAE,MAhBW;;EAiBlB56B,EAAAA,MAAM,EAAE,MAjBU;;EAAA,CAApB;;EAqBA,IAAI66B,cAAc,GAAG;EACnBV,EAAAA,KAAK,EAAE,MADY;;EAEnBW,EAAAA,EAAE,EAAE,MAFe;;EAGnBxiB,EAAAA,GAAG,EAAE,WAHc;;EAInByiB,EAAAA,IAAI,EAAE,MAJa;;EAKnBC,EAAAA,GAAG,EAAE,MALc;;EAMnBC,EAAAA,IAAI,EAAE,MANa;;EAOnBC,EAAAA,IAAI,EAAE,MAPa;;EAQnBC,EAAAA,OAAO,EAAE,MARU;;EASnBC,EAAAA,IAAI,EAAE,MATa;;EAUnBd,EAAAA,GAAG,EAAE,MAVc;;EAWnBe,EAAAA,EAAE,EAAE;EAXe,CAArB;;EAeA,IAAIC,YAAY,GAAG;EACjBpqB,EAAAA,SAAS,EAAE,MADM;;EAEjBnQ,EAAAA,UAAU,EAAE,MAFK;;EAGjB6Q,EAAAA,UAAU,EAAE,MAHK;;EAIjBL,EAAAA,MAAM,EAAE,MAJS;;EAKjBxB,EAAAA,OAAO,EAAE,MALQ;;EAMjBW,EAAAA,KAAK,EAAE,MANU;;EAOjBC,EAAAA,OAAO,EAAE,MAPQ;;EAQjBN,EAAAA,KAAK,EAAE,MARU;;EASjBgB,EAAAA,WAAW,EAAE,MATI;;EAUjBnB,EAAAA,OAAO,EAAE,MAVQ;;EAWjBd,EAAAA,SAAS,EAAE,QAXM;;EAAA,CAAnB;;EAeA,IAAImsB,aAAa,GAAG;EAClBnrB,EAAAA,MAAM,EAAE,MADU;;EAElB/Q,EAAAA,SAAS,EAAE,MAFO;;EAGlBwS,EAAAA,WAAW,EAAE,MAHK;;EAIlBxB,EAAAA,KAAK,EAAE,MAJW;;EAKlBE,EAAAA,UAAU,EAAE,MALM;;EAMlBD,EAAAA,YAAY,EAAE,MANI;;EAAA,CAApB;EAQA,UAAc,GAAG;EACfuqB,EAAAA,cAAc,EAAEA,cADD;EAEfZ,EAAAA,aAAa,EAAEA,aAFA;EAIfuB,EAAAA,aAAa,EAAED,aAJA;EAKfE,EAAAA,YAAY,EAAEH;EALC,CAAjB;;EC/DA,IAAMI,SAAS,GAAGrhC,MAAM,CAACC,IAAP,CAAYqhC,MAAM,CAACF,YAAnB,CAAlB;EACA,IAAMG,UAAU,GAAGvhC,MAAM,CAACC,IAAP,CAAYqhC,MAAM,CAACH,aAAnB,CAAnB;;EAEA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAASz3B,KAAT,EAAgBxF,KAAhB,EAAuB;EAAA,6BACpCxG,CADoC;EAE3C,QAAI6I,IAAI,GAAGmD,KAAK,CAAChM,CAAD,CAAhB,CAF2C;;EAI3C,QAAI6I,IAAI,CAAC66B,OAAL,OAAmB,IAAvB,EAA6B;EAC3B;EACD,KAN0C;;;;EAS3C,QAAIx2B,QAAQ,GAAGlB,KAAK,CAAChM,CAAC,GAAG,CAAL,CAApB;;EACA,QAAIkN,QAAJ,EAAc;;EAEZ,UAAIq2B,MAAM,CAAC1B,aAAP,CAAqBn8B,cAArB,CAAoCwH,QAAQ,CAACrK,KAA7C,MAAwD,IAA5D,EAAkE;EAChE,YAAIgD,GAAG,GAAG09B,MAAM,CAAC1B,aAAP,CAAqB30B,QAAQ,CAACrK,KAA9B,CAAV;EACAgG,QAAAA,IAAI,CAAChD,GAAL,CAASA,GAAT,EAAc,WAAWqH,QAAQ,CAACrK,KAAlC,EAAyC2D,KAAzC;EACA;EACD,OANW;;;;EASZ,UAAIm9B,QAAQ,GAAGL,SAAS,CAACr0B,IAAV,CAAe,UAAApJ,GAAG;EAAA,eAAIqH,QAAQ,CAACpH,IAAT,CAAcD,GAAd,CAAJ;EAAA,OAAlB,CAAf;;EACA,UAAI89B,QAAQ,KAAKl+B,SAAjB,EAA4B;EAC1B,YAAII,IAAG,GAAG09B,MAAM,CAACF,YAAP,CAAoBM,QAApB,CAAV;EACA96B,QAAAA,IAAI,CAAChD,GAAL,CAASA,IAAT,EAAc,WAAW89B,QAAzB,EAAmCn9B,KAAnC;EACA;EACD;EACF,KAzB0C;;;EA4B3C,QAAIo9B,QAAQ,GAAG53B,KAAK,CAAChM,CAAC,GAAG,CAAL,CAApB;;EACA,QAAI4jC,QAAJ,EAAc;;EAEZ,UAAIL,MAAM,CAACd,cAAP,CAAsB/8B,cAAtB,CAAqCk+B,QAAQ,CAAC/gC,KAA9C,MAAyD,IAA7D,EAAmE;EACjE,YAAIgD,KAAG,GAAG09B,MAAM,CAACd,cAAP,CAAsBmB,QAAQ,CAAC/gC,KAA/B,CAAV;EACAgG,QAAAA,IAAI,CAAChD,GAAL,CAASA,KAAT,EAAc,YAAY+9B,QAAQ,CAAC/gC,KAAnC,EAA0C2D,KAA1C;EACA;EACD,OANW;;;;EASZ,UAAIm9B,SAAQ,GAAGH,UAAU,CAACv0B,IAAX,CAAgB,UAAApJ,GAAG;EAAA,eAAI+9B,QAAQ,CAAC99B,IAAT,CAAcD,GAAd,CAAJ;EAAA,OAAnB,CAAf;;EACA,UAAI89B,SAAQ,KAAKl+B,SAAjB,EAA4B;EAC1B,YAAII,KAAG,GAAG09B,MAAM,CAACH,aAAP,CAAqBO,SAArB,CAAV;EACA96B,QAAAA,IAAI,CAAChD,GAAL,CAASA,KAAT,EAAc,YAAY89B,SAA1B,EAAoCn9B,KAApC;EACA;EACD;EACF;EA5C0C;;EAC7C,OAAK,IAAIxG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EAAA,qBAAjCA,CAAiC;;EAAA,6BAyCpC;EAGL;EACF,CA9CD;;EA+CA,iBAAc,GAAGyjC,eAAjB;;ECnDA,IAAMv/B,WAAS,GAAG,2BAAlB;EACA,IAAM2/B,SAAS,GAAG,OAAlB;;;EAGA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS31B,GAAT,EAAc;EAC9B,MAAI3H,KAAK,GAAG2H,GAAG,CAAC3H,KAAhB;EACA2H,EAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;;EACA,SAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAM6I,IAAI,GAAGmD,KAAK,CAAChM,CAAD,CAAlB;;EACA,UAAIkE,WAAS,CAACvB,IAAV,CAAekG,IAAI,CAAC9I,IAApB,MAA8B,IAA9B,IAAsC8jC,SAAS,CAAClhC,IAAV,CAAekG,IAAI,CAAC9I,IAApB,MAA8B,KAAxE,EAA+E;EAC7E8I,QAAAA,IAAI,CAAChD,GAAL,CAAS,YAAT,EAAuB,gBAAvB,EAAyCW,KAAzC;EACD;EACF;EACF,GARD;EASD,CAXD;;EAYA,WAAc,GAAGs9B,SAAjB;;EChBA,IAAMC,SAAS,GAAG,8BAAlB;EACA,IAAMC,MAAM,GAAG,YAAf;;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASj4B,KAAT,EAAgBxF,KAAhB,EAAuB;EACzC,MAAIiW,GAAG,GAAGjW,KAAK,CAAC2J,KAAhB;EACAnE,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAA0G,IAAI,EAAI;;EAEpB,QAAIA,IAAI,CAAC66B,OAAL,OAAmB,IAAvB,EAA6B;EAC3B;EACD,KAJmB;;;EAMpB,QAAIK,SAAS,CAACphC,IAAV,CAAekG,IAAI,CAAChG,KAApB,MAA+B,IAAnC,EAAyC;;EAEvC,UAAIqhC,IAAI,GAAGr7B,IAAI,CAAChG,KAAL,CAAWI,OAAX,CAAmB+gC,MAAnB,EAA2B,EAA3B,CAAX;;EACA,UAAIE,IAAI,IAAIA,IAAI,CAAC9jC,MAAL,GAAc,CAAtB,IAA2Bqc,GAAG,CAACynB,IAAD,CAAH,KAAcz+B,SAAzC,IAAsDgX,GAAG,CAAC/W,cAAJ,CAAmBw+B,IAAnB,MAA6B,IAAvF,EAA6F;EAC3Fr7B,QAAAA,IAAI,CAAChD,GAAL,CAAS4W,GAAG,CAACynB,IAAD,CAAZ,EAAoB,UAAUA,IAA9B,EAAoC19B,KAApC;EACD;EACF;EACF,GAbD;EAcD,CAhBD;;EAiBA,WAAc,GAAGy9B,WAAjB;;ECrBA;EACA,IAAME,QAAQ,GAAG,CACf,WADe,EAEf,QAFe,EAGf,QAHe,EAIf,uCAJe,EAKf,4CALe,EAMf,4BANe,EAOf,kDAPe,EAQf,uBARe,EASf,qBATe,EAUf,wBAVe,EAWf,MAXe,EAYf,OAZe,EAaf,QAbe,EAcf,QAde,EAef,WAfe,EAgBf,WAhBe,EAiBf,mBAjBe,EAkBf,YAlBe,EAmBf,oBAnBe,EAoBf,oBApBe,EAqBf,OArBe,CAAjB;;EAyBA,IAAMC,UAAU,GAAG,CACjB,eADiB,EAEjB,6CAFiB,EAGjB,gBAHiB,EAIjB,SAJiB,EAKjB,kBALiB,EAMjB,SANiB,EAOjB,2BAPiB,EAQjB,UARiB,EASjB,SATiB,EAUjB,OAViB,EAWjB,oBAXiB,EAYjB,QAZiB,EAajB,eAbiB;EAcjB,iBAdiB,EAejB,kBAfiB,EAgBjB,+BAhBiB,EAiBjB,aAjBiB,EAkBjB,YAlBiB,EAmBjB,sCAnBiB,EAoBjB,QApBiB,EAqBjB,0BArBiB,CAAnB;EAuBA,cAAc,GAAG;EACfA,EAAAA,UAAU,EAAEA,UADG;EAEfD,EAAAA,QAAQ,EAAEA;EAFK,CAAjB;;EChDA,IAAME,SAAS,GAAG,CAAC,aAAD,EAAgB,SAAhB,EAA2B,OAA3B,EAAoC,OAApC,EAA6C,QAA7C,EAAuD,OAAvD,EAAgE,SAAhE,EAA2E,SAA3E,CAAlB;EAEA,IAAMC,SAAS,GAAG,CAAC,KAAD,EAAQ,MAAR,EAAgB,gBAAhB,EAAkC,KAAlC,CAAlB;EACA,IAAMC,WAAW,GAAG,CAAC,IAAD,EAAO,KAAP,CAApB;;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS/iC,CAAT,EAAY+E,KAAZ,EAAmB;EACrC,MAAI/E,CAAC,CAACqE,IAAF,CAAO2Q,IAAP,IAAe,CAAChV,CAAC,CAACqE,IAAF,CAAOkC,OAA3B,EAAoC;EAClC,QAAIlI,GAAG,GAAG2B,CAAC,CAACoB,KAAZ,CADkC;;EAGlC,QAAIpB,CAAC,CAACqE,IAAF,CAAO4Q,QAAP,IAAmBjV,CAAC,CAACqE,IAAF,CAAOa,MAA9B,EAAsC;EACpC;EACD,KALiC;;;EAOlC,QAAI7G,GAAG,CAACM,MAAJ,IAAc,CAAlB,EAAqB;EACnBqB,MAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,gBAAlB,EAAoCW,KAApC;EACA;EACD,KAViC;;;EAYlC,QAAI69B,SAAS,CAACp1B,IAAV,CAAe,UAAApJ,GAAG;EAAA,aAAIpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,CAAJ;EAAA,KAAlB,CAAJ,EAAwC;EACtC;EACD,KAdiC;;;EAgBlC,QAAIkqB,UAAK,CAACoU,QAAN,CAAel1B,IAAf,CAAoB,UAAA9J,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAAvB,CAAJ,EAA+C;EAC7C2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,QAAN,EAAgB,cAAhB,EAAgCW,KAAhC;EACA;EACD,KAnBiC;;;EAqBlC,QAAIupB,UAAK,CAACqU,UAAN,CAAiBn1B,IAAjB,CAAsB,UAAA9J,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAAzB,CAAJ,EAAiD;EAC/C2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,gBAAlB,EAAoCW,KAApC;EACA;EACD,KAxBiC;;;EA2BlC,QAAI,KAAK7D,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;;EAE3B,UAAIwkC,SAAS,CAACr1B,IAAV,CAAe,UAAA9J,GAAG;EAAA,eAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,OAAlB,CAAJ,EAA0C;EACxC;EACD;;EACD2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,QAAN,EAAgB,iBAAhB,EAAmCW,KAAnC;EACA;EACD,KAlCiC;;;EAoClC,QAAI+9B,WAAW,CAACt1B,IAAZ,CAAiB,UAAA9J,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAApB,CAAJ,EAA4C;EAC1C;EACD;;EACD2B,IAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,mBAAlB,EAAuCW,KAAvC;EACD;EACF,CA1CD;;EA2CA,cAAc,GAAGg+B,WAAjB;;EClDA;;EAEA,IAAMC,QAAQ,GAAG,CACf,SADe,EAEf,gBAFe,EAGf,QAHe,EAIf,SAJe,EAKf,UALe,EAMf,QANe,EAOf,UAPe,EAQf,SARe,EASf,MATe,EAUf,OAVe,EAWf,YAXe,EAYf,aAZe,EAaf,WAbe,EAcf,WAde,EAef,UAfe,EAgBf,UAhBe,EAiBf,MAjBe,EAkBf,QAlBe,EAmBf,OAnBe,EAoBf,MApBe,EAqBf,QArBe,EAsBf,SAtBe,EAuBf,aAvBe,EAwBf,UAxBe,EAyBf,kBAzBe,EA0Bf,QA1Be,EA2Bf,MA3Be,EA4Bf,QA5Be,EA6Bf,SA7Be,EA8Bf,MA9Be,EA+Bf,WA/Be,EAgCf,QAhCe,EAiCf,cAjCe,EAkCf,QAlCe,EAmCf,WAnCe,EAoCf,OApCe,EAqCf,WArCe,EAsCf,QAtCe,EAuCf,QAvCe,EAwCf,QAxCe,EAyCf,UAzCe,EA0Cf,MA1Ce,EA2Cf,IA3Ce,EA4Cf,WA5Ce,EA6Cf,QA7Ce,EA8Cf,YA9Ce,EA+Cf,SA/Ce,EAgDf,YAhDe,EAiDf,WAjDe,EAkDf,gBAlDe,EAmDf,WAnDe,EAoDf,SApDe,EAqDf,eArDe,EAsDf,WAtDe,EAuDf,eAvDe,EAwDf,YAxDe,EAyDf,SAzDe,EA0Df,YA1De,EA2Df,YA3De,EA4Df,aA5De,EA6Df,OA7De,EA8Df,MA9De,EA+Df,SA/De,EAgEf,MAhEe,EAiEf,YAjEe,EAkEf,MAlEe,EAmEf,aAnEe,EAoEf,YApEe,EAqEf,kBArEe,EAsEf,aAtEe,EAuEf,QAvEe,EAwEf,aAxEe,EAyEf,aAzEe,EA0Ef,UA1Ee,EA2Ef,UA3Ee,EA4Ef,WA5Ee,EA6Ef,QA7Ee,EA8Ef,UA9Ee,EA+Ef,aA/Ee,EAgFf,QAhFe,EAiFf,UAjFe,EAkFf,YAlFe,EAmFf,aAnFe,EAoFf,eApFe,EAqFf,QArFe,EAsFf,MAtFe,EAuFf,cAvFe,EAwFf,SAxFe,EAyFf,YAzFe,EA0Ff,WA1Fe,EA2Ff,IA3Fe,EA4Ff,YA5Fe,EA6Ff,MA7Fe,EA8Ff,KA9Fe,EA+Ff,SA/Fe,EAgGf,OAhGe,EAiGf,YAjGe,EAkGf,OAlGe,EAmGf,OAnGe,EAoGf,kBApGe,EAqGf,QArGe,EAsGf,UAtGe,EAuGf,UAvGe,EAwGf,OAxGe,EAyGf,QAzGe,EA0Gf,KA1Ge,EA2Gf,YA3Ge,EA4Gf,UA5Ge,EA6Gf,WA7Ge,EA8Gf,yBA9Ge,EA+Gf,YA/Ge,EAgHf,WAhHe,EAiHf,eAjHe,EAkHf,YAlHe,EAmHf,YAnHe,EAoHf,aApHe,EAqHf,WArHe,EAsHf,SAtHe,EAuHf,YAvHe,EAwHf,MAxHe;EA0Hf,iBA1He,EA2Hf,SA3He,EA4Hf,iBA5He,EA6Hf,wBA7He,EA8Hf,UA9He,EA+Hf,UA/He,EAgIf,YAhIe,EAiIf,QAjIe,EAkIf,WAlIe,EAmIf,SAnIe,EAoIf,OApIe,EAqIf,UArIe,EAsIf,qBAtIe,EAuIf,WAvIe,EAwIf,UAxIe,EAyIf,UAzIe,EA0If,QA1Ie,EA2If,OA3Ie,EA4If,QA5Ie,EA6If,OA7Ie,EA8If,QA9Ie;EAgJf,MAhJe,EAiJf,cAjJe,EAkJf,aAlJe,EAmJf,QAnJe,EAoJf,KApJe,EAqJf,SArJe,EAsJf,WAtJe,EAuJf,cAvJe,EAwJf,UAxJe,EAyJf,aAzJe;EA2Jf,gBA3Je,EA4Jf,QA5Je,EA6Jf,WA7Je,EA8Jf,YA9Je,EA+Jf,gBA/Je,EAgKf,iBAhKe,EAiKf,OAjKe,EAkKf,KAlKe,EAmKf,QAnKe,EAoKf,aApKe,EAqKf,MArKe,EAsKf,OAtKe,EAuKf,OAvKe,EAwKf,aAxKe,EAyKf,SAzKe,EA0Kf,OA1Ke,EA2Kf,oBA3Ke,EA4Kf,2BA5Ke,EA6Kf,SA7Ke,EA8Kf,WA9Ke,EA+Kf,YA/Ke,EAgLf,aAhLe,EAiLf,SAjLe,EAkLf,QAlLe,EAmLf,YAnLe,EAoLf,SApLe,EAqLf,UArLe,EAsLf,aAtLe,EAuLf,SAvLe,EAwLf,SAxLe,EAyLf,MAzLe,EA0Lf,UA1Le,EA2Lf,cA3Le,EA4Lf,kBA5Le,EA6Lf,gBA7Le,EA8Lf,cA9Le,EA+Lf,UA/Le,EAgMf,SAhMe,EAiMf,oBAjMe,EAkMf,WAlMe,EAmMf,YAnMe,EAoMf,OApMe,EAqMf,UArMe,EAsMf,IAtMe,EAuMf,OAvMe,EAwMf,YAxMe,EAyMf,WAzMe,EA0Mf,SA1Me,CAAjB;EA6MA,iBAAc,GAAGA,QAAQ,CAAC1gC,MAAT,CAAgB,UAASlD,CAAT,EAAYf,GAAZ,EAAiB;EAChDe,EAAAA,CAAC,CAACf,GAAD,CAAD,GAAS,MAAT;EACA,SAAOe,CAAP;EACD,CAHgB,EAGd,EAHc,CAAjB;;EC5MA,IAAM6jC,QAAQ,GAAG,SAAXA,QAAW,CAASjjC,CAAT,EAAY;;EAE3B,MAAI,CAACA,CAAC,CAACqE,IAAF,CAAO2Q,IAAZ,EAAkB;EAChB,WAAO,KAAP;EACD,GAJ0B;;;EAM3B,MAAIhV,CAAC,CAACqE,IAAF,CAAO6R,OAAP,IAAkBlW,CAAC,CAACqE,IAAF,CAAO6+B,KAAzB,IAAkCljC,CAAC,CAACqE,IAAF,CAAO6C,UAA7C,EAAyD;EACvD,WAAO,KAAP;EACD,GAR0B;;;EAU3B,MAAIlH,CAAC,CAACqE,IAAF,CAAOwR,YAAP,IAAuB7V,CAAC,CAACqE,IAAF,CAAOkC,OAA9B,IAAyCvG,CAAC,CAACqE,IAAF,CAAOmR,KAAhD,IAAyDxV,CAAC,CAACyC,SAAF,EAA7D,EAA4E;EAC1E,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAdD;;EAgBA,IAAM0gC,OAAO,GAAG,SAAVA,OAAU,CAAS54B,KAAT,EAAgBxF,KAAhB,EAAuB;EACrC,OAAK,IAAIxG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIyB,CAAC,GAAGuK,KAAK,CAAChM,CAAD,CAAb;;EACA,QAAIykC,aAAQ,CAAChjC,CAAC,CAACoB,KAAH,CAAR,KAAsB4C,SAAtB,IAAmCg/B,aAAQ,CAAC/+B,cAAT,CAAwBjE,CAAC,CAACoB,KAA1B,MAAqC,IAA5E,EAAkF;;EAEhF,UAAIqK,QAAQ,GAAGlB,KAAK,CAAChM,CAAC,GAAG,CAAL,CAApB;;EACA,UAAIkN,QAAQ,KAAKzH,SAAb,IAA0Bi/B,QAAQ,CAACx3B,QAAD,CAAR,KAAuB,IAArD,EAA2D;EACzDA,QAAAA,QAAQ,CAACwmB,OAAT,CAAiB,cAAjB,EAAiC,YAAjC,EAA+CltB,KAA/C;EACA/E,QAAAA,CAAC,CAACiyB,OAAF,CAAU,cAAV,EAA0B,YAA1B,EAAwCltB,KAAxC;EACA;EACD,OAP+E;;;EAShF,UAAIo9B,QAAQ,GAAG53B,KAAK,CAAChM,CAAC,GAAG,CAAL,CAApB;;EACA,UAAI4jC,QAAQ,KAAKn+B,SAAb,IAA0Bm+B,QAAQ,CAAC/gC,KAAT,KAAmB,IAAjD,EAAuD;EACrD,YAAImJ,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAL,IAAgB0kC,QAAQ,CAAC14B,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAN,CAA5B,EAA4C;EAC1CyB,UAAAA,CAAC,CAACiyB,OAAF,CAAU,cAAV,EAA0B,eAA1B,EAA2CltB,KAA3C;EACAo9B,UAAAA,QAAQ,CAAClQ,OAAT,CAAiB,cAAjB,EAAiC,eAAjC,EAAkDltB,KAAlD;EACAwF,UAAAA,KAAK,CAAChM,CAAC,GAAG,CAAL,CAAL,CAAa0zB,OAAb,CAAqB,cAArB,EAAqC,eAArC,EAAsDltB,KAAtD;EACA;EACD;EACF;EACF;EACF;EACF,CAvBD;;EAwBA,oBAAc,GAAGo+B,OAAjB;;EC3CA,IAAMC,IAAI,GAAG;EACXC,EAAAA,UAAU,EAAEx7B,aADD;EAEX,UAAMC,OAFK;EAGX26B,EAAAA,IAAI,EAAE16B,OAHK;EAIXqT,EAAAA,MAAM,EAAEpT,UAJG;EAKXswB,EAAAA,aAAa,EAAErwB;EALJ,CAAb;;EAQA,IAAMq7B,SAAS,GAAG,SAAZA,SAAY,CAAS52B,GAAT,EAAcnC,KAAd,EAAqB;EACrC,MAAIxF,KAAK,GAAG2H,GAAG,CAAC3H,KAAhB,CADqC;;EAIrCq+B,EAAAA,IAAI,CAACC,UAAL,CAAgB94B,KAAhB,EAAuBxF,KAAvB,EAJqC;;EAOrCq+B,EAAAA,IAAI,QAAJ,CAAU12B,GAAV,EAPqC;;EAUrC02B,EAAAA,IAAI,CAACX,IAAL,CAAUl4B,KAAV,EAAiBxF,KAAjB,EAVqC;;EAarCwF,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,QAAIA,CAAC,CAACiiC,OAAF,OAAgB,KAApB,EAA2B;EACzBjiC,MAAAA,CAAC,CAACoE,GAAF,CAAM,MAAN,EAAc,eAAd,EAA+BsI,GAAG,CAAC3H,KAAnC;EACD;EACF,GAJD,EAbqC;;EAoBrCq+B,EAAAA,IAAI,CAAC9K,aAAL,CAAmB/tB,KAAnB,EAA0BxF,KAA1B,EApBqC;;EAuBrCwF,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBojC,IAAAA,IAAI,CAAChoB,MAAL,CAAYpb,CAAZ,EAAe0M,GAAG,CAAC3H,KAAnB;EACD,GAFD;EAIA,SAAO2H,GAAP;EACD,CA5BD;;EA6BA,gBAAc,GAAG42B,SAAjB;;ECrCA,IAAMC,WAAW,GAAG,MAApB;EAEA,IAAM7nB,YAAU,GAAG;EACjB,WAAS,CAAC,MAAD,EAAS,KAAT,CADQ;EAEjB8nB,EAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,KAAT,CAFW;EAGjB,WAAS,CAAC,KAAD,EAAQ,KAAR,CAHQ;EAIjBC,EAAAA,IAAI,EAAE,CAAC,KAAD,EAAQ,KAAR,CAJW;EAKjBC,EAAAA,MAAM,EAAE,CAAC,KAAD,EAAQ,KAAR,CALS;EAMjB,YAAU,CAAC,QAAD,EAAW,KAAX,CANO;EAOjBC,EAAAA,IAAI,EAAE,CAAC,IAAD,EAAO,KAAP,CAPW;EAQjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,KAAP,CARY;;EAAA,CAAnB;;EAaA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASz8B,IAAT,EAAemG,MAAf,EAAuB;EACpC,MAAIhD,KAAK,GAAGgD,MAAM,CAACjD,KAAP,CAAaC,KAAb,IAAsBgD,MAAM,CAAChD,KAAP,EAAlC;EACA,MAAI5G,KAAK,GAAG4G,KAAK,CAACtH,OAAN,CAAcmE,IAAd,CAAZ;EACA,MAAIjB,MAAM,GAAGoE,KAAK,CAACyD,KAAN,CAAY,CAAZ,EAAerK,KAAf,CAAb,CAHoC;;EAKpC,MAAImgC,IAAI,GAAG39B,MAAM,CAACqH,IAAP,CAAY,UAAAxN,CAAC,EAAI;EAC1B,WAAOA,CAAC,CAACqE,IAAF,CAAO2Q,IAAd;EACD,GAFU,CAAX;;EAGA,MAAI8uB,IAAI,IAAIA,IAAI,CAACz/B,IAAL,CAAUa,MAAtB,EAA8B;EAC5B,WAAO,CAAC,KAAD,EAAQ,KAAR,CAAP;EACD;;EACD,SAAO,CAAC,IAAD,EAAO,KAAP,CAAP;EACD,CAZD;;EAcA,IAAM6+B,aAAa,GAAG,SAAhBA,aAAgB,CAAS38B,IAAT,EAAemG,MAAf,EAAuB;;EAE3C,MAAImO,YAAU,CAACzX,cAAX,CAA0BmD,IAAI,CAAChG,KAA/B,MAA0C,IAA9C,EAAoD;EAClD,WAAOsa,YAAU,CAACtU,IAAI,CAAChG,KAAN,CAAjB;EACD,GAJ0C;;;EAM3C,MAAIgG,IAAI,CAAChG,KAAL,gBAA0BgG,IAAI,CAAChG,KAAL,KAAe,MAA7C,EAAqD;EACnD,WAAOyiC,MAAM,CAACz8B,IAAD,EAAOmG,MAAP,CAAb;EACD,GAR0C;;;EAU3C,MAAIg2B,WAAW,CAACriC,IAAZ,CAAiBkG,IAAI,CAAChG,KAAtB,MAAiC,IAArC,EAA2C;EACzC,QAAI8L,IAAI,GAAG9F,IAAI,CAAChG,KAAL,CAAWI,OAAX,CAAmB+hC,WAAnB,EAAgC,EAAhC,CAAX;EACA,WAAO,CAACr2B,IAAD,EAAO,KAAP,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CAfD;;EAgBA,eAAc,GAAG62B,aAAjB;;EC7CA,IAAM9N,WAAW,GAAG,yGAApB;;EAGA,IAAM+N,IAAI,GAAG;EACXC,EAAAA,EAAE,EAAE,MADO;EAEXC,EAAAA,EAAE,EAAE,MAFO;EAGXC,EAAAA,EAAE,EAAE,KAHO;EAIX1kC,EAAAA,CAAC,EAAE,IAJQ;EAKX,SAAO;EALI,CAAb;;EAQA,IAAM2kC,eAAe,GAAG,SAAlBA,eAAkB,CAASh9B,IAAT,EAAe;EACrC,MAAImvB,KAAK,GAAGnvB,IAAI,CAAC9I,IAAL,CAAUsN,KAAV,CAAgBqqB,WAAhB,CAAZ;;EACA,MAAIM,KAAK,KAAK,IAAd,EAAoB;EAClB,WAAO,IAAP;EACD;;EACD,MAAIyN,IAAI,CAAC//B,cAAL,CAAoBsyB,KAAK,CAAC,CAAD,CAAzB,CAAJ,EAAmC;EACjC,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAWyN,IAAI,CAACzN,KAAK,CAAC,CAAD,CAAN,CAAf,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAUA,aAAc,GAAG6N,eAAjB;;ECrBA,IAAM1oB,YAAU,GAAG;EACjB2oB,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,IAAT,CADU;EAEjBC,EAAAA,KAAK,EAAE,CAAC,OAAD,EAAU,IAAV,CAFU;EAGjBC,EAAAA,EAAE,EAAE,CAAC,GAAD,EAAM,IAAN,CAHa;EAIjBC,EAAAA,IAAI,EAAE,CAAC,GAAD,EAAM,KAAN,CAJW;EAKjBC,EAAAA,GAAG,EAAE,CAAC,GAAD,EAAM,MAAN,CALY;EAMjBC,EAAAA,IAAI,EAAE,CAAC,GAAD,EAAM,MAAN,CANW;EAQjB,aAAW,CAAC,OAAD,EAAU,KAAV,CARM;EASjBC,EAAAA,MAAM,EAAE,CAAC,OAAD,EAAU,KAAV,CATS;EAUjB,YAAU,CAAC,MAAD,EAAS,KAAT,CAVO;EAWjBC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,KAAT,CAXU;;;EAcjBC,EAAAA,IAAI,EAAE,CAAC,KAAD,EAAQ,KAAR,CAdW;EAejBC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,KAAT,CAfU;;;EAmBjBC,EAAAA,KAAK,EAAE,CAAC,IAAD,EAAO,KAAP,EAAc,MAAd,CAnBU;EAoBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,OAAP,EAAgB,MAAhB,CApBY;EAqBjBC,EAAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,IAAR,EAAc,IAAd,CArBY;EAsBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,CAtBY;EAuBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,QAAb,CAvBY;EAwBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,SAAb,CAxBY;EAyBjBC,EAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,GAAV,EAAe,SAAf,CAzBY;EA0BjBC,EAAAA,EAAE,EAAE,CAAC,OAAD,EAAU,KAAV,CA1Ba;EA2BjBC,EAAAA,IAAI,EAAE,CAAC,IAAD,EAAO,KAAP,CA3BW;EA4BjB,OAAK,CAAC,IAAD;EA5BY,CAAnB;;EAgCA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAASp+B,IAAT,EAAe;;EAErC,MAAIsU,YAAU,CAACzX,cAAX,CAA0BmD,IAAI,CAAChG,KAA/B,CAAJ,EAA2C;EACzC,WAAOsa,YAAU,CAACtU,IAAI,CAAChG,KAAN,CAAjB;EACD;;EACD,SAAO,IAAP;EACD,CAND;;EAOA,iBAAc,GAAGokC,eAAjB;;ECvCA,IAAMC,cAAc,GAAG,8FAAvB;EAEA,IAAMC,SAAS,GAAG;EAChBC,EAAAA,IAAI,EAAE,IADU;EAEhBrF,EAAAA,KAAK,EAAE;EAFS,CAAlB;;EAIA,IAAMsF,YAAY,GAAG,SAAfA,YAAe,CAACx+B,IAAD,EAAOoD,IAAP,EAAgB;;EAEnC,MAAIpD,IAAI,CAAC/C,IAAL,CAAU6C,UAAd,EAA0B;EACxB,WAAO,IAAP;EACD,GAJkC;;;EAMnC,MAAIE,IAAI,CAAC/C,IAAL,CAAU6R,OAAV,IAAqB9O,IAAI,CAAC/C,IAAL,CAAU6T,YAAnC,EAAiD;EAC/C,WAAO,KAAP;EACD;;EACD,MAAIwtB,SAAS,CAACzhC,cAAV,CAAyBmD,IAAI,CAAChG,KAA9B,CAAJ,EAA0C;EACxC,WAAO,KAAP;EACD,GAXkC;;;EAanC,MAAI+gC,QAAQ,GAAG33B,IAAI,CAACC,GAAL,CAASrD,IAAI,CAAC8C,IAAd,CAAf;;EACA,MAAI,CAACi4B,QAAL,EAAe;EACb,WAAO,IAAP;EACD,GAhBkC;;;EAkBnC,MAAIA,QAAQ,CAAC99B,IAAT,CAAce,IAAlB,EAAwB;;EAEtB,QAAI+8B,QAAQ,CAAC99B,IAAT,CAAciB,UAAlB,EAA8B;EAC5B,aAAO,IAAP;EACD,KAJqB;;;EAMtB,QAAI68B,QAAQ,CAAC99B,IAAT,CAAcqB,YAAlB,EAAgC;EAC9B,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD,GA5BkC;;;EA+BnC,MAAIy8B,QAAQ,CAAC99B,IAAT,CAAc2Q,IAAlB,EAAwB;EACtB,WAAO,IAAP;EACD,GAjCkC;;;EAmCnC,MAAI6wB,OAAO,GAAGr7B,IAAI,CAACC,GAAL,CAAS03B,QAAQ,CAACj4B,IAAlB,CAAd;;EACA,MAAI27B,OAAO,IAAIA,OAAO,CAACxhC,IAAR,CAAa2Q,IAAxB,IAAgC,CAAC6wB,OAAO,CAACxhC,IAAR,CAAa6R,OAAlD,EAA2D;EACzD,WAAO,IAAP;EACD,GAtCkC;;;EAwCnC,MAAIisB,QAAQ,CAAC99B,IAAT,CAAcgT,SAAd,IAA2B8qB,QAAQ,CAAC99B,IAAT,CAAcqT,MAAzC,IAAmDyqB,QAAQ,CAAC99B,IAAT,CAAce,IAArE,EAA2E;EACzE,WAAO,KAAP;EACD;;EACD,SAAO,KAAP;EACD,CA5CD;;EA8CA,IAAM0gC,KAAK,GAAG,SAARA,KAAQ,CAAC1+B,IAAD,EAAOmG,MAAP,EAAkB;EAC9B,MAAIhD,KAAK,GAAGgD,MAAM,CAACjD,KAAP,CAAaC,KAAb,IAAsBgD,MAAM,CAAChD,KAAP,EAAlC;EACA,MAAI5G,KAAK,GAAG4G,KAAK,CAACtH,OAAN,CAAcmE,IAAd,CAAZ;EACA,MAAIjF,KAAK,GAAGoI,KAAK,CAACyD,KAAN,CAAYrK,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAAZ,CAH8B;;EAK9B,SAAOxB,KAAK,CAACqL,IAAN,CAAW,UAAAxN,CAAC,EAAI;EACrB,WAAOA,CAAC,CAACqE,IAAF,CAAOmB,SAAd;EACD,GAFM,CAAP;EAGD,CARD;;EAUA,IAAMugC,eAAe,GAAG,SAAlBA,eAAkB,CAAS3+B,IAAT,EAAemG,MAAf,EAAuBxI,KAAvB,EAA8B;;EAEpD,MAAI7C,KAAK,GAAGkF,IAAI,CAAC9I,IAAL,CAAUsN,KAAV,CAAgB65B,cAAhB,CAAZ;;EACA,MAAIvjC,KAAK,KAAK,IAAd,EAAoB;;EAElB,QAAI0jC,YAAY,CAACx+B,IAAD,EAAOmG,MAAM,CAAC/C,IAAd,CAAZ,KAAoC,IAAxC,EAA8C;EAC5CpD,MAAAA,IAAI,CAAChD,GAAL,CAAS,aAAT,EAAwB,cAAxB,EAAwCW,KAAxC;EACA,aAAO,IAAP;EACD,KALiB;;;EAOlB,QAAI7C,KAAK,KAAK,IAAd,EAAoB;EAClB,UAAI4jC,KAAK,CAAC1+B,IAAD,EAAOmG,MAAP,CAAT,EAAyB;EACvB,eAAO,CAACrL,KAAK,CAAC,CAAD,CAAN,EAAW,KAAX,CAAP;EACD;;EACD,aAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW,IAAX,CAAP;EACD;EACF;;EACD,SAAO,IAAP;EACD,CAlBD;;EAmBA,iBAAc,GAAG6jC,eAAjB;;ECjFA,IAAMC,UAAU,GAAG,uBAAnB;EAEA,IAAMC,MAAM,GAAG;EACbC,EAAAA,GAAG,EAAE,IADQ;EAEbC,EAAAA,IAAI,EAAE;EAFO,CAAf;;;EAMA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAASh/B,IAAT,EAAemG,MAAf,EAAuB;EAC1C,MAAIy4B,UAAU,CAAC9kC,IAAX,CAAgBkG,IAAI,CAAChG,KAArB,CAAJ,EAAiC;EAC/B,QAAI+C,IAAI,GAAGiD,IAAI,CAAChG,KAAL,CAAWI,OAAX,CAAmB,KAAnB,EAA0B,EAA1B,CAAX,CAD+B;;EAG/B,QAAI+I,KAAK,GAAGgD,MAAM,CAACjD,KAAP,CAAaC,KAAb,IAAsBgD,MAAM,CAAChD,KAAP,EAAlC;EACA,QAAI5G,KAAK,GAAG4G,KAAK,CAACtH,OAAN,CAAcmE,IAAd,CAAZ;EACA,QAAIjF,KAAK,GAAGoI,KAAK,CAACyD,KAAN,CAAYrK,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAAZ,CAL+B;;EAO/B,SAAK,IAAIpF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4D,KAAK,CAACxD,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIyB,CAAC,GAAGmC,KAAK,CAAC5D,CAAD,CAAb;;EACA,UAAIyB,CAAC,CAACqE,IAAF,CAAOe,IAAX,EAAiB;EACf,YAAIpF,CAAC,CAACqE,IAAF,CAAOmB,SAAX,EAAsB;EACpB,iBAAO,CAACrB,IAAD,EAAO,KAAP,CAAP;EACD,SAHc;;;EAKf,YAAI8hC,MAAM,CAAC9hC,IAAD,CAAN,KAAiB,IAArB,EAA2B;EACzB,iBAAO,CAACA,IAAD,EAAO,KAAP,CAAP;EACD;;EACD,eAAO,CAACA,IAAD,EAAO,OAAP,CAAP;EACD;EACF,KAnB8B;;;EAqB/B,WAAO,CAACA,IAAD,EAAO,OAAP,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CAzBD;;EA0BA,mBAAc,GAAGiiC,YAAjB;;EClCA,IAAMC,OAAO,GAAG,0BAAhB;;EAGA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAASl/B,IAAT,EAAe;EAChC,MAAIA,IAAI,CAAC/C,IAAL,CAAUiU,WAAV,KAA0B,IAA9B,EAAoC;EAClC,WAAO,IAAP;EACD;;EACD,MAAIie,KAAK,GAAGnvB,IAAI,CAAC9I,IAAL,CAAUsN,KAAV,CAAgBy6B,OAAhB,CAAZ;;EACA,MAAI9P,KAAK,KAAK,IAAd,EAAoB;EAClB,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW,IAAX,EAAiBA,KAAK,CAAC,CAAD,CAAtB,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAUA,aAAc,GAAG+P,UAAjB;;ECLA,IAAMC,QAAQ,GAAG,UAAjB;;EAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAStkC,KAAT,EAAgBwK,GAAhB,EAAqB;;EAExC,MAAIa,MAAM,GAAGgkB,YAAQ,CAACrd,QAAT,CAAkBhS,KAAK,CAACtB,IAAN,CAAW,GAAX,CAAlB,EAAmC8L,GAAG,CAAC3H,KAAvC,EAA8C2H,GAAG,CAAClC,IAAJ,EAA9C,EAA0D,CAA1D,CAAb,CAFwC;;EAIxC,MAAID,KAAK,GAAGgD,MAAM,CAAChD,KAAP,EAAZ;EACAyuB,EAAAA,UAAY,CAACzuB,KAAD,EAAQmC,GAAG,CAAC3H,KAAZ,CAAZ,CALwC;;EAOxCwF,EAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBA,IAAAA,CAAC,CAACuD,QAAF,GAAavD,CAAC,CAAC1B,IAAf;EACA0B,IAAAA,CAAC,CAAC1B,IAAF,GAAS,EAAT;EACA0B,IAAAA,CAAC,CAACoB,KAAF,GAAU,EAAV,CAHiB;;EAKjBpB,IAAAA,CAAC,CAACgC,GAAF,GAAQ,EAAR;EACAhC,IAAAA,CAAC,CAACiC,IAAF,GAAS,EAAT,CANiB;;EAQjB,QAAIskC,QAAQ,CAACrlC,IAAT,CAAclB,CAAC,CAACuD,QAAhB,CAAJ,EAA+B;EAC7BvD,MAAAA,CAAC,CAACqE,IAAF,CAAOgM,MAAP,GAAgB,IAAhB;EACArQ,MAAAA,CAAC,CAACqE,IAAF,CAAO0S,QAAP,GAAkB,IAAlB;EACD;EACF,GAZD;EAaA,SAAOxJ,MAAP;EACD,CArBD;;EAuBA,IAAMmoB,YAAY,GAAG,SAAfA,YAAe,CAAShpB,GAAT,EAAc;EACjC,MAAI3H,KAAK,GAAG2H,GAAG,CAAC3H,KAAhB;EACA2H,EAAAA,GAAG,CAACH,IAAJ,CAAS7L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI2K,KAAK,GAAG3K,CAAC,CAAC0K,KAAF,CAAQC,KAAR,IAAiB3K,CAAC,CAAC2K,KAAF,EAA7B;;EACA,SAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,UAAI6I,IAAI,GAAGmD,KAAK,CAAChM,CAAD,CAAhB;EACA,UAAI2D,KAAK,GAAG6hC,WAAa,CAAC38B,IAAD,EAAOxH,CAAP,CAAzB;EACAsC,MAAAA,KAAK,GAAGA,KAAK,IAAIkiC,SAAe,CAACh9B,IAAD,CAAhC;EACAlF,MAAAA,KAAK,GAAGA,KAAK,IAAIsjC,aAAe,CAACp+B,IAAD,AAAA,CAAhC;EACAlF,MAAAA,KAAK,GAAGA,KAAK,IAAI6jC,aAAe,CAAC3+B,IAAD,EAAOxH,CAAP,EAAUmF,KAAV,CAAhC;EACA7C,MAAAA,KAAK,GAAGA,KAAK,IAAIkkC,eAAY,CAACh/B,IAAD,EAAOxH,CAAP,CAA7B;EACAsC,MAAAA,KAAK,GAAGA,KAAK,IAAIokC,SAAU,CAACl/B,IAAD,AAAA,CAA3B,CAPwC;;EASxC,UAAIlF,KAAK,KAAK,IAAd,EAAoB;EAClB,YAAIuK,SAAS,GAAG+5B,YAAY,CAACtkC,KAAD,EAAQwK,GAAR,CAA5B,CADkB;;EAGlB,YAAI+5B,SAAS,GAAGh6B,SAAS,CAAClC,KAAV,CAAgB,CAAhB,CAAhB;EACAk8B,QAAAA,SAAS,CAACnoC,IAAV,GAAiB8I,IAAI,CAAC9I,IAAtB,CAJkB;;EAMlB,YAAIsN,KAAK,GAAGhM,CAAC,CAACiL,SAAF,CAAYzD,IAAI,CAACxD,EAAjB,EAAqB,CAArB,EAAwB8I,GAAG,CAAClC,IAAJ,EAAxB,CAAZ;EACAoB,QAAAA,KAAK,CAACpK,OAAN,CAAciL,SAAd,EAAyBC,GAAzB,EAA8B,IAA9B;EACD;EACF;EACF,GArBD;EAsBA,SAAOA,GAAP;EACD,CAzBD;;EA0BA,mBAAc,GAAGgpB,YAAjB;;EC3DA;EACA,IAAMgR,cAAc,GAAG,SAAjBA,cAAiB,CAASh6B,GAAT,EAAc;;;EAGnCA,EAAAA,GAAG,CAACd,KAAJ,CAAU,aAAV,EAAyBxH,GAAzB,CAA6B,MAA7B,EAAqC,WAArC,EAHmC;;EAKnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,qDAAV,EAAiExH,GAAjE,CAAqE,OAArE,EAA8E,WAA9E,EALmC;;EAOnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,sBAAV,EAAkCxH,GAAlC,CAAsC,MAAtC,EAA8C,WAA9C,EAPmC;;EASnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,kBAAV,EAA8BxH,GAA9B,CAAkC,SAAlC,EAA6C,aAA7C,EATmC;;EAWnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,oBAAV,EAAgCxH,GAAhC,CAAoC,SAApC,EAA+C,aAA/C,EAXmC;;EAanCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,oBAAV,EAAgCxH,GAAhC,CAAoC,YAApC,EAAkD,aAAlD,EAbmC;;EAenCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,4EAAV,EAAwFxH,GAAxF,CAA4F,MAA5F,EAAoG,UAApG,EAfmC;;EAiBnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,oBAAV,EAAgCxH,GAAhC,CAAoC,UAApC,EAAgD,kBAAhD,EAjBmC;;EAmBnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,2BAAV,EAAuCxH,GAAvC,CAA2C,CAAC,WAAD,EAAc,MAAd,CAA3C,EAAkE,UAAlE,EAnBmC;;EAqBnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,qBAAV,EAAiCxH,GAAjC,CAAqC,MAArC,EAA6C,UAA7C,EArBmC;;EAuBnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,mBAAV,EAA+BxH,GAA/B,CAAmC,QAAnC,EAA6C,OAA7C;EACAsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,SAAV,EAAqBxH,GAArB,CAAyB,MAAzB,EAAiC,OAAjC;EACAsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,YAAV,EAAwBxH,GAAxB,CAA4B,6BAA5B,EAA2D,OAA3D;EACAsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,UAAV,EAAsBxH,GAAtB,CAA0B,kBAA1B,EAA8C,OAA9C,EA1BmC;;EA4BnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,KAAV,EAAiBxH,GAAjB,CAAqB,iBAArB,EAAwC,KAAxC,EA5BmC;;EA8BnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,iBAAV,EAA6BxH,GAA7B,CAAiC,YAAjC,EAA+C,OAA/C,EA9BmC;;EAiCnCsI,EAAAA,GAAG,CACAd,KADH,CACS,uBADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGGF,SAHH,GAIGriC,GAJH,CAIO,WAJP,EAIoB,QAJpB,EAjCmC;;EAuCnCsI,EAAAA,GAAG,CACAd,KADH,CACS,4BADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGGF,SAHH,GAIGriC,GAJH,CAIO,WAJP,EAIoB,SAJpB,EAvCmC;;;EA+CnCsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,uBAAV,EAAmCxH,GAAnC,CAAuC,YAAvC,EAAqD,mBAArD;EACAsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,gCAAV,EAA4CxH,GAA5C,CAAgD,MAAhD,EAAwD,aAAxD;EACAsI,EAAAA,GAAG,CAACd,KAAJ,CAAU,mDAAV,EAA+DxH,GAA/D,CAAmE,MAAnE,EAA2E,aAA3E;EACAsI,EAAAA,GAAG,CACAd,KADH,CACS,oBADT,EAEG8kB,GAFH,CAEO,SAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,kBAHpB,EAlDmC;;EAwDnC,MAAIwiC,EAAE,GAAGl6B,GAAG,MAAH,CAAO,IAAP,CAAT;;EACA,MAAIk6B,EAAE,CAAC1kC,KAAH,KAAa,IAAjB,EAAuB;;EAErB0kC,IAAAA,EAAE,CAACh7B,KAAH,CAAS,iBAAT,EAA4BxH,GAA5B,CAAgC,QAAhC,EAA0C,QAA1C,EAFqB;;EAIrBwiC,IAAAA,EAAE,CAACh7B,KAAH,CAAS,YAAT,EAAuBxH,GAAvB,CAA2B,aAA3B,EAA0C,SAA1C,EAJqB;;EAMrBwiC,IAAAA,EAAE,CAACh7B,KAAH,CAAS,SAAT,EAAoBxH,GAApB,CAAwB,MAAxB,EAAgC,SAAhC;EACD;;EAED,MAAIiK,GAAG,GAAG3B,GAAG,MAAH,CAAO,KAAP,CAAV;;EACA,MAAI2B,GAAG,CAACnM,KAAJ,KAAc,IAAlB,EAAwB;;EAEtBmM,IAAAA,GAAG,CAACzC,KAAJ,CAAU,0BAAV,EAAsCxH,GAAtC,CAA0C,WAA1C,EAAuD,UAAvD,EAFsB;;EAItBiK,IAAAA,GAAG,CAACzC,KAAJ,CAAU,aAAV,EAAyBxH,GAAzB,CAA6B,QAA7B,EAAuC,UAAvC;EACD,GAxEkC;;;EA2EnC,MAAIyiC,KAAK,GAAGn6B,GAAG,MAAH,CAAO,OAAP,CAAZ;;EACA,MAAIm6B,KAAK,CAAC3kC,KAAN,KAAgB,IAApB,EAA0B;;EAExB2kC,IAAAA,KAAK,CAACj7B,KAAN,CAAY,qCAAZ,EAAmDxH,GAAnD,CAAuD,aAAvD,EAAsE,WAAtE,EAFwB;;EAIxByiC,IAAAA,KAAK,CAACj7B,KAAN,CAAY,oBAAZ,EAAkCxH,GAAlC,CAAsC,YAAtC,EAAoD,iBAApD,EAJwB;;EAMxByiC,IAAAA,KAAK,CAACj7B,KAAN,CAAY,oCAAZ,EAAkDxH,GAAlD,CAAsD,aAAtD,EAAqE,cAArE;EACD,GAnFkC;;;EAsFnC,MAAI0iC,IAAI,GAAGp6B,GAAG,MAAH,CAAO,MAAP,CAAX;;EACA,MAAIo6B,IAAI,CAAC5kC,KAAL,KAAe,IAAnB,EAAyB;EACvB4kC,IAAAA,IAAI,CAACl7B,KAAL,CAAW,aAAX,EAA0BxH,GAA1B,CAA8B,aAA9B,EAA6C,kBAA7C,EADuB;;EAGvB0iC,IAAAA,IAAI,CAACl7B,KAAL,CAAW,oBAAX,EAAiCxH,GAAjC,CAAqC,aAArC,EAAoD,WAApD,EAHuB;;EAKvB0iC,IAAAA,IAAI,CAACl7B,KAAL,CAAW,cAAX,EAA2BxH,GAA3B,CAA+B,QAA/B,EAAyC,WAAzC,EALuB;;EAOvB0iC,IAAAA,IAAI,CACDl7B,KADH,CACS,cADT,EAEGm7B,KAFH,CAES,6DAFT,EAGG3iC,GAHH,CAGO,QAHP,EAGiB,aAHjB;EAID;;EAED,MAAI4iC,KAAK,GAAGt6B,GAAG,MAAH,CAAO,YAAP,CAAZ;;EACA,MAAIs6B,KAAK,CAAC9kC,KAAN,KAAgB,IAApB,EAA0B;;EAExB8kC,IAAAA,KAAK,CAACp7B,KAAN,CAAY,wCAAZ,EAAsDxH,GAAtD,CAA0D,cAA1D,EAA0E,WAA1E,EAFwB;;EAIxB4iC,IAAAA,KAAK,CACFp7B,KADH,CACS,qGADT,EAEGxH,GAFH,CAEO,QAFP,EAEiB,cAFjB,EAJwB;;EAQxB4iC,IAAAA,KAAK,CACFp7B,KADH,CACS,+EADT,EAEGxH,GAFH,CAEO,QAFP,EAEiB,iBAFjB;EAGD;;EAED,MAAI6iC,IAAI,GAAGv6B,GAAG,MAAH,CAAO,YAAP,CAAX;;EACA,MAAIu6B,IAAI,CAAC/kC,KAAL,KAAe,IAAnB,EAAyB;;EAEvB+kC,IAAAA,IAAI,CACDr7B,KADH,CACS,cADT,EAEGA,KAFH,CAES,aAFT,EAGGxH,GAHH,CAGO,MAHP,EAGe,aAHf,EAFuB;;EAOvB6iC,IAAAA,IAAI,MAAJ,CACM,aADN,EAEGr7B,KAFH,CAES,aAFT,EAGGxH,GAHH,CAGO,YAHP,EAGqB,SAHrB;EAID;;EAED,MAAI8iC,KAAK,GAAGx6B,GAAG,MAAH,CAAO,QAAP,CAAZ;;EACA,MAAIw6B,KAAK,CAAChlC,KAAN,KAAgB,IAApB,EAA0B;;EAExBglC,IAAAA,KAAK,CAACt7B,KAAN,CAAY,mEAAZ,EAAiFxH,GAAjF,CAAqF,QAArF,EAA+F,cAA/F,EAFwB;;EAIxB8iC,IAAAA,KAAK,CACFt7B,KADH,CACS,kBADT,EAEGA,KAFH,CAES,2EAFT,EAGGxH,GAHH,CAGO,QAHP,EAGiB,UAHjB;EAID;;EAED,SAAOsI,GAAP;EACD,CA5ID;;EA8IA,WAAc,GAAGg6B,cAAjB;;EC/IA;EACA,IAAMS,MAAM,GAAG,SAATA,MAAS,CAASz6B,GAAT,EAAc;EAC3B,MAAI06B,GAAG,GAAG16B,GAAG,MAAH,CAAO,aAAP,CAAV;;EAEA,MAAI06B,GAAG,CAACllC,KAAJ,KAAc,IAAlB,EAAwB;EACtB,QAAImlC,GAAG,GAAGD,GAAG,MAAH,CAAO,YAAP,CAAV;;EACA,QAAIC,GAAG,CAACnlC,KAAR,EAAe;;EAEbmlC,MAAAA,GAAG,CAACz7B,KAAJ,CAAU,2CAAV,EAAuDxH,GAAvD,CAA2D,MAA3D,EAAmE,cAAnE,EAFa;;EAIbijC,MAAAA,GAAG,CAACz7B,KAAJ,CAAU,mDAAV,EAA+DxH,GAA/D,CAAmE,MAAnE,EAA2E,wBAA3E,EAJa;;EAMbijC,MAAAA,GAAG,CAACz7B,KAAJ,CAAU,0DAAV,EAAsExH,GAAtE,CAA0E,MAA1E,EAAkF,WAAlF,EANa;;EAQbijC,MAAAA,GAAG,CACAz7B,KADH,CACS,yBADT,EAEGm7B,KAFH,CAES,6BAFT,EAGGx8B,KAHH,CAGS,CAHT,EAIGnG,GAJH,CAIO,MAJP,EAIe,WAJf;EAKD;;EAED,QAAIuX,GAAG,GAAGyrB,GAAG,MAAH,CAAO,aAAP,CAAV;;EACA,QAAIzrB,GAAG,CAACzZ,KAAR,EAAe;;EAEbyZ,MAAAA,GAAG,CAAC/P,KAAJ,CAAU,8CAAV,EAA0DxH,GAA1D,CAA8D,MAA9D,EAAsE,wBAAtE,EAFa;;EAIbuX,MAAAA,GAAG,CAAC/P,KAAJ,CAAU,iCAAV,EAA6CxH,GAA7C,CAAiD,MAAjD,EAAyD,wBAAzD,EAJa;;EAMbuX,MAAAA,GAAG,CAAC/P,KAAJ,CAAU,uCAAV,EAAmDxH,GAAnD,CAAuD,MAAvD,EAA+D,OAA/D;EACD,KAzBqB;;;EA4BtBgjC,IAAAA,GAAG,CAACx7B,KAAJ,CAAU,mCAAV,EAA+CxH,GAA/C,CAAmD,MAAnD,EAA2D,wBAA3D,EA5BsB;;EA8BtBgjC,IAAAA,GAAG,CAACx7B,KAAJ,CAAU,wBAAV,EAAoCxH,GAApC,CAAwC,MAAxC,EAAgD,aAAhD,EA9BsB;;EAgCtBgjC,IAAAA,GAAG,CAACx7B,KAAJ,CAAU,8BAAV,EAA0CxH,GAA1C,CAA8C,MAA9C,EAAsD,cAAtD,EAhCsB;;EAkCtBgjC,IAAAA,GAAG,CAACx7B,KAAJ,CAAU,8BAAV,EAA0CxH,GAA1C,CAA8C,WAA9C,EAA2D,SAA3D,EAlCsB;;EAoCtBgjC,IAAAA,GAAG,CAACx7B,KAAJ,CAAU,iEAAV,EAA6ExH,GAA7E,CAAiF,MAAjF,EAAyF,cAAzF,EApCsB;;EAsCtBgjC,IAAAA,GAAG,CACAx7B,KADH,CACS,wEADT,EAEGxH,GAFH,CAEO,MAFP,EAEe,wBAFf;EAGD;;EAED,MAAIkjC,EAAE,GAAG56B,GAAG,MAAH,CAAO,QAAP,CAAT;;EACA,MAAI46B,EAAE,CAACplC,KAAH,KAAa,IAAjB,EAAuB;;EAErBolC,IAAAA,EAAE,CAAC17B,KAAH,CAAS,kBAAT,EAA6BxH,GAA7B,CAAiC,WAAjC,EAA8C,iBAA9C,EAFqB;;EAIrBkjC,IAAAA,EAAE,CAAC17B,KAAH,CAAS,uBAAT,EAAkCxH,GAAlC,CAAsC,UAAtC,EAAkD,SAAlD,EAJqB;;EAMrBkjC,IAAAA,EAAE,CAAC17B,KAAH,CAAS,4BAAT,EAAuCxH,GAAvC,CAA2C,MAA3C,EAAmD,YAAnD,EANqB;;EAQrBkjC,IAAAA,EAAE,CAAC17B,KAAH,CAAS,+CAAT,EACGrB,KADH,CACS,CADT,EAEGnG,GAFH,CAEO,MAFP,EAEe,kBAFf,EARqB;;EAYrBkjC,IAAAA,EAAE,CAAC17B,KAAH,CAAS,gEAAT,EACG+6B,IADH,CACQ,SADR,EAEGviC,GAFH,CAEO,OAFP,EAEgB,UAFhB;EAGD;;EAED,SAAOsI,GAAP;EACD,CAjED;;EAkEA,YAAc,GAAGy6B,MAAjB;;ECnEA;EACA,IAAMI,QAAQ,GAAG,SAAXA,QAAW,CAAS76B,GAAT,EAAc;EAC7B,MAAIo3B,IAAI,GAAGp3B,GAAG,MAAH,CAAO,OAAP,CAAX;;EACA,MAAIo3B,IAAI,CAAC5hC,KAAL,KAAe,IAAnB,EAAyB;;EAEvB4hC,IAAAA,IAAI,CAACl4B,KAAL,CAAW,YAAX,EAAyBxH,GAAzB,CAA6B,MAA7B,EAAqC,WAArC,EAFuB;;EAIvB0/B,IAAAA,IAAI,CAACl4B,KAAL,CAAW,uBAAX,EAAoCxH,GAApC,CAAwC,MAAxC,EAAgD,aAAhD,EAJuB;;EAMvB0/B,IAAAA,IAAI,CAACl4B,KAAL,CAAW,mBAAX,EAAgCxH,GAAhC,CAAoC,aAApC,EAAmD,kBAAnD,EANuB;;EAQvB0/B,IAAAA,IAAI,CAACl4B,KAAL,CAAW,mBAAX,EAAgCxH,GAAhC,CAAoC,cAApC,EAAoD,aAApD,EARuB;;EAUvB0/B,IAAAA,IAAI,CAACl4B,KAAL,CAAW,cAAX,EAA2BxH,GAA3B,CAA+B,OAA/B,EAAwC,YAAxC,EAVuB;;EAYvBsI,IAAAA,GAAG,CAACd,KAAJ,CAAU,sBAAV,EAAkCqmB,OAAlC,CAA0C,SAA1C,EAAqD,cAArD,EAZuB;;EAcvBvlB,IAAAA,GAAG,CAACd,KAAJ,CAAU,0CAAV,EAAsDqmB,OAAtD,CAA8D,SAA9D,EAAyE,cAAzE,EAduB;;EAgBvBvlB,IAAAA,GAAG,CAACd,KAAJ,CAAU,wEAAV,EAAoFxH,GAApF,CAAwF,SAAxF,EAhBuB;;EAkBvBsI,IAAAA,GAAG,CAACd,KAAJ,CAAU,gCAAV,EAA4CxH,GAA5C,CAAgD,QAAhD,EAlBuB;;EAoBvB0/B,IAAAA,IAAI,CACDl4B,KADH,CACS,gBADT,EAEGm7B,KAFH,CAES,YAFT,EAGGz9B,KAHH,CAGS,MAHT,EAIGlF,GAJH,CAIO,SAJP,EAIkB,aAJlB,EApBuB;;EA0BvB0/B,IAAAA,IAAI,CACDl4B,KADH,CACS,kGADT,EAEGxH,GAFH,CAEO,MAFP,EAEe,gBAFf,EA1BuB;;EA+BvB,QAAIojC,GAAG,GAAG1D,IAAI,MAAJ,CAAQ,eAAR,CAAV;;EACA,QAAI0D,GAAG,CAACtlC,KAAJ,KAAc,IAAlB,EAAwB;EACtBslC,MAAAA,GAAG,CAAC57B,KAAJ,CAAU,kCAAV,EAA8CqmB,OAA9C,CAAsD,cAAtD,EAAsE,cAAtE;EACAuV,MAAAA,GAAG,CAAC57B,KAAJ,CAAU,wBAAV,EAAoCxH,GAApC,CAAwC,cAAxC,EAAwD,aAAxD;EACAojC,MAAAA,GAAG,CAAC57B,KAAJ,CAAU,8DAAV,EAA0ExH,GAA1E,CAA8E,cAA9E,EAA8F,YAA9F;EACAojC,MAAAA,GAAG,CACA57B,KADH,CACS,0BADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGGviC,GAHH,CAGO,cAHP,EAGuB,eAHvB;EAID;;EAED,QAAIgX,MAAM,GAAG0oB,IAAI,MAAJ,CAAQ,SAAR,CAAb;;EACA,QAAI1oB,MAAM,CAAClZ,KAAP,KAAiB,IAArB,EAA2B;;EAEzBkZ,MAAAA,MAAM,CAACxP,KAAP,CAAa,sBAAb,EAAqCxH,GAArC,CAAyC,MAAzC,EAAiD,wBAAjD,EAFyB;;EAKzB0/B,MAAAA,IAAI,CAACl4B,KAAL,CAAW,uBAAX,EAAoCxH,GAApC,CAAwC,cAAxC,EAAwD,YAAxD;EACD;EACF,GApD4B;;;EAuD7B,MAAIqjC,OAAO,GAAG/6B,GAAG,MAAH,CAAO,UAAP,CAAd;;EACA,MAAI+6B,OAAO,CAACvlC,KAAR,KAAkB,IAAtB,EAA4B;EAC1BulC,IAAAA,OAAO,CACJ77B,KADH,CACS,gBADT,EAEGm7B,KAFH,CAES,+BAFT,EAGG3iC,GAHH,CAGO,cAHP,EAGuB,aAHvB;EAIAqjC,IAAAA,OAAO,CACJ77B,KADH,CACS,UADT,EAEGA,KAFH,CAES,aAFT,EAGGxH,GAHH,CAGO,cAHP,EAGuB,oBAHvB;EAID,GAjE4B;;;EAoE7B,MAAIsjC,IAAI,GAAGh7B,GAAG,MAAH,CAAO,aAAP,CAAX;;EACA,MAAIg7B,IAAI,CAACxlC,KAAL,KAAe,IAAnB,EAAyB;;EAEvBwlC,IAAAA,IAAI,CAAC97B,KAAL,CAAW,0BAAX,EAAuCtC,KAAvC,CAA6C,QAA7C,EAAuD,iBAAvD,EAFuB;;EAIvBo+B,IAAAA,IAAI,CACD97B,KADH,CACS,kCADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGG/6B,KAHH,CAGS,gCAHT,EAIGxH,GAJH,CAIO,YAJP,EAJuB;;EAUvBsjC,IAAAA,IAAI,CACD97B,KADH,CACS,4BADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGGviC,GAHH,CAGO,YAHP,EAVuB;;EAevBsjC,IAAAA,IAAI,CACD97B,KADH,CACS,qBADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGGviC,GAHH,CAGO,YAHP,EAfuB;;EAoBvBsjC,IAAAA,IAAI,CAAC97B,KAAL,CAAW,uBAAX,EAAoCxH,GAApC,CAAwC,MAAxC,EAAgD,aAAhD,EApBuB;;EAsBvBsjC,IAAAA,IAAI,CAAC97B,KAAL,CAAW,+BAAX,EAA4CxH,GAA5C,CAAgD,MAAhD,EAAwD,aAAxD,EAtBuB;;EAwBvB,QAAI3E,CAAC,GAAGioC,IAAI,CAAC97B,KAAL,CAAW,2BAAX,CAAR;;EACA,QAAI,CAACnM,CAAC,CAACoxB,UAAF,CAAa,2BAAb,EAA0C3uB,KAA/C,EAAsD;EACpDzC,MAAAA,CAAC,CAAC2E,GAAF,CAAM,MAAN,EAAc,WAAd;EACD;EACF,GAjG4B;;;EAmG7BsI,EAAAA,GAAG,CACAd,KADH,CACS,oFADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGG/6B,KAHH,CAGS,2BAHT,EAIGxH,GAJH,CAIO,aAJP,EAIsB,cAJtB;EAKA,SAAOsI,GAAP;EACD,CAzGD;;EA0GA,cAAc,GAAG66B,QAAjB;;EC3GA,IAAMI,SAAS,GACb,qMADF;EAEA,IAAMC,SAAS,GAAG,8CAAlB;EACA,IAAMC,QAAQ,GAAG,gCAAjB;EACA,IAAMC,SAAS,GAAG,iCAAlB;EACA,IAAMC,UAAU,GAAG,iDAAnB;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASt7B,GAAT,EAAc;;EAE9B,MAAIu7B,GAAG,GAAGv7B,GAAG,MAAH,CAAO,YAAP,CAAV;;EACA,MAAIu7B,GAAG,CAAC/lC,KAAJ,KAAc,IAAlB,EAAwB;;EAEtBwK,IAAAA,GAAG,CAACd,KAAJ,CAAU,0CAAV,EAAsDxH,GAAtD,CAA0D,SAA1D,EAAqE,UAArE,EAFsB;;EAItB6jC,IAAAA,GAAG,CAACr8B,KAAJ,CAAU,qBAAV,EAAiCxH,GAAjC,CAAqC,QAArC,EAA+C,qBAA/C,EAJsB;;EAMtB6jC,IAAAA,GAAG,CAACr8B,KAAJ,CAAU,cAAV,EAA0BtC,KAA1B,CAAgC,QAAhC,EAA0C,kBAA1C,EANsB;;EAQtB2+B,IAAAA,GAAG,CAACr8B,KAAJ,CAAU,qCAAV,EAAiDxH,GAAjD,CAAqD,WAArD,EAAkE,mBAAlE;EACD,GAZ6B;;;EAe9B,MAAI4iC,KAAK,GAAGt6B,GAAG,MAAH,CAAO,YAAP,CAAZ;;EACA,MAAIs6B,KAAK,CAAC9kC,KAAN,KAAgB,IAApB,EAA0B;EACxB8kC,IAAAA,KAAK,CAACp7B,KAAN,CAAY,qBAAZ,EAAmCqmB,OAAnC,CAA2C,SAA3C,EAAsD,mBAAtD,EADwB;;EAGxB+U,IAAAA,KAAK,CAACp7B,KAAN,CAAY,oCAAZ,EAAkDqmB,OAAlD,CAA0D,QAA1D,EAAoE,yBAApE,EAHwB;;EAKxB+U,IAAAA,KAAK,CAACp7B,KAAN,CAAY,mCAAZ,EAAiDqmB,OAAjD,CAAyD,QAAzD,EAAmE,yBAAnE,EALwB;;EAOxB+U,IAAAA,KAAK,CACFp7B,KADH,CACS,uBADT,EAEGm7B,KAFH,CAES,WAFT,EAGG9U,OAHH,CAGW,QAHX,EAGqB,eAHrB,EAPwB;;EAaxB+U,IAAAA,KAAK,CACFp7B,KADH,CACS,gCADT,EAEG+6B,IAFH,CAEQ,OAFR,EAGGA,IAHH,CAGQ,YAHR,EAIGviC,GAJH,CAIO,aAJP,EAIsB,gBAJtB;EAKA4iC,IAAAA,KAAK,CACFp7B,KADH,CACS,+BADT,EAEG+6B,IAFH,CAEQ,OAFR,EAGGviC,GAHH,CAGO,WAHP,EAGoB,KAHpB,EAlBwB;;EAwBxB4iC,IAAAA,KAAK,CAACp7B,KAAN,CAAY+7B,SAAS,GAAG,uBAAxB,EAAiD1V,OAAjD,CAAyD,QAAzD,EAAmE,WAAnE,EAxBwB;;EA0BxB+U,IAAAA,KAAK,CAACp7B,KAAN,CAAYg8B,SAAS,GAAG,uBAAxB,EAAiDxjC,GAAjD,CAAqD,QAArD,EAA+D,WAA/D,EA1BwB;;EA4BxB4iC,IAAAA,KAAK,CAACp7B,KAAN,CAAYi8B,QAAQ,GAAG,uBAAvB,EAAgDzjC,GAAhD,CAAoD,QAApD,EAA8D,aAA9D,EA5BwB;;EA8BxB4iC,IAAAA,KAAK,CAACp7B,KAAN,CAAYk8B,SAAS,GAAG,oCAAxB,EAA8D1jC,GAA9D,CAAkE,QAAlE,EAA4E,YAA5E;EACD;;EAED,MAAImb,MAAM,GAAG7S,GAAG,MAAH,CAAO,SAAP,CAAb;;EACA,MAAI6S,MAAM,CAACrd,KAAP,KAAiB,IAArB,EAA2B;;EAEzBqd,IAAAA,MAAM,CAAC3T,KAAP,CAAa,oBAAb,EAAmCxH,GAAnC,CAAuC,QAAvC,EAAiD,kBAAjD,EAFyB;;EAIzBmb,IAAAA,MAAM,CAAC3T,KAAP,CAAa,oCAAb,EAAmDxH,GAAnD,CAAuD,QAAvD,EAAiE,eAAjE,EAJyB;;EAMzBmb,IAAAA,MAAM,CAAC3T,KAAP,CAAa,oBAAb,EAAmCxH,GAAnC,CAAuC,QAAvC,EAAiD,kBAAjD,EANyB;;EAQzBmb,IAAAA,MAAM,CAAC3T,KAAP,CAAa,4BAAb,EAA2CxH,GAA3C,CAA+C,CAAC,SAAD,EAAY,QAAZ,CAA/C,EAAsE,QAAtE,EARyB;;EAUzBmb,IAAAA,MAAM,CAAC3T,KAAP,CAAa,oBAAb,EAAmCxH,GAAnC,CAAuC,QAAvC,EAAiD,kBAAjD,EAVyB;;EAYzBmb,IAAAA,MAAM,CACH3T,KADH,CACS,oFADT,EAEGxH,GAFH,CAEO,WAFP,EAEoB,iBAFpB,EAZyB;;EAgBzB4iC,IAAAA,KAAK,CACFp7B,KADH,CACS,oBADT,EAEGA,KAFH,CAES,kBAFT,EAGGqmB,OAHH,CAGW,QAHX,EAGqB,kBAHrB,EAhByB;;;EAuBzB,QAAIiW,SAAS,GAAG3oB,MAAM,MAAN,CAAUooB,SAAV,CAAhB;;EACA,QAAIO,SAAS,CAAChmC,KAAV,KAAoB,IAAxB,EAA8B;;EAE5BgmC,MAAAA,SAAS,CAACt8B,KAAV,CAAgB+7B,SAAS,GAAG,UAA5B,EAAwC1V,OAAxC,CAAgD,QAAhD,EAA0D,WAA1D;EACD,KA3BwB;;;EA8BzB,QAAIkW,SAAS,GAAG5oB,MAAM,MAAN,CAAUqoB,SAAV,CAAhB;;EACA,QAAIO,SAAS,KAAK,IAAlB,EAAwB;EACtBA,MAAAA,SAAS,CAACv8B,KAAV,CAAgB,uBAAuBg8B,SAAvB,GAAmC,GAAnD,EAAwDxjC,GAAxD,CAA4D,MAA5D,EAAoE,YAApE;EACA+jC,MAAAA,SAAS,CAACv8B,KAAV,CAAgBg8B,SAAS,GAAG,UAA5B,EAAwCxjC,GAAxC,CAA4C,QAA5C,EAAsD,WAAtD;EACD,KAlCwB;;;EAqCzB,QAAIgkC,QAAQ,GAAG7oB,MAAM,MAAN,CAAUsoB,QAAV,CAAf;;EACA,QAAIO,QAAQ,CAAClmC,KAAT,KAAmB,IAAvB,EAA6B;EAC3BkmC,MAAAA,QAAQ,CAACx8B,KAAT,CAAe,cAAci8B,QAAd,GAAyB,GAAxC,EAA6CzjC,GAA7C,CAAiD,WAAjD,EAA8D,aAA9D;EACAgkC,MAAAA,QAAQ,CAACx8B,KAAT,CAAei8B,QAAQ,GAAG,UAA1B,EAAsCzjC,GAAtC,CAA0C,QAA1C,EAAoD,aAApD;EACD,KAzCwB;;;EA4CzB,QAAIikC,SAAS,GAAG9oB,MAAM,MAAN,CAAUuoB,SAAV,CAAhB;;EACA,QAAIO,SAAS,CAACnmC,KAAV,KAAoB,IAAxB,EAA8B;EAC5BmmC,MAAAA,SAAS,CAACz8B,KAAV,CAAgBk8B,SAAS,GAAG,cAA5B,EAA4C1jC,GAA5C,CAAgD,CAAC,WAAD,EAAc,QAAd,CAAhD,EAAyE,YAAzE;EACAikC,MAAAA,SAAS,CAACz8B,KAAV,CAAgB,qCAAqCk8B,SAArC,GAAiD,GAAjE,EAAsE1jC,GAAtE,CAA0E,MAA1E,EAAkF,SAAlF;EACAikC,MAAAA,SAAS,CAACz8B,KAAV,CAAgBk8B,SAAS,GAAG,iBAA5B,EAA+C1jC,GAA/C,CAAmD,MAAnD,EAA2D,UAA3D;EACD,KAjDwB;;;EAoDzB,QAAIkkC,UAAU,GAAG/oB,MAAM,MAAN,CAAUwoB,UAAV,CAAjB;;EACA,QAAIO,UAAU,CAACpmC,KAAX,KAAqB,IAAzB,EAA+B;EAC7BomC,MAAAA,UAAU,CAAC18B,KAAX,CAAiB,kCAAkCm8B,UAAlC,GAA+C,GAAhE,EAAqE9V,OAArE,CAA6E,OAA7E,EAAsF,UAAtF;EACAqW,MAAAA,UAAU,CAAC18B,KAAX,CAAiB,MAAMm8B,UAAN,GAAmB,UAApC,EAAgD9V,OAAhD,CAAwD,OAAxD,EAAiE,cAAjE,EAF6B;EAI9B,KAzDwB;;;EA4DzB,QAAIsW,EAAE,GAAGhpB,MAAM,MAAN,CAAU,IAAV,CAAT;;EACA,QAAIgpB,EAAE,CAACrmC,KAAH,KAAa,IAAjB,EAAuB;EACrBqmC,MAAAA,EAAE,CAAC38B,KAAH,CAAS,yBAAT,EAAoCqmB,OAApC,CAA4C,SAA5C,EAAuD,WAAvD;EACAsW,MAAAA,EAAE,CAAC38B,KAAH,CAAS,0BAAT,EAAqCqmB,OAArC,CAA6C,SAA7C,EAAwD,kBAAxD;EACD;;EAED,QAAIuW,SAAS,GAAGjpB,MAAM,MAAN,CAAU,YAAV,CAAhB;;EACA,QAAIipB,SAAS,CAACtmC,KAAV,KAAoB,IAAxB,EAA8B;;EAE5BsmC,MAAAA,SAAS,CAAC58B,KAAV,CAAgB,qBAAhB,EAAuCxH,GAAvC,CAA2C,SAA3C,EAAsD,mBAAtD,EAF4B;;EAI5BokC,MAAAA,SAAS,CAAC58B,KAAV,CAAgB,2BAAhB,EAA6CxH,GAA7C,CAAiD,SAAjD,EAA4D,mBAA5D,EAJ4B;;EAM5BokC,MAAAA,SAAS,CAAC58B,KAAV,CAAgB,gCAAhB,EAAkDxH,GAAlD,CAAsD,QAAtD,EAAgE,6BAAhE,EAN4B;;EAQ5BokC,MAAAA,SAAS,CAAC58B,KAAV,CAAgB,kCAAhB,EAAoDxH,GAApD,CAAwD,QAAxD,EAAkE,+BAAlE,EAR4B;;EAU5BokC,MAAAA,SAAS,CAAC58B,KAAV,CAAgB,mCAAhB,EAAqDxH,GAArD,CAAyD,QAAzD,EAAmE,qBAAnE,EAV4B;;EAY5BokC,MAAAA,SAAS,CAAC58B,KAAV,CAAgB,2BAAhB,EAA6CxH,GAA7C,CAAiD,QAAjD,EAA2D,aAA3D,EAZ4B;;EAe5BokC,MAAAA,SAAS,CACN58B,KADH,CACS,qEADT,EAEGxH,GAFH,CAEO,SAFP,EAEkB,iBAFlB,EAf4B;;EAoB5BokC,MAAAA,SAAS,CACN58B,KADH,CACS,mCADT,EAEGA,KAFH,CAES,QAFT,EAGGxH,GAHH,CAGO,QAHP,EAGiB,qBAHjB,EApB4B;;EAyB5BokC,MAAAA,SAAS,CACN58B,KADH,CACS,2BADT,EAEG+6B,IAFH,CAEQ,OAFR,EAGGviC,GAHH,CAGO,SAHP,EAGkB,aAHlB,EAIGqH,QAJH,GAKGrH,GALH,CAKO,WALP,EAKoB,aALpB,EAzB4B;;EAiC5BokC,MAAAA,SAAS,CACN58B,KADH,CACS,0CADT,EAEGxH,GAFH,CAEO,WAFP,EAEoB,iBAFpB,EAGGA,GAHH,CAGO,SAHP,EAGkB,iBAHlB,EAjC4B;;EAuC5BokC,MAAAA,SAAS,CACN58B,KADH,CACS,oCADT,EAEG+6B,IAFH,CAEQ,4BAFR,EAGGviC,GAHH,CAGO,SAHP,EAGkB,kBAHlB,EAIGqH,QAJH,GAKGrH,GALH,CAKO,WALP,EAKoB,kBALpB,EAvC4B;;EA+C5B,UAAI0J,GAAG,GAAG06B,SAAS,CAChB58B,KADO,CACD,+BADC,EAEP+6B,IAFO,CAEF,cAFE,EAGPA,IAHO,CAGF,cAHE,EAIPA,IAJO,CAIF,UAJE,CAAV;EAKA74B,MAAAA,GAAG,CAACrC,QAAJ,GAAerH,GAAf,CAAmB,WAAnB,EAAgC,gBAAhC;EACD;;EAED,QAAIqkC,QAAQ,GAAGlpB,MAAM,MAAN,CAAU,WAAV,CAAf;;EACA,QAAIkpB,QAAQ,CAACvmC,KAAT,KAAmB,IAAvB,EAA6B;;EAE3BumC,MAAAA,QAAQ,CAAC78B,KAAT,CAAe,2CAAf,EAA4DxH,GAA5D,CAAgE,YAAhE,EAA8E,sBAA9E,EAF2B;;EAI3BqkC,MAAAA,QAAQ,CACL78B,KADH,CACS,mBADT,EAEGjC,KAFH,CAES,YAFT,EAGGvF,GAHH,CAGO,YAHP,EAGqB,eAHrB,EAJ2B;;EAS3BqkC,MAAAA,QAAQ,CACL78B,KADH,CAEI,0GAFJ,EAIGxH,GAJH,CAIO,YAJP,EAIqB,gBAJrB,EAT2B;;EAe3BqkC,MAAAA,QAAQ,CACL78B,KADH,CACS,4CADT,EAEG+6B,IAFH,CAEQ,OAFR,EAGGviC,GAHH,CAGO,SAHP,EAGkB,iBAHlB,EAIGqH,QAJH,GAKGrH,GALH,CAKO,WALP,EAKoB,iBALpB;EAMD;EACF;;EAED,SAAOsI,GAAP;EACD,CAtMD;;EAuMA,eAAc,GAAGs7B,SAAjB;;EC9MA,IAAMU,IAAI,GAAG,iBAAb;;EAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAASj8B,GAAT,EAAc;EAC5B,MAAIk8B,EAAE,GAAGl8B,GAAG,MAAH,CAAO,OAAP,CAAT;;EACA,MAAIk8B,EAAE,CAAC1mC,KAAP,EAAc;EACZ0mC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,gDAAT,EAA2DxH,GAA3D,CAA+D,WAA/D,EAA4E,UAA5E,EADY;;EAGZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,eAAT,EAA0BxH,GAA1B,CAA8B,QAA9B,EAAwC,YAAxC,EAHY;;EAKZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,WAAT,EAAsBxH,GAAtB,CAA0B,SAA1B,EAAqC,aAArC,EALY;;EAOZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,eAAT,EAA0BxH,GAA1B,CAA8B,MAA9B,EAAsC,YAAtC,EAPY;;EASZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,cAAT,EAAyBxH,GAAzB,CAA6B,MAA7B,EAAqC,YAArC,EATY;;EAWZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,2BAAT,EAAsCxH,GAAtC,CAA0C,YAA1C,EAAwD,gBAAxD,EAXY;;EAaZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,0BAAT,EAAqCxH,GAArC,CAAyC,YAAzC,EAAuD,cAAvD,EAbY;;EAeZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,iCAAT,EAA4CxH,GAA5C,CAAgD,OAAhD,EAAyD,cAAzD,EAfY;;EAkBZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,8CAAT,EAAyDxH,GAAzD,CAA6D,QAA7D,EAAuE,WAAvE,EAlBY;;EAoBZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,kDAAT,EAA6DxH,GAA7D,CAAiE,WAAjE,EAA8E,cAA9E,EApBY;;EAsBZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,yBAAT,EACGA,KADH,CACS,cADT,EAEGxH,GAFH,CAEO,cAFP,EAtBY;;EA0BZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,6BAAT,EAAwCxH,GAAxC,CAA4C,UAA5C,EAAwD,kBAAxD,EA1BY;;;;EA+BZwkC,IAAAA,EAAE,CAACh9B,KAAH,qBAAsB88B,IAAtB,eACGhY,GADH,CACO,QADP,EAEGtsB,GAFH,CAEO,WAFP,EAEoB,YAFpB,EA/BY;;EAoCZwkC,IAAAA,EAAE,CAACh9B,KAAH,CAAS,oCAAT,EACG+6B,IADH,CACQ,uCADR,EAEGl7B,QAFH,GAGGrH,GAHH,CAGO,OAHP,EAGgB,SAHhB,EApCY;;;EA2CZ,QAAIykC,KAAK,GAAGD,EAAE,MAAF,CAAM,sBAAN,CAAZ;;EACA,QAAIC,KAAK,CAAC3mC,KAAN,KAAgB,IAApB,EAA0B;EACxB,UAAI,CAAC2mC,KAAK,CAAClY,GAAN,CAAU,cAAV,CAAL,EAAgC;;EAE9BkY,QAAAA,KAAK,CAACj9B,KAAN,CAAY,8BAAZ,EAA4CxH,GAA5C,CAAgD,UAAhD,EAA4D,SAA5D,EAF8B;;EAI9BykC,QAAAA,KAAK,CAACj9B,KAAN,CAAY,kCAAZ,EAAgDk9B,KAAhD,CAAsD,OAAtD,EAA+D,QAA/D;EACD,OANuB;;;EAQxBD,MAAAA,KAAK,CACFj9B,KADH,qBACsB88B,IADtB,kBAEGhY,GAFH,CAEO,QAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,YAHpB,EARwB;;EAaxBykC,MAAAA,KAAK,CACFj9B,KADH,wBACyB88B,IADzB,aAEGhY,GAFH,CAEO,QAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,YAHpB,EAbwB;;EAkBxBykC,MAAAA,KAAK,CACFj9B,KADH,kBACmB88B,IADnB,mBACgCA,IADhC,kBAC4CA,IAD5C,aAEGhY,GAFH,CAEO,QAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,YAHpB,EAlBwB;;EAuBxBykC,MAAAA,KAAK,CACFj9B,KADH,kBACmB88B,IADnB,iBAC8BA,IAD9B,aAEGhY,GAFH,CAEO,QAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,UAHpB,EAvBwB;;EA4BxBykC,MAAAA,KAAK,CACFj9B,KADH,4BAC6B88B,IAD7B,mBAC0CA,IAD1C,aAEGhY,GAFH,CAEO,QAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,UAHpB;EAID;;EAED,QAAI2kC,MAAM,GAAGH,EAAE,MAAF,CAAM,SAAN,CAAb;;EACA,QAAIG,MAAM,CAAC7mC,KAAP,KAAiB,IAArB,EAA2B;;EAEzB6mC,MAAAA,MAAM,CACHn9B,KADH,mBACoB88B,IADpB,4BAEGhY,GAFH,CAEO,QAFP,EAGGtsB,GAHH,CAGO,WAHP,EAGoB,gBAHpB,EAFyB;;EAOzB2kC,MAAAA,MAAM,CAACn9B,KAAP,CAAa,6BAAb,EAA4CxH,GAA5C,CAAgD,MAAhD,EAAwD,cAAxD,EAPyB;;EASzB2kC,MAAAA,MAAM,CAACn9B,KAAP,CAAa,uBAAb,EAAsCxH,GAAtC,CAA0C,MAA1C,EAAkD,YAAlD,EATyB;;EAWzB2kC,MAAAA,MAAM,CAACn9B,KAAP,CAAa,yBAAb,EAAwCxH,GAAxC,CAA4C,WAA5C,EAAyD,YAAzD,EAXyB;;EAazB2kC,MAAAA,MAAM,CAACn9B,KAAP,CAAa,qCAAb,EAAoDxH,GAApD,CAAwD,WAAxD,EAAqE,WAArE,EAbyB;;EAezB2kC,MAAAA,MAAM,CAACn9B,KAAP,CAAa,+BAAb,EAA8CxH,GAA9C,CAAkD,MAAlD,EAA0D,QAA1D,EAfyB;;EAkBzB2kC,MAAAA,MAAM,CACHn9B,KADH,CACS,oDADT,EAEG+6B,IAFH,CAEQ,WAFR,EAGGviC,GAHH,CAGO,4BAHP,EAGqC,kBAHrC;EAID,KArGW;;;EAwGZ,QAAI4kC,MAAM,GAAGJ,EAAE,MAAF,CAAM,SAAN,CAAb;;EACA,QAAII,MAAM,CAAC9mC,KAAP,KAAiB,IAArB,EAA2B;;EAEzB8mC,MAAAA,MAAM,CAACp9B,KAAP,CAAa,iCAAb,EAAgDxH,GAAhD,CAAoD,UAApD,EAAgE,eAAhE,EAFyB;;EAIzB4kC,MAAAA,MAAM,CAACp9B,KAAP,CAAa,kBAAb,EAAiCxH,GAAjC,CAAqC,UAArC,EAAiD,cAAjD,EAJyB;;EAMzB4kC,MAAAA,MAAM,CAACp9B,KAAP,CAAa,mCAAb,EAAkDxH,GAAlD,CAAsD,MAAtD,EAA8D,gBAA9D,EANyB;;EAS1B,KAlHW;;;EAqHZ,QAAI6kC,MAAM,GAAGL,EAAE,MAAF,CAAM,gCAAN,CAAb;;EACA,QAAIK,MAAM,CAAC/mC,KAAP,KAAiB,IAArB,EAA2B;;EAEzB,UAAI+mC,MAAM,CAACtY,GAAP,CAAW,wCAAX,MAAyD,KAA7D,EAAoE;;EAElEsY,QAAAA,MAAM,CAACr9B,KAAP,CAAa,cAAb,EAA6BxH,GAA7B,CAAiC,QAAjC,EAA2C,gBAA3C,EAFkE;;EAIlE6kC,QAAAA,MAAM,CACHr9B,KADH,CACS,2CADT,EAEGA,KAFH,CAES,IAFT,EAGGxH,GAHH,CAGO,QAHP,EAGiB,WAHjB;EAID;EACF;EACF,GApI2B;;;EAuI5B,MAAI3E,CAAC,GAAGiN,GAAG,MAAH,CAAO,+BAAP,CAAR;;EACA,MAAIjN,CAAC,CAACyC,KAAN,EAAa;;EAEXzC,IAAAA,CAAC,CAACmM,KAAF,CAAQ,MAAR,EAAgBxH,GAAhB,CAAoB,cAApB,EAAoC,cAApC;EACA3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,+CAAR,EAAyDxH,GAAzD,CAA6D,cAA7D,EAA6E,QAA7E,EAHW;;EAKX3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,QAAR,EAAkBxH,GAAlB,CAAsB,cAAtB,EAAsC,gBAAtC;EACA3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,6BAAR,EAAuCxH,GAAvC,CAA2C,cAA3C,EAA2D,iBAA3D;EACA3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,OAAR,EAAiBxH,GAAjB,CAAqB,cAArB,EAAqC,iBAArC,EAPW;;EAUX3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,2DAAR,EACGtC,KADH,CACS,cADT,EAEGlF,GAFH,CAEO,aAFP,EAEsB,aAFtB,EAVW;;EAeX3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,uDAAR,EACGtC,KADH,CACS,cADT,EAEGlF,GAFH,CAEO,aAFP,EAEsB,mBAFtB;EAGD;;EAED,SAAOsI,GAAP;EACD,CA7JD;;EA8JA,aAAc,GAAGi8B,OAAjB;;EChKA;EACA,IAAMO,YAAY,GAAG,SAAfA,YAAe,CAASx8B,GAAT,EAAc;EACjC,MAAI26B,GAAG,GAAG36B,GAAG,MAAH,CAAO,YAAP,CAAV;;EACA,MAAI26B,GAAG,CAACnlC,KAAR,EAAe;;EAEbmlC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,oBAAV,EAAgCxH,GAAhC,CAAoC,QAApC,EAA8C,YAA9C,EAFa;;EAIbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,sBAAV,EAAkCxH,GAAlC,CAAsC,SAAtC,EAAiD,aAAjD,EAJa;;EAMbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,4BAAV,EAAwCxH,GAAxC,CAA4C,MAA5C,EAAoD,kBAApD,EANa;;EAQbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,mBAAV,EAA+BxH,GAA/B,CAAmC,MAAnC,EAA2C,UAA3C,EARa;;EAUbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,+CAAV,EAA2DxH,GAA3D,CAA+D,QAA/D,EAAyE,SAAzE,EAVa;;EAYbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,4BAAV,EAAwCxH,GAAxC,CAA4C,MAA5C,EAAoD,UAApD,EAZa;;EAcbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,uBAAV,EAAmCxH,GAAnC,CAAuC,WAAvC,EAAoD,WAApD,EAda;;EAgBbijC,IAAAA,GAAG,CAACz7B,KAAJ,CAAU,qDAAV,EAAiExH,GAAjE,CAAqE,MAArE,EAA6E,YAA7E;EACD;;EACD,SAAOsI,GAAP;EACD,CArBD;;EAsBA,kBAAc,GAAGw8B,YAAjB;;ECvBA,IAAMC,KAAK,GAAG,2FAAd;;EAGA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAS18B,GAAT,EAAc;EAC7B,MAAI28B,GAAG,GAAG38B,GAAG,MAAH,CAAO,QAAP,CAAV;;EACA,MAAI28B,GAAG,CAACnnC,KAAJ,KAAc,IAAlB,EAAwB;;EAEtBmnC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,uBAAV,EAAmCxH,GAAnC,CAAuC,aAAvC,EAAsD,aAAtD,EAFsB;;EAItBilC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,4BAAV,EAAwCxH,GAAxC,CAA4C,aAA5C,EAA2D,mBAA3D,EAJsB;;EAMtB,QAAI3E,CAAC,GAAG4pC,GAAG,CAACz9B,KAAJ,CAAU,sBAAV,CAAR;;EACA,QAAInM,CAAC,CAACyC,KAAN,EAAa;EACX,UAAIzC,CAAC,CAACkxB,GAAF,CAAM,SAAN,MAAqB,IAAzB,EAA+B;EAC7BlxB,QAAAA,CAAC,CAAC8K,KAAF,CAAQ,CAAR,EAAWnG,GAAX,CAAe,UAAf,EAA2B,kBAA3B;EACD,OAFD,MAEO;EACL3E,QAAAA,CAAC,CAAC8K,KAAF,CAAQ,CAAR,EAAWnG,GAAX,CAAe,QAAf,EAAyB,oBAAzB;EACD;EACF,KAbqB;;;EAetB3E,IAAAA,CAAC,GAAG4pC,GAAG,CAACz9B,KAAJ,CAAU,mBAAV,CAAJ;EACAnM,IAAAA,CAAC,CAACgM,QAAF,GAAarH,GAAb,CAAiB,MAAjB,EAAyB,YAAzB;EACA3E,IAAAA,CAAC,CAACmM,KAAF,CAAQ,SAAR,EAAmBxH,GAAnB,CAAuB,OAAvB,EAAgC,gBAAhC;EACD,GApB4B;;;EAsB7BilC,EAAAA,GAAG,CAACz9B,KAAJ,CAAU,sBAAV,EAAkCxH,GAAlC,CAAsC,OAAtC,EAA+C,YAA/C,EAtB6B;;EAwB7BilC,EAAAA,GAAG,CAACz9B,KAAJ,CAAU,+BAAV,EAA2CxH,GAA3C,CAA+C,OAA/C,EAAwD,mBAAxD,EAxB6B;;EA0B7BilC,EAAAA,GAAG,CAACz9B,KAAJ,CAAU,yBAAV,EAAqCxH,GAArC,CAAyC,OAAzC,EAAkD,aAAlD,EA1B6B;;EA4B7BilC,EAAAA,GAAG,CAACz9B,KAAJ,CAAU,cAAV,EAA0BxH,GAA1B,CAA8B,OAA9B,EAAuC,aAAvC,EA5B6B;;EA8B7BilC,EAAAA,GAAG,CAACz9B,KAAJ,CAAU,mCAAV,EAA+CxH,GAA/C,CAAmD,OAAnD,EAA4D,cAA5D,EA9B6B;;EAgC7B,MAAIklC,IAAI,GAAGD,GAAG,MAAH,CAAOF,KAAP,CAAX;;EACA,MAAIG,IAAI,CAACpnC,KAAL,KAAe,IAAnB,EAAyB;EACvBonC,IAAAA,IAAI,CAAC19B,KAAL,CAAW,UAAX,EAAuBxH,GAAvB,CAA2B,OAA3B,EAAoC,SAApC,EADuB;;;EAGvBklC,IAAAA,IAAI,CAAC19B,KAAL,WAAcu9B,KAAd,kBAAkC/kC,GAAlC,CAAsC,OAAtC,EAA+C,qBAA/C;EACD;;EACD,SAAOsI,GAAP;EACD,CAvCD;;EAwCA,cAAc,GAAG08B,QAAjB;;EC3CA,IAAMG,KAAK,GAAG,oDAAd;;EACA,IAAM7Q,MAAM,GAAG,gDAAf;;EACA,IAAM/e,OAAK,GAAG,iBAAd;;EAEA,IAAM6vB,QAAQ,GAAG,SAAXA,QAAW,CAAS98B,GAAT,EAAc;;EAE7B,MAAI6S,MAAM,GAAG7S,GAAG,MAAH,CAAOgsB,MAAP,CAAb;;EACA,MAAInZ,MAAM,CAACrd,KAAP,KAAiB,IAArB,EAA2B;;EAEzBqd,IAAAA,MAAM,CAAC3T,KAAP,iEAAsE8sB,MAAtE,QAAiFt0B,GAAjF,CAAqF,QAArF,EAA+F,cAA/F,EAFyB;;EAIzBmb,IAAAA,MAAM,CAAC3T,KAAP,wBAA6B8sB,MAA7B,QAAwCt0B,GAAxC,CAA4C,QAA5C,EAAsD,mBAAtD,EAJyB;;EAMzBmb,IAAAA,MAAM,CAAC3T,KAAP,YAAiB8sB,MAAjB,+BAAmDt0B,GAAnD,CAAuD,QAAvD,EAAiE,cAAjE,EANyB;;EAQzBmb,IAAAA,MAAM,CAAC3T,KAAP,YAAiB8sB,MAAjB,eAAmCt0B,GAAnC,CAAuC,QAAvC,EAAiD,aAAjD,EARyB;;EAUzBmb,IAAAA,MAAM,CAAC3T,KAAP,mBAAwB8sB,MAAxB,QAAmCt0B,GAAnC,CAAuC,QAAvC,EAAiD,aAAjD,EAVyB;;EAYzBmb,IAAAA,MAAM,CAAC3T,KAAP,4BAAiC8sB,MAAjC,QAA4Ct0B,GAA5C,CAAgD,QAAhD,EAA0D,YAA1D,EAZyB;;EAczBmb,IAAAA,MAAM,CAAC3T,KAAP,oBAAyB8sB,MAAzB,QAAoCt0B,GAApC,CAAwC,QAAxC,EAAkD,QAAlD,EAdyB;;EAgBzBmb,IAAAA,MAAM,CAAC3T,KAAP,YAAiB8sB,MAAjB,gBAAoCt0B,GAApC,CAAwC,QAAxC,EAAkD,QAAlD,EAhByB;;EAkBzBmb,IAAAA,MAAM,CAAC3T,KAAP,YAAiB8sB,MAAjB,oBAAwCt0B,GAAxC,CAA4C,OAA5C,EAAqD,cAArD,EAlByB;;EAoBzBmb,IAAAA,MAAM,CAAC3T,KAAP,kBAAuB8sB,MAAvB,QAAkCt0B,GAAlC,CAAsC,OAAtC,EAA+C,gBAA/C,EApByB;;EAsBzBmb,IAAAA,MAAM,CAAC3T,KAAP,YAAiB8sB,MAAjB,oBAAwCt0B,GAAxC,CAA4C,OAA5C,EAAqD,SAArD,EAtByB;;EAwBzBmb,IAAAA,MAAM,CAAC3T,KAAP,sBAA2B8sB,MAA3B,QAAsCt0B,GAAtC,CAA0C,OAA1C,EAAmD,YAAnD,EAxByB;;EA0BzBmb,IAAAA,MAAM,CACH3T,KADH,WACY29B,KADZ,eACsB7Q,MADtB,QAEGiO,IAFH,CAEQ,UAFR,EAGGviC,GAHH,CAGO,OAHP,EAGgB,aAHhB,EA1ByB;;EA+BzBmb,IAAAA,MAAM,CAAC3T,KAAP,6BAAkC8sB,MAAlC,QAA6Ct0B,GAA7C,CAAiD,OAAjD,EAA0D,gBAA1D,EA/ByB;EAgC1B,GAnC4B;;;EAsC7B,MAAIqlC,IAAI,GAAG/8B,GAAG,MAAH,CAAOiN,OAAP,CAAX;;EACA,MAAI8vB,IAAI,CAACvnC,KAAL,KAAe,IAAnB,EAAyB;;EAEvBunC,IAAAA,IAAI,CAAC79B,KAAL,oBAAuB+N,OAAvB,QAAiCvV,GAAjC,CAAqC,YAArC,EAAmD,YAAnD;EACAqlC,IAAAA,IAAI,CAAC79B,KAAL,WAAc+N,OAAd,iBAAiCvV,GAAjC,CAAqC,YAArC,EAAmD,YAAnD,EAHuB;;EAKvBqlC,IAAAA,IAAI,CAAC79B,KAAL,WAAc29B,KAAd,eAAwB5vB,OAAxB,QAAkCvV,GAAlC,CAAsC,OAAtC,EAA+C,UAA/C,EALuB;;EAOvBqlC,IAAAA,IAAI,CAAC79B,KAAL,6BAAgC+N,OAAhC,QAA0CvV,GAA1C,CAA8C,OAA9C,EAAuD,YAAvD,EAPuB;;EASvBqlC,IAAAA,IAAI,CAAC79B,KAAL,YAAe+N,OAAf,oBAAqCvV,GAArC,CAAyC,OAAzC,EAAkD,WAAlD;EACAqlC,IAAAA,IAAI,CAAC79B,KAAL,uBAA0B+N,OAA1B,QAAoCvV,GAApC,CAAwC,OAAxC,EAAiD,cAAjD,EAVuB;;EAYvBqlC,IAAAA,IAAI,CAAC79B,KAAL,YAAe+N,OAAf,iBAAkCvV,GAAlC,CAAsC,OAAtC,EAA+C,eAA/C;EACAqlC,IAAAA,IAAI,CAAC79B,KAAL,qBAAwB+N,OAAxB,QAAkCvV,GAAlC,CAAsC,OAAtC,EAA+C,eAA/C;EAEA,QAAIslC,KAAK,GAAGh9B,GAAG,MAAH,CAAO,OAAP,CAAZ;;EACA,QAAIg9B,KAAK,CAACxnC,KAAN,KAAgB,IAApB,EAA0B;;EAExBwnC,MAAAA,KAAK,CAAC99B,KAAN,CAAY,kCAAZ,EAAgDxH,GAAhD,CAAoD,YAApD,EAAkE,UAAlE,EAFwB;;EAIxBslC,MAAAA,KAAK,CAAC99B,KAAN,CAAY,gBAAZ,EAA8BxH,GAA9B,CAAkC,YAAlC,EAAgD,YAAhD;EACD;EACF,GA7D4B;;;EA+D7B,MAAIulC,GAAG,GAAGj9B,GAAG,MAAH,CAAO,KAAP,CAAV;;EACA,MAAIi9B,GAAG,CAACznC,KAAJ,KAAc,IAAlB,EAAwB;;EAEtBynC,IAAAA,GAAG,CAAC/9B,KAAJ,CAAU,aAAV,EAAyBxH,GAAzB,CAA6B,SAA7B,EAAwC,SAAxC,EAFsB;;EAItBulC,IAAAA,GAAG,CAAC/9B,KAAJ,CAAU,yCAAV,EAAqDxH,GAArD,CAAyD,SAAzD,EAAoE,SAApE,EAJsB;;EAMtBulC,IAAAA,GAAG,CACA/9B,KADH,CACS,kBADT,EAEGxH,GAFH,CAEO,MAFP,EAGGqiC,SAHH,GAIGriC,GAJH,CAIO,SAJP,EAIkB,aAJlB,EANsB;;EAYtBulC,IAAAA,GAAG,CAAC/9B,KAAJ,CAAU,mBAAV,EAA+BxH,GAA/B,CAAmC,UAAnC,EAA+C,SAA/C;EACD,GA7E4B;;;EAgF7B,MAAIwlC,GAAG,GAAGl9B,GAAG,MAAH,CAAO,KAAP,CAAV;;EACA,MAAIk9B,GAAG,CAAC1nC,KAAR,EAAe;;EAEb0nC,IAAAA,GAAG,CAACh+B,KAAJ,CAAU,aAAV,EAAyBxH,GAAzB,CAA6B,SAA7B,EAAwC,SAAxC,EAFa;;EAIbwlC,IAAAA,GAAG,CAACh+B,KAAJ,WAAa29B,KAAb,aAA4BnlC,GAA5B,CAAgC,SAAhC,EAA2C,KAA3C;EACD,GAtF4B;;;EAyF7B,MAAIylC,KAAK,GAAGn9B,GAAG,MAAH,CAAO,QAAP,CAAZ;;EACA,MAAIm9B,KAAK,CAAC3nC,KAAN,KAAgB,IAApB,EAA0B;;EAExB2nC,IAAAA,KAAK,CAACj+B,KAAN,uBAAkCxH,GAAlC,CAAsC,MAAtC,EAA8C,wBAA9C,EAFwB;;EAIxBylC,IAAAA,KAAK,CAACj+B,KAAN,CAAY,kBAAZ,EAAgCxH,GAAhC,CAAoC,MAApC,EAA4C,gBAA5C,EAJwB;;EAMxBylC,IAAAA,KAAK,CAACj+B,KAAN,CAAY,kBAAZ,EAAgCxH,GAAhC,CAAoC,MAApC,EAA4C,gBAA5C,EANwB;;EAQxBylC,IAAAA,KAAK,CAACj+B,KAAN,CAAY,yBAAZ,EAAuCxH,GAAvC,CAA2C,MAA3C,EAAmD,gBAAnD,EARwB;;EAUxBylC,IAAAA,KAAK,CAACj+B,KAAN,CAAY,mBAAZ,EAAiCxH,GAAjC,CAAqC,MAArC,EAA6C,iBAA7C;EACD,GArG4B;;;EAwG7B,MAAIilC,GAAG,GAAG38B,GAAG,MAAH,CAAO,QAAP,CAAV;;EACA,MAAI28B,GAAG,CAACnnC,KAAJ,KAAc,IAAlB,EAAwB;;EAEtBmnC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,sBAAV,EAAkCxH,GAAlC,CAAsC,OAAtC,EAA+C,YAA/C,EAFsB;;EAItBilC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,+BAAV,EAA2CxH,GAA3C,CAA+C,OAA/C,EAAwD,mBAAxD,EAJsB;;EAMtBilC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,yBAAV,EAAqCxH,GAArC,CAAyC,OAAzC,EAAkD,aAAlD,EANsB;;EAQtBilC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,cAAV,EAA0BxH,GAA1B,CAA8B,OAA9B,EAAuC,aAAvC,EARsB;;EAUtBilC,IAAAA,GAAG,CAACz9B,KAAJ,CAAU,mCAAV,EAA+CxH,GAA/C,CAAmD,OAAnD,EAA4D,cAA5D,EAVsB;;EAYtBilC,IAAAA,GAAG,CACAz9B,KADH,CACS,0BADT,EAEG+6B,IAFH,CAEQ,QAFR,EAGGviC,GAHH,CAGO,MAHP,EAGe,YAHf,EAZsB;;EAkBtBilC,IAAAA,GAAG,CACAz9B,KADH,CACS,0BADT,EAEG+6B,IAFH,CAEQ,QAFR,EAGGviC,GAHH,CAGO,MAHP,EAGe,YAHf,EAlBsB;;EAwBtBilC,IAAAA,GAAG,CACAz9B,KADH,CACS,uBADT,QAEM,OAFN,EAGGxH,GAHH,CAGO,OAHP,EAGgB,gBAHhB;EAID;;EAED,SAAOsI,GAAP;EACD,CAxID;;EAyIA,cAAc,GAAG88B,QAAjB;;;;;;;;;;;EC1HA,IAAMM,WAAW,GAAG,SAAdA,WAAc,CAASp9B,GAAT,EAAc;;EAEhCq9B,EAAAA,QAAa,CAACr9B,GAAD,CAAb,CAFgC;;;;EAMhC66B,EAAAA,UAAQ,CAAC76B,GAAD,CAAR,CANgC;;;;EAUhCs7B,EAAAA,WAAS,CAACt7B,GAAD,CAAT,CAVgC;;;;EAchCi8B,EAAAA,SAAO,CAACj8B,GAAD,CAAP,CAdgC;;;;EAkBhCw8B,EAAAA,cAAY,CAACx8B,GAAD,CAAZ,CAlBgC;;;;EAsBhC08B,EAAAA,UAAQ,CAAC18B,GAAD,CAAR,CAtBgC;;;;EA0BhC88B,EAAAA,UAAQ,CAAC98B,GAAD,CAAR,CA1BgC;;;;EA8BhCs9B,EAAAA,OAAO,CAACt9B,GAAD,CAAP,CA9BgC;;;EAgChC,SAAOA,GAAP;EACD,CAjCD;;EAkCA,iBAAc,GAAGo9B,WAAjB;;EChDA;;EACA,IAAM/X,MAAM,GAAG,SAATA,MAAS,CAASrlB,GAAT,EAAc;EAC3B,MAAInC,KAAK,GAAGmC,GAAG,CAAComB,QAAJ,EAAZ,CAD2B;;EAG3BpmB,EAAAA,GAAG,GAAGu9B,OAAI,CAACv9B,GAAD,EAAMnC,KAAN,CAAV,CAH2B;;EAM3BmC,EAAAA,GAAG,GAAG42B,YAAS,CAAC52B,GAAD,EAAMnC,KAAN,CAAf,CAN2B;;EAS3BmC,EAAAA,GAAG,GAAGgpB,eAAY,CAAChpB,GAAD,CAAlB,CAT2B;;EAW3BA,EAAAA,GAAG,CAACpC,KAAJ,GAX2B;;EAa3BoC,EAAAA,GAAG,GAAGo9B,aAAW,CAACp9B,GAAD,CAAjB,CAb2B;;;;EAmB3BA,EAAAA,GAAG,CAAC3H,KAAJ,CAAU8qB,OAAV,CAAkBnvB,OAAlB,CAA0B,UAAAkvB,EAAE,EAAI;EAC9BA,IAAAA,EAAE,CAACljB,GAAD,CAAF;EACD,GAFD;EAIA,SAAOA,GAAP;EACD,CAxBD;;EAyBA,aAAc,GAAGqlB,MAAjB;;EC/BA,IAAMmY,SAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBC,aAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;EAAA,qCAGb;EACb,aAAKtX,QAAL,GAAgBpyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAIA,CAAC,CAACqE,IAAF,CAAO0C,YAAP,KAAwB,IAAxB,IAAgC/G,CAAC,CAACkK,IAAtC,EAA4C;EAC1ClK,YAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACD;;EACD,cAAInD,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAV;EACAxB,UAAAA,CAAC,CAAC0N,GAAF,CAAMrP,GAAN;EACD,SAND;EAOA,eAAO,IAAP;EACD;EAZ2B;EAAA;EAAA,mCAaf;EACX,aAAKy0B,QAAL,GAAgBpyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3BA,UAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACAxB,UAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD,SAHD;EAIA,eAAO,IAAP;EACD;EAnB2B;;EAAA;EAAA,IAEFkoC,GAFE;;EAqB9BC,EAAAA,aAAa,CAACxhC,SAAd,CAAwButB,MAAxB,GAAiCiU,aAAa,CAACxhC,SAAd,CAAwByhC,YAAzD;;EAEAF,EAAAA,GAAG,CAACvhC,SAAJ,CAAc9B,aAAd,GAA8B,UAASpH,CAAT,EAAY;EACxC,QAAIkM,KAAK,GAAG,KAAKA,KAAL,CAAW,eAAX,CAAZ;;EACA,QAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBkM,MAAAA,KAAK,GAAGA,KAAK,CAACnB,GAAN,CAAU/K,CAAV,CAAR;EACD;;EACD,WAAO,IAAI0qC,aAAJ,CAAkBx+B,KAAK,CAACW,IAAxB,EAA8B,IAA9B,EAAoC,KAAKxH,KAAzC,CAAP;EACD,GAND;;EAOA,SAAOolC,GAAP;EACD,CA/BD;;EAgCA,iBAAc,GAAGD,SAAjB;;EChCA,IAAMI,SAAS,GAAG,IAAlB;;EAEA,IAAMJ,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBI,QAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;EAAA,qCAGb;EACb,aAAKzX,QAAL,GAAgBpyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAxB,UAAAA,CAAC,CAAC0N,GAAF,CAAMrP,GAAN;EACD,SAHD;EAIA,eAAO,IAAP;EACD;EAT2B;EAAA;EAAA,mCAUf;EACX,aAAKy0B,QAAL,GAAgBpyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAnD,UAAAA,GAAG,GAAGA,GAAG,CAACF,KAAJ,CAAU,EAAV,EAAcyC,IAAd,CAAmB,GAAnB,CAAN,CAF2B;;EAI3B,cAAI0pC,SAAS,CAACppC,IAAV,CAAelB,CAAC,CAACiC,IAAjB,MAA2B,KAA/B,EAAsC;EACpC5D,YAAAA,GAAG,IAAI,GAAP;EACD;;EACD2B,UAAAA,CAAC,CAAC0N,GAAF,CAAMrP,GAAN;EACD,SARD;EASA,eAAO,IAAP;EACD;EArB2B;;EAAA;EAAA,IAEP8rC,GAFO;;EAuB9BI,EAAAA,QAAQ,CAAC3hC,SAAT,CAAmButB,MAAnB,GAA4BoU,QAAQ,CAAC3hC,SAAT,CAAmByhC,YAA/C;EACAE,EAAAA,QAAQ,CAAC3hC,SAAT,CAAmBotB,KAAnB,GAA2BuU,QAAQ,CAAC3hC,SAAT,CAAmByhC,YAA9C;;EAEAF,EAAAA,GAAG,CAACvhC,SAAJ,CAAcnC,QAAd,GAAyB,UAAS/G,CAAT,EAAY;EACnC,QAAIkM,KAAK,GAAG,KAAKA,KAAL,CAAW,UAAX,CAAZ;;EACA,QAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBkM,MAAAA,KAAK,GAAGA,KAAK,CAACnB,GAAN,CAAU/K,CAAV,CAAR;EACD;;EACD,WAAO,IAAI6qC,QAAJ,CAAa3+B,KAAK,CAACW,IAAnB,EAAyB,IAAzB,EAA+B,KAAKxH,KAApC,CAAP;EACD,GAND;;EAOA,SAAOolC,GAAP;EACD,CAlCD;;EAmCA,YAAc,GAAGD,WAAjB;;ECrCA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAE9BA,EAAAA,GAAG,CAACvhC,SAAJ,CAAc2vB,OAAd,GAAwB,UAAS74B,CAAT,EAAY;;EAElC,QAAI8qC,MAAM,GAAG,WAAQ,WAAR,EACVzD,KADU,CACJ,qBADI;EAAA,KAEVA,KAFU,CAEJ,2BAFI;EAAA,KAGVA,KAHU,CAGJ,+BAHI;EAAA,KAIVA,KAJU,CAIJ,4BAJI;EAAA,KAKVA,KALU,CAKJ,uBALI;EAAA,KAMVn7B,KANU,CAMJ,WANI,CAAb;EAOA,QAAI1J,KAAK,GAAG,KAAKs0B,UAAL,CAAgBgU,MAAhB,CAAZ;EAEA,QAAItV,MAAM,GAAGhzB,KAAK,CAACmzB,UAAN,EAAb;EACAnzB,IAAAA,KAAK,GAAGA,KAAK,CAACm0B,OAAN,CAAcnB,MAAd,CAAR;EAEA,QAAIS,WAAW,GAAGzzB,KAAK,CAACyzB,WAAN,EAAlB;EACAzzB,IAAAA,KAAK,GAAGA,KAAK,CAACm0B,OAAN,CAAcV,WAAd,CAAR,CAfkC;;EAkBlC,QAAI8U,YAAY,GAAGvoC,KAAK,MAAL,CAAS,8DAAT,EAAyE0J,KAAzE,CAA+E,cAA/E,CAAnB;EACA1J,IAAAA,KAAK,GAAGA,KAAK,CAACu0B,WAAN,CAAkBgU,YAAlB,CAAR,CAnBkC;;EAsBlC,QAAIC,SAAS,GAAGxoC,KAAK,MAAL,CAAS,kBAAT,EAA6B0J,KAA7B,CAAmC,MAAnC,CAAhB;EACA1J,IAAAA,KAAK,GAAGA,KAAK,CAACu0B,WAAN,CAAkBiU,SAAlB,CAAR,CAvBkC;;EA0BlCxoC,IAAAA,KAAK,GAAGA,KAAK,CAACu0B,WAAN,CAAkB,cAAlB,CAAR;EACAv0B,IAAAA,KAAK,GAAGA,KAAK,CAACu0B,WAAN,CAAkB,WAAlB,CAAR;EACAv0B,IAAAA,KAAK,GAAGA,KAAK,CAACu0B,WAAN,CAAkB,kBAAlB,CAAR,CA5BkC;;EA+BlCv0B,IAAAA,KAAK,GAAGA,KAAK,CAACs0B,UAAN,CAAiB,eAAjB,CAAR;EACAt0B,IAAAA,KAAK,GAAGA,KAAK,CAACs0B,UAAN,CAAiB,UAAjB,CAAR,CAhCkC;;;;;;;;;;;;EA8ClC,QAAImU,OAAO,GAAGzoC,KAAK,CAACgJ,MAAN,CAAa,UAAAlM,CAAC;EAAA,aAAIA,CAAC,CAACsxB,SAAF,KAAgB,CAAhB,IAAqBtxB,CAAC,CAAC4M,KAAF,CAAQ,QAAR,EAAkBjN,MAAlB,IAA4B,CAArD;EAAA,KAAd,CAAd;;EACA,QAAIgsC,OAAO,CAACzoC,KAAZ,EAAmB;EACjB,UAAIzC,CAAC,GAAGkrC,OAAO,CAACnU,UAAR,CAAmB,0BAAnB,CAAR;EACAt0B,MAAAA,KAAK,GAAGA,KAAK,CAACm0B,OAAN,CAAc52B,CAAC,CAAC+wB,EAAF,CAAK,CAAL,CAAd,CAAR;EACD;;EAED,QAAI,OAAO9wB,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACuI,GAAN,CAAU/K,CAAV,CAAR;EACD;;EACD,WAAO,IAAIyqC,GAAJ,CAAQjoC,KAAK,CAACqK,IAAd,EAAoB,IAApB,EAA0B,KAAKxH,KAA/B,CAAP;EACD,GAxDD;;EAyDA,SAAOolC,GAAP;EACD,CA5DD;;EA6DA,WAAc,GAAGD,WAAjB;;EC7DA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBS,YAFwB;EAAA;EAAA;EAAA;;EAG5B,0BAAYr+B,IAAZ,EAAkB4jB,IAAlB,EAAwBprB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,wFAAMwH,IAAN,EAAY4jB,IAAZ,EAAkBprB,KAAlB;EACA,YAAK8lC,UAAL,GAAkB,IAAlB;EAF6B;EAG9B;;;;EAN2B;EAAA;EAAA,+BAQnB;EACP,aAAKt+B,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ,CADqB;;EAGrB,cAAIugC,WAAW,GAAGvgC,KAAK,CAAC,CAAD,CAAL,CAAS1H,WAAT,EAAlB;EAEA0H,UAAAA,KAAK,CAAC7J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtByB,YAAAA,CAAC,CAAC0N,GAAF,CAAM1N,CAAC,CAACuD,QAAF,IAAcvD,CAAC,CAAC1B,IAAtB;EACA0B,YAAAA,CAAC,CAACuD,QAAF,GAAaS,SAAb,CAHsB;;EAMtB,gBAAIzF,CAAC,GAAGgM,KAAK,CAAC5L,MAAN,GAAe,CAAnB,IAAwBqB,CAAC,CAACiC,IAAF,KAAW,EAAvC,EAA2C;EACzCjC,cAAAA,CAAC,CAACiC,IAAF,IAAU,GAAV;EACD;EACF,WATD,EALqB;;EAgBrB,cAAI6oC,WAAJ,EAAiB;EACfvgC,YAAAA,KAAK,CAAC,CAAD,CAAL,CAASqsB,WAAT;EACD;EACF,SAnBD;EAoBA,eAAO,IAAP;EACD;EA9B2B;;EAAA;EAAA,IAEHuT,GAFG;;;;;;;;;;;EA2C9BA,EAAAA,GAAG,CAACvhC,SAAJ,CAAc8sB,YAAd,GAA6B,UAASh2B,CAAT,EAAY;;EAEvC,QAAIwC,KAAK,GAAG,KAAK0J,KAAL,CAAW,kBAAX,CAAZ,CAFuC;;;EAIvC,QAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACuI,GAAN,CAAU/K,CAAV,CAAR;EACD;;EACD,WAAO,IAAIkrC,YAAJ,CAAiB1oC,KAAK,CAACqK,IAAvB,EAA6B,IAA7B,EAAmC,KAAKxH,KAAxC,CAAP;EACD,GARD,CA3C8B;;;EAsD9BolC,EAAAA,GAAG,CAACvhC,SAAJ,CAAcmiC,QAAd,GAAyBZ,GAAG,CAACvhC,SAAJ,CAAcoiC,UAAvC;EACAb,EAAAA,GAAG,CAACvhC,SAAJ,CAAciiC,UAAd,GAA2BV,GAAG,CAACvhC,SAAJ,CAAcqiC,YAAzC;EACA,SAAOd,GAAP;EACD,CAzDD;;EA0DA,gBAAc,GAAGD,WAAjB;;EC1DA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAE9B,MAAMt1B,KAAK,GAAG,SAARA,KAAQ,CAASnI,GAAT,EAAc;EAC1B,QAAIksB,MAAM,GAAGlsB,GAAG,CAAC8pB,UAAJ,CAAe,WAAf,EAA4B9F,GAA5B,CAAgC,eAAhC,CAAb;EACA,QAAIwa,UAAU,GAAGx+B,GAAG,CAACd,KAAJ,CAAU,cAAV,CAAjB;EACA,WAAO;EACLgtB,MAAAA,MAAM,EAAEA,MADH;EAELuS,MAAAA,WAAW,EAAEz+B,GAAG,CAACd,KAAJ,CAAU,eAAV,CAFR;EAGLs/B,MAAAA,UAAU,EAAEA,UAHP;EAILE,MAAAA,SAAS,EAAEF,UAAU,CAACva,GAAX,CAAe,WAAf;EAJN,KAAP;EAMD,GATD;;;;EAF8B,MAcxB0a,KAdwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,qCAgBb;EACb,eAAO,KAAKz/B,KAAL,CAAW,UAAX,CAAP;EACD;;;EAlB2B;EAAA;EAAA,8BAoBpB;EACN,eAAO,KAAK4qB,UAAL,CAAgB,0BAAhB,CAAP;EACD;;;EAtB2B;EAAA;EAAA,8BAwBpB;EACN,eAAO,KAAKD,KAAL,GAAawQ,KAAb,CAAmB,cAAnB,CAAP;EACD;;;EA1B2B;EAAA;EAAA,0BA4BxB1oC,GA5BwB,EA4BnB;EACP,aAAKqC,OAAL,CAAa,UAAAd,CAAC,EAAI;EAChB,cAAIsrC,UAAU,GAAGr2B,KAAK,CAACjV,CAAD,CAAL,CAASsrC,UAA1B;EACAA,UAAAA,UAAU,CAACv9B,MAAX,CAAkBtP,GAAlB,EAFgB;;EAIhB6sC,UAAAA,UAAU,CAACpY,QAAX,CAAoB,CAApB,EAAuBwY,cAAvB,CAAsC,GAAtC;EACD,SALD;EAMA,eAAO,IAAP;EACD;;;EApC2B;EAAA;EAAA,+BAsCnB;EACP,eAAO,IAAP;EACD;;;EAxC2B;EAAA;EAAA,uCA2CX;EACf,eAAO,KAAKpgC,MAAL,CAAY,UAAAwB,GAAG;EAAA,iBAAImI,KAAK,CAACnI,GAAD,CAAL,CAAW0+B,SAAf;EAAA,SAAf,CAAP;EACD;EA7C2B;EAAA;EAAA,uCA8CX;EACf,eAAO,IAAP;EACD;EAhD2B;EAAA;EAAA,0CAiDR;EAClB,eAAO,IAAP;EACD;EAnD2B;;EAAA;EAAA,IAcVjB,GAdU;;;EAsD9BkB,EAAAA,KAAK,CAACziC,SAAN,CAAgBgwB,MAAhB,GAAyByS,KAAK,CAACziC,SAAN,CAAgB2iC,KAAzC;;EAEApB,EAAAA,GAAG,CAACvhC,SAAJ,CAAc4iC,KAAd,GAAsB,UAAS9rC,CAAT,EAAY;EAChC,QAAID,CAAC,GAAG,WAAQ,+BAAR,CAAR,CADgC;;EAIhC,QAAIgsC,QAAQ,GAAGhsC,CAAC,CAACmM,KAAF,CAAQ,0DAAR,CAAf;EACA,QAAI8/B,OAAO,GAAGjsC,CAAC,CAACmM,KAAF,CAAQ,8DAAR,CAAd;EACA,QAAI+/B,QAAQ,GAAGlsC,CAAC,CAACmM,KAAF,CAAQ,oDAAR,CAAf;EACA,QAAIhH,MAAM,GAAG6mC,QAAQ,CAAC3+B,MAAT,CAAgB4+B,OAAhB,CAAb;EACA9mC,IAAAA,MAAM,GAAGA,MAAM,CAACkI,MAAP,CAAc6+B,QAAd,CAAT;EACA/mC,IAAAA,MAAM,GAAGA,MAAM,MAAN,CAAU,WAAV,CAAT;;EAEA,QAAI,OAAOlF,CAAP,KAAa,QAAjB,EAA2B;EACzBkF,MAAAA,MAAM,GAAGnF,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAT;EACD;;EACD,WAAO,IAAI2rC,KAAJ,CAAUzmC,MAAM,CAAC2H,IAAjB,EAAuB,IAAvB,EAA6B,KAAKxH,KAAlC,CAAP;EACD,GAfD;;EAgBA,SAAOolC,GAAP;EACD,CAzED;;EA0EA,SAAc,GAAGD,WAAjB;;EC1EA,IAAM0B,QAAQ,GACZ,oFADF;;EAIA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASn/B,GAAT,EAAc;EAC9B,MAAIA,GAAG,CAACikB,GAAJ,CAAQ,SAAR,MAAuB,IAA3B,EAAiC;EAC/B,WAAO,IAAP;EACD,GAH6B;;;EAK9B,MAAIjkB,GAAG,CAACikB,GAAJ,CAAQib,QAAR,MAAsB,IAA1B,EAAgC;EAC9B,WAAO,KAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAWA,eAAc,GAAGC,SAAjB;;ECZA,IAAMnwB,YAAU,GAAG;EACjBowB,EAAAA,IAAI,EAAE,IADW;EAEjBC,EAAAA,IAAI,EAAE,IAFW;EAGjBC,EAAAA,QAAQ,EAAE,IAHO;EAIjBC,EAAAA,MAAM,EAAE,IAJS;EAKjBC,EAAAA,MAAM,EAAE,IALS;EAMjBC,EAAAA,KAAK,EAAE,IANU;EAOjBC,EAAAA,IAAI,EAAE,IAPW;;EAAA,CAAnB;;EAUA,IAAMC,WAAW,GAAG;EAClBxtC,EAAAA,CAAC,EAAE,IADe;EAElBI,EAAAA,CAAC,EAAE,IAFe;EAGlBC,EAAAA,CAAC,EAAE,IAHe;EAIlBE,EAAAA,CAAC,EAAE,IAJe;EAKlBb,EAAAA,CAAC,EAAE,IALe;EAMlBiB,EAAAA,CAAC,EAAE,IANe;EAOlBC,EAAAA,CAAC,EAAE,IAPe;EAQlBC,EAAAA,CAAC,EAAE,IARe;EASlBC,EAAAA,CAAC,EAAE,IATe;EAUlBG,EAAAA,CAAC,EAAE,IAVe;EAWlBC,EAAAA,CAAC,EAAE,IAXe;EAYlBK,EAAAA,CAAC,EAAE;EAZe,CAApB;;EAeA,IAAMksC,QAAQ,GAAG,CACf,SADe;EAEf,yBAFe;EAGf,OAHe,CAAjB;;EAMA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS7/B,GAAT,EAAc;;EAEhC,MAAIA,GAAG,CAACikB,GAAJ,CAAQ,SAAR,KAAsBjkB,GAAG,CAACikB,GAAJ,CAAQ,QAAR,CAA1B,EAA6C;EAC3C,WAAO,EAAP;EACD,GAJ+B;;;EAMhC,MAAIjkB,GAAG,CAACikB,GAAJ,CAAQ,SAAR,CAAJ,EAAwB;EACtB,WAAO,KAAP;EACD;;EACD,MAAItyB,GAAG,GAAGqO,GAAG,CAACpO,IAAJ,CAAS,QAAT,EAAmBgD,IAAnB,EAAV,CATgC;;EAWhC,MAAIoa,YAAU,CAACzX,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAOqd,YAAU,CAACrd,GAAD,CAAjB;EACD,GAb+B;;;EAehC,MAAImuC,WAAW,GAAGnuC,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB;;EACA,MAAI2D,GAAG,CAACikB,GAAJ,CAAQ,aAAR,KAA0B0b,WAAW,CAACpoC,cAAZ,CAA2BuoC,WAA3B,CAA9B,EAAuE;EACrE,WAAO,IAAP;EACD,GAlB+B;;;EAoBhC,OAAK,IAAIjuC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+tC,QAAQ,CAAC3tC,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EACxC,QAAI+tC,QAAQ,CAAC/tC,CAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,CAAJ,EAA2B;EACzB,aAAO,GAAP;EACD;EACF,GAxB+B;;;EA0BhC,MAAI,YAAY6C,IAAZ,CAAiB7C,GAAjB,CAAJ,EAA2B;EACzB,WAAO,IAAP;EACD;;EACD,SAAO,GAAP;EACD,CA9BD;;EAgCA,cAAc,GAAGkuC,WAAjB;;EClEA;EACA,IAAM7J,UAAQ,GAAG,CACf,uCADe,EAEf,4CAFe,EAGf,OAHe,EAIf,QAJe,EAKf,YALe,CAAjB;;EASA,IAAMC,YAAU,GAAG,CACjB,eADiB,EAEjB,6CAFiB,EAGjB,gBAHiB,EAIjB,SAJiB,EAKjB,kBALiB,EAMjB,SANiB,EAOjB,2BAPiB,EAQjB,UARiB,EASjB,SATiB,EAUjB,OAViB,EAWjB,oBAXiB,EAYjB,QAZiB,EAajB,iBAbiB,EAcjB,kBAdiB,EAejB,+BAfiB,EAgBjB,aAhBiB,EAiBjB,YAjBiB,EAkBjB,sCAlBiB,EAmBjB,QAnBiB,EAoBjB,0BApBiB,CAAnB;EAsBA,YAAc,GAAG;EACfA,EAAAA,UAAU,EAAEA,YADG;EAEfD,EAAAA,QAAQ,EAAEA;EAFK,CAAjB;;EC/BA,IAAM+J,IAAI,GAAG,IAAb;;;;EAIA,IAAM/J,UAAQ,GAAG,SAAXA,QAAW,CAASrkC,GAAT,EAAc;;EAE7B,MAAIiwB,QAAK,CAACqU,UAAN,CAAiBn1B,IAAjB,CAAsB,UAAA9J,GAAG;EAAA,WAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,GAAzB,CAAJ,EAAiD;EAC/C,WAAO,KAAP;EACD,GAJ4B;;;EAM7B,MAAIouC,IAAI,CAACvrC,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,WAAO,IAAP;EACD,GAR4B;;;EAU7B,MAAIiwB,QAAK,CAACoU,QAAN,CAAel1B,IAAf,CAAoB,UAAA9J,GAAG;EAAA,WAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,GAAvB,CAAJ,EAA+C;EAC7C,WAAO,IAAP;EACD;;EACD,SAAO,IAAP;EACD,CAdD;;EAeA,gBAAc,GAAGqkC,UAAjB;;ECpBA,IAAMgK,UAAU,GAAG;EACjBC,EAAAA,EAAE,EAAE,KADa;EAEjBC,EAAAA,GAAG,EAAE,MAFY;EAGjBC,EAAAA,IAAI,EAAE,QAHW;EAIjBC,EAAAA,EAAE,EAAE,MAJa;EAKjBvuC,EAAAA,CAAC,EAAE,MALc;EAMjBqiC,EAAAA,GAAG,EAAE,OANY;EAQjBmM,EAAAA,GAAG,EAAE,MARY;EASjBC,EAAAA,KAAK,EAAE,QATU;EAUjBC,EAAAA,GAAG,EAAE,MAVY;EAWjBC,EAAAA,EAAE,EAAE,MAXa;EAYjBC,EAAAA,IAAI,EAAE;EAZW,CAAnB;;EAgBA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAS1gC,GAAT,EAAc;EACjC,MAAIrO,GAAG,GAAGqO,GAAG,CAACpO,IAAJ,CAAS,MAAT,EAAiBgD,IAAjB,EAAV,CADiC;;EAGjC,MAAIorC,UAAU,CAACzoC,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClCqO,IAAAA,GAAG,CAACwlB,WAAJ,CAAgBwa,UAAU,CAACruC,GAAD,CAA1B,EAAiC,IAAjC;EACAqO,IAAAA,GAAG,CAACtI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,GAPgC;;;EASjC,MAAI,KAAKlD,IAAL,CAAU7C,GAAV,CAAJ,EAAoB;EAClBA,IAAAA,GAAG,IAAI,GAAP;EACAqO,IAAAA,GAAG,CAACwlB,WAAJ,CAAgB7zB,GAAhB,EAAqB,IAArB;EACAqO,IAAAA,GAAG,CAACtI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,GAdgC;;;EAgBjC/F,EAAAA,GAAG,IAAI,IAAP;EACAqO,EAAAA,GAAG,CAACwlB,WAAJ,CAAgB7zB,GAAhB,EAAqB,IAArB;EACAqO,EAAAA,GAAG,CAACtI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,CApBD;;EAqBA,kBAAc,GAAGgpC,YAAjB;;ECrCA;;EAEA,IAAMv4B,OAAK,GAAG,SAARA,KAAQ,CAASnI,GAAT,EAAc;EAC1B,MAAIuB,GAAG,GAAG;EACRf,IAAAA,IAAI,EAAER;EADE,GAAV,CAD0B;;EAK1B,MAAIA,GAAG,CAACikB,GAAJ,CAAQ,qBAAR,CAAJ,EAAoC;EAClC,QAAIlxB,CAAC,GAAGiN,GAAG,CAAC8pB,UAAJ,CAAe,UAAf,CAAR;EACAvoB,IAAAA,GAAG,CAACf,IAAJ,GAAWzN,CAAC,CAAC+wB,EAAF,CAAK,CAAL,CAAX;EACAviB,IAAAA,GAAG,CAAChM,IAAJ,GAAWxC,CAAC,CAAC+wB,EAAF,CAAK,CAAL,CAAX;EACD;;EACD,SAAOviB,GAAP;EACD,CAXD;;EAYA,WAAc,GAAG4G,OAAjB;;ECRA,IAAMzK,SAAO,GAAG;;EAEd8D,EAAAA,IAAI,EAAE,cAASlI,OAAT,EAAkB;EACtB,QAAItG,CAAC,GAAG,IAAR;;EACA,QAAI,OAAOsG,OAAP,KAAmB,QAAvB,EAAiC;EAC/BtG,MAAAA,CAAC,GAAGsG,OAAJ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;;EACDA,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE1H,MAAAA,IAAI,EAAE,IAAR;EAAc8H,MAAAA,MAAM,EAAE,IAAtB;EAA4B9E,MAAAA,IAAI,EAAE,IAAlC;EAAwCiJ,MAAAA,KAAK,EAAE;EAA/C,KAArB;EACA,QAAI0D,GAAG,GAAG,EAAV;EACA,SAAKvN,OAAL,CAAa,UAAAgM,GAAG,EAAI;EAClB,UAAIwB,IAAI,GAAGxB,GAAG,CAACwB,IAAJ,CAASlI,OAAT,EAAkB,CAAlB,CAAX;EACAkI,MAAAA,IAAI,CAACm/B,OAAL,GAAeC,UAAU,CAAC5gC,GAAD,CAAzB;EACAuB,MAAAA,GAAG,CAACtD,IAAJ,CAASuD,IAAT;EACD,KAJD;;EAKA,QAAIxO,CAAC,KAAK,IAAV,EAAgB;EACd,aAAOuO,GAAG,CAACvO,CAAD,CAAV;EACD;;EACD,WAAOuO,GAAP;EACD,GAnBa;;;EAqBduN,EAAAA,UAAU,EAAE,sBAAW;EACrB,QAAIjP,IAAI,GAAG,KAAKqkB,SAAL,CAAe,4DAAf,CAAX;EACArkB,IAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAY,KAAK+jB,UAAL,CAAgB,uBAAhB,CAAZ,CAAP;EACAtkB,IAAAA,IAAI,GAAGA,IAAI,CAACX,KAAL,CAAW,YAAX,CAAP;EACA,WAAOW,IAAI,CAACjF,IAAL,CAAU,OAAV,CAAP;EACD,GA1Ba;EA4Bdo7B,EAAAA,QAAQ,EAAE,oBAAW;EACnB,WAAO,WAAQ,SAAR,CAAP,CADmB;EAEpB,GA9Ba;EA+BdmJ,EAAAA,SAAS,EAAE,qBAAW;EACpB,WAAO,KAAK3gC,MAAL,CAAY,UAAAlM,CAAC;EAAA,aAAI6sC,WAAS,CAAC7sC,CAAD,CAAb;EAAA,KAAb,CAAP;EACD,GAjCa;EAkCdqc,EAAAA,QAAQ,EAAE,kBAASkyB,KAAT,EAAgB;EAAA;;EACxB,QAAIlyB,QAAQ,GAAG,KAAKtW,KAAL,CAAWE,UAAX,CAAsBoW,QAArC;EACA,SAAK3a,OAAL,CAAa,UAAAgM,GAAG,EAAI;EAClB,UAAIA,GAAG,CAACikB,GAAJ,CAAQ,SAAR,KAAsBkb,WAAS,CAACn/B,GAAD,CAAT,KAAmB,KAA7C,EAAoD;EAClD;EACD,OAHiB;;;EAKlB,UAAIQ,IAAI,GAAG2H,OAAK,CAACnI,GAAD,CAAL,CAAWQ,IAAtB;EACA,UAAI7O,GAAG,GAAG6O,IAAI,CAAC5O,IAAL,CAAU,SAAV,CAAV;;EACA,UAAI,CAAC4O,IAAI,CAACyjB,GAAL,CAAS,WAAT,CAAD,IAA0B+R,YAAQ,CAACrkC,GAAD,CAAR,KAAkB,IAAhD,EAAsD;EACpD;EACD;;EACDA,MAAAA,GAAG,GAAGgd,QAAQ,CAAChd,GAAD,EAAM,KAAI,CAAC0G,KAAX,CAAd;EACAmI,MAAAA,IAAI,CAAC1L,OAAL,CAAanD,GAAb,EAAkB+F,GAAlB,CAAsB,SAAtB,EAXkB;;EAalB,UAAImpC,KAAJ,EAAW;EACT,YAAIjG,EAAE,GAAGp6B,IAAI,CAACsgC,UAAL,CAAgB,qBAAhB,EAAuC9c,GAAvC,CAA2C,YAA3C,CAAT;;EACA,YAAI4W,EAAE,CAACplC,KAAH,KAAa,IAAjB,EAAuB;EACrBolC,UAAAA,EAAE,CAAC/R,MAAH;EACD;EACF;EACF,KAnBD;EAoBA,WAAO,IAAP;EACD,GAzDa;EA0DdpwB,EAAAA,UAAU,EAAE,oBAASooC,KAAT,EAAgB;EAAA;;EAC1B,QAAIpoC,UAAU,GAAG,KAAKJ,KAAL,CAAWE,UAAX,CAAsBE,UAAvC;EACA,SAAKzE,OAAL,CAAa,UAAAgM,GAAG,EAAI;EAClB,UAAIA,GAAG,CAACikB,GAAJ,CAAQ,WAAR,KAAwBkb,WAAS,CAACn/B,GAAD,CAAT,KAAmB,KAA/C,EAAsD;EACpD;EACD,OAHiB;;;EAKlB,UAAIQ,IAAI,GAAG2H,OAAK,CAACnI,GAAD,CAAL,CAAWQ,IAAtB;EACA,UAAI7O,GAAG,GAAG6O,IAAI,CAAC5O,IAAL,CAAU,SAAV,CAAV;;EACA,UAAI,CAAC4O,IAAI,CAACyjB,GAAL,CAAS,SAAT,CAAD,IAAwB+R,YAAQ,CAACrkC,GAAD,CAAR,KAAkB,IAA9C,EAAoD;EAClD;EACD;;EACDA,MAAAA,GAAG,GAAG8G,UAAU,CAAC9G,GAAD,EAAM,MAAI,CAAC0G,KAAX,CAAhB;EACAmI,MAAAA,IAAI,CAAC1L,OAAL,CAAanD,GAAb,EAAkB+F,GAAlB,CAAsB,WAAtB,EAXkB;;EAalB,UAAImpC,KAAJ,EAAW;;EAET,YAAIzpC,KAAK,GAAG4I,GAAZ;EACA,YAAI26B,GAAG,GAAG36B,GAAG,CAAC8gC,UAAJ,CAAe,YAAf,CAAV;;EACA,YAAInG,GAAG,CAACnlC,KAAR,EAAe;EACb4B,UAAAA,KAAK,GAAGujC,GAAR;EACD;;EACD,YAAIgG,OAAO,GAAGC,UAAU,CAACxpC,KAAD,CAAxB;EACAA,QAAAA,KAAK,CAAC2pC,YAAN,CAAmBJ,OAAnB;EACD;EACF,KAvBD;EAwBA,WAAO,IAAP;EACD,GArFa;EAsFdD,EAAAA,YAAY,EAAE,wBAAW;EACvB,SAAK1sC,OAAL,CAAa,UAAA1B,CAAC,EAAI;EAChBouC,MAAAA,cAAY,CAACpuC,CAAD,CAAZ;EACD,KAFD;EAGA,WAAO,IAAP;EACD;EA3Fa,CAAhB;EA6FA,aAAc,GAAGoL,SAAjB;;ECjGA,IAAM8/B,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBuD,KAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAEVvD,GAFU;;;EAI9B3pC,EAAAA,MAAM,CAACoH,MAAP,CAAc8lC,KAAK,CAAC9kC,SAApB,EAA+BwB,SAA/B;;EAEA+/B,EAAAA,GAAG,CAACvhC,SAAJ,CAAc8Q,KAAd,GAAsB,UAASha,CAAT,EAAY;;EAEhC,QAAIkmB,IAAI,GAAG,KAAKha,KAAL,CAAW,yCAAX,CAAX,CAFgC;;EAIhC,QAAInM,CAAC,GAAG,KAAKixB,GAAL,CAAS9K,IAAT,EAAe4Q,UAAf,CAA0B,WAA1B,CAAR,CAJgC;;EAMhC/2B,IAAAA,CAAC,GAAGA,CAAC,CAACqN,MAAF,CAAS8Y,IAAT,CAAJ;EAEAnmB,IAAAA,CAAC,GAAGA,CAAC,CAACmM,KAAF,CAAQ,8BAAR,CAAJ,CARgC;;EAUhCnM,IAAAA,CAAC,GAAGA,CAAC,CAACixB,GAAF,CAAM,UAAN,CAAJ;EACAjxB,IAAAA,CAAC,GAAGA,CAAC,CAACixB,GAAF,CAAM,eAAN,CAAJ;EACAjxB,IAAAA,CAAC,GAAGA,CAAC,CAACixB,GAAF,CAAM,mBAAN,CAAJ,CAZgC;;;EAchCjxB,IAAAA,CAAC,GAAGA,CAAC,CAACixB,GAAF,CAAM,6BAAN,CAAJ;EACAjxB,IAAAA,CAAC,GAAGA,CAAC,CAACixB,GAAF,CAAM,kBAAN,CAAJ;;EAEA,QAAI,OAAOhxB,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,WAAO,IAAIguC,KAAJ,CAAUjuC,CAAC,CAAC8M,IAAZ,EAAkB,IAAlB,EAAwB,KAAKxH,KAA7B,CAAP;EACD,GArBD;;EAsBA,SAAOolC,GAAP;EACD,CA7BD;;EA8BA,SAAc,GAAGD,WAAjB;;EChCA,IAAMyD,IAAI,GAAG,IAAb;EACA,IAAMC,KAAK,GAAG,IAAd;;EAEA,IAAM1D,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB0D,WAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,+BAInB;EACP,aAAKthC,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAIgR,KAAK,GAAGhR,CAAC,CAAC2K,KAAF,CAAQ,CAAR,CAAZ;EACAqG,UAAAA,KAAK,CAAC5O,GAAN,GAAY4O,KAAK,CAAC5O,GAAN,CAAUR,OAAV,CAAkBmsC,IAAlB,EAAwB,EAAxB,CAAZ;EACA,cAAIhnC,IAAI,GAAG/G,CAAC,CAAC6L,QAAF,EAAX;EACA9E,UAAAA,IAAI,CAAC1E,IAAL,GAAY0E,IAAI,CAAC1E,IAAL,CAAUT,OAAV,CAAkBosC,KAAlB,EAAyB,EAAzB,CAAZ;EACD,SALD;EAMA,eAAO,IAAP;EACD;EAZ2B;;EAAA;EAAA,IAEJzD,GAFI;;EAe9BA,EAAAA,GAAG,CAACvhC,SAAJ,CAAc+sB,WAAd,GAA4B,UAASj2B,CAAT,EAAY;EACtC,QAAI6M,IAAI,GAAG,EAAX;EACA,SAAKA,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ,CADqB;;EAGrB,WAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,YAAMyB,CAAC,GAAGuK,KAAK,CAAChM,CAAD,CAAf;;EACA,YAAIovC,IAAI,CAACzsC,IAAL,CAAUlB,CAAC,CAACgC,GAAZ,CAAJ,EAAsB;;EAEpB,eAAK,IAAIrC,CAAC,GAAGpB,CAAb,EAAgBoB,CAAC,GAAG4K,KAAK,CAAC5L,MAA1B,EAAkCgB,CAAC,IAAI,CAAvC,EAA0C;EACxC,gBAAIiuC,KAAK,CAAC1sC,IAAN,CAAWqJ,KAAK,CAAC5K,CAAD,CAAL,CAASsC,IAApB,CAAJ,EAA+B;EAC7B,kBAAIgX,GAAG,GAAGtZ,CAAC,GAAGpB,CAAJ,GAAQ,CAAlB;EACAgO,cAAAA,IAAI,CAAC5B,IAAL,CAAU/K,CAAC,CAACiL,SAAF,CAAY7K,CAAC,CAAC4D,EAAd,EAAkBqV,GAAlB,CAAV;EACA1a,cAAAA,CAAC,GAAGoB,CAAJ;EACA;EACD;EACF;EACF;EACF;EACF,KAjBD,EAFsC;;EAqBtC,QAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;EACzB,UAAI6M,IAAI,CAAC7M,CAAD,CAAR,EAAa;EACX6M,QAAAA,IAAI,GAAG,CAACA,IAAI,CAAC7M,CAAD,CAAL,CAAP;EACD,OAFD,MAEO;EACL6M,QAAAA,IAAI,GAAG,EAAP;EACD;;EACD,aAAO,IAAIshC,WAAJ,CAAgBthC,IAAhB,EAAsB,IAAtB,EAA4B,KAAKxH,KAAjC,CAAP;EACD;;EACD,WAAO,IAAI8oC,WAAJ,CAAgBthC,IAAhB,EAAsB,IAAtB,EAA4B,KAAKxH,KAAjC,CAAP;EACD,GA9BD;;EAgCA,SAAOolC,GAAP;EACD,CAhDD;;EAiDA,eAAc,GAAGD,WAAjB;;ECpDA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB2D,WAFwB;EAAA;EAAA;EAAA;;EAG5B,yBAAYvhC,IAAZ,EAAkB4jB,IAAlB,EAAwBprB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,uFAAMwH,IAAN,EAAY4jB,IAAZ,EAAkBprB,KAAlB;EACA,YAAK8lC,UAAL,GAAkB,IAAlB;EAF6B;EAG9B;;;;EAN2B;EAAA;EAAA,8BAQpB;EACN,aAAKt+B,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ;EACAA,UAAAA,KAAK,CAAC7J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,gBAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAxB,YAAAA,CAAC,CAAC0N,GAAF,CAAMrP,GAAG,IAAI2B,CAAC,CAAC1B,IAAf;EACD,WAHD;EAID,SAND;EAOA,eAAO,IAAP;EACD;EAjB2B;;EAAA;EAAA,IAEJ6rC,GAFI;;;;;;;;;;;EA8B9BA,EAAAA,GAAG,CAACvhC,SAAJ,CAAcgtB,WAAd,GAA4B,UAASl2B,CAAT,EAAY;;EAEtC,QAAIwC,KAAK,GAAG,KAAK0J,KAAL,CAAW,qBAAX,CAAZ,CAFsC;;EAItC,QAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACuI,GAAN,CAAU/K,CAAV,CAAR;EACD;;EACD,WAAO,IAAIouC,WAAJ,CAAgB5rC,KAAK,CAACqK,IAAtB,EAA4B,IAA5B,EAAkC,KAAKxH,KAAvC,CAAP;EACD,GARD;;EASA,SAAOolC,GAAP;EACD,CAxCD;;EAyCA,eAAc,GAAGD,WAAjB;;ECzCA,IAAM6D,KAAK,GAAG;EACZ,QAAU,IADE;;EAEZ,YAAU,QAFE;;EAGZ,OAAU,GAHE;;EAIZ,YAAU,QAJE;;EAKZ,YAAU,QALE;;EAMZ,YAAU,QANE;;EAOZ,YAAU,QAPE;;EAQZ,YAAU,QARE;;EASZ,YAAU,QATE;;EAUZ,YAAU,QAVE;;EAWZ,UAAU,MAXE;;EAYZ,YAAU,QAZE;;;EAcZ,YAAU,QAdE;;EAeZ,YAAU,QAfE;;EAgBZ,YAAU,QAhBE;;;EAkBZ,YAAU,QAlBE;;EAmBZ,OAAU,MAnBE;;EAoBZ,YAAU,QApBE;;EAAA,CAAd;EAuBA,IAAMC,OAAO,GAAG59B,MAAM,CAAC,MAAM5P,MAAM,CAACC,IAAP,CAAYstC,KAAZ,EAAmBntC,IAAnB,CAAwB,GAAxB,CAAN,GAAqC,GAAtC,CAAtB;;EAEA,IAAMspC,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB8D,UAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,+BAInB;EACP,eAAO,IAAP;EACD;EAN2B;;EAAA;EAAA,IAEL9D,GAFK;;EAS9BA,EAAAA,GAAG,CAACvhC,SAAJ,CAAcysB,UAAd,GAA2B,UAAS31B,CAAT,EAAY;EACrC,QAAI6M,IAAI,GAAG,EAAX;EACA,SAAKA,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI2K,KAAK,GAAG3K,CAAC,CAAC2K,KAAF,EAAZ,CADqB;;EAGrB,WAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgM,KAAK,CAAC5L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,YAAMyB,CAAC,GAAGuK,KAAK,CAAChM,CAAD,CAAf;;EACA,YAAIyvC,OAAO,CAAC9sC,IAAR,CAAalB,CAAC,CAACgC,GAAf,CAAJ,EAAyB;EACvB,cAAI09B,KAAI,GAAG,CAAC1/B,CAAC,CAACgC,GAAF,CAAM4J,KAAN,CAAYoiC,OAAZ,KAAwB,EAAzB,EAA6B,CAA7B,CAAX;EACA,cAAIE,IAAI,GAAGH,KAAK,CAACrO,KAAD,CAAhB,CAFuB;;;;;EAOvB,eAAK,IAAI//B,CAAC,GAAGpB,CAAb,EAAgBoB,CAAC,GAAG4K,KAAK,CAAC5L,MAA1B,EAAkCgB,CAAC,IAAI,CAAvC,EAA0C;EACxC,gBAAI4K,KAAK,CAAC5K,CAAD,CAAL,CAASsC,IAAT,CAAcgB,OAAd,CAAsBirC,IAAtB,MAAgC,CAAC,CAArC,EAAwC;EACtC,kBAAIj1B,GAAG,GAAGtZ,CAAC,GAAGpB,CAAJ,GAAQ,CAAlB;EACAgO,cAAAA,IAAI,CAAC5B,IAAL,CAAU/K,CAAC,CAACiL,SAAF,CAAY7K,CAAC,CAAC4D,EAAd,EAAkBqV,GAAlB,CAAV;EACA1a,cAAAA,CAAC,GAAGoB,CAAJ;EACA;EACD;EACF;EACF;EACF;EACF,KAtBD,EAFqC;;EA0BrC,QAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;EACzB,UAAI6M,IAAI,CAAC7M,CAAD,CAAR,EAAa;EACX6M,QAAAA,IAAI,GAAG,CAACA,IAAI,CAAC7M,CAAD,CAAL,CAAP;EACD,OAFD,MAEO;EACL6M,QAAAA,IAAI,GAAG,EAAP;EACD;;EACD,aAAO,IAAI0hC,UAAJ,CAAe1hC,IAAf,EAAqB,IAArB,EAA2B,KAAKxH,KAAhC,CAAP;EACD;;EACD,WAAO,IAAIkpC,UAAJ,CAAe1hC,IAAf,EAAqB,IAArB,EAA2B,KAAKxH,KAAhC,CAAP;EACD,GAnCD,CAT8B;;;EA8C9BolC,EAAAA,GAAG,CAACvhC,SAAJ,CAAcssB,MAAd,GAAuBiV,GAAG,CAACvhC,SAAJ,CAAcysB,UAArC;EAEA,SAAO8U,GAAP;EACD,CAjDD;;EAkDA,cAAc,GAAGD,WAAjB;;EC3EA;EACA,IAAMrkC,cAAY,GAAG,SAAfA,YAAe,CAASxD,MAAT,EAAiB0C,KAAjB,EAAwB;EAC3C,MAAI0kC,IAAI,GAAGpnC,MAAM,CAAConC,IAAlB,CAD2C;;EAI3C,MAAIprC,GAAG,GAAGorC,IAAI,CAACnrC,IAAL,CAAU,QAAV,CAAV;;EACA,MAAImrC,IAAI,CAAC9Y,GAAL,CAAS,aAAT,CAAJ,EAA6B;EAC3B,WAAOtyB,GAAP;EACD,GAP0C;;;EAU3C,MAAIkH,KAAK,GAAG,IAAZ;;EACA,MAAIkkC,IAAI,CAAC9Y,GAAL,CAAS,YAAT,CAAJ,EAA4B;EAC1BprB,IAAAA,KAAK,GAAG,WAAR;EACD,GAFD,MAEO,IAAIkkC,IAAI,CAAC9Y,GAAL,CAAS,SAAT,CAAJ,EAAyB;EAC9BprB,IAAAA,KAAK,GAAG,QAAR;EACD,GAFM,MAEA,IAAIkkC,IAAI,CAAC9Y,GAAL,CAAS,eAAT,CAAJ,EAA+B;EACpCprB,IAAAA,KAAK,GAAG,cAAR;EACD,GAFM,MAEA,IAAIkkC,IAAI,CAAC9Y,GAAL,CAAS,aAAT,CAAJ,EAA6B;EAClCprB,IAAAA,KAAK,GAAG,YAAR;EACD,GAFM,MAEA,IAAIkkC,IAAI,CAAC9Y,GAAL,CAAS,QAAT,CAAJ,EAAwB;EAC7BprB,IAAAA,KAAK,GAAG,OAAR;EACD;;EACD,SAAOR,KAAK,CAACE,UAAN,CAAiBY,YAAjB,CAA8BxH,GAA9B,EAAmC0G,KAAnC,EAA0CQ,KAA1C,CAAP;EACD,CAvBD;;EAwBA,oBAAc,GAAGM,cAAjB;;ECzBA;;;EAIA,IAAMsoC,QAAQ,GAAG,SAAXA,QAAW,CAASvF,EAAT,EAAa;EAC5B,MAAI9E,IAAI,GAAG8E,EAAE,CAAC/X,UAAH,CAAc,QAAd,EAAwBlqB,IAAxB,EAAX;EACA,SAAOm9B,IAAP;EACD,CAHD;;;;;EAQA,IAAMpB,UAAQ,GAAG,SAAXA,QAAW,CAASrgC,MAAT,EAAiB;EAChC,MAAIumC,EAAE,GAAGvmC,MAAM,CAAConC,IAAhB;;EACA,MAAIb,EAAE,CAACjY,GAAH,CAAO,iBAAP,KAA6BtuB,MAAM,CAAC+rC,SAAP,CAAiBzd,GAAjB,CAAqB,iBAArB,CAAjC,EAA0E;EACxE,WAAO,IAAP;EACD;;EACD,MAAIiY,EAAE,CAACjY,GAAH,CAAO,gBAAP,KAA4BtuB,MAAM,CAAC+rC,SAAP,CAAiBzd,GAAjB,CAAqB,gBAArB,CAAhC,EAAwE;EACtE,WAAO,KAAP;EACD,GAP+B;;;EAShC,MAAImT,IAAI,GAAGqK,QAAQ,CAACvF,EAAD,CAAnB;;EACA,MAAI9E,IAAI,CAACnT,GAAL,CAAS,eAAT,CAAJ,EAA+B;EAC7B,WAAO,IAAP;EACD;;EACD,MAAImT,IAAI,CAACnT,GAAL,CAAS,SAAT,CAAJ,EAAyB;EACvB,WAAO,IAAP;EACD;;EACD,MAAImT,IAAI,CAACnT,GAAL,CAAS,WAAT,CAAJ,EAA2B;EACzB,WAAO,KAAP;EACD;;EACD,SAAO,IAAP;EACD,CApBD;;EAqBA,gBAAc,GAAG+R,UAAjB;;;;;;;;ECxBA,IAAM2L,UAAU,GAAG,SAAbA,UAAa,CAAShsC,MAAT,EAAiB0C,KAAjB,EAAwB;EACzC,MAAI6jC,EAAE,GAAGvmC,MAAM,CAAConC,IAAhB,CADyC;;EAGzC,MAAIpnC,MAAM,CAACwC,QAAP,CAAgB3C,KAApB,EAA2B;EACzB;EACD,GALwC;;;EAQzC,MAAIG,MAAM,CAAC+rC,SAAP,CAAiBlsC,KAArB,EAA4B;EAC1BG,IAAAA,MAAM,CAAC+rC,SAAP,CAAiB5d,EAAjB,CAAoB,CAApB,EAAuB7iB,MAAvB,CAA8B,KAA9B;EACA;EACD,GAXwC;;;EAazC,MAAIi7B,EAAE,CAACjY,GAAH,CAAO,2BAAP,CAAJ,EAAyC;EACvCiY,IAAAA,EAAE,CAACj7B,MAAH,CAAU,KAAV;EACA;EACD,GAhBwC;;;EAkBzC,MAAIi7B,EAAE,CAACjY,GAAH,CAAO,YAAP,CAAJ,EAA0B;EACxB,QAAIhV,GAAG,GAAG9V,gBAAY,CAACxD,MAAD,EAAS0C,KAAT,CAAtB;EACA6jC,IAAAA,EAAE,CAAC1W,WAAH,CAAevW,GAAf,EAAoB,IAApB;EACAitB,IAAAA,EAAE,CAACh7B,OAAH,CAAW,SAAX;EACA;EACD,GAvBwC;;;EAyBzC,MAAIg7B,EAAE,CAACjY,GAAH,CAAO,eAAP,CAAJ,EAA6B;EAC3B,QAAIhV,IAAG,GAAG9V,gBAAY,CAACxD,MAAD,EAAS0C,KAAT,CAAtB;;EACA6jC,IAAAA,EAAE,CAAC1W,WAAH,CAAevW,IAAf,EAAoB,IAApB;;EACA,QAAI+mB,YAAQ,CAACrgC,MAAD,AAAA,CAAZ,EAA6B;EAC3BumC,MAAAA,EAAE,CAACh7B,OAAH,CAAW,QAAX;EACD,KAFD,MAEO;EACLg7B,MAAAA,EAAE,CAACh7B,OAAH,CAAW,UAAX;EACD;;EACD;EACD,GAlCwC;;;EAoCzC,MAAIg7B,EAAE,CAACjY,GAAH,CAAO,SAAP,CAAJ,EAAuB;EACrB,QAAIhV,KAAG,GAAG9V,gBAAY,CAACxD,MAAD,EAAS0C,KAAT,CAAtB;;EACA6jC,IAAAA,EAAE,CAAC1W,WAAH,CAAevW,KAAf,EAAoB,IAApB;EACAitB,IAAAA,EAAE,CAACh7B,OAAH,CAAW,KAAX;EACA;EACD,GAzCwC;;;EA4CzC,MAAI80B,YAAQ,CAACrgC,MAAD,AAAA,CAAZ,EAA6B;EAC3BumC,IAAAA,EAAE,CAACh7B,OAAH,CAAW,UAAX;EACA;EACD,GA/CwC;;;EAiDzCg7B,EAAAA,EAAE,CAACh7B,OAAH,CAAW,QAAX;EACA;EACD,CAnDD;;EAoDA,gBAAc,GAAGygC,UAAjB;;EC7DA;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS1F,EAAT,EAAa;EAC7B,MAAIvmC,MAAM,GAAG;EACXksC,IAAAA,MAAM,EAAE3F,EAAE,CAACh9B,KAAH,CAAS,UAAT,CADG;;EAEX/G,IAAAA,QAAQ,EAAE+jC,EAAE,CAACh9B,KAAH,CAAS,WAAT,CAFC;;EAGXwiC,IAAAA,SAAS,EAAExF,EAAE,CAACh9B,KAAH,CAAS,YAAT,EAAuB8kB,GAAvB,CAA2B,qBAA3B,CAHA;;EAIX8d,IAAAA,QAAQ,EAAE5F,EAAE,CAACh9B,KAAH,CAAS,WAAT,CAJC;;EAKX69B,IAAAA,IAAI,EAAEb,EAAE,CAACh9B,KAAH,CAAS,OAAT,EAAkB8kB,GAAlB,CAAsB,0CAAtB;EALK,GAAb,CAD6B;;EAS7B,MAAI,CAACruB,MAAM,CAAConC,IAAP,CAAYvnC,KAAjB,EAAwB;;EAEtB1B,IAAAA,MAAM,CAACC,IAAP,CAAY4B,MAAZ,EAAoB3B,OAApB,CAA4B,UAAAnB,CAAC,EAAI;EAC/B8C,MAAAA,MAAM,CAAC9C,CAAD,CAAN,GAAY8C,MAAM,CAAC9C,CAAD,CAAN,CAAUmxB,GAAV,CAAc,GAAd,CAAZ;EACD,KAFD,EAFsB;;EAMtBruB,IAAAA,MAAM,CAAConC,IAAP,GAAcb,EAAd;EACA,WAAOvmC,MAAP;EACD,GAjB4B;;;EAmB7B,MAAIA,MAAM,CAACksC,MAAP,IAAiBlsC,MAAM,CAACksC,MAAP,CAAcrsC,KAAnC,EAA0C;EACxC,QAAI0J,KAAK,GAAGvJ,MAAM,CAACksC,MAAP,CAAcjwC,IAAd,CAAmB,SAAnB,IAAgC,GAA5C;;EACA,QAAIsqC,EAAE,CAACjY,GAAH,CAAO/kB,KAAP,CAAJ,EAAmB;EACjBvJ,MAAAA,MAAM,CAACosC,WAAP,GAAqB,IAArB;EACD;EACF;;EACD,SAAOpsC,MAAP;EACD,CA1BD;;EA2BA,WAAc,GAAGisC,SAAjB;;EC1BA;;EACA,IAAMI,IAAI,GAAG,SAAPA,IAAO,CAAArsC,MAAM,EAAI;EACrB,MAAIssC,GAAG,GAAG,KAAV;EACA,MAAIvzB,MAAM,GAAGsnB,YAAQ,CAACrgC,MAAD,CAArB;EACA,MAAIusC,UAAU,GAAGvsC,MAAM,CAACwC,QAAP,CAAgB3C,KAAjC,CAHqB;;;;;;EAUrB,MAAIG,MAAM,CAAConC,IAAP,CAAY5Y,UAAZ,CAAuB,0BAAvB,EAAmD3uB,KAAvD,EAA8D;EAC5DysC,IAAAA,GAAG,GAAG,IAAN;EACD;;EAED,MAAI3kC,GAAG,GAAG;EACRxE,IAAAA,SAAS,EAAE,KADH;EAERE,IAAAA,YAAY,EAAE,IAFN;EAGR4Q,IAAAA,WAAW,EAAE,SAHL;EAIRhR,IAAAA,UAAU,EAAE,IAJJ;EAKRG,IAAAA,MAAM,EAAE,OALA;EAMRG,IAAAA,KAAK,EAAE,EANC;EAOR6Q,IAAAA,YAAY,EAAE,MAPN;EAQRC,IAAAA,UAAU,EAAE;EARJ,GAAV,CAdqB;;EAyBrB,MAAIi4B,GAAG,KAAK,IAAZ,EAAkB;EAChB3kC,IAAAA,GAAG,CAACtE,YAAJ,GAAmB,IAAnB;EACAsE,IAAAA,GAAG,CAAC1E,UAAJ,GAAiB,IAAjB;EACD;;EACD,MAAI8V,MAAJ,EAAY;EACVpR,IAAAA,GAAG,CAACxE,SAAJ,GAAgB,MAAhB;EACAwE,IAAAA,GAAG,CAACtE,YAAJ,GAAmB,KAAnB;EACAsE,IAAAA,GAAG,CAAC1E,UAAJ,GAAiB,KAAjB;EACD;;EACD,MAAIspC,UAAJ,EAAgB;EACd5kC,IAAAA,GAAG,CAACxE,SAAJ,IAAiB,MAAjB;EACAwE,IAAAA,GAAG,CAACtE,YAAJ,IAAoB,MAApB;EACAsE,IAAAA,GAAG,CAACsM,WAAJ,GAAkB,aAAlB;EACAtM,IAAAA,GAAG,CAAC1E,UAAJ,IAAkB,MAAlB;EACA0E,IAAAA,GAAG,CAACyM,YAAJ,GAAmB,SAASzM,GAAG,CAACyM,YAAhC;EACAzM,IAAAA,GAAG,CAAC0M,UAAJ,GAAiB,SAAS1M,GAAG,CAAC0M,UAA9B;EACA1M,IAAAA,GAAG,CAACvE,MAAJ,GAAa,SAASuE,GAAG,CAACvE,MAA1B;EACD;;EACD,SAAOuE,GAAP;EACD,CA5CD;;EA6CA,UAAc,GAAG0kC,IAAjB;;EC7CA,IAAMnzB,WAAS,GAAG,SAAZA,SAAY,CAASlZ,MAAT,EAAiB0C,KAAjB,EAAwB;EACxC,MAAI0kC,IAAI,GAAGpnC,MAAM,CAAConC,IAAlB,CADwC;;EAIxC,MAAIA,IAAI,CAAC9Y,GAAL,CAAS,SAAT,KAAwB8Y,IAAI,CAACoF,GAAL,CAAS,QAAT,MAAuB,IAAvB,IAA+BxsC,MAAM,CAAC+rC,SAAP,CAAiBzd,GAAjB,CAAqB,MAArB,CAA3D,EAA0F;EACxF,WAAO+d,MAAI,CAACrsC,MAAD,AAAA,CAAX;EACD;;EAED,MAAIqR,SAAS,GAAGrR,MAAM,CAAConC,IAAP,CAAY3W,QAAZ,CAAqB,CAArB,EAAwBpf,SAAxB,EAAhB;EAEA,MAAIo7B,UAAU,GAAGjpC,gBAAY,CAACxD,MAAD,EAAS0C,KAAT,CAA7B;;EACA,MAAI,CAAC+pC,UAAL,EAAiB;EACf,WAAO,EAAP;EACD;;EACD,MAAIlzB,KAAK,GAAG7W,KAAK,CAACE,UAAN,CAAiBsW,SAAjB,CAA2BuzB,UAA3B,EAAuC/pC,KAAvC,CAAZ;EACA6W,EAAAA,KAAK,CAACtW,UAAN,GAAmBwpC,UAAnB,CAfwC;;EAkBxC,MAAIzsC,MAAM,CAACmsC,QAAP,CAAgBtsC,KAApB,EAA2B;EACzB,QAAIssC,QAAQ,GAAGnsC,MAAM,CAACmsC,QAAP,CAAgBlwC,IAAhB,EAAf;EACA,QAAIywC,KAAK,GAAGr7B,SAAS,KAAK,IAAd,GAAqB,GAArB,GAA2B,GAAvC;EACAlT,IAAAA,MAAM,CAACC,IAAP,CAAYmb,KAAZ,EAAmBlb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,aAAKqc,KAAK,CAACrc,CAAD,CAAL,IAAYwvC,KAAK,GAAGP,QAAzB;EAAA,KAA5B;EACD,GAtBuC;;;EAwBxC,MAAInsC,MAAM,CAACksC,MAAP,CAAcrsC,KAAlB,EAAyB;EACvB,QAAIqsC,MAAM,GAAGlsC,MAAM,CAACksC,MAAP,CAAcjwC,IAAd,EAAb;;EACA,QAAIywC,MAAK,GAAGr7B,SAAS,KAAK,IAAd,GAAqB,GAArB,GAA2B,GAAvC;;EACA,QAAIrR,MAAM,CAACosC,WAAP,KAAuB,IAA3B,EAAiC;EAC/BjuC,MAAAA,MAAM,CAACC,IAAP,CAAYmb,KAAZ,EAAmBlb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,eAAKqc,KAAK,CAACrc,CAAD,CAAL,IAAYwvC,MAAK,GAAGR,MAAzB;EAAA,OAA5B;EACD,KAFD,MAEO;EACL/tC,MAAAA,MAAM,CAACC,IAAP,CAAYmb,KAAZ,EAAmBlb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,eAAKqc,KAAK,CAACrc,CAAD,CAAL,GAAWgvC,MAAM,GAAGQ,MAAT,GAAiBnzB,KAAK,CAACrc,CAAD,CAAtC;EAAA,OAA5B;EACD;EACF,GAhCuC;;;EAmCxC,MAAMqvC,UAAU,GAAGvsC,MAAM,CAACwC,QAAP,CAAgB3C,KAAnC;;EACA,MAAI0sC,UAAJ,EAAgB;EACdhzB,IAAAA,KAAK,CAACpW,SAAN,GAAkB,aAAaoW,KAAK,CAACtW,UAArC;EACAsW,IAAAA,KAAK,CAAClW,YAAN,GAAqB,cAAckW,KAAK,CAACtW,UAAzC;EACAsW,IAAAA,KAAK,CAACnW,MAAN,GAAe,SAASmW,KAAK,CAACnW,MAA9B;EACD,GAxCuC;;;EA0CxC,MAAI,CAACmW,KAAK,CAACtF,WAAX,EAAwB;EACtB,QAAIs4B,UAAJ,EAAgB;EACdhzB,MAAAA,KAAK,CAACtF,WAAN,GAAoB,cAAcsF,KAAK,CAACtW,UAAxC;EACD,KAFD,MAEO;EACLsW,MAAAA,KAAK,CAACtF,WAAN,GAAoB,UAAUsF,KAAK,CAACtW,UAApC;EACD;EACF;;EACD,MAAIspC,UAAJ,EAAgB;EACdhzB,IAAAA,KAAK,CAACtW,UAAN,GAAmB,SAASsW,KAAK,CAACtW,UAAlC;EACD;;EACD,SAAOsW,KAAP;EACD,CArDD;;EAsDA,iBAAc,GAAGL,WAAjB;;ECpDA,aAAc,GAAG;;EAEfrN,EAAAA,IAAI,EAAE,cAASlI,OAAT,EAAkB;EAAA;;EACtB,QAAItG,CAAC,GAAG,IAAR;;EACA,QAAI,OAAOsG,OAAP,KAAmB,QAAvB,EAAiC;EAC/BtG,MAAAA,CAAC,GAAGsG,OAAJ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;;EACDA,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE1H,MAAAA,IAAI,EAAE,IAAR;EAAc8H,MAAAA,MAAM,EAAE,IAAtB;EAA4B9E,MAAAA,IAAI,EAAE,IAAlC;EAAwCiJ,MAAAA,KAAK,EAAE;EAA/C,KAArB;EACA,QAAI0D,GAAG,GAAG,EAAV;EACA,SAAKvN,OAAL,CAAa,UAAAd,CAAC,EAAI;EAChB,UAAIsO,IAAI,GAAGtO,CAAC,CAACsO,IAAF,CAAOlI,OAAP,EAAgB,CAAhB,CAAX;EACA,UAAI3D,MAAM,GAAGisC,OAAS,CAAC1uC,CAAD,CAAtB;EACAsO,MAAAA,IAAI,CAACqoB,KAAL,GAAa,EAAb;EACA/1B,MAAAA,MAAM,CAACC,IAAP,CAAY4B,MAAZ,EAAoB3B,OAApB,CAA4B,UAAAnB,CAAC,EAAI;EAC/B2O,QAAAA,IAAI,CAACqoB,KAAL,CAAWh3B,CAAX,IAAgB8C,MAAM,CAAC9C,CAAD,CAAN,CAAUjB,IAAV,CAAe,QAAf,CAAhB;EACD,OAFD;EAGA4P,MAAAA,IAAI,CAAC0gC,UAAL,GAAkBhvC,CAAC,CAAC+wB,GAAF,CAAM,WAAN,CAAlB;EACAziB,MAAAA,IAAI,CAACiT,YAAL,GAAoB5F,aAAS,CAAClZ,MAAD,EAAS,KAAI,CAAC0C,KAAd,CAA7B;EACAkJ,MAAAA,GAAG,CAACtD,IAAJ,CAASuD,IAAT;EACD,KAVD;;EAWA,QAAIxO,CAAC,KAAK,IAAV,EAAgB;EACd,aAAOuO,GAAG,CAACvO,CAAD,CAAV;EACD;;EACD,WAAOuO,GAAP;EACD,GAzBc;;;EA4BfqnB,EAAAA,OAAO,EAAE,mBAAW;EAClB,QAAI/oB,IAAI,GAAG,EAAX,CADkB;;EAGlB,SAAK7L,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIF,IAAI,GAAG4F,OAAS,CAAC1F,EAAD,CAAT,CAAc2F,MAAzB;;EACA,UAAI7F,IAAI,CAACxmC,KAAT,EAAgB;EACdqK,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAY47B,IAAI,CAACn8B,IAAjB,CAAP;EACD;EACF,KALD,EAHkB;;EAUlB,QAAI9M,CAAC,GAAG,KAAKoxB,UAAL,CAAgB,WAAhB,CAAR;;EACA,QAAIpxB,CAAC,CAACyC,KAAN,EAAa;EACXqK,MAAAA,IAAI,GAAG9M,CAAC,CAAC8M,IAAF,CAAOO,MAAP,CAAcP,IAAd,CAAP;EACD,KAbiB;;;EAelB9M,IAAAA,CAAC,GAAG,KAAKmxB,SAAL,CAAe,WAAf,CAAJ;;EACA,QAAInxB,CAAC,CAACyC,KAAN,EAAa;EACXqK,MAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYrN,CAAC,CAAC8M,IAAd,CAAP;EACD;;EACD,WAAO,KAAK1B,SAAL,CAAe0B,IAAf,CAAP;EACD,GAhDc;;;EAkDfm2B,EAAAA,QAAQ,EAAE,oBAAW;EAAA;;EACnB,QAAIn2B,IAAI,GAAG,EAAX;EACA,SAAK7L,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIlG,YAAQ,CAACrgC,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAR,KAAiC,IAArC,EAA2C;EACzCwH,QAAAA,IAAI,CAAC5B,IAAL,CAAUi+B,EAAE,CAACr8B,IAAH,CAAQ,CAAR,CAAV;EACD;EACF,KALD;EAMA,WAAO,KAAK1B,SAAL,CAAe0B,IAAf,CAAP;EACD,GA3Dc;;;EA6Dfo2B,EAAAA,UAAU,EAAE,sBAAW;EAAA;;EACrB,QAAIp2B,IAAI,GAAG,EAAX;EACA,SAAK7L,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIlG,YAAQ,CAACrgC,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAR,KAAiC,KAArC,EAA4C;EAC1CwH,QAAAA,IAAI,CAAC5B,IAAL,CAAUi+B,EAAE,CAACr8B,IAAH,CAAQ,CAAR,CAAV;EACD;EACF,KALD;EAMA,WAAO,KAAK1B,SAAL,CAAe0B,IAAf,CAAP;EACD,GAtEc;;;EAyEfgP,EAAAA,SAAS,EAAE,qBAAW;EAAA;;EACpB,QAAI3W,MAAM,GAAG,EAAb;EACA,SAAKlE,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIhtB,KAAK,GAAGL,aAAS,CAAClZ,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAArB;;EACAH,MAAAA,MAAM,CAAC+F,IAAP,CAAYiR,KAAZ;EACD,KAJD;EAKA,WAAOhX,MAAP;EACD,GAjFc;;;EAmFfoqC,EAAAA,WAAW,EAAE,uBAAW;EAAA;;EACtB,SAAKtuC,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIvqC,GAAG,GAAGkd,aAAS,CAAClZ,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAT,CAA8BS,SAAxC;;EACA,UAAInH,GAAJ,EAAS;EACPuqC,QAAAA,EAAE,CAAC1W,WAAH,CAAe7zB,GAAf,EAAoB,KAApB,EADO;EAGR;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GA7Fc;;;EA+Ff4wC,EAAAA,cAAc,EAAE,0BAAW;EAAA;;EACzB,SAAKvuC,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAI5+B,GAAG,GAAGuR,aAAS,CAAClZ,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAnB;;EACA,UAAI1G,GAAG,GAAG2L,GAAG,CAACtE,YAAd,CAHiB;;EAKjB,UAAIkjC,EAAE,CAAC/X,UAAH,CAAc,0BAAd,EAA0C3uB,KAA9C,EAAqD;EACnD7D,QAAAA,GAAG,GAAG2L,GAAG,CAAC1E,UAAV;EACD;;EACD,UAAIjH,GAAJ,EAAS;EACPuqC,QAAAA,EAAE,CAAC1W,WAAH,CAAe7zB,GAAf,EAAoB,KAApB;EACAuqC,QAAAA,EAAE,CAACxkC,GAAH,CAAO,cAAP;EACD;EACF,KAZD;EAaA,WAAO,IAAP;EACD,GA9Gc;;;EAgHf8qC,EAAAA,aAAa,EAAE,yBAAW;EAAA;;EACxB,SAAKxuC,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIvqC,GAAG,GAAGkd,aAAS,CAAClZ,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAT,CAA8BuR,WAAxC;;EACA,UAAIjY,GAAJ,EAAS;EACPuqC,QAAAA,EAAE,CAAC1W,WAAH,CAAe7zB,GAAf,EAAoB,KAApB;EACAuqC,QAAAA,EAAE,CAACxkC,GAAH,CAAO,aAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GA1Hc;;;EA4HfyB,EAAAA,YAAY,EAAE,wBAAW;EAAA;;EACvB,SAAKnF,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIvqC,GAAG,GAAGkd,aAAS,CAAClZ,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAT,CAA8BO,UAAxC;;EACA,UAAIjH,GAAJ,EAAS;EACPuqC,QAAAA,EAAE,CAAC1W,WAAH,CAAe7zB,GAAf,EAAoB,KAApB;EACAuqC,QAAAA,EAAE,CAACxkC,GAAH,CAAO,YAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAtIc;;;EAwIf+qC,EAAAA,QAAQ,EAAE,oBAAW;EAAA;;EACnB,SAAKzuC,OAAL,CAAa,UAAAkoC,EAAE,EAAI;EACjB,UAAIvmC,MAAM,GAAGisC,OAAS,CAAC1F,EAAD,CAAtB;;EACA,UAAIvqC,GAAG,GAAGkd,aAAS,CAAClZ,MAAD,EAAS,MAAI,CAAC0C,KAAd,CAAT,CAA8BU,MAAxC;;EACA,UAAIpH,GAAJ,EAAS;EACPuqC,QAAAA,EAAE,CAAC1W,WAAH,CAAe7zB,GAAf,EAAoB,KAApB;EACAuqC,QAAAA,EAAE,CAACxkC,GAAH,CAAO,QAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAlJc;;;EAqJfwqC,EAAAA,UAAU,EAAE,sBAAW;EACrB,WAAO,WAAQ,WAAR,CAAP;EACD,GAvJc;;;EAyJfQ,EAAAA,UAAU,EAAE,sBAAW;EACrB,WAAO,KAAKzI,IAAL,CAAU,WAAV,CAAP;EACD,GA3Jc;;;EA6Jf0H,EAAAA,UAAU,EAAE,sBAAW;EAAA;;EACrB,SAAK9hC,IAAL,CAAU7L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI8M,GAAG,GAAG,OAAI,CAAC7B,SAAL,CAAe,CAACjL,CAAD,CAAf,CAAV;;EACA,UAAIyC,MAAM,GAAGisC,OAAS,CAAC5hC,GAAD,CAAtB;;EACA2hC,MAAAA,YAAU,CAAChsC,MAAD,EAASqK,GAAG,CAAC3H,KAAb,CAAV;EACD,KAJD;EAKA,WAAO,IAAP;EACD,GApKc;;;EAsKfsqC,EAAAA,UAAU,EAAE,sBAAW;EACrB,QAAI5vC,CAAC,GAAG,KAAKmM,KAAL,CAAW,cAAX,CAAR;;EACA,QAAInM,CAAC,CAACyC,KAAN,EAAa;EACXzC,MAAAA,CAAC,CAAC81B,MAAF,CAAS,QAAT;EACD;;EACD,WAAO,KAAKA,MAAL,CAAY,WAAZ,CAAP;EACD;EA5Kc,CAAjB;;ECHA,IAAM2U,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBmF,KAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAEVnF,GAFU;;;EAI9B3pC,EAAAA,MAAM,CAACoH,MAAP,CAAc0nC,KAAK,CAAC1mC,SAApB,EAA+BwB,SAA/B,EAJ8B;;EAO9BklC,EAAAA,KAAK,CAAC1mC,SAAN,CAAgB2mC,MAAhB,GAAyBD,KAAK,CAAC1mC,SAAN,CAAgBylC,UAAzC;;EAEAlE,EAAAA,GAAG,CAACvhC,SAAJ,CAAc+Q,KAAd,GAAsB,UAASja,CAAT,EAAY;EAChC,QAAIkM,KAAK,GAAG,KAAKA,KAAL,CAAW,iDAAX,CAAZ,CADgC;;EAGhCA,IAAAA,KAAK,GAAGA,KAAK,CAAC8kB,GAAN,CAAU,WAAV,CAAR;EACA9kB,IAAAA,KAAK,GAAGA,KAAK,CAAC8kB,GAAN,CAAU,WAAV,CAAR,CAJgC;;;EAOhC,QAAI9K,IAAI,GAAGha,KAAK,CAACA,KAAN,CAAY,gCAAZ,CAAX,CAPgC;;EAShC,QAAInM,CAAC,GAAGmM,KAAK,CAAC8kB,GAAN,CAAU9K,IAAV,EAAgB4Q,UAAhB,CAA2B,WAA3B,CAAR,CATgC;;EAWhC/2B,IAAAA,CAAC,GAAGA,CAAC,CAACqN,MAAF,CAAS8Y,IAAT,CAAJ;EACAnmB,IAAAA,CAAC,CAAC6H,IAAF,CAAO,OAAP,EAZgC;;;EAgBhC7H,IAAAA,CAAC,GAAGA,CAAC,MAAD,CAAK,OAAL,CAAJ,CAhBgC;;EAmBhC,QAAI,OAAOC,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACgL,GAAF,CAAM/K,CAAN,CAAJ;EACD;;EACD,QAAIkpC,EAAE,GAAG,IAAI0G,KAAJ,CAAU7vC,CAAC,CAAC8M,IAAZ,EAAkB,IAAlB,EAAwB,KAAKxH,KAA7B,CAAT;EACA,WAAO6jC,EAAP;EACD,GAxBD;;EAyBA,SAAOuB,GAAP;EACD,CAnCD;;EAoCA,SAAc,GAAGD,WAAjB;;ECtCA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBqF,MAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAETrF,GAFS;;EAW9BA,EAAAA,GAAG,CAACvhC,SAAJ,CAAc8vB,MAAd,GAAuB,UAASh5B,CAAT,EAAY;EACjC,QAAIkM,KAAK,GAAG,KAAK4qB,UAAL,CAAgB,WAAhB,CAAZ;EACA5qB,IAAAA,KAAK,GAAGA,KAAK,CAACA,KAAN,CAAY,UAAZ,CAAR,CAFiC;;EAKjC,QAAI,OAAOlM,CAAP,KAAa,QAAjB,EAA2B;EACzBkM,MAAAA,KAAK,GAAGA,KAAK,CAACnB,GAAN,CAAU/K,CAAV,CAAR;EACD;;EACD,WAAO,IAAI8vC,MAAJ,CAAW5jC,KAAK,CAACW,IAAjB,EAAuB,IAAvB,EAA6B,KAAKxH,KAAlC,CAAP;EACD,GATD;;EAUA,SAAOolC,GAAP;EACD,CAtBD;;EAuBA,UAAc,GAAGD,WAAjB;;ECtBA,IAAMuF,QAAQ,GAAG,CACf5nC,aADe,EAEfC,QAFe,EAGfC,OAHe,EAIfC,YAJe,EAKfC,KALe,EAMfsG,KANe,EAOf4gB,WAPe,EAQfiI,WARe,EASfC,UATe,EAUfC,KAVe,EAWfC,MAXe,CAAjB;;EAcA,IAAMmY,MAAM,GAAG,SAATA,MAAS,CAASvF,GAAT,EAAc;;EAE3B3pC,EAAAA,MAAM,CAACC,IAAP,CAAYkvC,OAAZ,EAAqBjvC,OAArB,CAA6B,UAAAnB,CAAC;EAAA,WAAK4qC,GAAG,CAACvhC,SAAJ,CAAcrJ,CAAd,IAAmBowC,OAAO,CAACpwC,CAAD,CAA/B;EAAA,GAA9B,EAF2B;;EAI3BkwC,EAAAA,QAAQ,CAAC/uC,OAAT,CAAiB,UAAAkvC,KAAK;EAAA,WAAIA,KAAK,CAACzF,GAAD,CAAT;EAAA,GAAtB;EACA,SAAOA,GAAP;EACD,CAND;;EAOA,UAAc,GAAGuF,MAAjB;;ECtBA,IAAMtlC,SAAO,GAAG;EACdyP,EAAAA,IAAI,EAAEhS,SADQ;EAEdgoC,EAAAA,UAAU,EAAE/nC;EAFE,CAAhB;;;MASMqiC;;;EACJ,eAAY59B,IAAZ,EAAkB4jB,IAAlB,EAAwBprB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,SAAKwH,IAAL,GAAYA,IAAZ,CAD6B;;EAG7B/L,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,MAAAA,UAAU,EAAE,KADsB;EAElCE,MAAAA,KAAK,EAAEke,IAF2B;EAGlCne,MAAAA,QAAQ,EAAE;EAHwB,KAApC,EAH6B;;EAS7B,QAAIjN,KAAK,KAAKf,SAAV,IAAuBmsB,IAAI,KAAKnsB,SAApC,EAA+C;EAC7Ce,MAAAA,KAAK,GAAGorB,IAAI,CAACprB,KAAb;EACD,KAX4B;;;EAa7BvE,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAElN,KAF4B;EAGnCiN,MAAAA,QAAQ,EAAE;EAHyB,KAArC,EAb6B;;;EAqB7BxR,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCrH,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAI,CAAC8B,IAAL,CAAU5N,MAAV,GAAmB,CAAzB;EAAA;EAD8B,KAArC,EArB6B;;EAyB7B6B,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCrH,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAI,CAAC8B,IAAL,CAAU5N,MAAhB;EAAA;EAD+B,KAAtC,EAzB6B;;EA6B7B6B,IAAAA,MAAM,CAACsR,cAAP,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC;EACjCrH,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAN;EAAA;EAD4B,KAAnC;EAGD;;;;;;+BAGQ;EACP,aAAOsnB,SAAM,CAAC,IAAD,CAAb;EACD;;;;;6BAGM;EACL,UAAI,KAAKxlB,IAAL,CAAU5N,MAAV,GAAmB,CAAvB,EAA0B;EACxB,eAAO,KAAK4N,IAAL,CAAU,CAAV,EAAa/B,IAApB;EACD;;EACD,aAAO,KAAK6D,GAAL,GAAW9B,IAAX,CAAgB,CAAhB,EAAmB/B,IAA1B;EACD;;;;;;;;EAIH2/B,GAAG,CAACvhC,SAAJ,CAAciC,SAAd,GAA0B,UAAS0B,IAAT,EAAe;EACvCA,EAAAA,IAAI,GAAGA,IAAI,CAACxB,GAAL,CAAS,UAAAnL,CAAC;EAAA,WAAIA,CAAC,CAACuK,KAAF,CAAQ,IAAR,CAAJ;EAAA,GAAV,CAAP,CADuC;;EAGvC,MAAIuC,GAAG,GAAG,IAAIy9B,GAAJ,CAAQ59B,IAAR,EAAc,IAAd,EAAoB,KAAKxH,KAAzB,CAAV;EACA,SAAO2H,GAAP;EACD,CALD;;;;EAQAy9B,GAAG,CAACvhC,SAAJ,CAAcsL,QAAd,GAAyB,UAAS7V,GAAT,EAAc;EACrC,MAAIkO,IAAI,GAAGglB,YAAQ,CAACrd,QAAT,CAAkB7V,GAAlB,EAAuB,KAAK0G,KAA5B,EAAmC,KAAKyF,IAAL,EAAnC,CAAX;EACA,SAAO,KAAKK,SAAL,CAAe0B,IAAf,CAAP;EACD,CAHD;;EAKA/L,MAAM,CAACoH,MAAP,CAAcuiC,GAAG,CAACvhC,SAAlB,EAA6BwB,SAAO,CAACyP,IAArC;EACArZ,MAAM,CAACoH,MAAP,CAAcuiC,GAAG,CAACvhC,SAAlB,EAA6BwB,SAAO,CAACylC,UAArC;;AAGAH,QAAM,CAACvF,GAAD,CAAN;;EAGA,IAAMh4B,SAAO,GAAG;EACd22B,EAAAA,KAAK,EAAE,OADO;EAEdgH,EAAAA,GAAG,EAAE,OAFS;EAGd/I,EAAAA,KAAK,EAAE,MAHO;EAId7F,EAAAA,IAAI,EAAE,IAJQ;EAKd6O,EAAAA,MAAM,EAAE;EALM,CAAhB;EAOAvvC,MAAM,CAACC,IAAP,CAAY0R,SAAZ,EAAqBzR,OAArB,CAA6B,UAAAnB,CAAC;EAAA,SAAK4qC,GAAG,CAACvhC,SAAJ,CAAcrJ,CAAd,IAAmB4qC,GAAG,CAACvhC,SAAJ,CAAcuJ,SAAO,CAAC5S,CAAD,CAArB,CAAxB;EAAA,CAA9B;EACA,SAAc,GAAG4qC,GAAjB;;ECjFA,IAAIplC,KAAK,GAAG,IAAIqqB,OAAJ,EAAZ;;;EAGA,IAAM4gB,GAAG,GAAG,SAANA,GAAM,GAA6B;EAAA,MAApB1xC,IAAoB,uEAAb,EAAa;EAAA,MAAT4c,OAAS;;EACvC,MAAIA,OAAJ,EAAa;EACXnW,IAAAA,KAAK,CAACkrC,QAAN,CAAe/0B,OAAf;EACD;;EACD,MAAI3O,IAAI,GAAGglB,YAAQ,CAACrd,QAAT,CAAkB5V,IAAlB,EAAwByG,KAAxB,CAAX;EACA,MAAI2H,GAAG,GAAG,IAAIy9B,KAAJ,CAAQ59B,IAAR,EAAc,IAAd,EAAoBxH,KAApB,CAAV;EACA2H,EAAAA,GAAG,CAACqlB,MAAJ;EACA,SAAOrlB,GAAP;EACD,CARD;;;;EAWAsjC,GAAG,CAACze,QAAJ,GAAe,YAA6B;EAAA,MAApBjzB,IAAoB,uEAAb,EAAa;EAAA,MAAT4c,OAAS;;EAC1C,MAAIA,OAAJ,EAAa;EACXnW,IAAAA,KAAK,CAACkrC,QAAN,CAAe/0B,OAAf;EACD;;EACD,MAAI3O,IAAI,GAAGglB,YAAQ,CAACrd,QAAT,CAAkB5V,IAAlB,EAAwByG,KAAxB,CAAX;EACA,MAAI2H,GAAG,GAAG,IAAIy9B,KAAJ,CAAQ59B,IAAR,EAAc,IAAd,EAAoBxH,KAApB,CAAV;EACA,SAAO2H,GAAP;EACD,CAPD;;;;EAUAsjC,GAAG,CAACN,MAAJ,GAAa,UAAS9f,EAAT,EAAa;EACxBA,EAAAA,EAAE,CAACua,KAAD,EAAMplC,KAAN,CAAF;EACA,SAAO,IAAP;EACD,CAHD;;;;EAMAirC,GAAG,CAAC7lC,KAAJ,GAAY,YAAW;EACrBpF,EAAAA,KAAK,GAAGA,KAAK,CAACoF,KAAN,EAAR;EACA,SAAO,IAAP;EACD,CAHD;;;;EAMA6lC,GAAG,CAACE,IAAJ,GAAW,UAAShiC,IAAT,EAAe;EACxB,MAAI3B,IAAI,GAAGglB,YAAQ,CAAC5c,QAAT,CAAkBzG,IAAlB,EAAwBnJ,KAAxB,CAAX;EACA,SAAO,IAAIolC,KAAJ,CAAQ59B,IAAR,EAAc,IAAd,EAAoBxH,KAApB,CAAP;EACD,CAHD;;;;EAMAirC,GAAG,CAACG,OAAJ,GAAc,YAAsB;EAAA,MAAb1gB,IAAa,uEAAN,IAAM;EAClC1qB,EAAAA,KAAK,CAACorC,OAAN,CAAc1gB,IAAd;EACA,SAAO,IAAP;EACD,CAHD;;;;EAMAugB,GAAG,CAACI,OAAJ,GAAcA,QAAd;;EAEAJ,GAAG,UAAH,GAAaA,GAAG,CAACE,IAAjB;EAEA,OAAc,GAAGF,GAAjB;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/output/04-export.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/fixThe.js","../src/02-tagger/04-correction/fixNouns.js","../src/02-tagger/04-correction/fixPerson.js","../src/02-tagger/04-correction/fixVerb.js","../src/02-tagger/04-correction/fixAdjective.js","../src/02-tagger/04-correction/fixValue.js","../src/02-tagger/04-correction/fixDates.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n whitespace: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n // this.cache.terms = terms\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n return this.buildFrom(this.start, this.length)\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.cache.terms || before.terms()\n let newTerms = newPhrase.cache.terms || newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.cache.terms || phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n\n // //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n // has almost no effect\n if (p.cache.words !== undefined && reg.word !== undefined && p.cache.words.hasOwnProperty(reg.word) !== true) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n let captures = []\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return false\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return false\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n //TODO: support [*] properly\n if (skipto === null) {\n return false //couldn't find it\n }\n t = skipto\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (reg.anything === true || (reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) || terms[t].doesMatch(reg, index + t, length) === true) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return false\n }\n }\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return false //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return false //greedy didn't reach the end\n }\n }\n if (reg.capture) {\n captures.push(startAt)\n //add greedy-end to capture\n if (t > 1 && reg.greedy) {\n captures.push(t - 1)\n }\n }\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return false\n }\n\n //we got to the end of the regs, and haven't failed!\n //try to only return our [captured] segment\n if (captures.length > 0) {\n //make sure the array is the full-length we'd return anyways\n let arr = terms.slice(captures[0], captures[captures.length - 1] + 1)\n //make sure the array is t-length (so we skip ahead full-length)\n for (let tmp = 0; tmp < t; tmp++) {\n arr[tmp] = arr[tmp] || null //these get cleaned-up after\n }\n return arr\n }\n //return our result\n return terms.slice(0, t)\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(arr => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n capture:false,\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flags\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.capture = true\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n }\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const parseToken = require('./parseToken')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst postProcess = function(tokens) {\n //ensure there's only one consecutive capture group.\n let count = tokens.filter(t => t.capture === true).length\n if (count > 1) {\n let captureArr = tokens.map(t => t.capture)\n let first = captureArr.indexOf(true)\n let last = captureArr.length - 1 - captureArr.reverse().indexOf(true)\n //'fill in' capture groups between start-end\n for (let i = first; i < last; i++) {\n tokens[i].capture = true\n }\n }\n return tokens\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.cache.terms || p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let match = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n matches.push(match)\n }\n // remove (intentional) null results\n matches = matches.map(arr => {\n return arr.filter(t => t)\n })\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let match = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push(match)\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(ts => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(str, justOne = false) {\n let matches = matchAll(this, str, justOne)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(str) {\n let matches = matchAll(this, str, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(str) {\n let matches = notMatch(this, str)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.cache.terms || this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length) {\n let p = new Phrase(id, length, this.pool)\n if (this.cache) {\n p.cache = this.cache\n if (length !== this.length) {\n p.cache.terms = null\n }\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of terms (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\n\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n//add forward/backward 'linked-list' prev/next ids\nconst addLinks = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n addLinks(terms)\n\n //return phrase objects\n return new Phrase(terms[0].id, terms.length, pool)\n })\n //return them ready for a Document object\n return phrases\n}\n\n// parse the compressed format '3,2|2,4'\nconst parseTags = function(text, tagList) {\n return text.split('|').map(str => {\n let numList = str.split(',')\n numList = numList.map(n => parseInt(n, 10))\n // convert a list pf numbers into an array of tag names\n return numList.map(num => {\n if (!tagList[num]) {\n console.warn('Compromise import: missing tag at index ' + num)\n }\n return tagList[num]\n })\n })\n}\n\n/** create a word-pool and Phrase objects from .export() json*/\nconst fromJSON = function(json, world) {\n if (typeof json === 'string') {\n json = JSON.parse(json)\n }\n let pool = new Pool()\n //create Phrase objects\n let phrases = json.list.map(o => {\n // tokenize words from sentence text\n let terms = splitTerms(o[0])\n // unpack the tag data for each term\n let tagArr = parseTags(o[1], json.tags)\n //create Term objects\n terms = terms.map((str, i) => {\n let term = new Term(str)\n tagArr[i].forEach(tag => term.tag(tag, '', world))\n pool.add(term)\n return term\n })\n //add prev/next links\n addLinks(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\n\nmodule.exports = {\n fromText,\n fromJSON,\n}\n","module.exports = '12.3.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n\n/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n this.list.forEach(p => {\n let words = {}\n p.cache = p.cache || {}\n p.cache.terms = p.cache.terms || p.terms()\n // cache all the terms\n p.cache.terms.forEach(t => {\n words[t.clean] = true\n words[t.reduced] = true\n words[t.text.toLowerCase()] = true\n if (t.implicit) {\n words[t.implicit] = true\n }\n if (t.root) {\n words[t.root] = true\n }\n if (t.alias !== undefined) {\n words = Object.assign(words, t.alias)\n }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n delete words['']\n p.cache.words = words\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerm = function() {\n return this.match('^.')\n}\n/** grab the last term for every match */\nexports.lastTerm = function() {\n return this.match('.$')\n}\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n if (res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","const tokenize = require('../../01-tokenizer/02-words')\n\n// compare one term and one match\nconst doesMatch = function(term, str) {\n if (str === '') {\n return false\n }\n return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n}\n\n// is this lookup found in these terms?\nconst findStart = function(arr, terms) {\n //find the start\n for (let i = 0; i < terms.length; i++) {\n if (doesMatch(terms[i], arr[0])) {\n if (arr.every((a, n) => doesMatch(terms[i + n], a) === true)) {\n return terms[i].id\n }\n }\n }\n return false\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n if (typeof arr === 'string') {\n arr = [arr]\n }\n let lookups = arr.map(str => {\n str = str.toLowerCase()\n let words = tokenize(str)\n words = words.map(s => s.trim())\n return words\n })\n this.cache()\n let found = []\n // try each lookup\n lookups.forEach(a => {\n //try each phrase\n this.list.forEach(p => {\n // cache-miss, skip.\n if (p.cache.words[a[0]] !== true) {\n return\n }\n //we found a potential match\n let terms = p.terms()\n let id = findStart(a, terms)\n if (id !== false) {\n // create the actual phrase\n let phrase = p.buildFrom(id, a.length)\n found.push(phrase)\n return\n }\n })\n })\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize.fromText(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize.fromText(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize.fromText(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","const jsonDefaults = { text: true, terms: true, trim: true }\n\n// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n options = Object.assign({}, jsonDefaults, options)\n\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n if (options.unique) {\n options.reduced = true\n }\n if (options.offset) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n // calculate them, (from beginning of doc)\n let offsets = termOffsets(this.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n let len = o.terms.reduce((n, t) => {\n n += t.offset.length || 0\n return n\n }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = len\n })\n }\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.cache.terms || p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","// compress a list of things by frequency\nconst topk = function(list) {\n let counts = {}\n list.forEach(a => {\n counts[a] = counts[a] || 0\n counts[a] += 1\n })\n let arr = Object.keys(counts)\n arr = arr.sort((a, b) => {\n if (counts[a] > counts[b]) {\n return -1\n } else {\n return 1\n }\n })\n // arr = arr.filter(a => counts[a] > 1)\n return arr.map(a => [a, counts[a]])\n}\n\n// remove implied tags, like 'Noun' when we have 'Plural'\nconst reduceTags = function(tags, world) {\n let tagset = world.tags\n let implied = []\n tags.forEach(tag => {\n if (tagset[tag] && tagset[tag].isA) {\n implied = implied.concat(tagset[tag].isA)\n }\n })\n implied = implied.reduce((h, tag) => {\n h[tag] = true\n return h\n }, {})\n tags = tags.filter(tag => !implied[tag])\n // tags\n return tags\n}\n\n/** store a parsed document for later use */\nexports.export = function() {\n let phraseList = this.json({ text: true, trim: false, terms: { tags: true, whitespace: true } })\n // let phraseList = json.map(p => p.terms)\n let allTags = []\n phraseList.forEach(p => {\n p.terms.forEach(t => {\n // reduce redundant tags\n let tags = reduceTags(t.tags, this.world)\n allTags = allTags.concat(tags)\n })\n })\n // compress the top tags\n allTags = topk(allTags)\n let tagMap = {}\n allTags.forEach((a, i) => {\n tagMap[a[0]] = i\n })\n\n //use index numbers instead of redundant tag-names\n phraseList = phraseList.map(p => {\n let terms = p.terms.map(term => {\n let tags = term.tags\n tags = reduceTags(tags, this.world)\n tags = tags.map(tag => tagMap[tag])\n tags = tags.join(',')\n return tags\n })\n terms = terms.join('|')\n return [p.text, terms]\n })\n\n return {\n tags: Object.keys(tagMap),\n // words: {},\n list: phraseList,\n }\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n require('./output/04-export'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\n/** alias for .all() until it gets overloaded by plugin */\nmethods.sentences = function() {\n return this.all()\n}\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length < 4) {\n term.tag('Acronym', 'acronym-org', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.cache.terms || phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize.fromText(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.cache.terms || p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //misc:\n //foot/feet\n doc.match('(foot|feet)').tag('Noun', 'foot-noun')\n // blood, sweat, and tears\n doc.match('(#Noun && @hasComma) #Noun (and|or) [#PresentTense]').tag('#Noun', 'noun-list')\n //3 feet\n doc.match('#Value [(foot|feet)]').tag('Unit', 'foot-unit')\n //'u' as pronoun\n doc.match('#Conjunction [u]').tag('Pronoun', 'u-pronoun-2')\n //6 am\n doc.match('#Holiday (day|eve)').tag('Holiday', 'holiday-day')\n // the captain who\n doc.match('#Noun [(who|whom)]').tag('Determiner', 'captain-who')\n //timezones\n doc.match('(standard|daylight|summer|eastern|pacific|central|mountain) standard? time').tag('Time', 'timezone')\n //Brazilian pesos\n doc.match('#Demonym #Currency').tag('Currency', 'demonym-currency')\n //about to go\n doc.match('[about to] #Adverb? #Verb').tag(['Auxiliary', 'Verb'], 'about-to')\n //right of way\n doc.match('(right|rights) of .').tag('Noun', 'right-of')\n // a bit\n doc.match('[much] #Adjective').tag('Adverb', 'bit-1')\n doc.match('a [bit]').tag('Noun', 'bit-2')\n doc.match('a bit much').tag('Determiner Adverb Adjective', 'bit-3')\n doc.match('too much').tag('Adverb Adjective', 'bit-4')\n // u r cool\n doc.match('u r').tag('Pronoun #Copula', 'u r')\n // well, ...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n // had he survived,\n doc\n .match('had #Noun+ #PastTense')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'had-he')\n // were he to survive\n doc\n .match('were #Noun+ to #Infinitive')\n .ifNo('@hasComma')\n .firstTerm()\n .tag('Condition', 'were-he')\n\n //swear-words as non-expression POS\n //nsfw\n doc.match('holy (shit|fuck|hell)').tag('Expression', 'swears-expression')\n doc.match('#Determiner [(shit|damn|hell)]').tag('Noun', 'swears-noun')\n doc.match('[(shit|damn|fuck)] (#Determiner|#Possessive|them)').tag('Verb', 'swears-verb')\n doc\n .match('#Copula fucked up?')\n .not('#Copula')\n .tag('Adjective', 'swears-adjective')\n\n //ambig prepositions/conjunctions\n let so = doc.if('so')\n if (so.found === true) {\n //so funny\n so.match('[so] #Adjective').tag('Adverb', 'so-adv')\n //so the\n so.match('[so] #Noun').tag('Conjunction', 'so-conj')\n //do so\n so.match('do [so]').tag('Noun', 'so-noun')\n }\n\n let all = doc.if('all')\n if (all.found === true) {\n //all students\n all.match('[all] #Determiner? #Noun').tag('Adjective', 'all-noun')\n //it all fell apart\n all.match('[all] #Verb').tag('Adverb', 'all-verb')\n }\n\n //the ambiguous word 'that' and 'which'\n let which = doc.if('which')\n if (which.found === true) {\n //remind john that\n which.match('#Verb #Adverb? #Noun [(that|which)]').tag('Preposition', 'that-prep')\n //that car goes\n which.match('that #Noun [#Verb]').tag('Determiner', 'that-determiner')\n //work, which has been done.\n which.match('@hasComma [which] (#Pronoun|#Verb)').tag('Preposition', 'which-copula')\n }\n\n //like\n let like = doc.if('like')\n if (like.found === true) {\n like.match('just [like]').tag('Preposition', 'like-preposition')\n //folks like her\n like.match('#Noun [like] #Noun').tag('Preposition', 'noun-like')\n //look like\n like.match('#Verb [like]').tag('Adverb', 'verb-like')\n //exactly like\n like\n .match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n }\n\n let title = doc.if('@titleCase')\n if (title.found === true) {\n //FitBit Inc\n title.match('@titleCase (ltd|co|inc|dept|assn|bros)').tag('Organization', 'org-abbrv')\n //Foo District\n title\n .match('@titleCase+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)')\n .tag('Region', 'foo-district')\n //District of Foo\n title\n .match('(district|region|province|municipality|territory|burough|state) of @titleCase')\n .tag('Region', 'district-of-Foo')\n }\n\n let hyph = doc.if('@hasHyphen')\n if (hyph.found === true) {\n //air-flow\n hyph\n .match('@hasHyphen .')\n .match('#Noun #Verb')\n .tag('Noun', 'hyphen-verb')\n //connect hyphenated expressions - 'ooh-wee'\n hyph\n .if('#Expression')\n .match('@hasHyphen+')\n .tag('Expression', 'ooh-wee')\n }\n\n let place = doc.if('#Place')\n if (place.found === true) {\n //West Norforlk\n place.match('(west|north|south|east|western|northern|southern|eastern)+ #Place').tag('Region', 'west-norfolk')\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n place\n .match('#City [#Acronym]')\n .match('(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)')\n .tag('Region', 'us-state')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","//Determiner-signals\nconst fixThe = function(doc) {\n let det = doc.if('#Determiner')\n\n if (det.found === true) {\n let adj = det.if('#Adjective')\n if (adj.found) {\n //the nice swim\n adj.match('(the|this|those|these) #Adjective [#Verb]').tag('Noun', 'the-adj-verb')\n // the truly nice swim\n adj.match('(the|this|those|these) #Adverb #Adjective [#Verb]').tag('Noun', 'correction-determiner4')\n //the orange is\n adj.match('#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)').tag('Noun', 'the-adj-2')\n //the orange.\n adj\n .match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n }\n\n let inf = det.if('#Infinitive')\n if (inf.found) {\n // a stream runs\n inf.match('(the|this|a|an) [#Infinitive] #Adverb? #Verb').tag('Noun', 'correction-determiner5')\n //the test string\n inf.match('#Determiner [#Infinitive] #Noun').tag('Noun', 'correction-determiner7')\n //by a bear.\n inf.match('#Determiner #Adjective [#Infinitive]$').tag('Noun', 'a-inf')\n }\n\n //the wait to vote\n det.match('(the|this) [#Verb] #Preposition .').tag('Noun', 'correction-determiner1')\n //a sense of\n det.match('#Determiner [#Verb] of').tag('Noun', 'the-verb-of')\n //the threat of force\n det.match('#Determiner #Noun of [#Verb]').tag('Noun', 'noun-of-noun')\n //a close\n det.match('#Determiner #Adverb? [close]').tag('Adjective', 'a-close')\n //the western line\n det.match('#Determiner [(western|eastern|northern|southern|central)] #Noun').tag('Noun', 'western-line')\n //the swim\n det\n .match('(the|those|these) #Adjective? [(#Infinitive|#PresentTense|#PastTense)]')\n .tag('Noun', 'correction-determiner2')\n }\n\n let an = doc.if('(a|an)')\n if (an.found === true) {\n //a staggering cost\n an.match('(a|an) [#Gerund]').tag('Adjective', 'correction-a|an')\n //did a 900, paid a 20\n an.match('#Verb (a|an) [#Value]').tag('Singular', 'a-value')\n //a tv show\n an.match('(a|an) #Noun [#Infinitive]').tag('Noun', 'a-noun-inf')\n //a great run\n an.match('(a|an) #Adjective (#Infinitive|#PresentTense)')\n .terms(2)\n .tag('Noun', 'correction-a|an2')\n //'a/an' can mean 1 - \"a hour\"\n an.match('[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)')\n .ifNo('#Plural')\n .tag('Value', 'a-is-one')\n }\n\n return doc\n}\nmodule.exports = fixThe\n","//\nconst fixNouns = function(doc) {\n let noun = doc.if('#Noun')\n if (noun.found === true) {\n //'more' is not always an adverb\n noun.match('more #Noun').tag('Noun', 'more-noun')\n //he quickly foo\n noun.match('#Noun #Adverb [#Noun]').tag('Verb', 'quickly-foo')\n //fix for busted-up phrasalVerbs\n noun.match('#Noun [#Particle]').tag('Preposition', 'repair-noPhrasal')\n //John & Joe's\n noun.match('#Noun (&|n) #Noun').tag('Organization', 'Noun-&-Noun')\n //Aircraft designer\n noun.match('#Noun #Actor').tag('Actor', 'thing-doer')\n //j.k Rowling\n doc.match('#Noun van der? #Noun').tagSafe('#Person', 'von der noun')\n //king of spain\n doc.match('(king|queen|prince|saint|lady) of? #Noun').tagSafe('#Person', 'king-of-noun')\n // addresses\n doc.match('#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)').tag('Address')\n // schools\n doc.match('#Noun+ (public|private) school').tag('School')\n //the word 'second'\n noun\n .match('[second] #Noun')\n .notIf('#Honorific')\n .unTag('Unit')\n .tag('Ordinal', 'second-noun')\n //linear algebra\n noun\n .match('(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun')\n .tag('Noun', 'technical-noun')\n\n //organization\n let org = noun.if('#Organization')\n if (org.found === true) {\n org.match('#Organization of the? @titleCase').tagSafe('Organization', 'org-of-place')\n org.match('#Organization #Country').tag('Organization', 'org-country')\n org.match('(world|global|international|national|#Demonym) #Organization').tag('Organization', 'global-org')\n org\n .match('@titleCase #Organization')\n .ifNo('@hasComma')\n .tag('Organization', 'titlecase-org')\n }\n\n let plural = noun.if('#Plural')\n if (plural.found === true) {\n //some pressing issues\n plural.match('some [#Verb] #Plural').tag('Noun', 'correction-determiner6')\n\n //this rocks\n noun.match('(this|that) [#Plural]').tag('PresentTense', 'this-verbs')\n }\n }\n\n //acronyms\n let acronym = doc.if('#Acronym')\n if (acronym.found === true) {\n acronym\n .match('the [#Acronym]')\n .notIf('(iou|fomo|yolo|diy|dui|nimby)')\n .tag('Organization', 'the-acronym')\n acronym\n .match('#Acronym')\n .match('#Possessive')\n .tag('Organization', 'possessive-acronym')\n }\n\n //possessives\n let poss = doc.if('#Possessive')\n if (poss.found === true) {\n //my buddy\n poss.match('#Possessive [#FirstName]').unTag('Person', 'possessive-name')\n //spencer kelly's\n poss\n .match('#FirstName #Acronym? #Possessive')\n .ifNo('@hasComma')\n .match('#FirstName #Acronym? #LastName')\n .tag('Possessive')\n //Super Corp's fundraiser\n poss\n .match('#Organization+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //Los Angeles's fundraiser\n poss\n .match('#Place+ #Possessive')\n .ifNo('@hasComma')\n .tag('Possessive')\n //her polling\n poss.match('#Possessive [#Gerund]').tag('Noun', 'her-polling')\n //her fines\n poss.match('(his|her|its) [#PresentTense]').tag('Noun', 'her-polling')\n //'her match' vs 'let her match'\n let m = poss.match('#Possessive [#Infinitive]')\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n }\n //let him glue\n doc\n .match('(let|make|made) (him|her|it|#Person|#Place|#Organization)+ #Singular (a|an|the|it)')\n .ifNo('@hasComma')\n .match('[#Singular] (a|an|the|it)')\n .tag('#Infinitive', 'let-him-glue')\n return doc\n}\nmodule.exports = fixNouns\n","const maybeNoun =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\nconst maybeVerb = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\nconst maybeAdj = '(misty|rusty|dusty|rich|randy)'\nconst maybeDate = '(april|june|may|jan|august|eve)'\nconst maybePlace = '(paris|alexandria|houston|kobe|salvador|sydney)'\n\nconst fixPerson = function(doc) {\n // clues from honorifics\n let hon = doc.if('#Honorific')\n if (hon.found === true) {\n //mr Putin\n doc.match('(mr|mrs|ms|dr) (@titleCase|#Possessive)+').tag('#Person', 'mr-putin')\n //mr X\n hon.match('#Honorific #Acronym').tag('Person', 'Honorific-TitleCase')\n //remove single 'mr'\n hon.match('^#Honorific$').unTag('Person', 'single-honorific')\n //first general..\n hon.match('[(1st|2nd|first|second)] #Honorific').tag('Honorific', 'ordinal-honorific')\n }\n\n //methods requiring a titlecase\n let title = doc.if('@titleCase')\n if (title.found === true) {\n title.match('#Acronym @titleCase').tagSafe('#Person', 'acronym-titlecase')\n //ludwig van beethovan\n title.match('@titleCase (van|al|bin) @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //jose de Sucre\n title.match('@titleCase (de|du) la? @titleCase').tagSafe('Person', 'titlecase-van-titlecase')\n //Foo U Ford\n title\n .match('[#ProperNoun] #Person')\n .notIf('@hasComma')\n .tagSafe('Person', 'proper-person')\n\n //pope francis\n title\n .match('(lady|queen|sister) @titleCase')\n .ifNo('#Date')\n .ifNo('#Honorific')\n .tag('#FemaleName', 'lady-titlecase')\n title\n .match('(king|pope|father) @titleCase')\n .ifNo('#Date')\n .tag('#MaleName', 'poe')\n\n // jean Foobar\n title.match(maybeNoun + ' #Acronym? @titleCase').tagSafe('Person', 'ray-smith')\n // rob Foobar\n title.match(maybeVerb + ' #Acronym? @titleCase').tag('Person', 'rob-smith')\n // rusty Foobar\n title.match(maybeAdj + ' #Acronym? @titleCase').tag('Person', 'rusty-smith')\n // june Foobar\n title.match(maybeDate + ' #Acronym? (@titleCase && !#Month)').tag('Person', 'june-smith')\n }\n\n let person = doc.if('#Person')\n if (person.found === true) {\n //Frank jr\n person.match('#Person (jr|sr|md)').tag('Person', 'person-honorific')\n //peter II\n person.match('#Person #Person the? #RomanNumeral').tag('Person', 'roman-numeral')\n //'Professor Fink', 'General McCarthy'\n person.match('#Honorific #Person').tag('Person', 'Honorific-Person')\n // 'john E rockefeller'\n person.match('#FirstName [/^[^aiurck]$/]').tag(['Acronym', 'Person'], 'john-e')\n //Doctor john smith jr\n person.match('#Honorific #Person').tag('Person', 'honorific-person')\n //general pearson\n person\n .match('[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person')\n .tag('Honorific', 'ambg-honorifics')\n //Morgan Shlkjsfne\n title\n .match('#Person @titleCase')\n .match('@titleCase #Noun')\n .tagSafe('Person', 'person-titlecase')\n //a bunch of ambiguous first names\n\n //Nouns: 'viola' or 'sky'\n let ambigNoun = person.if(maybeNoun)\n if (ambigNoun.found === true) {\n // ambigNoun.match('(#Determiner|#Adverb|#Pronoun|#Possessive) [' + maybeNoun + ']').tag('Noun', 'the-ray')\n ambigNoun.match(maybeNoun + ' #Person').tagSafe('Person', 'ray-smith')\n }\n\n //Verbs: 'pat' or 'wade'\n let ambigVerb = person.if(maybeVerb)\n if (ambigVerb === true) {\n ambigVerb.match('(#Modal|#Adverb) [' + maybeVerb + ']').tag('Verb', 'would-mark')\n ambigVerb.match(maybeVerb + ' #Person').tag('Person', 'rob-smith')\n }\n\n //Adjectives: 'rusty' or 'rich'\n let ambigAdj = person.if(maybeAdj)\n if (ambigAdj.found === true) {\n ambigAdj.match('#Adverb [' + maybeAdj + ']').tag('Adjective', 'really-rich')\n ambigAdj.match(maybeAdj + ' #Person').tag('Person', 'randy-smith')\n }\n\n //Dates: 'june' or 'may'\n let ambigDate = person.if(maybeDate)\n if (ambigDate.found === true) {\n ambigDate.match(maybeDate + ' #ProperNoun').tag(['FirstName', 'Person'], 'june-smith')\n ambigDate.match('(in|during|on|by|before|#Date) [' + maybeDate + ']').tag('Date', 'in-june')\n ambigDate.match(maybeDate + ' (#Date|#Value)').tag('Date', 'june-5th')\n }\n\n //Places: paris or syndey\n let ambigPlace = person.if(maybePlace)\n if (ambigPlace.found === true) {\n ambigPlace.match('(in|near|at|from|to|#Place) [' + maybePlace + ']').tagSafe('Place', 'in-paris')\n ambigPlace.match('[' + maybePlace + '] #Place').tagSafe('Place', 'paris-france')\n // ambigPlace.match('[' + maybePlace + '] #Person').tagSafe('Person', 'paris-hilton')\n }\n\n //this one is tricky\n let al = person.if('al')\n if (al.found === true) {\n al.match('al (#Person|@titleCase)').tagSafe('#Person', 'al-borlen')\n al.match('@titleCase al @titleCase').tagSafe('#Person', 'arabic-al-arabic')\n }\n\n let firstName = person.if('#FirstName')\n if (firstName.found === true) {\n //ferdinand de almar\n firstName.match('#FirstName de #Noun').tag('#Person', 'firstname-de-noun')\n //Osama bin Laden\n firstName.match('#FirstName (bin|al) #Noun').tag('#Person', 'firstname-al-noun')\n //John L. Foo\n firstName.match('#FirstName #Acronym @titleCase').tag('Person', 'firstname-acronym-titlecase')\n //Andrew Lloyd Webber\n firstName.match('#FirstName #FirstName @titleCase').tag('Person', 'firstname-firstname-titlecase')\n //Mr Foo\n firstName.match('#Honorific #FirstName? @titleCase').tag('Person', 'Honorific-TitleCase')\n //peter the great\n firstName.match('#FirstName the #Adjective').tag('Person', 'determiner5')\n\n //very common-but-ambiguous lastnames\n firstName\n .match('#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)')\n .tag('#Person', 'firstname-maybe')\n\n //John Foo\n firstName\n .match('#FirstName @titleCase @titleCase?')\n .match('#Noun+')\n .tag('Person', 'firstname-titlecase')\n //Joe K. Sombrero\n firstName\n .match('#FirstName #Acronym #Noun')\n .ifNo('#Date')\n .tag('#Person', 'n-acro-noun')\n .lastTerm()\n .tag('#LastName', 'n-acro-noun')\n\n // Dwayne 'the rock' Johnson\n firstName\n .match('#FirstName [#Determiner #Noun] #LastName')\n .tag('#NickName', 'first-noun-last')\n .tag('#Person', 'first-noun-last')\n\n //john bodego's\n firstName\n .match('#FirstName (#Singular|#Possessive)')\n .ifNo('(#Date|#Pronoun|#NickName)')\n .tag('#Person', 'first-possessive')\n .lastTerm()\n .tag('#LastName', 'first-possessive')\n\n // Firstname x (dangerous)\n let tmp = firstName\n .match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#ClauseEnd .')\n .ifNo('#Pronoun')\n tmp.lastTerm().tag('#LastName', 'firstname-noun')\n }\n\n let lastName = person.if('#LastName')\n if (lastName.found === true) {\n //is foo Smith\n lastName.match('#Copula [(#Noun|#PresentTense)] #LastName').tag('#FirstName', 'copula-noun-lastname')\n // x Lastname\n lastName\n .match('[#Noun] #LastName')\n .canBe('#FirstName')\n .tag('#FirstName', 'noun-lastname')\n //ambiguous-but-common firstnames\n lastName\n .match(\n '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName'\n )\n .tag('#FirstName', 'maybe-lastname')\n //Jani K. Smith\n lastName\n .match('(@titleCase|#Singular) #Acronym? #LastName')\n .ifNo('#Date')\n .tag('#Person', 'title-acro-noun')\n .lastTerm()\n .tag('#LastName', 'title-acro-noun')\n }\n }\n\n return doc\n}\nmodule.exports = fixPerson\n","const advb = '(#Adverb|not)+?'\n//\nconst fixVerb = function(doc) {\n let vb = doc.if('#Verb')\n if (vb.found) {\n vb.match('[(do|does|will|have|had)] (not|#Adverb)? #Verb').tag('Auxiliary', 'have-had')\n //still make\n vb.match('[still] #Verb').tag('Adverb', 'still-verb')\n //'u' as pronoun\n vb.match('[u] #Verb').tag('Pronoun', 'u-pronoun-1')\n //is no walk\n vb.match('is no [#Verb]').tag('Noun', 'is-no-verb')\n //different views than\n vb.match('[#Verb] than').tag('Noun', 'correction')\n // smoked poutine is\n vb.match('[#PastTense] #Singular is').tag('#Adjective', 'smoked-poutine')\n // baked onions are\n vb.match('[#PastTense] #Plural are').tag('#Adjective', 'baked-onions')\n // goes to sleep\n vb.match('(go|goes|went) to [#Infinitive]').tag('#Noun', 'goes-to-verb')\n\n //there are reasons\n vb.match('there (are|were) #Adjective? [#PresentTense]').tag('Plural', 'there-are')\n //jack seems guarded\n vb.match('#Singular (seems|appears) #Adverb? [#PastTense$]').tag('Adjective', 'seems-filled')\n //'foo-up'\n vb.match('#Verb (up|off|over|out)')\n .match('@hasHyphen .')\n .tag('#PhrasalVerb')\n //fall over\n vb.match('#PhrasalVerb [#PhrasalVerb]').tag('Particle', 'phrasal-particle')\n\n //went to sleep\n // vb.match('#Verb to #Verb').lastTerm().tag('Noun', 'verb-to-verb');\n //been walking\n vb.match(`(be|been) ${advb} #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n vb.match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n //infinitive verbs suggest plural nouns - 'XYZ walk to the store'\n // r.match(`#Singular+ #Infinitive`).match('#Singular+').tag('Plural', 'infinitive-make-plural');\n\n let modal = vb.if('(#Modal|did|had|has)')\n if (modal.found === true) {\n if (!modal.has('#Modal #Verb')) {\n //'the can'\n modal.match('#Determiner [(can|will|may)]').tag('Singular', 'the can')\n //'he can'\n modal.match('(can|will|may|must|should|could)').untag('Modal', 'he can')\n }\n //support a splattering of auxillaries before a verb\n modal\n .match(`(has|had) ${advb} #PastTense`)\n .not('#Verb$')\n .tag('Auxiliary', 'had-walked')\n //would walk\n modal\n .match(`(#Modal|did) ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'modal-verb')\n //would have had\n modal\n .match(`#Modal ${advb} have ${advb} had ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-have')\n //would be walking\n modal\n .match(`#Modal ${advb} be ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n //would been walking\n modal\n .match(`(#Modal|had|has) ${advb} been ${advb} #Verb`)\n .not('#Verb$')\n .tag('Auxiliary', 'would-be')\n }\n\n let copula = vb.if('#Copula')\n if (copula.found === true) {\n //was walking\n copula\n .match(`#Copula ${advb} (#Gerund|#PastTense)`)\n .not('#Verb$')\n .tag('Auxiliary', 'copula-walking')\n //is mark hughes\n copula.match('#Copula [#Infinitive] #Noun').tag('Noun', 'is-pres-noun')\n //\n copula.match('[#Infinitive] #Copula').tag('Noun', 'inf-copula')\n //sometimes not-adverbs\n copula.match('#Copula [(just|alone)]$').tag('Adjective', 'not-adverb')\n //jack is guarded\n copula.match('#Singular is #Adverb? [#PastTense$]').tag('Adjective', 'is-filled')\n //is eager to go\n copula.match('#Copula [#Adjective to] #Verb').tag('Verb', 'adj-to')\n\n //sometimes adverbs - 'pretty good','well above'\n copula\n .match('#Copula (pretty|dead|full|well) (#Adjective|#Noun)')\n .ifNo('@hasComma')\n .tag('#Copula #Adverb #Adjective', 'sometimes-adverb')\n }\n\n //Gerund - 'walking'\n let gerund = vb.if('#Gerund')\n if (gerund.found === true) {\n //walking is cool\n gerund.match('[#Gerund] #Adverb? not? #Copula').tag('Activity', 'gerund-copula')\n //walking should be fun\n gerund.match('[#Gerund] #Modal').tag('Activity', 'gerund-modal')\n //running-a-show\n gerund.match('#Gerund #Determiner [#Infinitive]').tag('Noun', 'running-a-show')\n //setting records\n // doc.match('#Gerund [#PresentTense]').tag('Plural', 'setting-records');\n }\n\n //'will be'\n let willBe = vb.if('will #Adverb? not? #Adverb? be')\n if (willBe.found === true) {\n //will be running (not copula\n if (willBe.has('will #Adverb? not? #Adverb? be #Gerund') === false) {\n //tag it all\n willBe.match('will not? be').tag('Copula', 'will-be-copula')\n //for more complex forms, just tag 'be'\n willBe\n .match('will #Adverb? not? #Adverb? be #Adjective')\n .match('be')\n .tag('Copula', 'be-copula')\n }\n }\n }\n\n //question words\n let m = doc.if('(who|what|where|why|how|when)')\n if (m.found) {\n //the word 'how'\n m.match('^how').tag('QuestionWord', 'how-question')\n m.match('[how] (#Determiner|#Copula|#Modal|#PastTense)').tag('QuestionWord', 'how-is')\n // //the word 'which'\n m.match('^which').tag('QuestionWord', 'which-question')\n m.match('[which] . (#Noun)+ #Pronoun').tag('QuestionWord', 'which-question2')\n m.match('which').tag('QuestionWord', 'which-question3')\n\n //how he is driving\n m.match('[#QuestionWord] #Noun #Copula #Adverb? (#Verb|#Adjective)')\n .unTag('QuestionWord')\n .tag('Conjunction', 'how-he-is-x')\n\n //when i go fishing\n m.match('#QuestionWord #Noun #Adverb? #Infinitive not? #Gerund')\n .unTag('QuestionWord')\n .tag('Conjunction', 'when i go fishing')\n }\n\n return doc\n}\nmodule.exports = fixVerb\n","//\nconst fixAdjective = function(doc) {\n let adj = doc.if('#Adjective')\n if (adj.found) {\n //still good\n adj.match('[still] #Adjective').tag('Adverb', 'still-advb')\n //barely even walk\n adj.match('(barely|hardly) even').tag('#Adverb', 'barely-even')\n //big dreams, critical thinking\n adj.match('#Adjective [#PresentTense]').tag('Noun', 'adj-presentTense')\n //will secure our\n adj.match('will [#Adjective]').tag('Verb', 'will-adj')\n //cheering hard - dropped -ly's\n adj.match('#PresentTense [(hard|quick|long|bright|slow)]').tag('Adverb', 'lazy-ly')\n //his fine\n adj.match('(his|her|its) [#Adjective]').tag('Noun', 'his-fine')\n //he left\n adj.match('#Noun #Adverb? [left]').tag('PastTense', 'left-verb')\n //he disguised the thing\n adj.match('#Pronoun [#Adjective] #Determiner #Adjective? #Noun').tag('Verb', 'he-adj-the')\n }\n return doc\n}\nmodule.exports = fixAdjective\n","const units = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n//\nconst fixValue = function(doc) {\n let val = doc.if('#Value')\n if (val.found === true) {\n //1 800 PhoneNumber\n val.match('1 #Value #PhoneNumber').tag('PhoneNumber', '1-800-Value')\n //(454) 232-9873\n val.match('#NumericValue #PhoneNumber').tag('PhoneNumber', '(800) PhoneNumber')\n //three trains / one train\n let m = val.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n //money\n m = val.match('#Value+ #Currency')\n m.lastTerm().tag('Unit', 'money-unit')\n m.match('#Value+').tag('Money', 'value-currency')\n }\n //5 kg.\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //eg 'trillion'\n let mult = val.if(units)\n if (mult.found === true) {\n mult.match('a #Value').tag('Value', 'a-value') //?\n // mult.match('#Ordinal (half|quarter)').tag('Value', 'ordinal-half');//not ready\n mult.match(`${units} and #Value`).tag('Value', 'magnitude-and-value')\n }\n return doc\n}\nmodule.exports = fixValue\n","const preps = '(in|by|before|during|on|until|after|of|within|all)' //6\nconst people = '(january|april|may|june|summer|autumn|jan|sep)' //ambiguous month-names\nconst verbs = '(may|march|sat)' //ambiguous month-verbs\n\nconst fixDates = function(doc) {\n //ambiguous month - person forms\n let person = doc.if(people)\n if (person.found === true) {\n //give to april\n person.match(`#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${people}]`).tag('Person', 'ambig-person')\n //remind june\n person.match(`#Infinitive [${people}]`).tag('Person', 'infinitive-person')\n //may waits for\n person.match(`[${people}] #PresentTense (to|for)`).tag('Person', 'ambig-active')\n //april will\n person.match(`[${people}] #Modal`).tag('Person', 'ambig-modal')\n //would april\n person.match(`#Modal [${people}]`).tag('Person', 'modal-ambig')\n //with april\n person.match(`(that|with|for) [${people}]`).tag('Person', 'that-month')\n //it is may\n person.match(`#Copula [${people}]`).tag('Person', 'is-may')\n //may is\n person.match(`[${people}] #Copula`).tag('Person', 'may-is')\n //april the 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'person-value')\n //wednesday april\n person.match(`#Date [${people}]`).tag('Month', 'correction-may')\n //may 5th\n person.match(`[${people}] the? #Value`).tag('Month', 'may-5th')\n //5th of may\n person.match(`#Value of [${people}]`).tag('Month', '5th-of-may')\n //by april\n person\n .match(`${preps} [${people}]`)\n .ifNo('#Holiday')\n .tag('Month', 'preps-month')\n //this april\n person.match(`(next|this|last) [${people}]`).tag('Month', 'correction-may') //maybe not 'this'\n }\n\n //ambiguous month - verb-forms\n let verb = doc.if(verbs)\n if (verb.found === true) {\n //quickly march\n verb.match(`#Adverb [${verbs}]`).tag('Infinitive', 'ambig-verb')\n verb.match(`${verbs} [#Adverb]`).tag('Infinitive', 'ambig-verb')\n //all march\n verb.match(`${preps} [${verbs}]`).tag('Month', 'in-month')\n //this march\n verb.match(`(next|this|last) [${verbs}]`).tag('Month', 'this-month')\n //with date\n verb.match(`[${verbs}] the? #Value`).tag('Month', 'march-5th')\n verb.match(`#Value of? [${verbs}]`).tag('Month', '5th-of-march')\n //nearby\n verb.match(`[${verbs}] .? #Date`).tag('Month', 'march-and-feb')\n verb.match(`#Date .? [${verbs}]`).tag('Month', 'feb-and-march')\n\n let march = doc.if('march')\n if (march.found === true) {\n //march to\n march.match('[march] (up|down|back|to|toward)').tag('Infinitive', 'march-to')\n //must march\n march.match('#Modal [march]').tag('Infinitive', 'must-march')\n }\n }\n //sun 5th\n let sun = doc.if('sun')\n if (sun.found === true) {\n //sun feb 2\n sun.match('[sun] #Date').tag('WeekDay', 'sun-feb')\n //1pm next sun\n sun.match('#Date (on|this|next|last|during)? [sun]').tag('WeekDay', '1pm-sun')\n //sun the 5th\n sun\n .match('sun the #Ordinal')\n .tag('Date')\n .firstTerm()\n .tag('WeekDay', 'sun-the-5th')\n //the sun\n sun.match('#Determiner [sun]').tag('Singular', 'the-sun')\n }\n\n //sat, nov 5th\n let sat = doc.if('sat')\n if (sat.found) {\n //sat november\n sat.match('[sat] #Date').tag('WeekDay', 'sat-feb')\n //this sat\n sat.match(`${preps} [sat]`).tag('WeekDay', 'sat')\n }\n\n //months:\n let month = doc.if('#Month')\n if (month.found === true) {\n //June 5-7th\n month.match(`#Month #DateRange+`).tag('Date', 'correction-numberRange')\n //5th of March\n month.match('#Value of #Month').tag('Date', 'value-of-month')\n //5 March\n month.match('#Cardinal #Month').tag('Date', 'cardinal-month')\n //march 5 to 7\n month.match('#Month #Value to #Value').tag('Date', 'value-to-value')\n //march the 12th\n month.match('#Month the #Value').tag('Date', 'month-the-value')\n }\n\n //months:\n let val = doc.if('#Value')\n if (val.found === true) {\n //values\n val.match('#Value #Abbreviation').tag('Value', 'value-abbr')\n //seven point five\n val.match('#Value (point|decimal) #Value').tag('Value', 'value-point-value')\n //minus 7\n val.match('(minus|negative) #Value').tag('Value', 'minus-value')\n // ten grand\n val.match('#Value grand').tag('Value', 'value-grand')\n //quarter million\n val.match('(a|the) [(half|quarter)] #Ordinal').tag('Value', 'half-ordinal')\n //june 7\n val\n .match('(#WeekDay|#Month) #Value')\n .ifNo('#Money')\n .tag('Date', 'date-value')\n\n //7 june\n val\n .match('#Value (#WeekDay|#Month)')\n .ifNo('#Money')\n .tag('Date', 'value-date')\n\n //may twenty five\n val\n .match('#TextValue #TextValue')\n .if('#Date')\n .tag('#Date', 'textvalue-date')\n }\n\n return doc\n}\nmodule.exports = fixDates\n","const fixMisc = require('./fixMisc')\nconst fixDeterminer = require('./fixThe')\nconst fixNouns = require('./fixNouns')\nconst fixPerson = require('./fixPerson')\nconst fixVerb = require('./fixVerb')\nconst fixAdjective = require('./fixAdjective')\nconst fixValue = require('./fixValue')\nconst fixDates = require('./fixDates')\n\n// det: 131.338ms\n// verb: 100.828ms\n// dates: 80.874ms\n// person: 66.054ms\n// nouns: 51.340ms\n// adj: 19.760ms\n// value: 12.950ms\n// misc: 43.359ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n // console.time('det')\n fixDeterminer(doc) //27\n // console.timeEnd('det')\n\n // console.time('nouns')\n fixNouns(doc) //30\n // // console.timeEnd('nouns')\n\n // // console.time('person')\n fixPerson(doc) //58\n // // console.timeEnd('person')\n\n // // console.time('verb')\n fixVerb(doc) //50\n // // console.timeEnd('verb')\n\n // // console.time('adj')\n fixAdjective(doc) //8\n // // console.timeEnd('adj')\n\n // // console.time('value')\n fixValue(doc) //12\n // // console.timeEnd('value')\n\n // // console.time('dates')\n fixDates(doc) //92\n // // console.timeEnd('dates')\n\n // // console.time('misc')\n fixMisc(doc) //43\n // console.timeEnd('misc')\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n\n //remove our cache\n // doc.uncache()\n\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)')\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]')\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize.fromText(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const tokenize = require('./01-tokenizer')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\n\n//blast-out our word-lists, just once\nlet world = new World()\n\n/** parse and tag text into a compromise object */\nconst nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n}\n\n/** parse text into a compromise object, without running POS-tagging */\nnlp.tokenize = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize.fromText(text, world)\n let doc = new Doc(list, null, world)\n return doc\n}\n\n/** mix in a compromise-plugin */\nnlp.extend = function(fn) {\n fn(Doc, world)\n return this\n}\n\n/** make a deep-copy of the library state */\nnlp.clone = function() {\n world = world.clone()\n return this\n}\n\n/** re-generate a Doc object from .json() results */\nnlp.load = function(json) {\n let list = tokenize.fromJSON(json, world)\n return new Doc(list, null, world)\n}\n\n/** log our decision-making for debugging */\nnlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n}\n\n/** current version of the library */\nnlp.version = version\n// alias\nnlp.import = nlp.load\n\nmodule.exports = nlp\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","words","getGreedy","until","count","max","min","greedyTo","nextReg","tryHere","captures","hasNeeds","remain","greedy","skipto","startAt","capture","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","stripStart","stripEnd","stripBoth","parseToken","RegExp","Number","isArray","byParentheses","byWords","byArray","tokens","captureArr","first","reverse","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","notMatch","ts","current","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","addLinks","fromText","splitTerms","phrases","parseTags","tagList","numList","parseInt","num","warn","fromJSON","JSON","parse","tagArr","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","len","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","exec","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","stringify","w2","from","addParent","doShallow","wordCount","setRoot","eq","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","why","setTag","detachParent","sub","findStart","lookups","tokenize","lookup","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","jsonDefaults","termOffsets","elapsed","offsets","termList","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","counts","reduceTags","implied","phraseList","allTags","tagMap","alpha","left","right","byFreq","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","afterThisWord","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","isNumber","createPhrase","firstTerm","miscCorrection","ifNo","so","which","like","notIf","title","hyph","place","fixThe","det","adj","an","fixNouns","org","acronym","poss","maybeNoun","maybeVerb","maybeAdj","maybeDate","maybePlace","fixPerson","hon","ambigNoun","ambigVerb","ambigAdj","ambigDate","ambigPlace","al","firstName","lastName","advb","fixVerb","vb","modal","untag","copula","gerund","willBe","fixAdjective","units","fixValue","val","mult","preps","fixDates","verb","march","sun","sat","month","corrections","fixDeterminer","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","lists","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","lookBefore","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","findNoun","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","and","onlyIf","nlp","addWords","load","verbose","version"],"mappings":"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"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index abd919c2d..dca7b0e09 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},D,x,H,z,L);function _(){return"undefined"!=typeof window&&window.document}var q=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=C(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=C(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=xe(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},je=function(e,t){var n={};Ne(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ee={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Ne(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return Ne(this,e,!0).length>0},not:function(e){var t=this,n=je(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,Ee),Object.assign(Oe.prototype,ge);var He={term:"terms"};Object.keys(He).forEach((function(e){return Oe.prototype[e]=Oe.prototype[He[e]]}));var Te=Oe,Ve=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Ve.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new Ve(t)};for(var ze=Ve,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,_e=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,qe=/^\s+/,We=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===_e.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new ze;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Te(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new ze;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Te(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Vt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},_t=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],qt=[/ary$/],Wt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Zt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Xt={toSuperlative:function(e){if(Wt.hasOwnProperty(e))return Wt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=B((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Pn=B((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Dn=(Bn.json,Bn.data,B((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=jn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Hn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Tn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Hn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}if(void 0===n[i]||!0!==n.hasOwnProperty(i))if(i===e[a].reduced||!0!==n.hasOwnProperty(e[a].reduced)){if(!0===er.test(i)){var s=i.replace(er,"");!0===n.hasOwnProperty(s)&&e[a].tag(n[s],"noprefix-lexicon",t)}}else e[a].tag(n[e[a].reduced],"lexicon",t);else e[a].tag(n[i],"lexicon",t)}return e},rr=/[\'‘’‛‵′`´]$/,ar=/^[A-Z]('s|,)?$/,ir={I:!0,A:!0},or=function(e,t,n){var r=e[t];if(rr.test(r.text)&&!rr.test(r.pre)&&!rr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}!function(e,t){var n=e.reduced;return!!e.tags.Acronym||!(n.length>4&&t.words[n])&&e.isAcronym()}(r,n)?!ir.hasOwnProperty(r.text)&&ar.test(r.text)&&(r.tag("Acronym","one-letter-acronym",n),r.tag("Noun","one-letter-infer",n)):(r.tag("Acronym","acronym-step",n),r.tag("Noun","acronym-infer",n))},sr=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],ur=/^[IVXLCDM]{2,}$/,lr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,cr="Adjective",hr="Infinitive",dr="PresentTense",fr="Singular",mr="PastTense",pr="Expression",gr="LastName",vr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,gr],[/.[^aeiou]ica$/,fr],[/^([hyj]a)+$/,pr]],c:[[/.[^aeiou]ic$/,cr]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,mr],[/.[aeo]{2}[bdgmnprvz]ed$/,mr],[/.[aeiou][sg]hed$/,mr],[/.[aeiou]red$/,mr],[/.[aeiou]r?ried$/,mr],[/.[bcdgtr]led$/,mr],[/.[aoui]f?led$/,mr],[/.[iao]sed$/,mr],[/[aeiou]n?[cs]ed$/,mr],[/[aeiou][rl]?[mnf]ed$/,mr],[/[aeiou][ns]?c?ked$/,mr],[/[aeiou][nl]?ged$/,mr],[/.[tdbwxz]ed$/,mr],[/[^aeiou][aeiou][tvx]ed$/,mr],[/.[cdlmnprstv]ied$/,mr],[/[^aeiou]ard$/,fr],[/[aeiou][^aeiou]id$/,cr],[/.[vrl]id$/,cr]],e:[[/.[lnr]ize$/,hr],[/.[^aeiou]ise$/,hr],[/.[aeiou]te$/,hr],[/.[^aeiou][ai]ble$/,cr],[/.[^aeiou]eable$/,cr],[/.[ts]ive$/,cr]],h:[[/.[^aeiouf]ish$/,cr],[/.v[iy]ch$/,gr],[/^ug?h+$/,pr],[/^uh[ -]?oh$/,pr]],i:[[/.[oau][wvl]ski$/,gr]],k:[[/^(k)+$/,pr]],l:[[/.[gl]ial$/,cr],[/.[^aeiou]ful$/,cr],[/.[nrtumcd]al$/,cr],[/.[^aeiou][ei]al$/,cr]],m:[[/.[^aeiou]ium$/,fr],[/[^aeiou]ism$/,fr],[/^h*u*m+$/,pr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,cr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,pr],[/^(yo)+$/,pr],[/^woo+[pt]?$/,pr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,fr],[/[^i]fer$/,hr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,cr],[/[aeiou].*ist$/,cr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,dr],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,fr],[/.[aeiou]sks$/,dr],[/.[aeiou]kes$/,dr],[/[aeiou][^aeiou]is$/,fr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,pr]],v:[[/.[^aeiou][ai][kln]ov$/,gr]],y:[[/.[cts]hy$/,cr],[/.[st]ty$/,cr],[/.[gk]y$/,cr],[/.[tnl]ary$/,cr],[/.[oe]ry$/,fr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,cr],[/.(gg|bb|zz)ly$/,cr],[/.[aeiou]my$/,cr],[/[ea]{2}zy$/,cr],[/.[^aeiou]ity$/,fr]]},br="Adjective",yr="Infinitive",wr="PresentTense",kr="Singular",Ar="PastTense",$r="Adverb",Gr="Plural",Pr="Verb",Fr="LastName",Cr=[null,null,{ea:kr,ia:"Noun",ic:br,ly:$r,"'n":Pr,"'t":Pr},{oed:Ar,ued:Ar,xed:Ar," so":$r,"'ll":"Modal","'re":"Copula",azy:br,end:Pr,ped:Ar,ffy:br,ify:yr,ing:"Gerund",ize:yr,lar:br,mum:br,nes:wr,nny:br,oid:br,ous:br,que:br,rmy:br,rol:kr,sis:kr,zes:wr},{amed:Ar,aped:Ar,ched:Ar,lked:Ar,nded:Ar,cted:Ar,dged:Ar,akis:Fr,cede:yr,chuk:Fr,czyk:Fr,ects:wr,ends:Pr,enko:Fr,ette:kr,fies:wr,fore:$r,gate:yr,gone:br,ices:Gr,ints:Gr,ions:Gr,less:$r,llen:br,made:br,nsen:Fr,oses:wr,ould:"Modal",some:br,sson:Fr,tage:yr,teen:"Value",tion:kr,tive:br,tors:"Noun",vice:kr},{tized:Ar,urned:Ar,eased:Ar,ances:Gr,bound:br,ettes:Gr,fully:$r,ishes:wr,ities:Gr,marek:Fr,nssen:Fr,ology:"Noun",ports:Gr,rough:br,tches:wr,tieth:"Ordinal",tures:Gr,wards:$r,where:$r},{auskas:Fr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Fr,sdottir:Fr}],Br={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"=2&&ur.test(n)&&lr.test(n)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var n=e.clean.length,r=7;n<=r&&(r=n-1);for(var a=r;a>1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Cr[i.length].hasOwnProperty(i)){var o=Cr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===vr.hasOwnProperty(r))for(var a=vr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Dr)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Br.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},Nr=function(e,t){var n=e.world;xr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Lr={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Jr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],_r=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],qr=[/i$/,/ae$/],Wr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Jr.find((function(t){return e.tags[t]})))return;if(Lr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Lr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(_r.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(qr.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},Kr=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Rr=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Qr={neighbours:Hr,case:zr,stem:Sr,plural:Wr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},Ma=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Ha(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();vi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new vi(e,this,this.world)},vi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(vi.prototype,gi.misc),Object.assign(vi.prototype,gi.selections),pi(vi);var bi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(bi).forEach((function(e){return vi.prototype[e]=vi.prototype[bi[e]]}));var yi=vi,wi=new pn,ki=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&wi.addWords(t);var n=rt(e,wi),r=new yi(n,null,wi);return r.tagger(),r};return ki.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&wi.addWords(t);var n=rt(e,wi),r=new yi(n,null,wi);return r},ki.extend=function(e){return e(yi,wi),this},ki.clone=function(){return wi=wi.clone(),this},ki.load=function(e){var t=at(e,wi);return new yi(t,null,wi)},ki.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return wi.verbose(e),this},ki.version="12.3.0",ki.import=ki.load,ki})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;nr[t].lineage.length?1:r[e].isA.length>r[t].isA.length?-1:0:0:1}))},S={text:!0,tags:!0,implicit:!0,clean:!1,id:!1,index:!1,offset:!1,whitespace:!1,bestTag:!1},L={json:function(e,t){e=e||{};var n={};return(e=Object.assign({},S,e)).text&&(n.text=this.text),e.normal&&(n.normal=this.normal),e.tags&&(n.tags=Object.keys(this.tags)),e.clean&&(n.clean=this.clean),(e.id||e.offset)&&(n.id=this.id),e.implicit&&null!==this.implicit&&(n.implicit=this.implicit),e.whitespace&&(n.pre=this.pre,n.post=this.post),e.bestTag&&(n.bestTag=M(this,t)[0]),n}},J=Object.assign({},D,x,H,z,L);function _(){return"undefined"!=typeof window&&window.document}var q=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),n=String(n);var r=F(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(e,[{key:"set",value:function(e){var t=F(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();te.prototype.clone=function(){var e=new te(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(te.prototype,J),Object.assign(te.prototype,ee);var ne=te,re={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),a=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(a=!0);var i=r.reduce((function(i,o,s){e.last=n&&s===r.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===r.length-1&&n&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&n&&(i=ae(i)),!0===e.trim&&(i=i.trim()),i}},oe={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},se=/[.?!]\s*$/,ue=function(e,t){t[0].pre=e[0].pre;var n,r,a=e[e.length-1],i=t[t.length-1];i.post=(n=a.post,r=i.post,se.test(r)?r+n.match(/\s*$/):n),a.post="",""===a.post&&(a.post+=" ")},le=function(e,t,n){var r=e.cache.terms||e.terms(),a=t.cache.terms||t.terms();ue(r,a),function(e,t,n){var r=e[e.length-1],a=t[t.length-1],i=r.next;(r.next=t[0].id,a.next=i,i)&&(n.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(r,a,e.pool);var i,o=[e],s=e.start,u=[n];return(u=u.concat(n.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(s)}));o=o.concat(t)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length})),e},ce=/ /,he=function(e,t,n){var r=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===ce.test(t.post)&&(t.post+=" ")}(a),function(e,t,n){var r=n[n.length-1];r.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);n[0].prev=e.terms(0).prev,e.terms(0).prev=r.id}(e,t,a);var i,o=[e],s=[n];return(s=s.concat(n.parents())).forEach((function(e){var n=e.list.filter((function(e){return e.hasId(r)||e.hasId(t.start)}));o=o.concat(n)})),(o=(i=o).filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(e){e.length+=t.length,e.start===r&&(e.start=t.start)})),e},de=function(e,t){var n=t.pool(),r=e.cache.terms||e.terms(),a=n.get(r[0].prev)||{},i=n.get(r[r.length-1].next)||{};r[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,n,r){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=n,a.start===t&&(a.start=r.id))})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return le(this,e,t),this},prepend:function(e,t){return he(this,e,t),this},delete:function(e){return de(this,e),this},replace:function(e,t){var n=this.length;le(this,e,t);var r=this.buildFrom(this.start,this.length);r.length=n,de(r,t)},splitOn:function(e){var t=this.terms(),n={before:null,match:null,after:null},r=t.findIndex((function(t){return t.id===e.start}));if(-1===r)return n;var a=t.slice(0,r);a.length>0&&(n.before=this.buildFrom(a[0].id,a.length));var i=t.slice(r,r+e.length);i.length>0&&(n.match=this.buildFrom(i[0].id,i.length));var o=t.slice(r+e.length,t.length);return o.length>0&&(n.after=this.buildFrom(o[0].id,o.length,this.pool)),n}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n={};return e.text&&(n.text=this.text()),e.normal&&(n.normal=this.text("normal")),e.clean&&(n.clean=this.text("clean")),e.reduced&&(n.reduced=this.text("reduced")),e.root&&(n.root=this.text("root")),e.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),n.terms=this.terms().map((function(n){return n.json(e.terms,t)}))),n}},pe={lookAhead:function(e){e||(e=".*");var t=this.pool,n=[],r=this.terms();return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,n=[];return function e(r){var a=t.get(r);a&&(n.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(e)}},ge=Object.assign({},re,ie,oe,fe,me,pe),ve=function(e,t){if(0===t.length)return!0;for(var n=0;n0)return!0;if(void 0!==e.cache.words&&void 0!==r.word&&!0!==e.cache.words.hasOwnProperty(r.word))return!0}if(!0===r.anything&&!0===r.negative)return!0}return!1},be=function(e,t,n,r,a,i){for(var o=t;t1&&s.greedy&&a.push(i-1))}else if(!0!==s.optional){if(!(e[i].isImplicit()&&t[o-1]&&e[i+1]&&e[i+1].doesMatch(s,n+i,r)))return!1;i+=2}}else{var l=ye(e,i,t[o+1],s,n);if(void 0!==s.min&&l-is.max){i+=s.max;continue}if(null===l)return!1;i=l}}if(a.length>0){for(var c=e.slice(a[0],a[a.length-1]+1),h=0;h1)for(var t=e.map((function(e){return e.capture})),n=t.indexOf(!0),r=t.length-1-t.reverse().indexOf(!0),a=n;a2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=xe(t)),!0===ve(e,t))return[];var r=t.filter((function(e){return!0!==e.optional})).length,a=e.cache.terms||e.terms(),i=[];if(!0===t[0].start){var o=we(a,t,0,a.length);return!1!==o&&o.length>0&&i.push(o),i=i.map((function(e){return e.filter((function(e){return e}))})),ke(a,t,i)}for(var s=0;sa.length);s+=1){var u=we(a.slice(s),t,s,a.length);if(!1!==u&&u.length>0&&(s+=u.length-1,u=u.filter((function(e){return e})),i.push(u),!0===n))return ke(a,t,i)}return ke(a,t,i)},je=function(e,t){var n={};Ne(e,t).forEach((function(e){e.forEach((function(e){n[e.id]=!0}))}));var r=e.terms(),a=[],i=[];return r.forEach((function(e){!0!==n[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ee={match:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=Ne(this,e,n);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},has:function(e){return Ne(this,e,!0).length>0},not:function(e){var t=this,n=je(this,e);return n=n.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var n=this,r=[],a=this.cache.terms||this.terms(),i=!1,o=0;o0})).map((function(e){return n.buildFrom(e[0].id,e.length)}))}},Oe=function e(n,r,a){t(this,e),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}})};Oe.prototype.buildFrom=function(e,t){var n=new Oe(e,t,this.pool);return this.cache&&(n.cache=this.cache,t!==this.length&&(n.cache.terms=null)),n},Object.assign(Oe.prototype,Ee),Object.assign(Oe.prototype,ge);var He={term:"terms"};Object.keys(He).forEach((function(e){return Oe.prototype[e]=Oe.prototype[He[e]]}));var Te=Oe,Ve=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Ve.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,n){var r=e.words[n].clone();return t[r.id]=r,t}),{});return new Ve(t)};for(var ze=Ve,Ie=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Me=/\S/,Se=/[ .][A-Z]\.? *$/i,Le=/(?:\u2026|\.{2,}) *$/,Je=/((?:\r?\n|\r)+)/,_e=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,qe=/^\s+/,We=function(e,t){if(!0===Se.test(e))return!1;if(!0===Le.test(e))return!1;if(!1===_e.test(e))return!1;var n=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!t.hasOwnProperty(r)},Ke=function(e,t){var n=t.cache.abbreviations;e=e||"";var r=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Me.test(e))return r;for(var i=function(e){for(var t=[],n=e.split(Je),r=0;r0&&(r.push(l),a[u]="")}if(0===r.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&(t.prev=e[n-1].id),e[n+1]&&(t.next=e[n+1].id)}))},rt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var r=Ke(e,t);r=r.map((function(e){return tt(e)})),n=n||new ze;var a=r.map((function(e){return e=e.map((function(e){var t=new ne(e);return n.add(t),t})),nt(e),new Te(e[0].id,e.length,n)}));return a},at=function(e,t){"string"==typeof e&&(e=JSON.parse(e));var n=new ze;return e.list.map((function(r){var a=tt(r[0]),i=function(e,t){return e.split("|").map((function(e){var n=e.split(",");return(n=n.map((function(e){return parseInt(e,10)}))).map((function(e){return t[e]||console.warn("Compromise import: missing tag at index "+e),t[e]}))}))}(r[1],e.tags);return a=a.map((function(e,r){var a=new ne(e);return i[r].forEach((function(e){return a.tag(e,"",t)})),n.add(a),a})),nt(a),new Te(a[0].id,a.length,n)}))},it={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:75;1:7K;2:7Q;3:7J;4:7C;5:5C;6:48;7:49;8:4S;9:61;A:7H;B:70;C:6Z;D:73;E:5X;a6Jb65c5Rd57e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6C;d6Ezy;despr75s5G;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Tce versa,ol55;ca2gabo63nilla;ltWnJpGrb5Asu4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Rconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Z;i1VuF;pervis0specti3;eFu5;cognLgul6Hl6H;own;ndi3v5Txpect0;cid0rF;!grou5OsF;iz0tood;b7ppeaLssu6GuthorF;iz0;i24ra;aJeHhough4PoGrF;i1oubl0;geth8p,rpB;en5QlFm50rr2Ust0;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb64;bHi gener55pFrprisi3;erFre0L;! dup8b,i29;du0seq4U;anda6UeIi0PrFy38;aightFip0; fFfF;or5B;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi42;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa69re6;o1Gr3W;at58ient28reec58;cr0me,ns serif;aMeIiGoF;buCtt4UuSy4;ghtFv4;!-29f9;ar,bel,condi1du63fres52lHpublic3WsFtard0;is48oF;lu1na2;e1Euc46;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl5Amp0;eJiGoF;!b0AfuDmi32p8;mGor,sFva1;ti6;a4We;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Uplexi3v34;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Msi46;en,posi1; boa5Gg2Kli6;!ay; gua5EbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Tse;ak0eMiLoFua4P;nJrGtF;ab7;thF;!eF;rn;chala2descri50stop;ght5;arby,cessa3Xighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4FnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3D;!-0C;nguBst,tt8;ap1Tind5no0A;agg0uF;niOstifi0veni7;de4gno4Clleg4mSnHpso 1WrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic37;a6i2S;a1er,oce2;iGoF;or;reA;deq3Kppr2Z;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0R;d2RnD;aKelJiHoFumdr3C;neCok0rrFs07ur5;if2T;ghfalut1PspF;an2R;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Kiga23lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Eob4;aUeOinNlMoHrF;a1UeFoz1L;e2Eq13tf9;oHrF; keeps,eFm8tuna1;g05ign;liF;sh;ag30ue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1F;ff;aOfficie2lNmiMnKreAthere4veJxF;aAcess,peHtraGuF;be2Ml0I;!va1E;ct0rt;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:40;1:4H;2:44;3:4A;4:2X;5:3W;a4Nb43c3Nd3Ce34f2Qg2Eh23i1Uj1Tk1Ql1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell26ou3;aBe9hi1Xi7r6;o3y;ck0Mde,l6n1ry,se;d,y;a6i4Lt;k,ry;n1Sr6sI;m,y;a7e6ulgar;nge5rda2xi3;gue,in,st;g0n6pco3Lse5;like0ti1;aAen9hi8i7ough,r6;anqu2Pen1ue;dy,g3Tme0ny,r09;ck,n,rs2Q;d41se;ll,me,rt,s6wd46;te5;aVcarUeThRiQkin0FlMmKoHpGqua1GtAu7w6;eet,ift;b7dd14per0Gr6;e,re2I;sta2Gt4;aAe9iff,r7u6;pXr1;a6ict,o3;ig3Gn0V;a1ep,rn;le,rk;e23i3Gright0;ci29ft,l7o6re,ur;n,thi3;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g36m6;!y;ek,nd3E;ck,l0mp4;a6iTort,rill,y;dy,ll0Yrp;cu0Sve0Sxy;ce,ed,y;d,fe,int0l1Wv15;aBe9i8o6ude;mantic,o1Jsy,u6;gh,nd;ch,pe,tzy;a6d,mo0I;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1RlCoBr8u6;ny,r6;e,p4;egna2ic7o6;fouZud;ey,k0;li05or,te1C;ain,easa2;ny;in5le;dd,f6i0ld,ranR;fi11;aAe8i7o6;b4isy,rm16sy;ce,mb4;a6w;r,t;ive,rr02;aAe8ild,o7u6;nda1Ate;ist,o1;a6ek,llY;n,s0ty;d,tuR;aCeBi9o6ucky;f0Vn7o1Eu6ve0w18y0U;d,sy;e0g;g1Uke0tt4v6;e0i3;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti3;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b4id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t4uiY;u1y;aIeeb4iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi3;gey,lm8r6;e5i3;ful;!i3;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i3;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ot=["Person","Place","Organization"],st={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ot},Actor:{isA:"Noun",notA:ot},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ot},Demonym:{isA:["Noun","ProperNoun"],notA:ot},Possessive:{isA:"Noun"}},ut={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},lt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ct=["Noun","Verb","Adjective","Adverb","Value"],ht={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ct},Conjunction:{notA:ct},Preposition:{notA:ct},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},dt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},ft=function(e){return Object.keys(e).forEach((function(t){dt[t]?e[t].color=dt[t]:e[t].isA.some((function(n){return!!dt[n]&&(e[t].color=dt[n],!0)}))})),e},mt=function(e){return Object.keys(e).forEach((function(t){for(var n=e[t],r=n.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},$t=function(e,t,n){var r=At(t);return r1&&(n.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,n);r[o]=r[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,n),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Vt.hasOwnProperty(t))for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(n=Object.assign({},t.irregulars.verbs[e])),void 0===(n=Object.assign({},Mt(e),n)).Gerund&&(n.Gerund=Lt.Gerund(e)),void 0===n.PastTense&&(n.PastTense=Lt.PastTense(e)),void 0===n.PresentTense&&(n.PresentTense=Lt.PresentTense(e)),n},_t=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],qt=[/ary$/],Wt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Kt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qt=[/ary$/,/ous$/],Ut={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Zt=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Xt={toSuperlative:function(e){if(Wt.hasOwnProperty(e))return Wt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=t.irregulars.nouns;if(n.hasOwnProperty(e))return n[e];var r=nn(e);return null!==r?r:tn.test(e)?e+"es":e+"s"},an=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],on=function(e,t){var n,r=t.irregulars.nouns,a=(n=r,Object.keys(n).reduce((function(e,t){return e[n[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&n.tag(a[i],r,t.world):n.tag(e,r,t.world)}))}))}),wn={tag:function(e,t){return e?(yn(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(yn(e,this,!0,t),this):this},unTag:function(e,t){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(e,t,n.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(e,t))}),[]);return this.buildFrom(n)}},kn={map:function(t){var n=this;if(!t)return this;var r=this.list.map((function(e,r){var a=n.buildFrom([e]);a.from=null;var i=t(a,r);return i.list&&i.list[0]?i.list[0]:i}));return 0===r.length?this.buildFrom(r):"object"!==e(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(e,t){var n=this;return e?(this.list.forEach((function(r,a){var i=n.buildFrom([r]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var n=this.list.filter((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return this.buildFrom(n)},find:function(e){var t=this;if(!e)return this;var n=this.list.find((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)}));return n?this.buildFrom([n]):void 0},some:function(e){var t=this;return e?this.list.some((function(n,r){var a=t.buildFrom([n]);return a.from=null,e(a,r)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var n=[this.list[t]];return this.buildFrom(n)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},An=B((function(t,n){var r=function(e,t){return""!==t&&(e.reduced===t||e.implicit===t||e.root===t||e.text.toLowerCase()===t)};n.lookup=function(t){var n=this;"string"==typeof t&&(t=[t]);var a=t.map((function(e){e=e.toLowerCase();var t=tt(e);return t=t.map((function(e){return e.trim()}))}));this.cache();var i=[];return a.forEach((function(t){n.list.forEach((function(n){if(!0===n.cache.words[t[0]]){var a=n.terms(),o=function(t,n){for(var a=function(e){if(r(n[e],t[0])&&t.every((function(t,a){return!0===r(n[e+a],t)})))return{v:n[e].id}},i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,n.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==r.keepCase&&a.terms(0).isTitleCase()&&(o=$n(o)),i=rt(o,n.world,n.pool()),n.buildFrom(i).tagger()}if(!0===r.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",n.world)}))}a.replace(i[0],n)})),this):this.delete()},replace:function(e,t,n){return void 0===t?this.replaceWith(e,n):(this.match(e).replaceWith(t,n),this)}},Pn=B((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.append(r,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(n){var r=rt(e,t.world,t.pool())[0];t.buildFrom([r]).tagger(),n.prepend(r,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof n&&this.list[n])return this.list[n].json(r);("root"===(n=Object.assign({},r,n))||"object"===e(n)&&n.root)&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))})),n.unique&&(n.reduced=!0),n.offset&&(n.terms=!0===n.terms?{}:n.terms,n.terms.offset=!0),(n.index||n.terms.index)&&(n.terms=!0===n.terms?{}:n.terms,n.terms.id=!0);var i=this.list.map((function(e){return e.json(n,t.world)}));if(n.terms.offset||n.offset||n.terms.index||n.index){var o=a(this.all());(n.terms.index||n.index)&&i.forEach((function(e){e.terms.forEach((function(e){e.index=o[e.id].index})),e.index=e.terms[0].index})),(n.terms.offset||n.offset)&&i.forEach((function(e){e.terms.forEach((function(e){e.offset=o[e.id]||{}}));var t=e.terms.reduce((function(e,t){return e+=t.offset.length||0}),0);e.offset=e.terms[0].offset,e.offset.length=t}))}if(n.frequency||n.freq||n.count){var s={};this.list.forEach((function(e){var t=e.text("reduced");s[t]=s[t]||0,s[t]+=1})),this.list.forEach((function(e,t){i[t].count=s[e.text("reduced")]}))}if(n.unique){var u={};i=i.filter((function(e){return!0!==u[e.reduced]&&(u[e.reduced]=!0,!0)}))}return i},n.data=n.json})),Dn=(Bn.json,Bn.data,B((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countt[n]?-1:1}))).map((function(e){return[e,t[e]]}))}(n);var r={};return n.forEach((function(e,t){r[e[0]]=t})),t=t.map((function(t){var n=t.terms.map((function(t){var n=t.tags;return n=(n=(n=jn(n,e.world)).map((function(e){return r[e]}))).join(",")}));return n=n.join("|"),[t.text,n]})),{tags:Object.keys(r),list:t}}},On={alpha:function(e,t){var n=e.text("clean"),r=t.text("clean");return nr?1:0},length:function(e,t){var n=e.text().trim().length,r=t.text().trim().length;return nr?-1:0},wordCount:function(e,t){var n=e.wordCount(),r=t.wordCount();return nr?-1:0}};On.alphabetical=On.alpha,On.wordcount=On.wordCount;var Hn={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Tn={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(r);n[t]=n[t]||0,n[t]+=1})),t.list.sort((function(e,t){var a=n[e.text(r)],i=n[t.text(r)];return ai?-1:0})),t):Hn.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,n){return t[e.start]>t[n.start]?1:t[e.start]0){a+=o;continue}}if(void 0===n[i]||!0!==n.hasOwnProperty(i))if(i===e[a].reduced||!0!==n.hasOwnProperty(e[a].reduced)){if(!0===er.test(i)){var s=i.replace(er,"");!0===n.hasOwnProperty(s)&&e[a].tag(n[s],"noprefix-lexicon",t)}}else e[a].tag(n[e[a].reduced],"lexicon",t);else e[a].tag(n[i],"lexicon",t)}return e},rr=/[\'‘’‛‵′`´]$/,ar=function(e,t,n){var r=e[t];if(rr.test(r.text)&&!rr.test(r.pre)&&!rr.test(r.post)&&r.clean.length>2){var a=r.clean[r.clean.length-2];if("s"===a)return void r.tag(["Possessive","Noun"],"end-tick",n);"n"===a&&r.tag(["Gerund"],"chillin",n)}},ir=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],or=/^[IVXLCDM]{2,}$/,sr=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,ur=function(e,t){for(var n=e.text,r=0;r=2&&or.test(n)&&sr.test(n)&&e.tag("RomanNumeral","xvii",t)},lr="Adjective",cr="Infinitive",hr="PresentTense",dr="Singular",fr="PastTense",mr="Expression",pr="LastName",gr={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,pr],[/.[^aeiou]ica$/,dr],[/^([hyj]a)+$/,mr]],c:[[/.[^aeiou]ic$/,lr]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,fr],[/.[aeo]{2}[bdgmnprvz]ed$/,fr],[/.[aeiou][sg]hed$/,fr],[/.[aeiou]red$/,fr],[/.[aeiou]r?ried$/,fr],[/.[bcdgtr]led$/,fr],[/.[aoui]f?led$/,fr],[/.[iao]sed$/,fr],[/[aeiou]n?[cs]ed$/,fr],[/[aeiou][rl]?[mnf]ed$/,fr],[/[aeiou][ns]?c?ked$/,fr],[/[aeiou][nl]?ged$/,fr],[/.[tdbwxz]ed$/,fr],[/[^aeiou][aeiou][tvx]ed$/,fr],[/.[cdlmnprstv]ied$/,fr],[/[^aeiou]ard$/,dr],[/[aeiou][^aeiou]id$/,lr],[/.[vrl]id$/,lr]],e:[[/.[lnr]ize$/,cr],[/.[^aeiou]ise$/,cr],[/.[aeiou]te$/,cr],[/.[^aeiou][ai]ble$/,lr],[/.[^aeiou]eable$/,lr],[/.[ts]ive$/,lr]],h:[[/.[^aeiouf]ish$/,lr],[/.v[iy]ch$/,pr],[/^ug?h+$/,mr],[/^uh[ -]?oh$/,mr]],i:[[/.[oau][wvl]ski$/,pr]],k:[[/^(k)+$/,mr]],l:[[/.[gl]ial$/,lr],[/.[^aeiou]ful$/,lr],[/.[nrtumcd]al$/,lr],[/.[^aeiou][ei]al$/,lr]],m:[[/.[^aeiou]ium$/,dr],[/[^aeiou]ism$/,dr],[/^h*u*m+$/,mr],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,lr],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,mr],[/^(yo)+$/,mr],[/^woo+[pt]?$/,mr]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,dr],[/[^i]fer$/,cr],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,lr],[/[aeiou].*ist$/,lr],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,hr],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,dr],[/.[aeiou]sks$/,hr],[/.[aeiou]kes$/,hr],[/[aeiou][^aeiou]is$/,dr],[/[a-z]\'s$/,"Noun"],[/^yes+$/,mr]],v:[[/.[^aeiou][ai][kln]ov$/,pr]],y:[[/.[cts]hy$/,lr],[/.[st]ty$/,lr],[/.[gk]y$/,lr],[/.[tnl]ary$/,lr],[/.[oe]ry$/,dr],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,lr],[/.(gg|bb|zz)ly$/,lr],[/.[aeiou]my$/,lr],[/[ea]{2}zy$/,lr],[/.[^aeiou]ity$/,dr]]},vr="Adjective",br="Infinitive",yr="PresentTense",wr="Singular",kr="PastTense",Ar="Adverb",$r="Plural",Gr="Verb",Pr="LastName",Cr=[null,null,{ea:wr,ia:"Noun",ic:vr,ly:Ar,"'n":Gr,"'t":Gr},{oed:kr,ued:kr,xed:kr," so":Ar,"'ll":"Modal","'re":"Copula",azy:vr,end:Gr,ped:kr,ffy:vr,ify:br,ing:"Gerund",ize:br,lar:vr,mum:vr,nes:yr,nny:vr,oid:vr,ous:vr,que:vr,rmy:vr,rol:wr,sis:wr,zes:yr},{amed:kr,aped:kr,ched:kr,lked:kr,nded:kr,cted:kr,dged:kr,akis:Pr,cede:br,chuk:Pr,czyk:Pr,ects:yr,ends:Gr,enko:Pr,ette:wr,fies:yr,fore:Ar,gate:br,gone:vr,ices:$r,ints:$r,ions:$r,less:Ar,llen:vr,made:vr,nsen:Pr,oses:yr,ould:"Modal",some:vr,sson:Pr,tage:br,teen:"Value",tion:wr,tive:vr,tors:"Noun",vice:wr},{tized:kr,urned:kr,eased:kr,ances:$r,bound:vr,ettes:$r,fully:Ar,ishes:yr,ities:$r,marek:Pr,nssen:Pr,ology:"Noun",ports:$r,rough:vr,tches:yr,tieth:"Ordinal",tures:$r,wards:Ar,where:Ar},{auskas:Pr,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Pr,sdottir:Pr}],Fr={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"1;a-=1){var i=e.clean.substr(n-a,n);if(!0===Cr[i.length].hasOwnProperty(i)){var o=Cr[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var n=e.clean,r=n[n.length-1];if(!0===gr.hasOwnProperty(r))for(var a=gr[r],i=0;i35)))}(r=(r=r.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=r,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Br)&&(e.tag("Emoji","unicode-emoji",t),e.text=r),!0===(n=(n=r).replace(/^[:;]/,":"),Fr.hasOwnProperty(n))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=r)}},xr=function(e,t){var n=e.world;Dr.lexicon(t,n);for(var r=0;r3&&void 0!==n[r]&&!0===n.hasOwnProperty(r)&&e.tag(n[r],"stem-"+r,t)}}))},Sr={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Lr=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Jr=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],_r=[/i$/,/ae$/],qr=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var n=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(n.length<=3)return void e.tag("Singular","short-singular",t);if(Lr.find((function(t){return e.tags[t]})))return;if(Sr.isPlural.find((function(e){return e.test(n)})))return void e.tag("Plural","plural-rules",t);if(Sr.isSingular.find((function(e){return e.test(n)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(n)){if(Jr.find((function(e){return e.test(n)})))return;return void e.tag("Plural","plural-fallback",t)}if(_r.find((function(e){return e.test(n)})))return;e.tag("Singular","singular-fallback",t)}},Wr=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Kr=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Rr=/^[A-Z]('s|,)?$/,Qr=/([A-Z]\.){2}[A-Z]?/i,Ur={I:!0,A:!0},Zr={neighbours:Or,case:Vr,stem:Mr,plural:qr,organizations:function(e,t){for(var n=0;n5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(l.eq(0))}return"number"==typeof t&&(r=r.get(t)),new e(r.list,this,this.world)},e},La=function(e){var n=function(e){function n(e,r,a){var o;return t(this,n),(o=s(this,i(n).call(this,e,r,a))).contracted=null,o}return a(n,e),r(n,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),n=t[0].isTitleCase();t.forEach((function(e,n){e.set(e.implicit||e.text),e.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(e,[{key:"tagger",value:function(){return Va(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();yi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new yi(e,this,this.world)},yi.prototype.fromText=function(e){var t=rt(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(yi.prototype,bi.misc),Object.assign(yi.prototype,bi.selections),vi(yi);var wi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(wi).forEach((function(e){return yi.prototype[e]=yi.prototype[wi[e]]}));var ki=yi,Ai=new pn,$i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Ai.addWords(t);var n=rt(e,Ai),r=new ki(n,null,Ai);return r.tagger(),r};return $i.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&Ai.addWords(t);var n=rt(e,Ai),r=new ki(n,null,Ai);return r},$i.extend=function(e){return e(ki,Ai),this},$i.clone=function(){return Ai=Ai.clone(),this},$i.load=function(e){var t=at(e,Ai);return new ki(t,null,Ai)},$i.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return Ai.verbose(e),this},$i.version="12.3.0",$i.import=$i.load,$i})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index 54cc807d7..3fc37fada 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -8386,31 +8386,7 @@ var checkLexicon = function checkLexicon(terms, world) { var _01Lexicon = checkLexicon; -var apostrophes = /[\'‘’‛‵′`´]$/; -var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; -var oneLetterWord = { - I: true, - A: true -}; - -var isAcronym$2 = function isAcronym(term, world) { - var str = term.reduced; // a known acronym like fbi - - if (term.tags.Acronym) { - return true; - } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { - // return false - // } - // 'PIZZA' is not an acronym. - - - if (str.length > 4 && world.words[str]) { - return false; - } - - return term.isAcronym(); -}; // - +var apostrophes = /[\'‘’‛‵′`´]$/; // var checkPunctuation = function checkPunctuation(terms, i, world) { var term = terms[i]; //check hyphenation @@ -8439,15 +8415,14 @@ var checkPunctuation = function checkPunctuation(terms, i, world) { } } } // 'NASA' is, but not 'i REALLY love it.' + // if (term.tags.Noun === true && isAcronym(term, world)) { + // term.tag('Acronym', 'acronym-step', world) + // term.tag('Noun', 'acronym-infer', world) + // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) { + // term.tag('Acronym', 'one-letter-acronym', world) + // term.tag('Noun', 'one-letter-infer', world) + // } - - if (isAcronym$2(term, world)) { - term.tag('Acronym', 'acronym-step', world); - term.tag('Noun', 'acronym-infer', world); - } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { - term.tag('Acronym', 'one-letter-acronym', world); - term.tag('Noun', 'one-letter-infer', world); - } }; var _02Punctuation$1 = checkPunctuation; @@ -9300,12 +9275,69 @@ var tagOrgs = function tagOrgs(terms, world) { var _05Organizations = tagOrgs; +var oneLetterAcronym$1 = /^[A-Z]('s|,)?$/; +var periodSeperated = /([A-Z]\.){2}[A-Z]?/i; +var oneLetterWord = { + I: true, + A: true +}; + +var isAcronym$2 = function isAcronym(term, world) { + var str = term.reduced; // a known acronym like fbi + + if (term.tags.Acronym) { + return true; + } // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) { + // return false + // } + // known-words, like 'PIZZA' is not an acronym. + + + if (world.words[str]) { + return false; + } + + return term.isAcronym(); +}; // F.B.I., NBC, - but not 'NO COLLUSION' + + +var checkAcronym = function checkAcronym(terms, world) { + terms.forEach(function (term) { + //these are not acronyms + if (term.tags.RomanNumeral === true) { + return; + } //period-ones F.D.B. + + + if (periodSeperated.test(term.text) === true) { + term.tag('Acronym', 'period-acronym', world); + } //non-period ones are harder + + + if (term.isUpperCase() && isAcronym$2(term, world)) { + term.tag('Acronym', 'acronym-step', world); + term.tag('Noun', 'acronym-infer', world); + } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym$1.test(term.text)) { + term.tag('Acronym', 'one-letter-acronym', world); + term.tag('Noun', 'one-letter-infer', world); + } //if it's a organization, + + + if (term.tags.Organization && term.text.length < 4) { + term.tag('Acronym', 'acronym-org', world); + } + }); +}; + +var _06Acronyms = checkAcronym; + var step = { neighbours: _01Neighbours, "case": _02Case, stem: _03Stem, plural: _04Plurals, - organizations: _05Organizations + organizations: _05Organizations, + acronyms: _06Acronyms }; // var fallbacks = function fallbacks(doc, terms) { @@ -9323,7 +9355,9 @@ var fallbacks = function fallbacks(doc, terms) { } }); // turn 'Foo University' into an Org - step.organizations(terms, world); //are the nouns singular or plural? + step.organizations(terms, world); //turn 'FBD' into an acronym + + step.acronyms(terms, world); //are the nouns singular or plural? terms.forEach(function (t) { step.plural(t, doc.world); diff --git a/scratch.js b/scratch.js index 2281c39f0..2bfb14c08 100644 --- a/scratch.js +++ b/scratch.js @@ -1,7 +1,8 @@ const nlp = require('./src/index') +// const nlp = require('./') nlp.verbose(true) // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) // nlp('WE’RE NOT WORTHY!').debug() -nlp('fbi').debug() +nlp('contacted nbc').debug() diff --git a/tests/tagger/tagger.test.js b/tests/tagger/tagger.test.js index a322cbe76..6bf3877a8 100644 --- a/tests/tagger/tagger.test.js +++ b/tests/tagger/tagger.test.js @@ -110,7 +110,7 @@ test('pos-basic-tag:', function(t) { ['he blamed the girl', ['Pronoun', 'PastTense', 'Determiner', 'Singular']], ['his fine', ['Possessive', 'Noun']], // ['contracted AIDS', ['PastTense', 'Acronym']], - ['contacted nbc', ['PastTense', 'Acronym']], + // ['contacted nbc', ['PastTense', 'Acronym']], ['city/town', ['Noun', 'Noun']], ['boyfriend to Jane', ['Noun', 'Conjunction', 'Person']], // ['boyfriend of Jane', ['Noun', 'Conjunction', 'Person']],