de-compromise 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -263,7 +263,7 @@
263
263
 
264
264
  // aliases
265
265
  methods$l.get = methods$l.eq;
266
- var api$d = methods$l;
266
+ var api$f = methods$l;
267
267
 
268
268
  class View {
269
269
  constructor(document, pointer, groups = {}) {
@@ -388,10 +388,10 @@
388
388
  return m
389
389
  }
390
390
  }
391
- Object.assign(View.prototype, api$d);
391
+ Object.assign(View.prototype, api$f);
392
392
  var View$1 = View;
393
393
 
394
- var version$1 = '14.4.0';
394
+ var version$1 = '14.6.0';
395
395
 
396
396
  const isObject$6 = function (item) {
397
397
  return item && typeof item === 'object' && !Array.isArray(item)
@@ -426,6 +426,54 @@
426
426
  return model
427
427
  }
428
428
 
429
+ const addIrregulars = function (model, conj) {
430
+ let m = model.two.models || {};
431
+ Object.keys(conj).forEach(k => {
432
+ // verb forms
433
+ if (conj[k].pastTense) {
434
+ if (m.toPast) {
435
+ m.toPast.exceptions[k] = conj[k].pastTense;
436
+ }
437
+ if (m.fromPast) {
438
+ m.fromPast.exceptions[conj[k].pastTense] = k;
439
+ }
440
+ }
441
+ if (conj[k].presentTense) {
442
+ if (m.toPresent) {
443
+ m.toPresent.exceptions[k] = conj[k].presentTense;
444
+ }
445
+ if (m.fromPresent) {
446
+ m.fromPresent.exceptions[conj[k].presentTense] = k;
447
+ }
448
+ }
449
+ if (conj[k].gerund) {
450
+ if (m.toGerund) {
451
+ m.toGerund.exceptions[k] = conj[k].gerund;
452
+ }
453
+ if (m.fromGerund) {
454
+ m.fromGerund.exceptions[conj[k].gerund] = k;
455
+ }
456
+ }
457
+ // adjective forms
458
+ if (conj[k].comparative) {
459
+ if (m.toComparative) {
460
+ m.toComparative.exceptions[k] = conj[k].comparative;
461
+ }
462
+ if (m.fromComparative) {
463
+ m.fromComparative.exceptions[conj[k].comparative] = k;
464
+ }
465
+ }
466
+ if (conj[k].superlative) {
467
+ if (m.toSuperlative) {
468
+ m.toSuperlative.exceptions[k] = conj[k].superlative;
469
+ }
470
+ if (m.fromSuperlative) {
471
+ m.fromSuperlative.exceptions[conj[k].superlative] = k;
472
+ }
473
+ }
474
+ });
475
+ };
476
+
429
477
  const extend = function (plugin, world, View, nlp) {
430
478
  const { methods, model, compute, hooks } = world;
431
479
  if (plugin.methods) {
@@ -434,6 +482,9 @@
434
482
  if (plugin.model) {
435
483
  mergeDeep(model, plugin.model);
436
484
  }
485
+ if (plugin.irregulars) {
486
+ addIrregulars(model, plugin.irregulars);
487
+ }
437
488
  // shallow-merge compute
438
489
  if (plugin.compute) {
439
490
  Object.assign(compute, plugin.compute);
@@ -661,7 +712,7 @@
661
712
  const addAPI$3 = function (View) {
662
713
  Object.assign(View.prototype, methods$j);
663
714
  };
664
- var api$c = addAPI$3;
715
+ var api$e = addAPI$3;
665
716
 
666
717
  var compute$8 = {
667
718
  cache: function (view) {
@@ -670,7 +721,7 @@
670
721
  };
671
722
 
672
723
  var cache$1 = {
673
- api: api$c,
724
+ api: api$e,
674
725
  compute: compute$8,
675
726
  methods: methods$k,
676
727
  };
@@ -891,7 +942,7 @@
891
942
  // are we inserting inside a contraction?
892
943
  // expand it first
893
944
  const expand$2 = function (m) {
894
- if (m.has('@hasContraction')) {//&& m.after('^.').has('@hasContraction')
945
+ if (m.has('@hasContraction') && typeof m.contractions === 'function') {//&& m.after('^.').has('@hasContraction')
895
946
  let more = m.grow('@hasContraction');
896
947
  more.contractions().expand();
897
948
  }
@@ -916,7 +967,7 @@
916
967
  }
917
968
  //allow a view object
918
969
  if (typeof input === 'object' && input.isView) {
919
- return input.clone().docs[0] //assume one sentence
970
+ return input.clone().docs[0] || [] //assume one sentence
920
971
  }
921
972
  //allow an array of terms, too
922
973
  if (isArray$7(input)) {
@@ -937,6 +988,10 @@
937
988
  // add-in the words
938
989
  let home = document[n];
939
990
  let terms = getTerms(input, world);
991
+ // are we inserting nothing?
992
+ if (terms.length === 0) {
993
+ return
994
+ }
940
995
  terms = addIds$2(terms);
941
996
  if (prepend) {
942
997
  expand$2(view.update([ptr]).firstTerm());
@@ -1063,6 +1118,7 @@
1063
1118
  if (!m.found) {
1064
1119
  return this
1065
1120
  }
1121
+ this.soften();
1066
1122
  return m.replaceWith(input, keep)
1067
1123
  };
1068
1124
  var replace = fns$2;
@@ -1172,9 +1228,10 @@
1172
1228
  self = this;
1173
1229
  not = this.match(reg);
1174
1230
  }
1231
+ let isFull = !self.ptrs;
1175
1232
  // is it part of a contraction?
1176
- if (self.has('@hasContraction') && self.contractions) {
1177
- let more = self.grow('@hasContraction');
1233
+ if (not.has('@hasContraction') && not.contractions) {
1234
+ let more = not.grow('@hasContraction');
1178
1235
  more.contractions().expand();
1179
1236
  }
1180
1237
 
@@ -1185,11 +1242,14 @@
1185
1242
  // repair our pointers
1186
1243
  let gonePtrs = indexN(nots);
1187
1244
  ptrs = fixPointers$1(ptrs, gonePtrs);
1188
-
1189
1245
  // clean up our original inputs
1190
1246
  self.ptrs = ptrs;
1191
1247
  self.document = document;
1192
1248
  self.compute('index');
1249
+ // if we started zoomed-out, try to end zoomed-out
1250
+ if (isFull) {
1251
+ self.ptrs = undefined;
1252
+ }
1193
1253
  if (!reg) {
1194
1254
  this.ptrs = [];
1195
1255
  return self.none()
@@ -1540,7 +1600,7 @@
1540
1600
  const addAPI$2 = function (View) {
1541
1601
  Object.assign(View.prototype, methods$f);
1542
1602
  };
1543
- var api$b = addAPI$2;
1603
+ var api$d = addAPI$2;
1544
1604
 
1545
1605
  const compute$6 = {
1546
1606
  id: function (view) {
@@ -1557,7 +1617,7 @@
1557
1617
  var compute$7 = compute$6;
1558
1618
 
1559
1619
  var change = {
1560
- api: api$b,
1620
+ api: api$d,
1561
1621
  compute: compute$7,
1562
1622
  };
1563
1623
 
@@ -1787,7 +1847,7 @@
1787
1847
  };
1788
1848
  var numberRange$1 = numberRange;
1789
1849
 
1790
- const numUnit = /^([0-9.,+-]+)([a-z°²³µ/]+)$/i;
1850
+ const numUnit = /^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/; //(must be lowercase)
1791
1851
 
1792
1852
  const notUnit = new Set([
1793
1853
  'st',
@@ -1796,7 +1856,10 @@
1796
1856
  'th',
1797
1857
  'am',
1798
1858
  'pm',
1799
- 'max'
1859
+ 'max',
1860
+ '°',
1861
+ 's', // 1990s
1862
+ 'e' // 18e - french/spanish ordinal
1800
1863
  ]);
1801
1864
 
1802
1865
  const numberUnit = function (terms, i) {
@@ -2268,7 +2331,7 @@
2268
2331
  return Object.prototype.toString.call(val) === '[object Object]'
2269
2332
  };
2270
2333
 
2271
- function api$a (View) {
2334
+ function api$c (View) {
2272
2335
 
2273
2336
  /** find all matches in this document */
2274
2337
  View.prototype.lookup = function (input, opts = {}) {
@@ -2326,7 +2389,7 @@
2326
2389
  lib$4.compile = lib$4.buildTrie;
2327
2390
 
2328
2391
  var lookup = {
2329
- api: api$a,
2392
+ api: api$c,
2330
2393
  lib: lib$4
2331
2394
  };
2332
2395
 
@@ -2686,7 +2749,7 @@
2686
2749
  const matchAPI = function (View) {
2687
2750
  Object.assign(View.prototype, methods$c);
2688
2751
  };
2689
- var api$9 = matchAPI;
2752
+ var api$b = matchAPI;
2690
2753
 
2691
2754
  // match 'foo /yes/' and not 'foo/no/bar'
2692
2755
  const bySlashes = /(?:^|\s)([![^]*(?:<[^<]*>)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/;
@@ -2992,45 +3055,59 @@
2992
3055
  };
2993
3056
  var splitHyphens$2 = splitHyphens$1;
2994
3057
 
3058
+ // add all conjugations of this verb
2995
3059
  const addVerbs = function (token, world) {
2996
- let { verbConjugate } = world.methods.two.transform;
2997
- let res = verbConjugate(token.root, world.model);
2998
- delete res.FutureTense;
2999
- return Object.values(res).filter(str => str)
3060
+ let { all } = world.methods.two.transform.verb || {};
3061
+ let str = token.root;
3062
+ // if (toInfinitive) {
3063
+ // str = toInfinitive(str, world.model)
3064
+ // }
3065
+ if (!all) {
3066
+ return []
3067
+ }
3068
+ return all(str, world.model)
3000
3069
  };
3001
3070
 
3071
+ // add all inflections of this noun
3002
3072
  const addNoun = function (token, world) {
3003
- let { nounToPlural } = world.methods.two.transform;
3004
- let res = [token.root];
3005
- res.push(nounToPlural(token.root, world.model));
3006
- return res
3073
+ let { all } = world.methods.two.transform.noun || {};
3074
+ if (!all) {
3075
+ return [token.root]
3076
+ }
3077
+ return all(token.root, world.model)
3007
3078
  };
3008
3079
 
3080
+ // add all inflections of this adjective
3009
3081
  const addAdjective = function (token, world) {
3010
- let { adjToSuperlative, adjToComparative, adjToAdverb } = world.methods.two.transform;
3011
- let res = [token.root];
3012
- res.push(adjToSuperlative(token.root, world.model));
3013
- res.push(adjToComparative(token.root, world.model));
3014
- res.push(adjToAdverb(token.root, world.model));
3015
- return res
3082
+ let { all } = world.methods.two.transform.adjective || {};
3083
+ if (!all) {
3084
+ return [token.root]
3085
+ }
3086
+ return all(token.root, world.model)
3016
3087
  };
3017
3088
 
3018
3089
  // turn '{walk}' into 'walking', 'walked', etc
3019
3090
  const inflectRoot = function (regs, world) {
3020
3091
  // do we have compromise/two?
3021
- if (world.methods.two && world.methods.two.transform) {
3022
- regs = regs.map(token => {
3023
- // a reg to convert '{foo}'
3024
- if (token.root) {
3092
+ regs = regs.map(token => {
3093
+ // a reg to convert '{foo}'
3094
+ if (token.root) {
3095
+ // check if compromise/two is loaded
3096
+ if (world.methods.two && world.methods.two.transform) {
3025
3097
  let choices = [];
3026
- if (!token.pos || token.pos === 'Verb') {
3098
+ // have explicitly set from POS - '{sweet/adjective}'
3099
+ if (token.pos) {
3100
+ if (token.pos === 'Verb') {
3101
+ choices = choices.concat(addVerbs(token, world));
3102
+ } else if (token.pos === 'Noun') {
3103
+ choices = choices.concat(addNoun(token, world));
3104
+ } else if (token.pos === 'Adjective') {
3105
+ choices = choices.concat(addAdjective(token, world));
3106
+ }
3107
+ } else {
3108
+ // do verb/noun/adj by default
3027
3109
  choices = choices.concat(addVerbs(token, world));
3028
- }
3029
- if (!token.pos || token.pos === 'Noun') {
3030
3110
  choices = choices.concat(addNoun(token, world));
3031
- }
3032
- // don't run these by default
3033
- if (!token.pos || token.pos === 'Adjective') {
3034
3111
  choices = choices.concat(addAdjective(token, world));
3035
3112
  }
3036
3113
  choices = choices.filter(str => str);
@@ -3038,10 +3115,16 @@
3038
3115
  token.operator = 'or';
3039
3116
  token.fastOr = new Set(choices);
3040
3117
  }
3118
+ } else {
3119
+ // if no compromise/two, drop down into 'machine' lookup
3120
+ token.machine = token.root;
3121
+ delete token.id;
3122
+ delete token.root;
3041
3123
  }
3042
- return token
3043
- });
3044
- }
3124
+ }
3125
+ return token
3126
+ });
3127
+
3045
3128
  return regs
3046
3129
  };
3047
3130
  var inflectRoot$1 = inflectRoot;
@@ -3276,7 +3359,7 @@
3276
3359
  const endQuote = /([\u0022\uFF02\u0027\u201D\u2019\u00BB\u203A\u2032\u2033\u2034\u301E\u00B4])/;
3277
3360
 
3278
3361
  const hasHyphen$1 = /^[-–—]$/;
3279
- const hasDash$1 = / [-–—] /;
3362
+ const hasDash$1 = / [-–—]{1,3} /;
3280
3363
 
3281
3364
  /** search the term's 'post' punctuation */
3282
3365
  const hasPost = (term, punct) => term.post.indexOf(punct) !== -1;
@@ -3298,6 +3381,8 @@
3298
3381
  hasEllipses: term => hasPost(term, '..') || hasPost(term, '…') || hasPre(term, '..') || hasPre(term, '…'),
3299
3382
  /** is there a semicolon after term word? */
3300
3383
  hasSemicolon: term => hasPost(term, ';'),
3384
+ /** is there a colon after term word? */
3385
+ hasColon: term => hasPost(term, ':'),
3301
3386
  /** is there a slash '/' in term word? */
3302
3387
  hasSlash: term => /\//.test(term.text),
3303
3388
  /** a hyphen connects two words like-term */
@@ -3680,17 +3765,82 @@
3680
3765
  };
3681
3766
  var doAndBlock = andBlock;
3682
3767
 
3768
+ const negGreedy = function (state, reg, nextReg) {
3769
+ let skip = 0;
3770
+ for (let t = state.t; t < state.terms.length; t += 1) {
3771
+ let found = matchTerm(state.terms[t], reg, state.start_i + state.t, state.phrase_length);
3772
+ // we don't want a match, here
3773
+ if (found) {
3774
+ break//stop going
3775
+ }
3776
+ // are we doing 'greedy-to'?
3777
+ // - "!foo+ after" should stop at 'after'
3778
+ if (nextReg) {
3779
+ found = matchTerm(state.terms[t], nextReg, state.start_i + state.t, state.phrase_length);
3780
+ if (found) {
3781
+ break
3782
+ }
3783
+ }
3784
+ skip += 1;
3785
+ // is it max-length now?
3786
+ if (reg.max !== undefined && skip === reg.max) {
3787
+ break
3788
+ }
3789
+ }
3790
+ if (skip === 0) {
3791
+ return false //dead
3792
+ }
3793
+ // did we satisfy min for !foo{min,max}
3794
+ if (reg.min && reg.min > skip) {
3795
+ return false//dead
3796
+ }
3797
+ state.t += skip;
3798
+ // state.r += 1
3799
+ return true
3800
+ };
3801
+
3802
+ var negGreedy$1 = negGreedy;
3803
+
3683
3804
  // '!foo' should match anything that isn't 'foo'
3684
3805
  // if it matches, return false
3685
3806
  const doNegative = function (state) {
3686
3807
  const { regs } = state;
3687
3808
  let reg = regs[state.r];
3809
+
3810
+ // match *anything* but this term
3688
3811
  let tmpReg = Object.assign({}, reg);
3689
3812
  tmpReg.negative = false; // try removing it
3690
- let foundNeg = matchTerm(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length);
3691
- if (foundNeg === true) {
3692
- return null //bye!
3813
+
3814
+ // found it? if so, we die here
3815
+ let found = matchTerm(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length);
3816
+ if (found) {
3817
+ return false//bye
3818
+ }
3819
+ // should we skip the term too?
3820
+ if (reg.optional) {
3821
+ // "before after" - "before !foo? after"
3822
+ // does the next reg match the this term?
3823
+ let nextReg = regs[state.r + 1];
3824
+ if (nextReg) {
3825
+ let fNext = matchTerm(state.terms[state.t], nextReg, state.start_i + state.t, state.phrase_length);
3826
+ if (fNext) {
3827
+ state.r += 1;
3828
+ } else if (nextReg.optional && regs[state.r + 2]) {
3829
+ // ugh. ok,
3830
+ // support "!foo? extra? need"
3831
+ // but don't scan ahead more than that.
3832
+ let fNext2 = matchTerm(state.terms[state.t], regs[state.r + 2], state.start_i + state.t, state.phrase_length);
3833
+ if (fNext2) {
3834
+ state.r += 2;
3835
+ }
3836
+ }
3837
+ }
3693
3838
  }
3839
+ // negative greedy - !foo+ - super hard!
3840
+ if (reg.greedy) {
3841
+ return negGreedy$1(state, tmpReg, regs[state.r + 1])
3842
+ }
3843
+ state.t += 1;
3694
3844
  return true
3695
3845
  };
3696
3846
  var doNegative$1 = doNegative;
@@ -3822,6 +3972,7 @@
3822
3972
  * starting at this certain term.
3823
3973
  */
3824
3974
  const tryHere = function (terms, regs, start_i, phrase_length) {
3975
+ // console.log(`\n\n:start: '${terms[0].text}':`)
3825
3976
  if (terms.length === 0 || regs.length === 0) {
3826
3977
  return null
3827
3978
  }
@@ -3884,6 +4035,10 @@
3884
4035
  }
3885
4036
  // support '.' as any-single
3886
4037
  if (reg.anything === true) {
4038
+ // '!.' negative anything should insta-fail
4039
+ if (reg.negative && reg.anything) {
4040
+ return null
4041
+ }
3887
4042
  let alive = simpleMatch$1(state);
3888
4043
  if (!alive) {
3889
4044
  return null
@@ -3898,22 +4053,27 @@
3898
4053
  }
3899
4054
  continue
3900
4055
  }
3901
- // ok, finally test the term-reg
3902
- let hasMatch = matchTerm(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length);
3903
- if (hasMatch === true) {
3904
- let alive = simpleMatch$1(state);
4056
+ // ok, it doesn't match - but maybe it wasn't *supposed* to?
4057
+ if (reg.negative) {
4058
+ // we want *anything* but this term
4059
+ let alive = doNegative$1(state);
3905
4060
  if (!alive) {
3906
4061
  return null
3907
4062
  }
3908
4063
  continue
3909
4064
  }
3910
- // ok, it doesn't match - but maybe it wasn't *supposed* to?
3911
- if (reg.negative) {
3912
- let alive = doNegative$1(state);
4065
+ // ok, finally test the term-reg
4066
+ // console.log(' - ' + state.terms[state.t].text)
4067
+ let hasMatch = matchTerm(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length);
4068
+ if (hasMatch === true) {
4069
+ let alive = simpleMatch$1(state);
3913
4070
  if (!alive) {
3914
4071
  return null
3915
4072
  }
4073
+ continue
3916
4074
  }
4075
+ // console.log('=-=-=-= here -=-=-=-')
4076
+
3917
4077
  //ok who cares, keep going
3918
4078
  if (reg.optional === true) {
3919
4079
  continue
@@ -4078,7 +4238,7 @@
4078
4238
  };
4079
4239
 
4080
4240
  var match = {
4081
- api: api$9,
4241
+ api: api$b,
4082
4242
  methods: methods$a,
4083
4243
  lib: lib$3,
4084
4244
  };
@@ -4768,7 +4928,7 @@
4768
4928
  if (fmt && typeof fmt === 'string' && fmts$1.hasOwnProperty(fmt)) {
4769
4929
  opts = Object.assign({}, fmts$1[fmt]);
4770
4930
  } else if (fmt && isObject$1(fmt)) {
4771
- opts = Object.assign({}, fmt, opts);//todo: fixme
4931
+ opts = Object.assign({}, opts, fmt);//todo: fixme
4772
4932
  }
4773
4933
  if (this.pointer) {
4774
4934
  opts.keepSpace = false;
@@ -4790,10 +4950,10 @@
4790
4950
  const addAPI$1 = function (View) {
4791
4951
  Object.assign(View.prototype, methods$6);
4792
4952
  };
4793
- var api$8 = addAPI$1;
4953
+ var api$a = addAPI$1;
4794
4954
 
4795
4955
  var output = {
4796
- api: api$8,
4956
+ api: api$a,
4797
4957
  methods: {
4798
4958
  one: {
4799
4959
  hash: md5
@@ -4929,7 +5089,7 @@
4929
5089
 
4930
5090
  var splitAll$1 = splitAll;
4931
5091
 
4932
- const max$1 = 4;
5092
+ const max$1 = 20;
4933
5093
 
4934
5094
  // sweep-around looking for our start term uuid
4935
5095
  const blindSweep = function (id, doc, n) {
@@ -5205,11 +5365,11 @@
5205
5365
  // add set/intersection/union
5206
5366
  Object.assign(View.prototype, methods$4);
5207
5367
  };
5208
- var api$7 = addAPI;
5368
+ var api$9 = addAPI;
5209
5369
 
5210
5370
  var pointers = {
5211
5371
  methods: methods$5,
5212
- api: api$7,
5372
+ api: api$9,
5213
5373
  };
5214
5374
 
5215
5375
  var lib$2 = {
@@ -5222,7 +5382,7 @@
5222
5382
  }
5223
5383
  };
5224
5384
 
5225
- const api$5 = function (View) {
5385
+ const api$7 = function (View) {
5226
5386
 
5227
5387
  /** speedy match a sequence of matches */
5228
5388
  View.prototype.sweep = function (net, opts = {}) {
@@ -5266,7 +5426,7 @@
5266
5426
  };
5267
5427
 
5268
5428
  };
5269
- var api$6 = api$5;
5429
+ var api$8 = api$7;
5270
5430
 
5271
5431
  // extract the clear needs for an individual match token
5272
5432
  const getTokenNeeds = function (reg) {
@@ -5426,7 +5586,7 @@
5426
5586
  });
5427
5587
  // ensure nothing matches in our 'ifNo' property
5428
5588
  list = list.filter(obj => {
5429
- if (obj.ifNo !== undefined && obj.ifNo.some(no => docCache[n].has(no)) === true) {
5589
+ if (obj.ifNo !== undefined && obj.ifNo.some(no => haves.has(no)) === true) {
5430
5590
  return false
5431
5591
  }
5432
5592
  return true
@@ -5447,7 +5607,7 @@
5447
5607
 
5448
5608
  // finally,
5449
5609
  // actually run these match-statements on the terms
5450
- const runMatch = function (maybeList, document, methods, opts) {
5610
+ const runMatch = function (maybeList, document, docCache, methods, opts) {
5451
5611
  let results = [];
5452
5612
  for (let n = 0; n < maybeList.length; n += 1) {
5453
5613
  for (let i = 0; i < maybeList[n].length; i += 1) {
@@ -5456,9 +5616,23 @@
5456
5616
  let res = methods.one.match([document[n]], m);
5457
5617
  // found something.
5458
5618
  if (res.ptrs.length > 0) {
5459
- // let index=document[n][0].index
5460
5619
  res.ptrs.forEach(ptr => {
5461
5620
  ptr[0] = n; // fix the sentence pointer
5621
+ // check ifNo
5622
+ // if (m.ifNo !== undefined) {
5623
+ // let terms = document[n].slice(ptr[1], ptr[2])
5624
+ // for (let k = 0; k < m.ifNo.length; k += 1) {
5625
+ // const no = m.ifNo[k]
5626
+ // // quick-check cache
5627
+ // if (docCache[n].has(no)) {
5628
+ // // console.log(no)
5629
+ // if (terms.find(t => t.normal === no || t.tags.has(no))) {
5630
+ // // console.log('+' + no)
5631
+ // return
5632
+ // }
5633
+ // }
5634
+ // }
5635
+ // }
5462
5636
  let todo = Object.assign({}, m, { pointer: ptr });
5463
5637
  if (m.unTag !== undefined) {
5464
5638
  todo.unTag = m.unTag;
@@ -5500,16 +5674,8 @@
5500
5674
  // if we don't have enough words
5501
5675
  maybeList = tooSmall(maybeList, document);
5502
5676
 
5503
- // maybeList.forEach((arr, i) => {
5504
- // let txt = document[i].map(t => t.text).join(' ')
5505
- // console.log(`==== ${txt} ====`)
5506
- // arr.forEach(m => {
5507
- // console.log(` - ${m.match}`)
5508
- // })
5509
- // })
5510
-
5511
5677
  // now actually run the matches
5512
- let results = runMatch$1(maybeList, document, methods, opts);
5678
+ let results = runMatch$1(maybeList, document, docCache, methods, opts);
5513
5679
  // console.dir(results, { depth: 5 })
5514
5680
  return results
5515
5681
  };
@@ -5537,6 +5703,7 @@
5537
5703
  const tagger$3 = function (list, document, world) {
5538
5704
  const { model, methods } = world;
5539
5705
  const { getDoc, setTag, unTag } = methods.one;
5706
+ const looksPlural = methods.two.looksPlural;
5540
5707
  if (list.length === 0) {
5541
5708
  return list
5542
5709
  }
@@ -5565,9 +5732,12 @@
5565
5732
  if (todo.tag !== undefined) {
5566
5733
  setTag(terms, todo.tag, world, todo.safe, `[post] '${reason}'`);
5567
5734
  // quick and dirty plural tagger
5568
- if (terms.length === 1 && todo.tag === 'Noun') {
5569
- if (terms[0].text && terms[0].text.match(/..s$/) !== null) {
5570
- setTag(terms, 'Plural', world, todo.safe, 'quick-plural');
5735
+ if (todo.tag === 'Noun') {
5736
+ let term = terms[terms.length - 1];
5737
+ if (looksPlural(term.text)) {
5738
+ setTag([term], 'Plural', world, todo.safe, 'quick-plural');
5739
+ } else {
5740
+ setTag([term], 'Singular', world, todo.safe, 'quick-singular');
5571
5741
  }
5572
5742
  }
5573
5743
  }
@@ -5590,7 +5760,7 @@
5590
5760
 
5591
5761
  var sweep = {
5592
5762
  lib: lib$2,
5593
- api: api$6,
5763
+ api: api$8,
5594
5764
  methods: {
5595
5765
  one: methods$3,
5596
5766
  }
@@ -5691,6 +5861,10 @@
5691
5861
  tag.forEach(tg => setTag(terms, tg, world, isSafe));
5692
5862
  return
5693
5863
  }
5864
+ if (typeof tag !== 'string') {
5865
+ console.warn(`compromise: Invalid tag '${tag}'`);// eslint-disable-line
5866
+ return
5867
+ }
5694
5868
  tag = tag.trim();
5695
5869
  // support '#Noun . #Adjective' syntax
5696
5870
  if (isMulti.test(tag)) {
@@ -5980,7 +6154,7 @@
5980
6154
  const tagAPI = function (View) {
5981
6155
  Object.assign(View.prototype, tag$1);
5982
6156
  };
5983
- var api$4 = tagAPI;
6157
+ var api$6 = tagAPI;
5984
6158
 
5985
6159
  // wire-up more pos-tags to our model
5986
6160
  const addTags = function (tags) {
@@ -6034,12 +6208,16 @@
6034
6208
  tagRank: tagRank$1
6035
6209
  },
6036
6210
  methods: methods$2,
6037
- api: api$4,
6211
+ api: api$6,
6038
6212
  lib: lib$1
6039
6213
  };
6040
6214
 
6041
- const initSplit = /(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s|$)/g; //!TODO: speedup this regex
6215
+ // split by periods, question marks, unicode ⁇, etc
6216
+ const initSplit = /([.!?\u203D\u2E18\u203C\u2047-\u2049]+\s)/g;
6217
+ // merge these back into prev sentence
6218
+ const splitsOnly = /^[.!?\u203D\u2E18\u203C\u2047-\u2049]+\s$/;
6042
6219
  const newLine = /((?:\r?\n|\r)+)/; // Match different new-line formats
6220
+
6043
6221
  // Start with a regex:
6044
6222
  const basicSplit = function (text) {
6045
6223
  let all = [];
@@ -6049,7 +6227,14 @@
6049
6227
  //split by period, question-mark, and exclamation-mark
6050
6228
  let arr = lines[i].split(initSplit);
6051
6229
  for (let o = 0; o < arr.length; o++) {
6052
- all.push(arr[o]);
6230
+ // merge 'foo' + '.'
6231
+ if (arr[o + 1] && splitsOnly.test(arr[o + 1]) === true) {
6232
+ arr[o] += arr[o + 1];
6233
+ arr[o + 1] = '';
6234
+ }
6235
+ if (arr[o] !== '') {
6236
+ all.push(arr[o]);
6237
+ }
6053
6238
  }
6054
6239
  }
6055
6240
  return all
@@ -6106,6 +6291,114 @@
6106
6291
  };
6107
6292
  var smartMerge$1 = smartMerge;
6108
6293
 
6294
+ // merge embedded quotes into 1 sentence
6295
+ // like - 'he said "no!" and left.'
6296
+ const MAX_QUOTE = 280;// ¯\_(ツ)_/¯
6297
+
6298
+ // don't support single-quotes for multi-sentences
6299
+ const pairs = {
6300
+ '\u0022': '\u0022', // 'StraightDoubleQuotes'
6301
+ '\uFF02': '\uFF02', // 'StraightDoubleQuotesWide'
6302
+ // '\u0027': '\u0027', // 'StraightSingleQuotes'
6303
+ '\u201C': '\u201D', // 'CommaDoubleQuotes'
6304
+ // '\u2018': '\u2019', // 'CommaSingleQuotes'
6305
+ '\u201F': '\u201D', // 'CurlyDoubleQuotesReversed'
6306
+ // '\u201B': '\u2019', // 'CurlySingleQuotesReversed'
6307
+ '\u201E': '\u201D', // 'LowCurlyDoubleQuotes'
6308
+ '\u2E42': '\u201D', // 'LowCurlyDoubleQuotesReversed'
6309
+ '\u201A': '\u2019', // 'LowCurlySingleQuotes'
6310
+ '\u00AB': '\u00BB', // 'AngleDoubleQuotes'
6311
+ '\u2039': '\u203A', // 'AngleSingleQuotes'
6312
+ '\u2035': '\u2032', // 'PrimeSingleQuotes'
6313
+ '\u2036': '\u2033', // 'PrimeDoubleQuotes'
6314
+ '\u2037': '\u2034', // 'PrimeTripleQuotes'
6315
+ '\u301D': '\u301E', // 'PrimeDoubleQuotes'
6316
+ // '\u0060': '\u00B4', // 'PrimeSingleQuotes'
6317
+ '\u301F': '\u301E', // 'LowPrimeDoubleQuotesReversed'
6318
+ };
6319
+ const openQuote = RegExp('(' + Object.keys(pairs).join('|') + ')', 'g');
6320
+ const closeQuote = RegExp('(' + Object.values(pairs).join('|') + ')', 'g');
6321
+
6322
+ const closesQuote = function (str) {
6323
+ if (!str) {
6324
+ return false
6325
+ }
6326
+ let m = str.match(closeQuote);
6327
+ if (m !== null && m.length === 1) {
6328
+ return true
6329
+ }
6330
+ return false
6331
+ };
6332
+
6333
+ // allow micro-sentences when inside a quotation, like:
6334
+ // the doc said "no sir. i will not beg" and walked away.
6335
+ const quoteMerge = function (splits) {
6336
+ let arr = [];
6337
+ for (let i = 0; i < splits.length; i += 1) {
6338
+ let split = splits[i];
6339
+ // do we have an open-quote and not a closed one?
6340
+ let m = split.match(openQuote);
6341
+ if (m !== null && m.length === 1) {
6342
+
6343
+ // look at the next sentence for a closing quote,
6344
+ if (closesQuote(splits[i + 1]) && splits[i + 1].length < MAX_QUOTE) {
6345
+ splits[i] += splits[i + 1];// merge them
6346
+ arr.push(splits[i]);
6347
+ splits[i + 1] = '';
6348
+ i += 1;
6349
+ continue
6350
+ }
6351
+ // look at n+2 for a closing quote,
6352
+ if (closesQuote(splits[i + 2])) {
6353
+ let toAdd = splits[i + 1] + splits[i + 2];// merge them all
6354
+ //make sure it's not too-long
6355
+ if (toAdd.length < MAX_QUOTE) {
6356
+ splits[i] += toAdd;
6357
+ arr.push(splits[i]);
6358
+ splits[i + 1] = '';
6359
+ splits[i + 2] = '';
6360
+ i += 2;
6361
+ continue
6362
+ }
6363
+ }
6364
+ }
6365
+ arr.push(splits[i]);
6366
+ }
6367
+ return arr
6368
+ };
6369
+ var quoteMerge$1 = quoteMerge;
6370
+
6371
+ const MAX_LEN = 250;// ¯\_(ツ)_/¯
6372
+
6373
+ // support unicode variants?
6374
+ // https://stackoverflow.com/questions/13535172/list-of-all-unicodes-open-close-brackets
6375
+ const hasOpen = /\(/g;
6376
+ const hasClosed = /\)/g;
6377
+ const mergeParens = function (splits) {
6378
+ let arr = [];
6379
+ for (let i = 0; i < splits.length; i += 1) {
6380
+ let split = splits[i];
6381
+ let m = split.match(hasOpen);
6382
+ if (m !== null && m.length === 1) {
6383
+ // look at next sentence, for closing parenthesis
6384
+ if (splits[i + 1] && splits[i + 1].length < MAX_LEN) {
6385
+ let m2 = splits[i + 1].match(hasClosed);
6386
+ if (m2 !== null && m.length === 1 && !hasOpen.test(splits[i + 1])) {
6387
+ // merge in 2nd sentence
6388
+ splits[i] += splits[i + 1];
6389
+ arr.push(splits[i]);
6390
+ splits[i + 1] = '';
6391
+ i += 1;
6392
+ continue
6393
+ }
6394
+ }
6395
+ }
6396
+ arr.push(splits[i]);
6397
+ }
6398
+ return arr
6399
+ };
6400
+ var parensMerge = mergeParens;
6401
+
6109
6402
  //(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.
6110
6403
  // Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.
6111
6404
  //regs-
@@ -6124,9 +6417,13 @@
6124
6417
  // First do a greedy-split..
6125
6418
  let splits = simpleSplit(text);
6126
6419
  // Filter-out the crap ones
6127
- let chunks = simpleMerge(splits);
6420
+ let sentences = simpleMerge(splits);
6128
6421
  //detection of non-sentence chunks:
6129
- let sentences = smartMerge$1(chunks, world);
6422
+ sentences = smartMerge$1(sentences, world);
6423
+ // allow 'he said "no sir." and left.'
6424
+ sentences = quoteMerge$1(sentences);
6425
+ // allow 'i thought (no way!) and left.'
6426
+ sentences = parensMerge(sentences);
6130
6427
  //if we never got a sentence, return the given text
6131
6428
  if (sentences.length === 0) {
6132
6429
  return [text]
@@ -6226,7 +6523,7 @@
6226
6523
  const isBoundary = /^[!?.]+$/;
6227
6524
  const naiiveSplit = /(\S+)/;
6228
6525
 
6229
- let notWord = ['.', '?', '!', ':', ';', '-', '–', '—', '--', '...', '(', ')', '[', ']', '"', "'", '`'];
6526
+ let notWord = ['.', '?', '!', ':', ';', '-', '–', '—', '--', '...', '(', ')', '[', ']', '"', "'", '`', '«', '»', '*'];
6230
6527
  notWord = notWord.reduce((h, c) => {
6231
6528
  h[c] = true;
6232
6529
  return h
@@ -6292,38 +6589,66 @@
6292
6589
  };
6293
6590
  var splitTerms = splitWords;
6294
6591
 
6592
+ const allowBefore = [
6593
+ '#', //#hastag
6594
+ '@', //@atmention
6595
+ '_',//underscore
6596
+ // '\\-',//-4 (escape)
6597
+ '+',//+4
6598
+ '.',//.4
6599
+ ];
6600
+ const allowAfter = [
6601
+ '%',//88%
6602
+ '_',//underscore
6603
+ '°',//degrees, italian ordinal
6604
+ // '\'',// \u0027
6605
+ ];
6606
+
6295
6607
  //all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation
6608
+ let beforeReg = new RegExp(`[${allowBefore.join('')}]+$`, '');
6609
+ let afterReg = new RegExp(`^[${allowAfter.join('')}]+`, '');
6610
+
6296
6611
  //we have slightly different rules for start/end - like #hashtags.
6297
- const startings =
6298
- /^[ \n\t.[\](){}⟨⟩:,،、‒–—―…!‹›«»‐\-?‘’;/⁄·&*•^†‡¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022\uFF02\u0027\u201C\u201F\u201B\u201E\u2E42\u201A\u2035\u2036\u2037\u301D\u0060\u301F]+/;
6299
- const endings =
6300
- /[ \n\t.'[\](){}⟨⟩:,،、‒–—―…!‹›«»‐\-?‘’;/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022\uFF02\u201D\u00B4\u301E]+$/;
6612
+ const endings = /[\p{Punctuation}\s]+$/u;
6613
+ const startings = /^[\p{Punctuation}\s]+/u;
6301
6614
  const hasApostrophe$1 = /['’]/;
6302
6615
  const hasAcronym = /^[a-z]\.([a-z]\.)+/i;
6303
- const minusNumber = /^[-+.][0-9]/;
6304
6616
  const shortYear = /^'[0-9]{2}/;
6617
+ const isNumber = /^-[0-9]/;
6305
6618
 
6306
6619
  const normalizePunctuation = function (str) {
6307
6620
  let original = str;
6308
6621
  let pre = '';
6309
6622
  let post = '';
6310
- // number cleanups
6623
+ // adhoc cleanup for pre
6311
6624
  str = str.replace(startings, found => {
6312
- pre = found;
6313
- // support '-40'
6314
- if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {
6315
- pre = '';
6316
- return found
6625
+ // punctuation symboles like '@' to allow at start of term
6626
+ let m = found.match(beforeReg);
6627
+ if (m) {
6628
+ pre = found.replace(beforeReg, '');
6629
+ return m
6317
6630
  }
6318
6631
  // support years like '97
6319
6632
  if (pre === `'` && shortYear.test(str)) {
6320
6633
  pre = '';
6321
6634
  return found
6322
6635
  }
6636
+ // support prefix negative signs like '-45'
6637
+ if (found === '-' && isNumber.test(str)) {
6638
+ return found
6639
+ }
6640
+ pre = found; //keep it
6323
6641
  return ''
6324
6642
  });
6643
+ // ad-hoc cleanup for post
6325
6644
  str = str.replace(endings, found => {
6326
- post = found;
6645
+ // punctuation symboles like '@' to allow at start of term
6646
+ let m = found.match(afterReg);
6647
+ if (m) {
6648
+ post = found.replace(afterReg, '');
6649
+ return m
6650
+ }
6651
+
6327
6652
  // keep s-apostrophe - "flanders'" or "chillin'"
6328
6653
  if (hasApostrophe$1.test(found) && /[sn]['’]$/.test(original) && hasApostrophe$1.test(pre) === false) {
6329
6654
  post = post.replace(hasApostrophe$1, '');
@@ -6331,9 +6656,10 @@
6331
6656
  }
6332
6657
  //keep end-period in acronym
6333
6658
  if (hasAcronym.test(str) === true) {
6334
- post = post.replace(/\./, '');
6659
+ post = found.replace(/^\./, '');
6335
6660
  return '.'
6336
6661
  }
6662
+ post = found;//keep it
6337
6663
  return ''
6338
6664
  });
6339
6665
  //we went too far..
@@ -6477,9 +6803,10 @@
6477
6803
  };
6478
6804
  var fromString = parse$1;
6479
6805
 
6480
- const isAcronym$2 = /[ .][A-Z]\.? *$/i;
6481
- const hasEllipse$1 = /(?:\u2026|\.{2,}) *$/;
6806
+ const isAcronym$2 = /[ .][A-Z]\.? *$/i; //asci - 'n.s.a.'
6807
+ const hasEllipse$1 = /(?:\u2026|\.{2,}) *$/; // '...'
6482
6808
  const hasLetter$1 = /\p{L}/u;
6809
+ const leadInit = /^[A-Z]\. $/; // "W. Kensington"
6483
6810
 
6484
6811
  /** does this look like a sentence? */
6485
6812
  const isSentence$2 = function (str, abbrevs) {
@@ -6491,6 +6818,10 @@
6491
6818
  if (isAcronym$2.test(str) === true) {
6492
6819
  return false
6493
6820
  }
6821
+ // check for leading initial - "W. Kensington"
6822
+ if (str.length === 3 && leadInit.test(str)) {
6823
+ return false
6824
+ }
6494
6825
  //check for '...'
6495
6826
  if (hasEllipse$1.test(str) === true) {
6496
6827
  return false
@@ -6609,7 +6940,6 @@
6609
6940
  'lt',
6610
6941
  'maj',
6611
6942
  'messrs',
6612
- 'mister',
6613
6943
  'mlle',
6614
6944
  'mme',
6615
6945
  'mr',
@@ -6630,7 +6960,7 @@
6630
6960
  'sir',
6631
6961
  'sr',
6632
6962
  'supt',
6633
- 'surg',
6963
+ 'surg'
6634
6964
  //miss
6635
6965
  //misses
6636
6966
  ];
@@ -7121,10 +7451,10 @@
7121
7451
  return this
7122
7452
  };
7123
7453
 
7124
- const api$2 = function (View) {
7454
+ const api$4 = function (View) {
7125
7455
  View.prototype.autoFill = autoFill;
7126
7456
  };
7127
- var api$3 = api$2;
7457
+ var api$5 = api$4;
7128
7458
 
7129
7459
  // generate all the possible prefixes up-front
7130
7460
  const getPrefixes = function (arr, opts, world) {
@@ -7206,7 +7536,7 @@
7206
7536
  };
7207
7537
  var typeahead = {
7208
7538
  model: model$2,
7209
- api: api$3,
7539
+ api: api$5,
7210
7540
  lib,
7211
7541
  compute: compute$1,
7212
7542
  hooks: ['typeahead']
@@ -7365,15 +7695,16 @@
7365
7695
  };
7366
7696
  var reverse$1 = reverse;
7367
7697
 
7368
- // generated in ./learn/tiger/conjugate
7369
7698
  var presentModel = {
7370
- rules: '.5t¦aLbKcHeDfindRgreChaftRiBleiMn9o8r6s4t3u2we1ä0ü0;mmN;ndPrtP;ldGndL;attNeuKriL;peisMt0;ellLi4rebL;eiFs0teilK;etzJt7;niGppE;giFko0st5tiF;mmG;cEndCsiDtiD;ifEnzE;i2r0st1;g0iA;ehB;g7n2;h0ki7;aff8t0;ig7;leib6ring6;c4gi3mm2nd1us0;ch4;eln;ern;er1;ht0;en|.6t¦chaft2eu1hneid2mitteln,r0steuern;a0echn1i0;cht0;en|.2ifft¦treffen|.2icht¦brechen|.2immt¦nnehmen|.4le¦wickeln|.4t¦aVcSdPeLgiKharrYinJkIlFmEnCppeUr9s6t3us7w2z0ündY;ahlXeugXie0;hWlW;eisVirkV;e1i0s3;erTmmT;ilSllS;etzRiDorgRseQte1u0;chQ;hPln;e1gehOi0üH;erNngN;ckMdMifMnnM;de0geKi7;ln,rn;i5meF;angIeibIi0;e0ngH;gGrG;ehrFi1ommF;dEigE;erD;g2i1ndCrtCu0;eAtB;chAdAtA;e5n9;e1ie0;n7r7;ck6;h0ke1;au4e0n4;ln;ft2tt2u0;ch1e0;rn;en|wirbt¦werben|rifft¦reffen|hilft¦helfen|läuft¦laufen|fängt¦fangen|richt¦rechen|.5¦denken|nimmt¦nehmen|.2ßt¦passen|.2itt¦treten|gibt¦geben|.3t¦aNbeMdLeHfGgEhCiAkeMl9ndQo8peMr7s5t3u1ze6ße2ährQöpfQü0;ckPhrPtP;chOe0tO;rn;e0igMtM;hLrn;agKchKe0;ln;dIeuItIufI;mmHtzH;dGegGigG;chFe0mmFn7;gEhElEnErE;auDe0örD;bCrn;e0nB;hAln,rn;e5t9;ck8d8h2i1n0rr8tz8ug8;g7k7n7;b6f6h6l6n6s6ß6;l5n5r5;e0ig4;ln,rn;c1ff2h0mm2nk2rr2ub2;l1n1;h0k0;en|ilft¦elfen|sieht¦sehen|immt¦ehmen|ißt¦issen|ritt¦reten|.4¦ützen|.2t¦a8ch9e7ff9h6i5ll9mm9n4o3pf9r2tz9u1äg9ö0üh9;r8s8;b7g7;g6k6n6r6;b5l5;g4k4n4z4;g3l3n3;l2r2;g1r1u1;n0r0u0;en|gt¦gen|lt¦len|ut¦u0;en,n|xt¦xen|zt¦zen|ßt¦ßen|t¦en',
7371
- exceptions: 'gilt¦gelten|hält¦halten|.8¦aJbeimessUeCfestlegUgefährdUherrüBmiAnachgFpläd9schrOt8v1z0;erse5usP;er0orE;büEdienRfa8helfRl2meidRs1tretRze0;ihQrrQ;pürPtoßPuO;a1e0;tzN;ngMufM;ang0end0;ierK;tteilJßaG;hrI;in5mp3nt0;s0wertG;innFt0;ehE;fi0;ndC;h3planB;b8n5u0;f2s0;blut8h0saug8weit8;alt7;d0werf6;eck5;ri1s0treff4;chau3;cht2;stamm1wei0;ch0;en|.7¦a8b3er2gesellEhingebErut1s0täu1vorsBzulD;chuldDprengDtrotzD;schC;blühBkaufBnä3zeugB;e0illigA;dank9gegn9harr9ke2r0st6wein9;aub8ü0;hr7;hr6nn6;ddier5n3u0;f0slös4;g0hör3;eh2;bahn1halt1p0weis1;ass0;en|.4ät¦ent0ver0;raten|weiߦwissen|fällt¦fallen|.6¦a9b4ergBg2möchtEr1s0trinkEumg8zusagE;chämDpeisDtr7;auchCechnC;e0renzB;hörAlobA;e1re0;ch8nn8;g1h0;eb6üt6;eb5;b2n0;g0leg3r2;eh2;lös1r0;uf0;en|läßt¦lassen|.4ällt¦au2e1miß3v0z0;er2;in1nt1;f0s0;fallen|.4¦e1r0seh2töt2werd2;ed1uh1;bn0ss0;en|.5¦b8dehnBfü7ha6kaufBl5mü6prägBrü4s3t2w1z0;a6ehrAielA;erb9irk9;arn8rag8;org7par7;ck6hr6;aut5e4ieb5;ss4;hl3;a1e0;rg1ut1;ck0;en|rät¦raten|.9¦aAb6darstellBe4fe3gebrau2ignor7offenlegBrauskommBuntersagBver0überwa2;bleibAste0zi8;ck9ll9;ch8;rnhalt7ststeh7;n0rschöpf6xist2;gag1tfremd5;e1lock0;ier3;oba0schaff2tra0;cht1;nschick0ufbring0;en|.5ieht¦geschehen|.7t¦an9be8e4f2ge9heiratAs1tr0;ill5ockn9;chalt8pötteln;lü0ür0;cht6;nt2r0;inn0öffn4;ern;pupp2zwei2;last1scher1;biet0;en|.4ägt¦betr0schl0;agen|.10¦aBbevor9d7e4hinzu6offen9profitCrekl8unter3v0;er0orankommC;anlassBbrau0glei0schiebB;chA;halt9lieg9;in0rniedrig8xpand7;be0schlag7;zi3;iff0urchlauf5;am3;st0;eh2;bschneid1ppell0;ier0;en|.4ag¦vermögen|.5t¦auf8biet7ernt7g5ha4ko4l3ordn7pu4t1w0ähn2öffn7;alt6eh7idm6;a2e2it0r4;eln;a0i0;st2;enüg1l0;imm0;en;tun|.3ät¦b0g0;eraten|.8t¦au6behaup7ent4gest5sch3ver0;b1m1w0;al5üs5;ie4;immern,ütteln;f0las2;al1;flis0srüs0;ten|führen¦fahren|.4ält¦auf0ent0ver0;halten|.4ßt¦be0er0um0;fassen|.9t¦be1durchquer2ver0;markt1tröst1;fürcht0inhalt0;en|.4te¦freuen|.11¦autoris7be5gleichkomm8komm4präs4registr7unterdrück8v1zurück0;tret7zi5;ers0orbeifahr6;ch0treich5;ling4melz4wend4;ent2;einfluss2kanntgeb2reitst0;eh1;ier0;en|wirft¦werfen|.4icht¦verfechten|.4iehlt¦empfehlen|.7ägt¦au0ver1;f0s0;schlagen|.12¦be3durch2entschuld4kollabor1rechtfert4s0wiedertreff5zusammengeh5;icherstell4tabilis0;ier3;leucht2schlag2;absicht0schleun0;ig0;en|.13¦e0zurückerhalt2übereinstimm2;ntgegen0rwirtschaft1;nehm0steh0;en|.2ßt¦fa0kü0;ssen|.15¦aufrechterhalt0entgegenschlag0;en|.4t¦atm0bad0nütz0wat0;en|.5ält¦festhalten|Melden¦melden|Erteilt¦erteilen|.6ält¦durch0offen0vorbe0;halten|.5ägt¦bei1h0mit1v0;er0;tragen|Greift¦greifen|.3ält¦be0er0;halten|.6st¦anfleh1betteln,sch0wimmern;ick0rei0;en|Weißt¦weißen|Spürst¦spüren|.9ält¦gefangenhalten|.6t¦brü3ermüd4ge1innehab4kundtun,lei3s0wick2;chad3palt3;denk2iß0;eln;st0;en|wächst¦wachsen|.2ößt¦stoßen|.4ißt¦vergessen|.6te¦fertigen|.11t¦veranstalten|.3te¦fax0kos0;en|.4äßt¦aus0ent0ver0;lassen|liest¦lesen|.6ägt¦umschl0übertr0;agen|.3ällt¦ab0ge0um0;fallen|Tauschen¦tauschen|.3arf¦bedürfen|.2äbt¦graben|.3ährt¦an0er0;fahren|.10t¦mit0unterordn1ver0;schwimm0;en|.4illt¦schwellen|.14¦gegenüberstehen|.6irft¦unterwerfen|.4irft¦ent0ver0;werfen|.4irfst¦vorwerfen|.2äst¦blasen|Tagt¦tagen|.4irgt¦verbergen|.4äft¦schlafen|.2hlt¦malen|Gestatten¦gestatten|.5äßt¦überlassen|.6ällt¦unterfallen|.9ächst¦zusammenwachsen|Blüht¦blühen|mißt¦messen|.4ädt¦e0;in0nt0;laden|.3ißt¦zumessen|.3äßt¦belassen|.3ßt¦pressen|.7äßt¦h0;erein0inter0;lassen|.3irft¦abwerfen|.2dtschlägt¦totschlagen|Berücksichtigen¦berücksichtigen|.3ächst¦erwachsen|wäscht¦waschen|Offeriert¦offerieren|.8ßt¦bezuschussen|.3iehlt¦befehlen|.3gen¦folen|.2irbt¦sterben|.4ährt¦entfahren|.2icht¦stechen|.6ßt¦verblassen|.5ißt¦zerfressen|.7ält¦bereithalten|.7äft¦verschlafen|.6äßt¦unterlassen|lädt¦laden|.4ächst¦auswachsen|.4ingen¦auffangen|.2ißt¦fressen|.9ägt¦unterschlagen|.5irbt¦aussterben|.4irbt¦erst0verd0;erben|.7ällt¦hereinfallen|Telefoniert¦telefonieren|.2illt¦quellen|.10ßt¦zusammenfassen|.14t¦zurückvermieten|Bereinigt¦bereinigen|.3iert¦gebären|.5te¦schoten|.4ilzt¦schmelzen|.3äscht¦abwaschen|.5ällt¦überfallen|Wetten¦wetten|.8e¦be0;hi0wu0;ndern|.6e¦hung1koppeln,steu1w0;and0eig0;ern|.5e¦lagern,regeln|.7e¦annäh0bedau0;ern|.7le¦verhandeln|.4le¦wandeln|.9e¦verbessern|Feiert¦feiern|.13t¦herunterleiern|.12e¦verschlimmern|.2t¦tun'
7699
+ rules: 'elten|ilt,erraten|3ät,ädieren|6,schehen|3ieht,ermögen|3ag,mgeben|5,hlaufen|6,usagen|5,ufgehen|6,rblühen|6,fechten|1icht,prengen|6,pfehlen|2iehlt,rtreten|6,eunigen|6,etragen|3ägt,egegnen|6,rstoßen|6,itragen|3ägt,ntgeben|6,fährden|6,orsehen|6,ufhören|6,chreien|5st,etteln|5st,nflehen|5st,osen|2te,esen|iest,tteilen|6,uziehen|6,rinken|5,egeben|5,rocknen|6t,uslösen|6,zichten|6,edürfen|2arf,edauern|6e,erden|3,brufen|5,flussen|6,öten|3,eharren|6,tsinnen|6,chützen|6,eloben|5,hwellen|2illt,pfinden|6,kziehen|6,eweinen|6,rletzen|6,blösen|5,chulden|6,ssaugen|6,ekehren|6,lasen|1äst,imessen|6,rzerren|6,ekennen|6,bachten|6,ulassen|6,chgehen|6,nplanen|6,bnen|3,tmen|3t,chämen|5,fhalten|2ält,ßachten|6,erauben|6,rspüren|6,agern|4e,rmeiden|6,rdenken|6,nfahren|2ährt,ntraten|3ät,chussen|3ßt,ktreten|6,hhalten|2ält,efehlen|2iehlt,rbünden|6,nrufen|5,ingeben|6,tfahren|2ährt,techen|1icht,nehaben|4t,andern|5e,fdecken|6,axen|2te,blassen|3ßt,nnähern|6e,rnähren|6,nbahnen|6,hlingen|6,twerten|6,hwenden|6,esellen|6,stlegen|6,shalten|6,fremden|6,ifahren|6,ttragen|3ägt,ffangen|2ingen,hdenken|6,eheben|5,edanken|6,idmen|4t,sweiten|6,rzeihen|6,edrigen|6,rderben|2irbt,uellen|1illt,fwerfen|6,sbluten|6,ddieren|6,ebären|2iert,choten|4te,limmern|6e,öchten|5,ehüten|5,öffnen|5t,eraten|2ät,stützen|6,werben|1irbt,ehalten|2ält,nlegen|5,ordnen|5t,chlafen|3äft,amieren|6,issen|1ßt,waschen|1äscht,thalten|2ält,rhalten|6,fangen|1ängt,rühren|5,tstehen|6,rtragen|3ägt,helfen|1ilft,laden|1ädt,sterben|2irbt,treffen|2ifft,wachsen|1ächst,passen|2ßt,tun|2t,fassen|2ßt,essen|ißt,werfen|1irft,treten|2itt,gnen|3t,sehen|1ieht,laufen|1äuft,chnen|4t,lassen|1äßt,nehmen|1immt,rechen|1icht,geben|1ibt,fallen|1ällt,den|2t,eln|2t,ern|2t,ten|2t,en|t',
7700
+ exceptions: 'halten|1ält,verlangen|8,bestehen|7,wissen|1eiß,rechnen|6,anschauen|8,sehen|4,denken|5,wirken|5,raten|1ät,darstellen|9,gehören|6,schlagen|4ägt,einbeziehen|10,hungern|6e,fahren|1ühren,ruhen|4,fühlen|5,freuen|4te,kommentieren|11,verschmelzen|11,speisen|6,versuchen|8,steuern|6e,ausschlagen|7ägt,entgegenstehen|13,streben|6,lauten|5,feiern|Feiert,engagieren|9,melden|Melden,erteilen|Erteilt,verstreichen|11,durchleuchten|12,greifen|Greift,erhalten|3ält,regeln|5e,präsentieren|11,entwickeln|7le,existieren|9,angehen|6,wimmern|6st,weißen|Weißt,spüren|Spürst,gefangenhalten|9ält,vorankommen|10,ignorieren|9,tragen|5,stoßen|2ößt,fertigen|6te,umschlagen|6ägt,erwirtschaften|13,billigen|7,verdienen|8,rauchen|6,tauschen|Tauschen,betrachten|9,zielen|5,werben|5,appellieren|10,tangieren|8,sorgen|5,verhandeln|7le,durchschlagen|12,unterdrücken|11,zahlen|5,verbrauchen|10,graben|2äbt,rücken|5,gebrauchen|9,erfahren|3ährt,unterliegen|10,registrieren|11,verbessern|9e,bedenken|7,anschicken|9,gegenüberstehen|14,fernhalten|9,sparen|5,blockieren|9,verhalten|4ält,schicken|6st,rauskommen|9,zuschauen|8,profitieren|10,lieben|5,bewundern|8e,rechtfertigen|12,vorwerfen|4irfst,vorfinden|8,brechen|6,tagen|Tagt,verstecken|9,offenhalten|6ält,grenzen|6,verbergen|4irgt,weigern|6e,verlaufen|8,malen|2hlt,entgegennehmen|13,gestatten|Gestatten,vergleichen|10,prägen|5,behindern|8e,sicherstellen|12,untersagen|9,reden|4,kaufen|5,anrichten|8,beuten|5,verfahren|8,verschlagen|7ägt,übereinstimmen|13,verschieben|10,zehren|5,strotzen|7,blühen|Blüht,abstammen|8,koppeln|6e,bevorstehen|10,schrecken|8,pressen|3ßt,aufschlagen|7ägt,hassen|5,bergen|5,antreffen|8,anweisen|7,totschlagen|2dtschlägt,berücksichtigen|Berücksichtigen,rutschen|7,autorisieren|11,offerieren|Offeriert,folen|3gen,brennen|6,beabsichtigen|12,veranlassen|10,verbleiben|9,anhalten|7,abschneiden|10,dehnen|5,essen|4,gleichkommen|11,beschaffen|9,entschuldigen|12,küssen|2ßt,anpassen|7,tendieren|8,erzeugen|7,tarnen|5,zersetzen|8,kollaborieren|12,aufbringen|9,überwachen|9,verstellen|9,täuschen|7,offenstehen|10,ergehen|6,unterschlagen|9ägt,entgegenschlagen|15,verhelfen|8,erschöpfen|9,telefonieren|Telefoniert,stabilisieren|12,abweichen|8,backen|5,bereinigen|Bereinigt,wandeln|4le,zusammengehen|12,expandieren|10,abwickeln|6le,einhalten|8,schmelzen|4ilzt,wiedertreffen|12,müssen|5,lecken|5,einschlagen|10,wetten|Wetten,erkaufen|7,gelten|1ilt,hissen|2ßt',
7701
+ rev: 'hnelt|4n,schieht|3ehen,rinnert|6n,erficht|3echten,eißelt|5n,immerst|5n,chreist|5en,ettelst|5n,nflehst|5en,tößt|1oßen,ergißt|3essen,iest|esen,ähert|4n,räbt|1aben,rleiert|6n,chwillt|3ellen,chickst|5en,rwirfst|2erfen,läst|1asen,erbirgt|3ergen,ermißt|4ssen,ufhält|3alten,reßt|2ssen,uschußt|5ssen,rchhält|4alten,uchert|5n,ticht|1echen,nnehat|5ben,erblaßt|5ssen,rillert|6n,uillt|1ellen,ebiert|2ären,chmilzt|3elzen,ßert|3n,fiehlt|1ehlen,behält|3alten,enhält|3alten,erhält|3alten,mißt|1essen,frißt|2essen,schläft|4afen,tschert|6n,ssert|4n,wäscht|1aschen,pert|3n,auert|4n,thält|2alten,fängt|1angen,kert|3n,fährt|1ahren,hilft|1elfen,lädt|1aden,trifft|2effen,felt|3n,wächst|1achsen,paßt|2ssen,zelt|3n,tut|2n,rät|1aten,faßt|2ssen,mmelt|4n,pelt|3n,wirft|1erfen,chelt|4n,belt|3n,fert|3n,schlägt|4agen,irbt|erben,trägt|2agen,tritt|2eten,bert|3n,ichert|5n,delt|3n,mmert|4n,telt|3n,sieht|1ehen,läuft|1aufen,euert|4n,läßt|1assen,selt|3n,nimmt|1ehmen,kelt|3n,richt|1echen,gibt|1eben,fällt|1allen,gert|3n,gelt|3n,tert|3n,dert|3n,et|1n,t|en,eiß|issen,ermag|3ögen,ühren|ahren,olgen|2en,ffingen|2angen,reute|3en,egele|4n,ertigte|5en,oste|2en,bessere|6n,oppele|5n,axte|2en,nnähere|6n,chotte|4en,limmere|6n,uere|3n,wickle|4eln,andle|3eln,gere|3n,ndere|4n,e|1n,edarf|2ürfen,erd|3en'
7372
7702
  };
7373
7703
 
7374
7704
  var pastModel = {
7375
- rules: '.5te¦aGblickIchDe8haftIi6l5n4o3r2st1u0;ti9zi9;ellGi8;leibFrschFseBteilF;ni6rde8;di5ti5zi5;eitCli4;ch0egAll8ni3si3;nAtA;chn9ig2r0ti1;i0leg8;er7;e0n6;rn;t1ä0;tz3;ig2;cht1nd0;eln;en|.2ieb¦treiben|.2af¦treffen|.2iefen¦rlaufen|.3ug¦chlagen|.2ogen¦fliegen|.2ag¦rliegen|.2iegen¦steigen|.2achte¦bringen|.2ang¦pringen|lich¦leichen|.3and¦e0r0;stehen|.3ie¦chreien|.2ienen¦cheinen|.2uhr¦rfahren|.2itt¦treiten|.2oߦrgießen|.2ossen¦ch0fl0;ießen|.2ab¦rgeben|.4te¦aIchHdiGeFgiGkElBm9n8orDr4s3t0viGziG;e1i0rauJsCteIä9;erImmI;ckHilHllH;etzGiCu9;d2e1iBle0s8änkFü7;bEgE;ckDdD;eBigC;geln,i7;e0i6;rk9;ang8i1o0;ck7;ch6;ehr5i1lag5;dig4gn4ue3;er3;n2t2;st1ue0;rn;en|.4ten¦artAche9deckAed8henkAi7ld6m4n3perrAr1t0;reb9t7;dn8ei0hol8;k7s7;bar6d2ge5s1;a0m3;ch4;e2ig3;nig2st2;eln;rn;en|rieb¦reiben|fand¦finden|warf¦werfen|lang¦lingen|wang¦wingen|ich¦eichen|.2ingen¦n0s0;gehen|.2ing¦rgehen|zog¦ziehen|.2and¦stehen|dachten¦denken|rank¦rinken|fielen¦fallen|nahm¦nehmen|kam¦kommen|fuhr¦fahren|uchs¦achsen|wies¦weisen|.2ßten¦fassen|.2at¦treten|hielten¦halten|riߦreißen|ruben¦raben|gab¦geben|hob¦heben|.3te¦aHbeGdeFeCfBgAi9l7ntJrtJs6t4u1äumJü0;ckIhrIllI;c1e3mmHt0;en,zG;hFkF;e0igEtEufEörE;rn;agCchC;dBe0igB;bAgA;ck9e4;e5n8;e4t7;ck6d6h1i0ll6tz6;l5m5;n4r4;ln,rn;ln;ff1hn1mm1nk1u0;b0s0;en|arben¦erben|and¦inden|.3ten¦a2eug3g1h1irk3mpf3o0peln,ütz3;ff2lg2rg2;ern;ch0un0;en|arf¦erfen|rief¦rufen|arg¦ergen|og¦iehen|sah¦sehen|ahm¦ehmen|am¦ommen|annte¦ennen|annen¦innen|ies¦eisen|ißte¦issen|riet¦raten|ot¦ieten|rat¦reten|tießen¦toßen|ud¦aden|.2ten¦as0pf0;en|.2te¦a6ck7e4hl7nz7pp7r3tz7u2ä1ös7ü0;g6ß6;h5r5;h4l4;k3m3n3r3;l0r0;en,n;l0u0;en|iet¦aten|ute¦uen|vte¦ven|zte¦zen',
7376
- exceptions: '.4or¦erfr0verl0;ieren|.11ten¦argument3beabsich2demonstr3interess3rechtfer2substitu3unterbreit4ver0zurückreich4;ans0gewal1schleiern;chlag2talt2;tig1;ier0;en|.9ten¦aNbeGdiEeinschäDfCgarantPinsAk8m6provozPre5s2ver1widerseDz0überdau4;erschellPir2;billHdiJköGsiegFteidHweig2;chlumm1pe0;kulL;ern;b1kl9;ißhandAod0;ellH;andidGo0;nsumFrrigF;istEpi0;rDzD;inanzCrühstückD;tzC;ff0skutA;am9;a5f3gün1kräft2schränk9tra4zweif0;eln;st0;ig6;ra0ür0;cht4;rb1uftrag3;bsolv1usbr0;eit1;ier0;en|.10ten¦auszeichnBb9erleicht8favor7konkurrAorgan7pr6v1über0;ford7nachtA;er1or0;a1ber2herrsch8;a0dächtig7einnahm7schlepp7;rb0;eit5;aktiz3otest3äsent3;is2;ern;eeindruck1ombard0;ier0;en|.7ten¦aPbMeIfFhantiZkDlBnahelCoperiZpAs7traHum6ver1wegräum03zus0;piKti01;bu3harr01klär01l2mut01nein01s1t0übC;eil00ief00;pürZu1;angYoQ;chX;pflügWsteL;ch1t0;eigEill3udiQ;uftTweSüttT;assiOolstC;ahml0eerf0;egQ;ampiLling0;eln;l0ür1;imm6ü0;chtL;in1r0;krankJmordJ;reihIse0;tzH;e1lätt0;ern;gegnEkuCruh5schAwertEzwe6;bAn8r6u0;f2s0;de5fü0;llA;heul9mu1ze0;ig8;ck7;beit6gwö0;hn5;imi0last4;er3;sti1we0;nd1;mm0;en|.8ten¦aKbFeBgeAho9i6kumuOm5resi4s3ve0überquP;geBr0;goLhärtOst0weG;eckNärkN;chillAkan0tag4;diK;iterlebKusiziJ;g2n0;itiiHto0;niG;noriF;brauBfährdF;ntzü6r1skaCxis0;tiC;ford0richtC;ern;e0locki9;antrag9flüg2g0hand2rechn9teilig9;leit8rü0;nd7;eln;nstreng5ppe3us0;bi1rei0stell4;ch3;ld2;li0;er0;en|.6ten¦aUbNdiMeIfGgeFkElausOpCrBs9tr8urteil00v5w2z0;e0uwinkZ;itBrlJ;er1i0;c0nzP;keln;er1o0;rwKtiM;eIsJ;au8östR;ch0peI;mähPwebP;egiHiAutsC;oliGred0;igM;apiEerk2;maJwäA;ahBolt0;ern;in1r0;laubGsE;büßFl0;egE;chtD;asi5e1rau0;chB;e2fr1harrAs8wa0;hr9;ag8;nd7;er6;b2n1u0;fhör4slos4;rück3s1wähl3;le1s0;etz1;hn0;en|.12ten¦diskrimin1identifiz1natural0solidar0zurückfordern;is0;ieren|.5or¦einfrieren|Debattierten¦debattieren|.4ten¦bFdrohHfehlHhDkBliCm9nu8pumpHr6s5t4w1z0;eigGierG;a1einFäh0;lErE;lzDrnDtD;anzCeilCrauC;iegBäumB;e0i1ollA;ck9d9if9;tz8;e0u4;hr6rk6;e4l0;eb4;o0äuf3;ck2;lüh1o0uch1;hr0;en|.2or¦frieren|.15ten¦weiter0;debatt0produz0;ieren|Dominierten¦dominieren|.5ten¦anrOblickPdNeJfeHgeGkElBpAr9s3t2verübPweitPz0öffnP;u0üC;hKlM;au9re4;ch4p2t0;ammKo0römK;ckJppJ;a0eisIrühI;nnH;auGürG;ei2ottF;flDok7u4;a1ös0;chC;ndB;nallAo0;st9;h5nüg8;i0u0;ern;ign5mp2r0;hö0tön4;h3r3;ör2;eut1räng1;eg0;en|.3aߦbesitzen|saßen¦sitzen|.10aߦgegenübersitzen|.7olzen¦verschmelzen|.4olz¦schmelzen|.5aßen¦festsitzen|.4aßen¦einsitzen|.6amen¦h0;eran0inzu0;kommen|.6ämen¦davonkommen|.9amen¦zusammenkommen|.7amen¦zugutekommen|.3amen¦umkommen|.3äme¦zukommen|wusch¦waschen|.3ahmen¦annehmen|.4ähme¦hinnehmen|.4ähmen¦aufnehmen|.4oll¦schwellen|.2oll¦quellen|.2ünden¦stehen|.4ünde¦bestehen|.5anden¦entstehen|.4anden¦anstehen|.7ünden¦unterstehen|.4aben¦aufgeben|.3aben¦begeben|.5aben¦übergeben|.3äben¦ab0er0;geben|.3anden¦befinden|.7anden¦verschwinden|.3ten¦bau0eil0heg0jag0tob0;en|.7ogen¦vorbeiziehen|.2ohen¦fliehen|.6ogen¦einbe0unter0;ziehen|.4ogen¦einziehen|.3ogen¦abziehen|hielte¦halten|.3ielt¦an0be0;halten|.4ielt¦ent0vor0;halten|.9ielte¦zusammenhalten|.7te¦a9be8e6heiratDkremp5mitwirkDp4s1tro2ver0wechs5;hängCka9liebCsorgCwahrC;ch1ta0;mm2;alt9lüpf9;lapp7rang7;eln;inreis6r0;inn4reich5öffn5;reit4straf4;n1ufhä0;uf2;gehör1näh0;ern;en|.4iesen¦hinweisen|Suchte¦suchen|.3ahl¦befehlen|.4ahl¦empfehlen|.9te¦anprang8beschädig7durchpauk7e3prophezei7umkremp6ver0überrei1;br3körp7sic1ursa0;ch5;h5k5;ntw1rarb0;eit2;ick0urz0;eln;en;ern|.6te¦ausholIbEdBer9f8g7k6liefDm5rätsFs1torkFver0zaubD;ebbHhörHtagHwehH;ch2i1p0treifG;altFrengF;ck9edB;adDenkD;ind7utmaßC;anz8leidBü5;lucksAründA;olg4rist9;folg8ob3w0;ach7ähn7ürg7;onn1ä0;mm0;ern;e1reit3umm0;eln;d0frei1;eck0roh0;en|.5te¦anhörDbAer9flachDmündDo7prallDrü6s4t3w1ä0;rg7uß7;a0idmB;b5rtA;e2rimm9;chä0perr8tütz8;l7m7;st6;pf0rdn5;ern;bos3r2;e0rems2;jah1müh1ton1w0;eg0;en|.5annten¦verbrennen|.2annten¦brennen|.3annten¦bekennen|.3iel¦gefallen|.4iele¦entfallen|.4iel¦ausfallen|.2ichen¦gleichen|.4äten¦betreten|.13ten¦erwirtschaften|.14ten¦auskundschaft0veranschaulich0;en|.8te¦aCbe9e6ge5nachfragGsch3ver0;drängFeiEk1w7ä0;ndFußF;nü1äm1ündD;eppDildDrum0ütB;pfB;nehm1st2;ntf1rkund0;ig8;alt7;h1vorzug6z0;aub6iff6;aupt4ind5;blief4n1u0;fspieß2sweit2;kreid1zet0;teln;en;ern|.13te¦beglückwünsch0zusammenknüpf0;en|.5achten¦verbringen|.5ächten¦aufbringen|.4te¦atmFbetFdDendFfChBjäAkaufFleEm8n7p5r4s2t1w0zollF;iDohnE;rübDötD;eBpü0;lBrB;ä4ö5ühmA;lan9r0;äg8üf8;eig7ä2;a0ein6;ch5;hr4;emm3i2;ilm2rag2u1;eck1reh1ü0;nk0;en|bat¦bitten|.4aten¦ver0;bitten,tun|.2ieben¦bl0tr0;eiben|.9ieben¦unterschreiben|rieben¦reiben|.8ieben¦festschreiben|.3arfen¦bewerfen|.7angen¦durchk0versch0;lingen|.2ieg¦steigen|.5ieg¦versteigen|fuhren¦fahren|.7ühre¦weiterfahren|.2afen¦treffen|.5afen¦eintreffen|.4issen¦wegreißen|Schirmte¦schirmen|warb¦werben|.3arb¦bewerben|riefen¦rufen|.4iefe¦aufrufen|.10te¦auf1beanstand2mit1niederkni2unterstütz2ver0;kleinern,wechseln;arbeit0;en|.2angen¦dr0zw0;ingen|.2ßte¦fassen|.4ßte¦anp0erf0;assen|.7inge¦weitergehen|.2itt¦gleiten|.3uf¦schaffen|wußten¦wissen|.3üchse¦erwachsen|.4ing¦auf2e0ver1;in1mp0;fang1;geh0;en|.7ub¦untergraben|hoben¦heben|.11te¦durchforst0entschuldig0;en|.6ief¦durch0unter0;laufen|dachte¦denken|.4ägen¦vorliegen|.6achen¦aus0ent0;sprechen|.4omm¦erklimmen|.3ach¦sprechen|.3te¦ein3h2k1lob3müh3reg3tag3w0;ag2eh2;ur1ür1;ol0ör0;en|lieߦlassen|.3ieße¦zulassen|.3ießen¦erlassen|.2achen¦brechen|.2ugen¦tragen|gingen¦gehen|.5ied¦bescheiden|.4oߦschließen|Hätte¦haben|.4iffen¦begreifen|hieߦheißen|.7ieg¦verschweigen|lief¦laufen|lag¦liegen|galt¦gelten|.2iff¦greifen|.4iefen¦rumlau0schla0;fen|.6oben¦verschieben|litten¦leiden|.4ieߦe1ver0;heiß2l1;inl0ntl0;ass0;en|.4ug¦betragen|.6ach¦versprechen|.5ah¦geschehen|.2te¦üben|wandte¦wenden|.4iߦschm0verb0;eißen|.4itten¦sch0;neid0reit0;en|fingen¦fangen|tat¦tun|.3iefen¦belaufen|.6oߦan0be0er0;schließen|.5ug¦aus0bei0;tragen|sank¦sinken|.5agen¦festliegen|.3itten¦erleiden|.3ang¦bes0err0;ingen|.6ied¦aus0ent0;scheiden|.4anken¦versinken|.5ieߦüberlassen|.8ächen¦widersprechen|.7oߦe0;inschließ0ntschliess0;en|sang¦singen|.2ßten¦passen|.3ieden¦scheiden|.5chten¦vermögen|aߦessen|.4test¦sollen|.8itt¦fortschreiten|.9itt¦unterschreiten|.6ing¦herumgehen|.4ieg¦schweigen|.2ank¦stinken|.4andte¦entsenden|mochte¦mögen|.4iff¦ergreifen|hingen¦hängen|.3ingen¦anfang1be0zu0;geh0;en|.4aߦvergessen|ziehen¦zeihen|.10achen¦zusammenbrechen|.4ieh¦verleihen|.5achen¦aufbrechen|.7ießen¦hinterlassen|.6oren¦beschwören|ward¦werden|.2aßen¦fressen|.5ach¦aus0ein0;brechen|.3andte¦anwenden|.7iefen¦hinauslaufen|half¦helfen|wogen¦wägen|.3og¦erwägen|lasen¦lesen|.3ob¦schieben|.6ug¦übertragen|.3ossen¦gen0spr0;ießen|.5ieb¦ausbleiben|mied¦meiden|.7itten¦einschreiten|.8iedet¦unterscheiden|Unkten¦unken|.9ag¦zugrundeliegen|.4ammen¦schwimmen|wog¦wiegen|.8urde¦bekanntwerden|.7ag¦zurückliegen|maߦmessen|.5ugen¦vortragen|.3ief¦ablaufen|sandte¦senden|.3urfte¦bedürfen|wart¦sein|.5ieben¦verbleiben|.7ossen¦entschließen|.7ach¦unterbrechen|.5ogen¦überwiegen|.4ied¦vermeiden|.3tet¦kosen|.6ang¦durchringen|.4alfen¦verhelfen|.5angen¦eindringen|.8ang¦herausdringen|.5ßten¦verpassen|.6ießen¦übriglassen|.2ochen¦kriechen|.5iffen¦aufgreifen|.7ieb¦unterbleiben|.5ießen¦freilassen|.5ügen¦vertragen|.3aten¦abtun|barsten¦bersten|.9ingen¦zusammenhängen|.6ingen¦draufgehen|.7ing¦zurückgehen|bisse¦beißen|sog¦saugen|.7ief¦zurücklaufen|mußte¦müssen|.4as¦verlesen|rangen¦ringen|.4äte¦auftun|roch¦riechen|.7össen¦ausschließen|.14te¦entgegenrieseln|.12te¦niedermetzeln|.15te¦zusammenbrutzeln'
7705
+ rules: 'klimmen|2omm,iziehen|2ogen,hwellen|2oll,ulassen|2ieße,rlieren|2or,sdehnen|5ten,efehlen|2ahl,rkünden|6te,rtönen|4ten,nregen|4ten,esitzen|2aß,ehalten|2ielt,ufgeben|3aben,blehnen|5ten,pfehlen|2ahl,hlingen|2angen,efinden|2anden,elten|alt,otten|4ten,haupten|6te,tdecken|5ten,ewegen|4te,etonen|4te,chlafen|3iefen,egeben|2aben,toppen|4ten,hmlegen|5ten,eenden|5ten,tlassen|2ieß,etragen|3ug,chuften|6ten,etreten|3äten,liehen|1ohen,üsten|4te,flegen|4ten,erebben|5te,ühmen|3te,rsitzen|2aß,pfangen|2ing,ntragen|5ten,schehen|3ah,rhängen|5te,eidigen|5ten,hneiden|2itten,rwarten|6ten,elaufen|2iefen,rumpfen|5te,itragen|3ug,scheren|5ten,rspüren|5ten,tliegen|2agen,lingeln|6ten,rbitten|2aten,längern|6ten,rringen|2ang,greißen|2issen,rsinken|2anken,udieren|5ten,ingehen|3ing,osten|4ten,hädigen|5te,lüchten|6ten,liessen|1oß,ermuten|6ten,erüben|4ten,ekennen|2annten,redigen|5ten,rgraben|3ub,tiieren|5ten,prühen|4ten,lvieren|5ten,idmen|4te,ermögen|4chten,erehren|5ten,hwinden|2anden,rägen|3te,helegen|5ten,rhöhen|4ten,trömen|4ten,ümpeln|5ten,edrohen|5te,umgehen|3ing,rmorden|6ten,ewerten|6ten,drucken|5ten,pflügen|5ten,nstigen|5ten,tinken|1ank,rqueren|5ten,usten|4ten,ftragen|5ten,rehen|3te,ilmen|3te,erknien|6te,röffnen|6te,hezeien|5te,ürgern|5ten,fheulen|5ten,öten|3te,nlasten|6ten,undigen|5te,rwürgen|5te,egegnen|6ten,standen|6te,efallen|2iel,rbosen|4te,ulegen|4ten,palten|5te,rlauben|5ten,ejahen|4te,egehen|2ingen,fährden|6ten,inbüßen|5ten,lucksen|5te,rleihen|2ieh,ufrufen|3iefe,mpieren|5ten,uwinken|5ten,rwähnen|5te,tfalten|6te,tfallen|2iele,sfallen|2iel,chwören|3oren,gnieren|5ten,rsachen|5te,rwenden|6ten,ugehen|2ingen,ressen|1aßen,flügeln|6ten,nwenden|2andte,eitigen|5ten,ehmigen|5te,fdecken|5ten,nweisen|2iesen,enügen|4ten,slaufen|2iefen,utmaßen|5te,gräumen|5ten,rgolden|6ten,rwägen|2og,rüfen|3te,ruhigen|5ten,umpen|3ten,uellen|1oll,erübeln|6ten,hleppen|5ten,ohnen|3te,ewirken|5ten,anschen|5ten,inzeren|5ten,östigen|5ten,chellen|5ten,hwemmen|5ten,irieren|5ten,orzugen|5te,tarten|5ten,peisen|4ten,tuieren|5ten,bildern|6ten,nlassen|2ieß,elieren|5ten,ekunden|6ten,rwachen|5te,lanen|3te,chaden|5te,npassen|3ßte,eliegen|2ag,spießen|5te,stragen|3ug,rrieren|5ten,hwimmen|2ammen,altigen|5ten,ewerfen|2arfen,nrücken|5ten,tapeln|5ten,okern|4ten,sbilden|6ten,twerden|2urde,rlieben|5te,rlocken|5ten,kliegen|2ag,limmern|6ten,sfüllen|5ten,ewahren|5ten,chweben|5ten,ungern|5ten,hillern|6ten,blaufen|2ief,mpören|4ten,bziehen|2ogen,rneinen|5ten,gwöhnen|5ten,edürfen|2urfte,ringern|6ten,ichtern|6ten,alzen|3ten,efragen|5ten,olstern|6ten,emahnen|5ten,pannen|4ten,rimmen|4te,rwiegen|2ogen,orwagen|5ten,nfangen|2ingen,ulichen|5ten,bgeben|2äben,hringen|2ang,esten|4te,rhelfen|2alfen,stücken|5ten,uhören|4ten,penden|5ten,strafen|5te,sweiten|6te,rsorgen|5te,nallen|4ten,glassen|2ießen,rfangen|2ing,chämen|4te,mlaufen|2iefen,bdecken|5ten,oltern|5ten,ilassen|2ießen,lündern|6ten,ewerben|2arb,esetzen|5ten,ufhören|5ten,tmen|3te,erfegen|5ten,bwenden|6ten,forsten|6te,ümmeln|5ten,btun|2aten,ertun|3aten,prengen|5te,trengen|5ten,zwecken|5ten,ersten|arsten,erkern|5ten,efreien|5te,chalten|6te,eiraten|6te,risten|5te,tocken|4ten,hlaufen|2ief,ckgehen|3ing,fnehmen|2ähmen,chüren|4ten,nnahmen|5ten,rwalten|6te,kreiden|6te,lummern|6ten,remsen|4te,umieren|5ten,siegeln|6ten,treifen|5te,nachten|6ten,rdieren|5ten,rösten|5ten,illegen|5ten,mkommen|2amen,rtiefen|5ten,ohren|3ten,augen|og,bsetzen|5ten,klaufen|2ief,fhäufen|5te,lühen|3ten,üssen|ußte,erlesen|3as,apieren|5ten,uslosen|5ten,ächen|3te,rdauern|6ten,uftun|3äte,erkeln|5ten,umpeln|5ten,alieren|5ten,ahnden|5ten,nreihen|5ten,öschen|4ten,auben|3te,ordnen|5ten,eiern|4ten,erholen|5ten,rleiben|5te,hweigen|2ieg,cheinen|2ienen,ürchten|6ten,treiten|2itt,mühen|3te,sammeln|6ten,währen|4ten,stufen|4te,chreien|3ie,mitteln|6ten,treiken|5ten,pringen|2ang,lagern|5ten,leiden|1itten,folgen|4ten,graben|2uben,rdigen|4te,aunen|3ten,bergen|1arg,heben|1ob,harren|4ten,uldigen|5ten,laden|1ud,rlaufen|2iefen,amieren|5ten,isten|4ten,senden|1andte,regen|3te,zünden|5ten,issen|1ßte,denken|1achten,ruhen|3te,tagen|3te,rliegen|2ag,kaufen|4te,wachsen|1uchs,edigen|4te,sorgen|4ten,heißen|1ieß,ähen|2te,buchen|4ten,trinken|2ank,ummen|3te,eimen|3te,hoffen|4ten,nsetzen|5ten,dichten|6ten,rgießen|2oß,nten|3te,nbaren|4ten,affen|3te,fragen|4te,mucken|4ten,usgehen|3ingen,streben|5ten,meiden|1ied,üben|2te,oppeln|5ten,dringen|2angen,passen|2ßten,chützen|5ten,ammen|3te,singen|1ang,rasen|3ten,lasten|5te,horchen|5te,zeigen|4ten,hängen|1ingen,ngehen|2ingen,ausen|3te,wählen|4ten,wandern|6ten,wehen|3te,lden|3te,innen|annen,cheiden|2ied,ndigen|4ten,eden|3te,ehnen|3te,erben|arben,rufen|1ief,fliegen|2ogen,wingen|1ang,frieren|2or,rmen|2te,ahnen|3te,fassen|2ßten,rgehen|2ing,dienen|4te,stimmen|5te,einigen|5ten,bieten|1ot,essen|aß,sitzen|1aßen,leiten|5te,zeugen|4ten,langen|4te,ven|1te,üpfen|3te,stoßen|2ießen,uten|3te,lingen|1ang,raten|1iet,äumen|3te,klagen|4te,ügen|2te,rbeiten|6ten,üßen|2te,steigen|2iegen,fahren|1uhr,treffen|2af,ppen|2te,reisen|4ten,sehen|1ah,ösen|2te,lichen|4te,achen|3ten,reiben|1ieb,werfen|1arf,sagen|3te,ligen|3te,rnen|2te,tten|3te,rten|3te,treten|2at,pfen|2ten,gnen|3te,eißen|iß,ften|3te,bringen|2achte,leben|3te,chlagen|3ug,eichen|ich,uchen|3te,ennen|annte,fallen|1ielen,legen|3te,ziehen|1og,chnen|4te,halten|1ielten,weisen|1ies,inden|and,ießen|ossen,uen|1te,stehen|2and,geben|1ab,nehmen|1ahm,schen|3te,chten|4te,tigen|3te,kommen|1am,zen|1te,eln|2te,len|1te,ken|1te,ern|2te,ren|1te',
7706
+ exceptions: 'wünschen|6ten,aussprechen|6achen,machen|4te,entsprechen|6achen,halten|1ielte,sprechen|3ach,loben|3te,lassen|1ieß,suchen|Suchte,argumentieren|11ten,erlassen|3ießen,brechen|2achen,rebellieren|9ten,demonstrieren|11ten,versuchen|7ten,erreichen|7te,tragen|2ugen,gehen|1ingen,stehen|2ünden,rufen|1iefen,schaffen|3uf,gehören|5ten,fassen|2ßte,protestieren|10ten,gründen|6te,schließen|4oß,teilen|4ten,organisieren|10ten,haben|Hätte,begreifen|4iffen,rutschen|6ten,laufen|1ief,liegen|1ag,bitten|1at,heben|1oben,beschränken|9ten,besiedeln|8ten,wissen|1ußten,verlangen|7ten,warnen|4ten,deuten|5ten,treffen|2afen,bleiben|2ieben,meinen|4te,greifen|2iff,bekräftigen|9ten,treiben|2ieben,landen|5ten,verschieben|6oben,errichten|8ten,drohen|4ten,einlegen|6ten,begründen|8ten,neigen|4te,reichen|5ten,fehlen|4ten,brauchen|6ten,richten|6ten,unterschreiben|9ieben,verweigern|9ten,versprechen|6ach,wenden|1andte,feuern|5ten,steigen|2ieg,stammen|5ten,übergeben|5aben,öffnen|5ten,rollen|4ten,verbrennen|5annten,ändern|5ten,fangen|1ingen,tun|1at,denken|1achte,wirken|4ten,einschätzen|9ten,beschließen|6oß,präsentieren|10ten,drängen|5ten,siegen|4ten,sinken|1ank,bestehen|4ünde,begleiten|8ten,ignorieren|8ten,verbringen|5achten,verbreiten|9te,versperren|8ten,fahren|1uhren,gestalten|8te,blockieren|8ten,entstehen|5anden,beabsichtigen|11ten,ordnen|5te,erfordern|8ten,verstärken|8ten,beteiligen|8ten,veranschlagen|11ten,diskutieren|9ten,veranstalten|11ten,verlassen|4ieß,votieren|6ten,überlassen|5ieß,brennen|2annten,widersprechen|8ächen,ausstellen|8ten,verschmelzen|7olzen,mißhandeln|9ten,anstehen|4anden,scheiden|3ieden,vorherrschen|10ten,lieben|4ten,verdrängen|8te,werben|1arb,blicken|5ten,gleichen|2ichen,sichern|6ten,enthalten|4ielt,annehmen|3ahmen,kumulieren|8ten,enden|4te,skandieren|8ten,eintreffen|5afen,lauschen|6ten,weinen|4ten,sollen|4test,fortschreiten|8itt,identifizieren|12ten,beschenken|8ten,abstimmen|7ten,existieren|8ten,reifen|4ten,verkämpfen|8te,urteilen|6ten,unterschreiten|9itt,tauchen|5ten,tummeln|6ten,verschenken|9ten,hegen|3ten,zustimmen|7ten,merken|4ten,interessieren|11ten,mögen|1ochte,bereiten|7te,entschuldigen|11te,ergreifen|4iff,naturalisieren|12ten,schmelzen|4olz,kehren|4ten,trauern|6ten,operieren|7ten,kleiden|6te,schmähen|6ten,behandeln|8ten,rechtfertigen|11ten,absperren|7ten,bezweifeln|9ten,vorliegen|4ägen,betrachten|9ten,widersetzen|9ten,steigern|7ten,ergeben|3äben,basieren|6ten,weiterfahren|7ühre,beten|4te,erfassen|4ßte,zeihen|1iehen,kichern|6ten,breiten|6te,zusammenbrechen|10achen,verhindern|9ten,ausreichen|8ten,aufbrechen|5achen,auszeichnen|10ten,wagen|3te,zwingen|2angen,honorieren|8ten,einbeziehen|6ogen,hinterlassen|7ießen,passieren|7ten,weitergehen|7inge,reiben|1ieben,debattieren|Debattierten,kleben|4ten,werden|1ard,hinzukommen|6amen,einen|3te,animieren|7ten,zerlegen|6ten,einbrechen|5ach,gleiten|2itt,mitarbeiten|10te,erfolgen|6te,einschließen|7oß,polieren|6ten,blättern|7ten,nutzen|4ten,ausbreiten|9ten,helfen|1alf,wägen|1ogen,lesen|1asen,eignen|5ten,hemmen|4te,schieben|3ob,überreichen|9te,übertragen|6ug,erkranken|7ten,unterbreiten|11ten,residieren|8ten,erhören|5ten,bauen|3ten,schreiten|4itten,ausbleiben|5ieb,eilen|3ten,einschreiten|7itten,erwirtschaften|13ten,unterscheiden|8iedet,unken|Unkten,trennen|5ten,zuspitzen|7ten,münden|5te,garantieren|9ten,verklären|7ten,nähern|5ten,erarbeiten|9te,insistieren|9ten,vorhalten|4ielt,betteln|6ten,abschütteln|10ten,zieren|4ten,regieren|6ten,vorbereiten|10ten,wiegen|1og,recken|4ten,davonkommen|6ämen,einziehen|4ogen,trauen|4ten,favorisieren|10ten,zusammenkommen|9amen,vortragen|5ugen,reden|4ten,unterstehen|7ünden,erwachsen|3üchse,einreisen|7te,zirkulieren|9ten,waschen|1usch,verdächtigen|10ten,inspizieren|9ten,auskundschaften|14ten,säumen|4ten,sein|wart,befrachten|9ten,weiten|5ten,solidarisieren|12ten,verbleiben|5ieben,umstellen|7ten,zugutekommen|7amen,zurückreichen|11ten,finanzieren|9ten,anhalten|3ielt,flachen|5te,vermindern|9ten,versteigen|5ieg,hinnehmen|4ähme,unterbrechen|7ach,unterlaufen|6ief,weiterproduzieren|15ten,kosen|3tet,musizieren|8ten,toben|3ten,häufen|4ten,berechnen|8ten,herausdringen|8ang,miterleben|8ten,korrigieren|9ten,aufbringen|5ächten,versagen|6ten,praktizieren|10ten,kandidieren|9ten,erschließen|6oß,herankommen|6amen,schauen|5ten,intonieren|8ten,vegetieren|8ten,kriechen|2ochen,ritzen|4ten,aufgreifen|5iffen,unterbleiben|7ieb,jagen|3ten,wildern|6ten,diskriminieren|12ten,aufgehen|4ing,tanzen|4ten,vertragen|5ügen,zusammenhalten|9ielte,hocken|4ten,verstecken|8ten,durchklingen|7angen,trachten|7ten,weiterdebattieren|15ten,verbilligen|9ten,mehren|4ten,dominieren|Dominierten,schirmen|Schirmte,draufgehen|6ingen,beißen|1isse,ersetzen|6ten,provozieren|9ten,ausbrechen|5ach,aufarbeiten|10te,festschreiben|8ieben,überfordern|10ten,spekulieren|9ten,schütten|7ten,gebrauchen|8ten,unterziehen|6ogen,nützen|4ten,modellieren|9ten,ansiedeln|8ten,wickeln|6ten,zurückfordern|12ten,ringen|1angen,anschließen|6oß,waten|4ten,riechen|1och,ausschließen|7össen,zukommen|3äme,hantieren|7ten,verhärten|8ten,verteilen|7ten,saugen|1og',
7707
+ rev: 'rklomm|3immen,nahm|1ehmen,kam|1ommen,uließe|2assen,estünde|3ehen,ochte|ögen,erführe|3ahren,ufriefe|3ufen,erginge|3ehen,ntfiele|3allen,npaßte|3ssen,ntwurde|3erden,rwüchse|2achsen,edurfte|2ürfen,eitelte|5n,innähme|3ehmen,isse|eißen,ußte|üssen,uftäte|3un,ukäme|2ommen,felte|3n,herte|3n,kelte|3n,mmerte|4n,ißte|1ssen,faßte|2ssen,ickerte|5n,schrie|4eien,empelte|5n,ttelte|4n,hielte|1alten,äußerte|5n,nerte|3n,mmelte|4n,perte|3n,ferte|3n,berte|3n,belte|3n,andte|enden,zelte|3n,selte|3n,delte|3n,brachte|2ingen,gerte|3n,annte|ennen,gelte|3n,uerte|3n,derte|3n,terte|3n,ete|1n,te|en,chuf|2affen,alf|elfen,griff|2eifen,rief|1ufen,traf|2effen,warf|1erfen,lief|1aufen,efanden|2inden,ußten|issen,hliefen|2afen,schoben|3ieben,eträten|3eten,lohen|1iehen,euerten|4n,rachten|1ingen,stlagen|3iegen,uhren|ahren,erbaten|3itten,grissen|2eißen,rsanken|2inken,prächen|2echen,kannten|1ennen,hmolzen|2elzen,chieden|2eiden,möchten|2gen,hwanden|2inden,lichen|1eichen,nnahmen|2ehmen,orlägen|3iegen,iehen|eihen,chworen|3ören,raßen|1essen,nwiesen|2eisen,asen|esen,äherten|4n,hwammen|2immen,onkämen|3ommen,ewarfen|2erfen,llerten|4n,erwogen|3iegen,rhalfen|2elfen,rächten|1ingen,rochen|1iechen,rtrügen|3agen,arsten|ersten,fnähmen|2ehmen,hlössen|2ießen,eierten|4n,griffen|2eifen,chienen|2einen,rannten|1ennen,standen|2ehen,gruben|2aben,trafen|2effen,auerten|4n,dachten|1enken,gäben|1eben,hritten|2eiten,kerten|3n,mmerten|4n,trugen|2agen,stünden|2ehen,fingen|1angen,taten|1un,hingen|1ängen,annen|innen,gaben|1eben,itten|eiden,arben|erben,flogen|2iegen,saßen|1itzen,stießen|2oßen,ließen|1assen,stiegen|2eigen,terten|3n,rachen|1echen,zogen|1iehen,liefen|1aufen,aßten|1ssen,kamen|1ommen,angen|ingen,ieben|eiben,fielen|1allen,gerten|3n,gingen|1ehen,hielten|1alten,ossen|ießen,derten|3n,elten|2n,eten|1n,ten|en,alt|elten,olltest|3en,chiedet|2eiden,ostet|2en,bot|1ieten,riet|1aten,hielt|1alten,itt|eiten,trat|2eten,tschloß|5iessen,saß|1itzen,hieß|1eißen,aß|essen,ließ|1assen,iß|eißen,oß|ießen,tergrub|5aben,chob|2ieben,hob|1eben,warb|1erben,ieb|eiben,gab|1eben,chmolz|3elzen,erlieh|3eihen,usch|aschen,och|iechen,rach|1echen,ah|ehen,ich|eichen,ard|erden,lud|1aden,band|1inden,ied|eiden,fand|1inden,stand|2ehen,rwog|2ägen,fing|1angen,barg|1ergen,ieg|eigen,lag|1iegen,ging|1ehen,zog|1iehen,ug|agen,ang|ingen,erlas|3esen,wuchs|1achsen,wies|1eisen,oll|ellen,fahl|1ehlen,fiel|1allen,or|ieren,fuhr|1ahren,ank|inken'
7377
7708
  };
7378
7709
 
7379
7710
  let infToPresent = uncompress$1(presentModel);
@@ -7397,8 +7728,24 @@
7397
7728
  return convert$1(str, pastToInf)
7398
7729
  };
7399
7730
 
7731
+ const all = function (str) {
7732
+ let arr = [str];
7733
+ let past = toPast(str);
7734
+ if (past !== str) {
7735
+ arr.push(past);
7736
+ }
7737
+ let present = toPresent(str);
7738
+ if (present !== str) {
7739
+ arr.push(present);
7740
+ }
7741
+ return arr
7742
+ };
7743
+
7744
+ var verb = { toPresent, fromPresent, toPast, fromPast, all };
7400
7745
 
7401
- var conjugate = { toPresent, fromPresent, toPast, fromPast };
7746
+
7747
+ // console.log(toPresent('zusammenzufuehren'))
7748
+ // console.log(toPast('gehen'))
7402
7749
 
7403
7750
  // generated in ./lib/lexicon
7404
7751
  var lexData = {
@@ -7409,7 +7756,7 @@
7409
7756
  "Conjunction": "true¦bAd7entwed6falls,in5nach5o3so2und,w0zumal;e0ohingegen;d4il,nn2;lange,ndern,wie;b0d2;!glei3;dem;er;a1enn,o0;ch;ss,ß;e0zw;vor,ziehungsweise",
7410
7757
  "Determiner": "true¦d2ein0;!e0;!m,n,r,s;as,e0ie;m,n,r,s",
7411
7758
  "City": "true¦0:3A;a2Yb28c1Yd1Te1Sf1Qg1Kh1Ci1Ajakar2Jk11l0Um0Gn0Co0ApZquiYrVsLtCuBv8w3y1zuri22;ang1We1okohama;katerin1Krev0;ars4e3i1rocl4;ckl0Yn1;nipeg,terth0Z;llingt1Rxford;aw;a2i1;en2Klni33;lenc2Yncouv0Ir2J;lan bat0Ftrecht;a7bilisi,e6he5i4o3rondheim,u1;nWr1;in,ku;kyo,ronJulouD;anj26l16miso2Mra2D; haKssaloni10;gucigalpa,hr0l av0O;i1llinn,mpe2Engi09rtu;chu25n0pU;a4e3h2kopje,t1ydney;ockholm,uttga15;angh1Ienzh20;o0Nv01;int peters0Xl4n1ppo1I; 1ti1E;jo1salv3;se;v1z0T;adW;eykjavik,i2o1;me,sario,t28;ga,o de janei1A;to;a9e7h6i5o3r1ueb1Tyongya1Q;a1etor28;gue;rt1zn0; elizabe4o;ls1Jrae28;iladelph23nom pe0Aoenix;r1tah tik1C;th;lerLr1tr13;is;dessa,s1ttawa;a1Klo;a3ew 1is;delWtaip1york ci1U;ei;goya,nt0Xpl0Xv0;a7e6i5o2u1;mb0Oni0L;nt2sco1;u,w;evideo,real;l0n03skolc;dellín,lbour0U;drid,l6n4r1;ib2se1;ille;or;chest1dalYi11;er;mo;a6i3o1vCy03;nd1s angel0H;on,r0G;ma1nz,sb00verpo2;!ss1;ol; pla0Jusan0G;a6hark5i4laipeda,o2rak1uala lump3;ow;be,pavog1sice;ur;ev,ng9;iv;b4mpa0Lndy,ohsiu0Ira1un04;c1j;hi;ncheNstanb1̇zmir;ul;a6e4o1; chi mi2ms,u1;stJ;nh;lsin1rakliH;ki;ifa,m1noi,va0B;bu0UiltE;alw5dan4en3hent,iza,othen2raz,ua1;dalaj0Hngzhou;bu0R;eVoa,ève;sk;ay;es,rankfu1;rt;dmont5indhovV;a2ha02oha,u1;blSrb0shanbe;e1kar,masc0HugavpiK;gu,je1;on;a8ebu,h3o1raioKuriti02;lo1nstanKpenhagOrk;gGmbo;enn4i2ristchur1;ch;ang m2c1ttagoM;ago;ai;i1lgary,pe town,rac5;ro;aIeCirminghXogoBr6u1;char4dap4enos air3r1s0;g1sa;as;es;est;a3isba2usse1;ls;ne;silRtisla1;va;ta;i4lgrade,r1;g2l1n;in;en;ji1rut;ng;ku,n4r1sel;celo2ranquil1;la;na;g2ja lu1;ka;alo1kok;re;aDbBhmedabad,l8m5n3qa2sh1thens,uckland;dod,gabat;ba;k1twerp;ara;m0s1;terd1;am;exandr2ma1;ty;ia;idj0u dhabi;an;lbo2rh1;us;rg",
7412
- "Verb": "true¦0:5M;1:5E;2:5L;3:4M;4:4O;5:4D;6:3O;a56b46d41e3Af31g24h1Ri2Lk1Ml1Hm1Cn1Ap18r15s0Ot0Hu09vTwHz9ä8über7;nehm0ras2sp3ZtrVwa2;nd3Juß1N;eDi3Dog0u7ä3Aög0;geBrück8sammen7;geb5Lhä1;ge8zu7;drä1erob3E;ga1wies0;la5Gsp5Hw58;ig16rstö2G;aGeEiBoAu9ä8ü7;nsche4rde4;ch28hl0re4;chs,rd0ß3;l1Ord0;ch0der2Pe8r7s15;d,ke4;derhol0Ms;i7r3C;ch0gere,st,ß;ch10ndt0r7;!en,f,n3;erAor7;ausg1Cge7lR;d3Bga1schl7;ag0;anke1ZbHdGfüg0gFhä1lCmOrat0s9tret0we8öffentlich7;en,t;chs42i1S;ch8pr7ta1Ou2P;e2ic5o2;li1ob0;a8oren7;!g12;ng0u3S;a1e4PliE;eutli2ie1Nrä1;ot0u3Z;mg0Xnter7;brClBs7;t7uc5;r7üS;ei2i7;ch6;ag;i1o2;aBhro1Dr8u3Uä7;t0us2;a8i7ug;n2Rtt;f,ge,t6;pp0u7;ch0s2;aLchFeDiBol0LpAt7uc5;a8e7ieg,reik0ärk0ü3I;c2Li3Jll3;mm3Knd6;iel0ra2;n7tz0;d,g0ke;i7nk3tz04;!d,en;aBeAi1Ql9rie8we2Zü7;tz0;!b;a39epp0;in0nk3;fZue;g7h,nk;e,te;e8ief,uts2ä7üc26;ch0um3;agiOi27;asJlant2Fr7;ophez2Xäg0;a7iedeV;hm6nn3;achAe9i8öch3ü7;sEßM;s2tb1Vßbrau2;in3lde3;e,te4;a9e8ie2Sud,ä7ös0;dt,g0;g3hn3;g6s7;se;aAlett9omme,ri8önne,ü7;mm14nd24;e2tisi7;er3;m6uB;aGerDiBo9ä7;lt,n27t7;te4;f7l3;fe;l2Xn7;blä0Pg0wegtäus2;rsche,vo7;rg7;ega1;be4l3nde8t7;!te4;le;a02e9i8l7;aub0i2änz0;b,lt,ng6;bUdTfSga1hRlQmac5pMrLsDtBw8z7;og0wu1;a8es0o7;nn0rd0;n2Ds2;an,r7;ag0o18;chBp2It9u7;c5n7;g0k0;a7orb0ri2;nd;a12l7;eu7o2B;st;at0u1;a8la7;nt;a7rkt;rt;a0Cu1;alt0t;a02u1E;ac5ru1;eAo9r7;a7o2;c5uc5;r0t0;!t0;b6lt;anEeIiCorderBreigeAuß0ördQü7;h7r13;le4r7;e4te4;sp1R;n,te4;el7ng0;!e4;d,g0;ingeVmpfSntMr7;fJga1hIinnerHklär0BläutGmögli03rDs9wäg0z7örtG;wu1ä7;hl0;ch7to2;i8o1Gü7;ttB;en6;ei7u1;ch7;e,t03;ern;n,t01;ob0öhS;r06ü7;ll0;ga1la15s7;ch8pr7tand6;a2e2ic5o2;ei8ied6;!en;de;a8i7;ng;hl,ng0;d7frVga1;ru1;enAr9urchd8ürf7;e,t0;ri1;a1i1ä1ück0;ke;a04eCiBliebHot,ra7;ch9u7;ch7;e4t;en,te4;e3n;aWdien0fSgQherrs2kam0mängPnötiNrJsCt7wältKzeichne3;on9r7;aVo7;ff0;en,t7;!e;chBitze,p0Et8uc5;ht;ra09ät7;ig7;en,te;ied,lo08w7äft9;or0;ich8ücksicht7;ig0;te3;te;ge4;!n;eln;an7li2onn0rab0;g0n;i9r8ür7;cht0;eit;nd0;bsichti7nspru2;ge;ng0t,u7;e,t;bJnFu7;fCs7;fiel,g7ma2spra2;e7i1;bMg8s7;cJpL;a1li2;ge7ma2;bIfa1ga1hob0zwu1;bot,ge7;bot0fa1ga1spGw7;an7;dt;ge8hä1;ng0;bBs7;c8tra7;ft;hlo7;ss0;ro2;ch0;en",
7759
+ "Verb": "true¦0:4P;1:4I;2:4O;3:3W;4:3U;a4Ab3Gd3Be2Nf2Gg1Nh1Ci23k1Al15m12n10p0Yr0Ws0Ht0Bu05vSwFz7ä6über5;ne10ras2sp39trUwa2;nd2Uußer4;eBi2Qog0u5ä2Nög0;ge9rück6sammen5;geb4Mhä1;ge6zu5;drä1erob2P;ga1wies0;la4Hsp4Iw4A;igDrstö1Y;aFeDi9o8u7ä6ü5;nsche3rde3;hl0re3;rd0ß4;l17rd0;ch0der24e6r5s0S;d,ke3;derhol5s;e,te;i5r2N;ch0gere,st;ch0Mndt0r5;!en,f,n4;er8or5;ausg0Uge5lK;d2Kga1schl5;ag0;bCdBfüg0gAhä1l8mHrat0s6tret0wechs39öffentlich5;en,t;chli1pr5ucht2W;e2ic2Ao2;a1oren5;!g0M;a1e3Sli2;eutli2ie17rä1;ot0u36;mg0Inter5;br8l7st5;r5üP;ei2ich05;ag;i1o2;a8hro0Zr6ue,ä5;t0us2;a5in26ug;f,t0;pp0u5;ch0s2;a2VchEeCiAol09p9t5;a6e5reik0ärk0ü2S;c20i2Tll4;mm5ndT;e,t;iel0ra2;n5tz0;d,g0ke;i5tzt0;!d,en;a8ein0ienMl7rie6we2Aü5;tz0;!b;a2Iepp0;fOue;ei1Qief,uts2ä5üc1N;ch0um4;asElant1Wr5;ophezeit,äg0;a5iedeM;hm0;ach1Eein4i6öch4ü5;s9ßF;s2tb1Dßbrau2;a6ehn4ie27ud,ä5ös0;dt,g0;g6s5;se;!en;am0omme,rie2önne,ü5;mm0Pnd1L;aCer9in8of7ä5;n1Qt5;te3;fe;blä0Hg0wegtäus2;rs0Ivo5;rg5;ega1;be3l4nde6t5;!te3;le;ab0e7i6l5;aub0i2änz0;b,ng;bPdOfNga1halt0lu1mac0JpJrIsBt9w6z5;og0wu1;a6es0o5;nn0rd0;n1Us2;an,r5;ag0o0W;ch8p1Yt7u5;c0Bn5;g0k0;a07orb0ri2;a0Rl5;eu5o1S;st;at0u1;a6la5;nt;a5rkt;rt;aVu11;acZru1;e8o7r5;a5o2;cWucW;r0t0;!t0;a1eEiAorder9reige8uß0ördKü5;h5rc0S;le3r5;e,te3;sp1B;n,te3;el08ng0;ingeQmpfPntIr5;fFga1hEinnerDklär05läutCmögliYrAs7wäg0z5örtC;wu1ä5;hl0;ch5to2;i0o12ü5;tt7;ei5u1;che;ern;n,tX;ob0öhP;r00ü5;ll0;ga1la0Ts5;ch8pr6ta5;nd;a2e2ic5o2;ht;ei5ied0;de;a1ing;d5frQga1;ru1;en8r7urchd6ürf5;e,t0;ri1;a1i1ä1ück0;ke;aXe9i8liebEra5;cSu5;ch5;e3t;e4n;aQdien0fNgLherrs2kam0mängKnötiIrFsAt5wältG;on7r5;aPo5;ff0;en,t5;!e;ch7itze,p04tät5;ig5;en,te;ied,lo00w5äft7;or0;ichte4ücksicht5;ig0;te;ge3;!n;eln;an5li2onn0rab0;g0n;i6ürc5;ht0;nd0;bsichti5nspru2;ge;ng0ue;bFngeCu5;f9s5;ge5ma2;bIg6s5;cFpH;a1li2;ge5ma2;bEfa1ga1hob0zwu1;bot0fa1ga1spDw5;an5;dt;ge6hä1;ng0;b8s5;c5traft;hlo5;ss0;ro2;ch0;en",
7413
7760
  "Noun": "true¦0:8A;1:7Z;2:89;3:7K;4:7H;5:7Q;6:87;7:7F;8:7P;9:5K;A:7B;B:84;a7Cb6Ec68d60e5Nf51g4Ah3Ti3Oj3Kk36l2Um27n20o1Zp1Kr16s0Gt07u03vSwHzDäCölvor5Jüber2J;gypten4Sngs3rz3;aEeDuCwic3E;ge,kä1Bstande5G;c4hn3Qit04l3;c6Ogr6T;aKeGiEocheCä4Lört2ürst2;!nC;!en7J;dersCnt1ssen4D;a4Zp5O;ge,hrpflichtige,iElt,n7GrCsen4T;n1rat36tC;!e,papi6U;g1se;ff0hl0ige9lC;den40es;arian3eIieHoC;igt,lk,rC;ab1Lg7Kpres2sCwürfe6;chußlorbe6NitzendeDtandsC;sp2PvA;!r;l77rteljahrhunde67;ned3PrC;antwortlic5brau4KdDgleic4haCkä0Plus3teid6F;l51ndlungst1N;acBächtige6;ltent2QmDnterCrN;geb4Sschri3U;brü2fr78sCwelt3D;chuldungs4Ntänd0;aHei9hyss0iGoFreDürC;!en;ndCpp2uhanda5O;!w7;de,nn0;e0Xg1s51;sc5tDuC;be,s7;sac5;aZchVeUiTkand2Non5DpOtEuDynod2Nz4UüC;d0pp2;c4detendeuts2mI;aJeIimHrEuCädt2;dieCf0nd0;ngebü3Qr7;aDeC;et,ß;t5Eß0;me6;inkohleze2l1Z;atsCdtrat,rza3T;a01di5U;arFd ErC;ac4echC;ch6Wer;frak3Ll4SvA;er,te;cBgnal6Wnn;i6Tuc5;arpings,e09in,neid1rDuld0wC;ierig0Käc5;eibt0MiCöd1;fts27tt;chCnkt,rajewo;e6sen-an5U;aOeGiFoEu4üC;ckCd58he;s16t5L;be4Wl1G;tu1Tv1;chGgierungsQiCst;h0sC;ch,eDighaC;uf0;!n5N;er2tC;e,saC;nwa8;c4hmen3A;aMeJfIhänom3Qioni4YoGrC;eDoCä08; kopf 08grammv1Ujek3tes3;isCsseE;absp61verfal9;lizeiCr2D;sp0V;enn1Xl0N;it2ArC;es,sC;onal,pek3Y;lästinense4MpieErC;lamentCol0teivA;es,swahl0;re;berfläc4f1Qliv1ppenheim1stslawonie1C;aGeEieDorCä4;be44drhein westf12;r0tz20;andert0QgativtrCuk24;end;chCme;b5Gr08s4Ft;aUcdonnTeQiJoIuGäFöglichEüC;lCn2;heim kärli34l1;keit0;d2rk3;lCseum;is30;dellcharakt1nats7rd;chae9eHlGnDtC;gefang2Gtwo2X;destDisterpräCut0;sident0;ein2B;itär,lia3U;rt,te;nDrC;kma02rD;achem,em,ge,schenre1C;ell;astrOl1nErktn45schinenDßC;e,n2G;!pistol0;ge9n;aIeGiFokal2SuCä32;dCft;ew0SwigC;!shaf3P;cBs3;ch,g7iCu4T;c5pz0O;ch1fontain2LndCst0teini11;eDgerC;icB;!sC;e18k12vA;aMe3BiKoGrDu2ZöCüc4;ln,nig4Nr3;a25iegsCu0U;en3TverbC;re1A;h9llekRmmun0nCst0;flik3tC;ak3rolC;le;nCrc5;ke9;bel,mpagn0rDss0tschthCuf;al1;is1Ut0;ahrEerusalDuCürg0;gendliche3Wppé;em;!es7hundertw7tausendw7zehnt;deFmperaEnDrCtali2Y;an,e24;ha8itiative6;tiv;al0;aJeFoDundertCäf0Tö4;taus7;eCr0T;ch0Sn0;broEn1WrCß;b0Qrn,sCzog;tell1;n 0T;ftJlInGuC;ptDshaltC;!sstreits;urs2NvC;erantwor0A;delsCs jo2;!ab0N;s,t;!a1O;a0EeIipHläub36mbh,oGrCünt1;oßofEundDöße,ünC;de6en;ig;fens35;lft20tt;fe9;bTfaRha8lPmeinde6nOrKsEwC;a8erkschaftC;en,svA;chFeCicBpräc5ta8;llCtze;schaC;ft0;iCwor08;ch3;ichtDäuC;sc4;!eC;!s;era9f;d,senkC;ir2;hr,ngeneC;n,r;ie3üC;hr0;aWdp0GeUiPlKoHrDäll0ührungseC;be0R;aDeiheiC;tli2;g0kCu0;tion1Q;l08rC;meln,sC;ch1;aFuDäc5üchC;tlin04;cBgangC;st;mm0sc5;liale6schC;!erC;!eiC;abC;komm0;ld,stgenommC;en0;ll28milienangehöriT;bNiHnGpoc4rDuC;le,ropä1;achDde,folg,ha8löse,wachC;en,sene1R;tens;de,tge8;m1nC;bFheiEnDzelhande9;ls;ahm0;m0Yt0;rüc4;ene6;am0eIgbHiEraDu0YörfC;ch0er;ch;enstDnCvid7;ge;e,mäd2; vA;fizi3legie12utsc5;du FhCo8;arakter1Lef,iC;le,nabesuchC;es;lCvA;ande0J;a02eTilSlutvergieß0oPrKuGüC;ch1hErgerC;!initiaC;tiv0;ne;ndesCrs2;aDhaus0FläCtagsabgeordne3vA;nder6;nsta8;ancheDief,oCöt2;schür0t;!nC;!kollC;eg0;rcCusquLx0;heC;rt;d,l;am3b0freiungstJhöIrGsEtrC;iCoffP;eb;chäftig0TucheC;r,s;ekCgsteEicht0Tnd;et;rd0;ig1;dHnErriDsf,ueC;rn;er0;an0kC;darlCen;eh0;en1;a2b0Bgab,kb0Al06nWrSsOuC;fFge,sC;lä06sCwei2;ag0chußvAicBprC;ac4;entIsDtC;ritt;ichtsratDtändC;is2;svA;orsiC;tz7;ha8;c4ylsuch7;enC;de;he;beitsEgumen3tenvielC;fa8;te;plätz0we8;geIhHlGsDtwoCwa8zeig0;rt0;icBprüc5ta8;lt;he6;ag0;äng1;hörCklagt0stellO;igeC;!n,r;exaDternatC;ive;nd1;er;ar;endIgeordneGhFsC;icBpC;ra2;ht;ör0;te6;!n;!e;ch0;en",
7414
7761
  "Country": "true¦0:2Q;1:2P;a2Ib23c21d1Se1Lf1Hg19h18i13j10k0Rl0Nm0En05o04pYrVsKtEu7v4weißrusXz3ä2öster1I;quatorial02thiopi0;entralafrik1Type9;anuatu,e2ietnam;nezue2Jreinigte 2;arabische emira1Kstaat0;.6gan2GkraiLn2ruWsbeD;ga4ited 2;arab emirates,kingdom,states2;! of ame1T;rn;k.,s.2; virgin islands,a.;a5ha9o4rinidad und toba1Nsch3u2ürk1U;n0Trkme2Evalu;ad,echi0;go,nga;dschi2nsan0Y;ki2B;aAchwed0e9i7low6omal0Wpa1ri lan0Jt. 5u4was3y26ão tomé und príncipe,üd2;afri0IkNsud2A;il1D;d28riname;kitts und nevis,luc0Svincent und die grenadD;ak1Je1;erra leo2mbabwe,ngapur;ne;negKr03ychell0;lomon0m2n marino,udi-ara02;b0Moa;e15u2;an1Rmä1s2;sl12;a4eGhilipp3o2;l0rtugD;in0;ki1Tl0Cnama,pua-neu3ra2;guay;guin0L;m1Rsttim0O;a8e6i4or2;dk2weg0;or0H;caragua,ederlanRger2;!ia;p2useel0P;al;mib04u2;ru;a4exi7ikronUo2yanmK;ldawi0n2samb0I;aco,gol0Stenegro;dagaskHl5r3ur2zedo1;eta1itius;ok2shallinseln;ko;a2ediv0i,ta;wi,ysU;a0Re4i2uxemburg;b2echtenste0Ttau0;erRy0;sotho,tX;a6enPir5o3roati0u2önigreich großbritan1;ba,wait;lum2mor0;bi0;gisi0ZibaZ;m4na0Rp ver3sach0Yt2;ar;de;bodscha,erI;a2em0;mai2p0U;ka;nd4r3s2ta0H;lVrael;ak,lU;i0on2;esi0;aiMondur0A;a6ha01r5u2;atema0Einea2ya00;!-biss2;au;ena0Aieche8;b3mb2;ia;un;i3rank2;reiX;dschi,n2;nlF;cu6l4ritr3s2;tlD;ea; salv3fenbeinküs2;te;ad2;or;e6omini3schibu2änemark;ti;ca,k2;anische republ2;ik;mokratische re3utschl2;and;publik kon2;go;hi9osta 2;rica;aAe8hutSo6r4u2;lgaMr2;kina faso,undi;asiEun2;ei;livi0snien und herzegowi2tswa2;na;l2n7;gi0ize;h4nglades3rbad2;os;ch;am3ra2;in;as;fghaBl7n4r3serbaidschDustra2;li0;genti1me1;dorra,go3tigua und barbu2;da;la;ba1ge2;ri0;ni0;en;ni2;st2;an",
7415
7762
  "Region": "true¦0:1S;1:20;a1Yb1Rc1Hd1Ces1Bf18g12h0Zi0Wj0Uk0Sl0Rm0GnZoXpSqPrMsDtAut9v6w4y2zacatec20;o05u2;cat17kZ;a2est vi4isconsin,yomi13;rwick0shington dc;er3i2;rgin1R;acruz,mont;ah,tar pradesh;a3e2laxca1DuscaB;nnessee,x1Q;bas0Kmaulip1PsmK;a7i5o3taf0Ou2ylh13;ffWrr02s0Y;me10no1Auth 2;cTdS;ber1Hc2naloa;hu0Sily;n3skatchew0Rxo2;ny; luis potosi,ta catari1;a2hode8;j2ngp04;asth0Mshahi;inghai,u2;e2intana roo;bec,ensYreta0E;ara5e3rince edward2; isW;i,nnsylv2rnambu02;an13;!na;axa0Ndisha,h2klaho1Antar2reg5x04;io;ayarit,eCo4u2;evo le2nav0L;on;r2tt0Rva scot0W;f7mandy,th2; 2ampton0;c4d3yo2;rk0;ako0X;aroli1;olk;bras0Wva01w2; 3foundland2;! and labrador;brunswick,hamp0jers3mexiJyork2;! state;ey;a7i3o2;nta1relos;ch4dlands,n3ss2;issippi,ouri;as geraFneso0K;igPoacP;dhya,harasht03ine,ni4r2ssachusetts;anhao,y2;land;p2toba;ur;anca0eiHincoln0ouis7;a2entucky,hul1;ns08rnata0Dshmir;alis2iangxi;co;daho,llino3nd2owa;ia1;is;a3ert2idalFunB;ford0;mp0waii;ansu,eorgWlou6u2;an3erre2izhou,jarat;ro;ajuato,gdo2;ng;cester0;lori3uji2;an;da;sex;e5o3uran2;go;rs2;et;lawaFrby0;a9ea8hi7o2umbrH;ahui5l4nnectic3rsi2ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m2;bridge0peche;a5ritish columb7uck2;ingham0;shi2;re;h3ja cal2sque,var3;iforn2;ia;guascalientes,l5r2;izo1kans2;as;na;a3ber2;ta;ba3s2;ka;ma",
@@ -7594,12 +7941,12 @@
7594
7941
  // add conjugations for our verbs
7595
7942
  if (tag === 'Infinitive') {
7596
7943
  // add present tense
7597
- let pres = conjugate.toPresent(w);
7944
+ let pres = verb.toPresent(w);
7598
7945
  if (pres && pres !== w) {
7599
7946
  lexicon$1[pres] = 'PresentTense';
7600
7947
  }
7601
7948
  // add past tense
7602
- let past = conjugate.toPast(w);
7949
+ let past = verb.toPast(w);
7603
7950
  if (past && past !== w) {
7604
7951
  lexicon$1[past] = 'PastTense';
7605
7952
  }
@@ -7611,11 +7958,90 @@
7611
7958
 
7612
7959
  var lexicon$2 = lexicon$1;
7613
7960
 
7961
+ const verbForm = function (term) {
7962
+ let want = [
7963
+ 'FirstPerson',
7964
+ 'SecondPerson',
7965
+ 'ThirdPerson',
7966
+ 'FirstPersonPlural',
7967
+ 'SecondPersonPlural',
7968
+ 'ThirdPersonPlural',
7969
+ ];
7970
+ return want.find(tag => term.tags.has(tag))
7971
+ };
7972
+
7973
+ //relajarse -> relajar
7974
+ const stripReflexive = function (str) {
7975
+ str = str.replace(/se$/, '');
7976
+ str = str.replace(/te$/, '');
7977
+ str = str.replace(/me$/, '');
7978
+ return str
7979
+ };
7980
+
7981
+ const root = function (view) {
7982
+
7983
+ const { verb, noun, adjective } = view.world.methods.two.transform;
7984
+ view.docs.forEach(terms => {
7985
+ terms.forEach(term => {
7986
+ let str = term.implicit || term.normal || term.text;
7987
+
7988
+ if (term.tags.has('Reflexive')) {
7989
+ str = stripReflexive(str);
7990
+ }
7991
+ // get infinitive form of the verb
7992
+ if (term.tags.has('Verb')) {
7993
+ let form = verbForm(term);
7994
+ if (term.tags.has('Gerund')) {
7995
+ term.root = verb.fromGerund(str, form);
7996
+ } else if (term.tags.has('PresentTense')) {
7997
+ term.root = verb.fromPresent(str, form);
7998
+ } else if (term.tags.has('PastTense')) {
7999
+ term.root = verb.fromPast(str, form);
8000
+ } else if (term.tags.has('FutureTense')) {
8001
+ term.root = verb.fromFuture(str, form);
8002
+ } else if (term.tags.has('Conditional')) {
8003
+ term.root = verb.fromConditional(str, form);
8004
+ } else ;
8005
+ }
8006
+
8007
+ // nouns -> singular masculine form
8008
+ // if (term.tags.has('Noun')) {
8009
+ // if (term.tags.has('Plural')) {
8010
+ // str = noun.toSingular(str)
8011
+ // }
8012
+ // if (term.tags.has('FemaleNoun')) {
8013
+ // // not sure about this
8014
+ // // str = noun.toMasculine(str)
8015
+ // }
8016
+ // term.root = str
8017
+ // }
8018
+
8019
+ // // nouns -> singular masculine form
8020
+ // if (term.tags.has('Adjective')) {
8021
+ // if (term.tags.has('PluralAdjective')) {
8022
+ // if (term.tags.has('FemaleAdjective')) {
8023
+ // str = adjective.fromFemalePlural(str)
8024
+ // } else {
8025
+ // str = adjective.toSingular(str)
8026
+ // }
8027
+ // }
8028
+ // if (term.tags.has('FemaleAdjective')) {
8029
+ // str = adjective.fromFemale(str)
8030
+ // }
8031
+ // term.root = str
8032
+ // }
8033
+ });
8034
+ });
8035
+ return view
8036
+ };
8037
+ var root$1 = root;
8038
+
7614
8039
  var lexicon = {
8040
+ compute: { root: root$1 },
7615
8041
  methods: {
7616
- one: {
8042
+ two: {
7617
8043
  transform: {
7618
- conjugate
8044
+ verb: verb
7619
8045
  }
7620
8046
  }
7621
8047
  },
@@ -7744,7 +8170,7 @@
7744
8170
  },
7745
8171
  };
7746
8172
 
7747
- var verbs$1 = {
8173
+ var verbs$2 = {
7748
8174
  Verb: {
7749
8175
  not: ['Noun', 'Adjective', 'Adverb', 'Value', 'Expression'],
7750
8176
  },
@@ -7962,7 +8388,7 @@
7962
8388
  },
7963
8389
  };
7964
8390
 
7965
- let tags = Object.assign({}, nouns$1, verbs$1, values$1, dates, misc);
8391
+ let tags = Object.assign({}, nouns$1, verbs$2, values$1, dates, misc);
7966
8392
 
7967
8393
  var tagset = {
7968
8394
  tags
@@ -8099,7 +8525,7 @@
8099
8525
 
8100
8526
  let values = { more: [] };
8101
8527
  let nouns = { more: [] };
8102
- let verbs = { more: [] };
8528
+ let verbs$1 = { more: [] };
8103
8529
  let adjectives = { more: [] };
8104
8530
 
8105
8531
  var model$1 = {
@@ -8107,7 +8533,7 @@
8107
8533
  splitter: {
8108
8534
  values,
8109
8535
  nouns,
8110
- verbs,
8536
+ verbs: verbs$1,
8111
8537
  adjectives
8112
8538
  }
8113
8539
  }
@@ -9230,9 +9656,9 @@
9230
9656
  var format = formatNumber;
9231
9657
 
9232
9658
  // return the nth elem of a doc
9233
- const getNth = (doc, n) => (typeof n === 'number' ? doc.eq(n) : doc);
9659
+ const getNth$1 = (doc, n) => (typeof n === 'number' ? doc.eq(n) : doc);
9234
9660
 
9235
- const api = function (View) {
9661
+ const api$2 = function (View) {
9236
9662
  /** */
9237
9663
  class Numbers extends View {
9238
9664
  constructor(document, pointer, groups) {
@@ -9240,13 +9666,13 @@
9240
9666
  this.viewType = 'Numbers';
9241
9667
  }
9242
9668
  parse(n) {
9243
- return getNth(this, n).map(parse)
9669
+ return getNth$1(this, n).map(parse)
9244
9670
  }
9245
9671
  get(n) {
9246
- return getNth(this, n).map(parse).map(o => o.num)
9672
+ return getNth$1(this, n).map(parse).map(o => o.num)
9247
9673
  }
9248
9674
  json(n) {
9249
- let doc = getNth(this, n);
9675
+ let doc = getNth$1(this, n);
9250
9676
  return doc.map(p => {
9251
9677
  let json = p.toView().json(n)[0];
9252
9678
  let parsed = parse(p);
@@ -9477,19 +9903,62 @@
9477
9903
  }
9478
9904
  // make sure splitter has run
9479
9905
  m.compute('splitter');
9480
- m = getNth(m, n);
9906
+ m = getNth$1(m, n);
9481
9907
  return new Numbers(this.document, m.pointer)
9482
9908
  };
9483
9909
  // alias
9484
9910
  View.prototype.values = View.prototype.numbers;
9485
9911
  };
9486
- var api$1 = api;
9912
+ var api$3 = api$2;
9487
9913
 
9488
9914
  var numbers = {
9489
- api: api$1
9915
+ api: api$3
9490
9916
  };
9491
9917
 
9492
- var version = '0.0.5';
9918
+ const getNth = (doc, n) => (typeof n === 'number' ? doc.eq(n) : doc);
9919
+
9920
+ // get root form of adjective
9921
+ const getRoot = function (m, methods) {
9922
+ m.compute('root');
9923
+ let str = m.text('root');
9924
+ return str
9925
+ };
9926
+
9927
+ const api = function (View) {
9928
+ class Verbs extends View {
9929
+ constructor(document, pointer, groups) {
9930
+ super(document, pointer, groups);
9931
+ this.viewType = 'Verbs';
9932
+ }
9933
+ conjugate(n) {
9934
+ const methods = this.methods.two.transform.verb;
9935
+ const { toPresent, toPast, toFuture, toConditional, toGerund } = methods;
9936
+ return getNth(this, n).map(m => {
9937
+ let str = getRoot(m);
9938
+ return {
9939
+ presentTense: toPresent(str),
9940
+ pastTense: toPast(str),
9941
+ // futureTense: toFuture(str),
9942
+ // conditional: toConditional(str),
9943
+ // gerund: toGerund(str),
9944
+ }
9945
+ }, [])
9946
+ }
9947
+ }
9948
+
9949
+ View.prototype.verbs = function (n) {
9950
+ let m = this.match('#Verb+');
9951
+ m = getNth(m, n);
9952
+ return new Verbs(this.document, m.pointer)
9953
+ };
9954
+ };
9955
+ var api$1 = api;
9956
+
9957
+ var verbs = {
9958
+ api: api$1,
9959
+ };
9960
+
9961
+ var version = '0.0.6';
9493
9962
 
9494
9963
  nlp$1.plugin(tokenizer);
9495
9964
  nlp$1.plugin(tagset);
@@ -9498,13 +9967,25 @@
9498
9967
  nlp$1.plugin(postTagger);
9499
9968
  nlp$1.plugin(splitter);
9500
9969
  nlp$1.plugin(numbers);
9501
-
9970
+ nlp$1.plugin(verbs);
9502
9971
 
9503
9972
  const de = function (txt, lex) {
9504
9973
  let dok = nlp$1(txt, lex);
9505
9974
  return dok
9506
9975
  };
9507
9976
 
9977
+ // copy constructor methods over
9978
+ Object.keys(nlp$1).forEach(k => {
9979
+ if (nlp$1.hasOwnProperty(k)) {
9980
+ de[k] = nlp$1[k];
9981
+ }
9982
+ });
9983
+
9984
+ // this one is hidden
9985
+ Object.defineProperty(de, '_world', {
9986
+ value: nlp$1._world,
9987
+ writable: true,
9988
+ });
9508
9989
  /** log the decision-making to console */
9509
9990
  de.verbose = function (set) {
9510
9991
  let env = typeof process === 'undefined' ? self.env || {} : process.env; //use window, in browser