de-compromise 0.0.5 → 0.0.7
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.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/builds/de-compromise.cjs +785 -173
- package/builds/de-compromise.min.js +1 -2
- package/builds/de-compromise.mjs +1 -2
- package/package.json +8 -6
package/builds/de-compromise.cjs
CHANGED
|
@@ -251,6 +251,27 @@
|
|
|
251
251
|
}, 0)
|
|
252
252
|
},
|
|
253
253
|
|
|
254
|
+
// is the pointer the full sentence?
|
|
255
|
+
isFull: function () {
|
|
256
|
+
let ptrs = this.pointer;
|
|
257
|
+
if (!ptrs) {
|
|
258
|
+
return true
|
|
259
|
+
}
|
|
260
|
+
let document = this.document;
|
|
261
|
+
for (let i = 0; i < ptrs.length; i += 1) {
|
|
262
|
+
let [n, start, end] = ptrs[i];
|
|
263
|
+
// it's not the start
|
|
264
|
+
if (n !== i || start !== 0) {
|
|
265
|
+
return false
|
|
266
|
+
}
|
|
267
|
+
// it's too short
|
|
268
|
+
if (document[n].length > end) {
|
|
269
|
+
return false
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return true
|
|
273
|
+
}
|
|
274
|
+
|
|
254
275
|
};
|
|
255
276
|
utils.group = utils.groups;
|
|
256
277
|
utils.fullSentence = utils.fullSentences;
|
|
@@ -263,7 +284,7 @@
|
|
|
263
284
|
|
|
264
285
|
// aliases
|
|
265
286
|
methods$l.get = methods$l.eq;
|
|
266
|
-
var api$
|
|
287
|
+
var api$f = methods$l;
|
|
267
288
|
|
|
268
289
|
class View {
|
|
269
290
|
constructor(document, pointer, groups = {}) {
|
|
@@ -388,10 +409,10 @@
|
|
|
388
409
|
return m
|
|
389
410
|
}
|
|
390
411
|
}
|
|
391
|
-
Object.assign(View.prototype, api$
|
|
412
|
+
Object.assign(View.prototype, api$f);
|
|
392
413
|
var View$1 = View;
|
|
393
414
|
|
|
394
|
-
var version$1 = '14.
|
|
415
|
+
var version$1 = '14.7.0';
|
|
395
416
|
|
|
396
417
|
const isObject$6 = function (item) {
|
|
397
418
|
return item && typeof item === 'object' && !Array.isArray(item)
|
|
@@ -426,6 +447,54 @@
|
|
|
426
447
|
return model
|
|
427
448
|
}
|
|
428
449
|
|
|
450
|
+
const addIrregulars = function (model, conj) {
|
|
451
|
+
let m = model.two.models || {};
|
|
452
|
+
Object.keys(conj).forEach(k => {
|
|
453
|
+
// verb forms
|
|
454
|
+
if (conj[k].pastTense) {
|
|
455
|
+
if (m.toPast) {
|
|
456
|
+
m.toPast.exceptions[k] = conj[k].pastTense;
|
|
457
|
+
}
|
|
458
|
+
if (m.fromPast) {
|
|
459
|
+
m.fromPast.exceptions[conj[k].pastTense] = k;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
if (conj[k].presentTense) {
|
|
463
|
+
if (m.toPresent) {
|
|
464
|
+
m.toPresent.exceptions[k] = conj[k].presentTense;
|
|
465
|
+
}
|
|
466
|
+
if (m.fromPresent) {
|
|
467
|
+
m.fromPresent.exceptions[conj[k].presentTense] = k;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
if (conj[k].gerund) {
|
|
471
|
+
if (m.toGerund) {
|
|
472
|
+
m.toGerund.exceptions[k] = conj[k].gerund;
|
|
473
|
+
}
|
|
474
|
+
if (m.fromGerund) {
|
|
475
|
+
m.fromGerund.exceptions[conj[k].gerund] = k;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
// adjective forms
|
|
479
|
+
if (conj[k].comparative) {
|
|
480
|
+
if (m.toComparative) {
|
|
481
|
+
m.toComparative.exceptions[k] = conj[k].comparative;
|
|
482
|
+
}
|
|
483
|
+
if (m.fromComparative) {
|
|
484
|
+
m.fromComparative.exceptions[conj[k].comparative] = k;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (conj[k].superlative) {
|
|
488
|
+
if (m.toSuperlative) {
|
|
489
|
+
m.toSuperlative.exceptions[k] = conj[k].superlative;
|
|
490
|
+
}
|
|
491
|
+
if (m.fromSuperlative) {
|
|
492
|
+
m.fromSuperlative.exceptions[conj[k].superlative] = k;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
};
|
|
497
|
+
|
|
429
498
|
const extend = function (plugin, world, View, nlp) {
|
|
430
499
|
const { methods, model, compute, hooks } = world;
|
|
431
500
|
if (plugin.methods) {
|
|
@@ -434,6 +503,9 @@
|
|
|
434
503
|
if (plugin.model) {
|
|
435
504
|
mergeDeep(model, plugin.model);
|
|
436
505
|
}
|
|
506
|
+
if (plugin.irregulars) {
|
|
507
|
+
addIrregulars(model, plugin.irregulars);
|
|
508
|
+
}
|
|
437
509
|
// shallow-merge compute
|
|
438
510
|
if (plugin.compute) {
|
|
439
511
|
Object.assign(compute, plugin.compute);
|
|
@@ -661,7 +733,7 @@
|
|
|
661
733
|
const addAPI$3 = function (View) {
|
|
662
734
|
Object.assign(View.prototype, methods$j);
|
|
663
735
|
};
|
|
664
|
-
var api$
|
|
736
|
+
var api$e = addAPI$3;
|
|
665
737
|
|
|
666
738
|
var compute$8 = {
|
|
667
739
|
cache: function (view) {
|
|
@@ -670,7 +742,7 @@
|
|
|
670
742
|
};
|
|
671
743
|
|
|
672
744
|
var cache$1 = {
|
|
673
|
-
api: api$
|
|
745
|
+
api: api$e,
|
|
674
746
|
compute: compute$8,
|
|
675
747
|
methods: methods$k,
|
|
676
748
|
};
|
|
@@ -891,7 +963,7 @@
|
|
|
891
963
|
// are we inserting inside a contraction?
|
|
892
964
|
// expand it first
|
|
893
965
|
const expand$2 = function (m) {
|
|
894
|
-
if (m.has('@hasContraction')) {//&& m.after('^.').has('@hasContraction')
|
|
966
|
+
if (m.has('@hasContraction') && typeof m.contractions === 'function') {//&& m.after('^.').has('@hasContraction')
|
|
895
967
|
let more = m.grow('@hasContraction');
|
|
896
968
|
more.contractions().expand();
|
|
897
969
|
}
|
|
@@ -916,7 +988,7 @@
|
|
|
916
988
|
}
|
|
917
989
|
//allow a view object
|
|
918
990
|
if (typeof input === 'object' && input.isView) {
|
|
919
|
-
return input.clone().docs[0] //assume one sentence
|
|
991
|
+
return input.clone().docs[0] || [] //assume one sentence
|
|
920
992
|
}
|
|
921
993
|
//allow an array of terms, too
|
|
922
994
|
if (isArray$7(input)) {
|
|
@@ -937,6 +1009,10 @@
|
|
|
937
1009
|
// add-in the words
|
|
938
1010
|
let home = document[n];
|
|
939
1011
|
let terms = getTerms(input, world);
|
|
1012
|
+
// are we inserting nothing?
|
|
1013
|
+
if (terms.length === 0) {
|
|
1014
|
+
return
|
|
1015
|
+
}
|
|
940
1016
|
terms = addIds$2(terms);
|
|
941
1017
|
if (prepend) {
|
|
942
1018
|
expand$2(view.update([ptr]).firstTerm());
|
|
@@ -1029,6 +1105,9 @@
|
|
|
1029
1105
|
// original.freeze()
|
|
1030
1106
|
let oldTags = (original.docs[0] || []).map(term => Array.from(term.tags));
|
|
1031
1107
|
// slide this in
|
|
1108
|
+
if (typeof input === 'string') {
|
|
1109
|
+
input = this.fromText(input).compute('id');
|
|
1110
|
+
}
|
|
1032
1111
|
main.insertAfter(input);
|
|
1033
1112
|
// are we replacing part of a contraction?
|
|
1034
1113
|
if (original.has('@hasContraction') && main.contractions) {
|
|
@@ -1052,6 +1131,13 @@
|
|
|
1052
1131
|
if (keep.case && m.docs[0] && m.docs[0][0] && m.docs[0][0].index[1] === 0) {
|
|
1053
1132
|
m.docs[0][0].text = titleCase$2(m.docs[0][0].text);
|
|
1054
1133
|
}
|
|
1134
|
+
// console.log(input.docs[0])
|
|
1135
|
+
// let regs = input.docs[0].map(t => {
|
|
1136
|
+
// return { id: t.id, optional: true }
|
|
1137
|
+
// })
|
|
1138
|
+
// m.after('(a|hoy)').debug()
|
|
1139
|
+
// m.growRight('(a|hoy)').debug()
|
|
1140
|
+
// console.log(m)
|
|
1055
1141
|
return m
|
|
1056
1142
|
};
|
|
1057
1143
|
|
|
@@ -1063,6 +1149,7 @@
|
|
|
1063
1149
|
if (!m.found) {
|
|
1064
1150
|
return this
|
|
1065
1151
|
}
|
|
1152
|
+
this.soften();
|
|
1066
1153
|
return m.replaceWith(input, keep)
|
|
1067
1154
|
};
|
|
1068
1155
|
var replace = fns$2;
|
|
@@ -1172,9 +1259,10 @@
|
|
|
1172
1259
|
self = this;
|
|
1173
1260
|
not = this.match(reg);
|
|
1174
1261
|
}
|
|
1262
|
+
let isFull = !self.ptrs;
|
|
1175
1263
|
// is it part of a contraction?
|
|
1176
|
-
if (
|
|
1177
|
-
let more =
|
|
1264
|
+
if (not.has('@hasContraction') && not.contractions) {
|
|
1265
|
+
let more = not.grow('@hasContraction');
|
|
1178
1266
|
more.contractions().expand();
|
|
1179
1267
|
}
|
|
1180
1268
|
|
|
@@ -1185,11 +1273,14 @@
|
|
|
1185
1273
|
// repair our pointers
|
|
1186
1274
|
let gonePtrs = indexN(nots);
|
|
1187
1275
|
ptrs = fixPointers$1(ptrs, gonePtrs);
|
|
1188
|
-
|
|
1189
1276
|
// clean up our original inputs
|
|
1190
1277
|
self.ptrs = ptrs;
|
|
1191
1278
|
self.document = document;
|
|
1192
1279
|
self.compute('index');
|
|
1280
|
+
// if we started zoomed-out, try to end zoomed-out
|
|
1281
|
+
if (isFull) {
|
|
1282
|
+
self.ptrs = undefined;
|
|
1283
|
+
}
|
|
1193
1284
|
if (!reg) {
|
|
1194
1285
|
this.ptrs = [];
|
|
1195
1286
|
return self.none()
|
|
@@ -1495,14 +1586,20 @@
|
|
|
1495
1586
|
var concat = {
|
|
1496
1587
|
// add string as new match/sentence
|
|
1497
1588
|
concat: function (input) {
|
|
1498
|
-
const { methods, document, world } = this;
|
|
1499
1589
|
// parse and splice-in new terms
|
|
1500
1590
|
if (typeof input === 'string') {
|
|
1501
|
-
let
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1591
|
+
let more = this.fromText(input);
|
|
1592
|
+
// easy concat
|
|
1593
|
+
if (!this.found || !this.ptrs) {
|
|
1594
|
+
this.document = this.document.concat(more.document);
|
|
1595
|
+
} else {
|
|
1596
|
+
// if we are in the middle, this is actually a splice operation
|
|
1597
|
+
let ptrs = this.fullPointer;
|
|
1598
|
+
let at = ptrs[ptrs.length - 1][0];
|
|
1599
|
+
this.document.splice(at, 0, ...more.document);
|
|
1600
|
+
}
|
|
1601
|
+
// put the docs
|
|
1602
|
+
return this.all().compute('index')
|
|
1506
1603
|
}
|
|
1507
1604
|
// plop some view objects together
|
|
1508
1605
|
if (typeof input === 'object' && input.isView) {
|
|
@@ -1540,7 +1637,7 @@
|
|
|
1540
1637
|
const addAPI$2 = function (View) {
|
|
1541
1638
|
Object.assign(View.prototype, methods$f);
|
|
1542
1639
|
};
|
|
1543
|
-
var api$
|
|
1640
|
+
var api$d = addAPI$2;
|
|
1544
1641
|
|
|
1545
1642
|
const compute$6 = {
|
|
1546
1643
|
id: function (view) {
|
|
@@ -1557,7 +1654,7 @@
|
|
|
1557
1654
|
var compute$7 = compute$6;
|
|
1558
1655
|
|
|
1559
1656
|
var change = {
|
|
1560
|
-
api: api$
|
|
1657
|
+
api: api$d,
|
|
1561
1658
|
compute: compute$7,
|
|
1562
1659
|
};
|
|
1563
1660
|
|
|
@@ -1787,7 +1884,7 @@
|
|
|
1787
1884
|
};
|
|
1788
1885
|
var numberRange$1 = numberRange;
|
|
1789
1886
|
|
|
1790
|
-
const numUnit = /^([0-9
|
|
1887
|
+
const numUnit = /^([+-]?[0-9][.,0-9]*)([a-z°²³µ/]+)$/; //(must be lowercase)
|
|
1791
1888
|
|
|
1792
1889
|
const notUnit = new Set([
|
|
1793
1890
|
'st',
|
|
@@ -1796,7 +1893,10 @@
|
|
|
1796
1893
|
'th',
|
|
1797
1894
|
'am',
|
|
1798
1895
|
'pm',
|
|
1799
|
-
'max'
|
|
1896
|
+
'max',
|
|
1897
|
+
'°',
|
|
1898
|
+
's', // 1990s
|
|
1899
|
+
'e' // 18e - french/spanish ordinal
|
|
1800
1900
|
]);
|
|
1801
1901
|
|
|
1802
1902
|
const numberUnit = function (terms, i) {
|
|
@@ -2132,7 +2232,7 @@
|
|
|
2132
2232
|
|
|
2133
2233
|
const tokenize$2 = function (phrase, world) {
|
|
2134
2234
|
const { methods, model } = world;
|
|
2135
|
-
let terms = methods.one.tokenize.splitTerms(phrase, model).map(methods.one.tokenize.splitWhitespace);
|
|
2235
|
+
let terms = methods.one.tokenize.splitTerms(phrase, model).map(t => methods.one.tokenize.splitWhitespace(t, model));
|
|
2136
2236
|
return terms.map(term => term.text.toLowerCase())
|
|
2137
2237
|
};
|
|
2138
2238
|
|
|
@@ -2268,7 +2368,7 @@
|
|
|
2268
2368
|
return Object.prototype.toString.call(val) === '[object Object]'
|
|
2269
2369
|
};
|
|
2270
2370
|
|
|
2271
|
-
function api$
|
|
2371
|
+
function api$c (View) {
|
|
2272
2372
|
|
|
2273
2373
|
/** find all matches in this document */
|
|
2274
2374
|
View.prototype.lookup = function (input, opts = {}) {
|
|
@@ -2326,7 +2426,7 @@
|
|
|
2326
2426
|
lib$4.compile = lib$4.buildTrie;
|
|
2327
2427
|
|
|
2328
2428
|
var lookup = {
|
|
2329
|
-
api: api$
|
|
2429
|
+
api: api$c,
|
|
2330
2430
|
lib: lib$4
|
|
2331
2431
|
};
|
|
2332
2432
|
|
|
@@ -2686,7 +2786,7 @@
|
|
|
2686
2786
|
const matchAPI = function (View) {
|
|
2687
2787
|
Object.assign(View.prototype, methods$c);
|
|
2688
2788
|
};
|
|
2689
|
-
var api$
|
|
2789
|
+
var api$b = matchAPI;
|
|
2690
2790
|
|
|
2691
2791
|
// match 'foo /yes/' and not 'foo/no/bar'
|
|
2692
2792
|
const bySlashes = /(?:^|\s)([![^]*(?:<[^<]*>)?\/.*?[^\\/]\/[?\]+*$~]*)(?:\s|$)/;
|
|
@@ -2992,45 +3092,59 @@
|
|
|
2992
3092
|
};
|
|
2993
3093
|
var splitHyphens$2 = splitHyphens$1;
|
|
2994
3094
|
|
|
3095
|
+
// add all conjugations of this verb
|
|
2995
3096
|
const addVerbs = function (token, world) {
|
|
2996
|
-
let {
|
|
2997
|
-
let
|
|
2998
|
-
|
|
2999
|
-
|
|
3097
|
+
let { all } = world.methods.two.transform.verb || {};
|
|
3098
|
+
let str = token.root;
|
|
3099
|
+
// if (toInfinitive) {
|
|
3100
|
+
// str = toInfinitive(str, world.model)
|
|
3101
|
+
// }
|
|
3102
|
+
if (!all) {
|
|
3103
|
+
return []
|
|
3104
|
+
}
|
|
3105
|
+
return all(str, world.model)
|
|
3000
3106
|
};
|
|
3001
3107
|
|
|
3108
|
+
// add all inflections of this noun
|
|
3002
3109
|
const addNoun = function (token, world) {
|
|
3003
|
-
let {
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3110
|
+
let { all } = world.methods.two.transform.noun || {};
|
|
3111
|
+
if (!all) {
|
|
3112
|
+
return [token.root]
|
|
3113
|
+
}
|
|
3114
|
+
return all(token.root, world.model)
|
|
3007
3115
|
};
|
|
3008
3116
|
|
|
3117
|
+
// add all inflections of this adjective
|
|
3009
3118
|
const addAdjective = function (token, world) {
|
|
3010
|
-
let {
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
return res
|
|
3119
|
+
let { all } = world.methods.two.transform.adjective || {};
|
|
3120
|
+
if (!all) {
|
|
3121
|
+
return [token.root]
|
|
3122
|
+
}
|
|
3123
|
+
return all(token.root, world.model)
|
|
3016
3124
|
};
|
|
3017
3125
|
|
|
3018
3126
|
// turn '{walk}' into 'walking', 'walked', etc
|
|
3019
3127
|
const inflectRoot = function (regs, world) {
|
|
3020
3128
|
// do we have compromise/two?
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
if
|
|
3129
|
+
regs = regs.map(token => {
|
|
3130
|
+
// a reg to convert '{foo}'
|
|
3131
|
+
if (token.root) {
|
|
3132
|
+
// check if compromise/two is loaded
|
|
3133
|
+
if (world.methods.two && world.methods.two.transform) {
|
|
3025
3134
|
let choices = [];
|
|
3026
|
-
|
|
3135
|
+
// have explicitly set from POS - '{sweet/adjective}'
|
|
3136
|
+
if (token.pos) {
|
|
3137
|
+
if (token.pos === 'Verb') {
|
|
3138
|
+
choices = choices.concat(addVerbs(token, world));
|
|
3139
|
+
} else if (token.pos === 'Noun') {
|
|
3140
|
+
choices = choices.concat(addNoun(token, world));
|
|
3141
|
+
} else if (token.pos === 'Adjective') {
|
|
3142
|
+
choices = choices.concat(addAdjective(token, world));
|
|
3143
|
+
}
|
|
3144
|
+
} else {
|
|
3145
|
+
// do verb/noun/adj by default
|
|
3027
3146
|
choices = choices.concat(addVerbs(token, world));
|
|
3028
|
-
}
|
|
3029
|
-
if (!token.pos || token.pos === 'Noun') {
|
|
3030
3147
|
choices = choices.concat(addNoun(token, world));
|
|
3031
|
-
}
|
|
3032
|
-
// don't run these by default
|
|
3033
|
-
if (!token.pos || token.pos === 'Adjective') {
|
|
3034
3148
|
choices = choices.concat(addAdjective(token, world));
|
|
3035
3149
|
}
|
|
3036
3150
|
choices = choices.filter(str => str);
|
|
@@ -3038,10 +3152,16 @@
|
|
|
3038
3152
|
token.operator = 'or';
|
|
3039
3153
|
token.fastOr = new Set(choices);
|
|
3040
3154
|
}
|
|
3155
|
+
} else {
|
|
3156
|
+
// if no compromise/two, drop down into 'machine' lookup
|
|
3157
|
+
token.machine = token.root;
|
|
3158
|
+
delete token.id;
|
|
3159
|
+
delete token.root;
|
|
3041
3160
|
}
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
}
|
|
3161
|
+
}
|
|
3162
|
+
return token
|
|
3163
|
+
});
|
|
3164
|
+
|
|
3045
3165
|
return regs
|
|
3046
3166
|
};
|
|
3047
3167
|
var inflectRoot$1 = inflectRoot;
|
|
@@ -3276,7 +3396,7 @@
|
|
|
3276
3396
|
const endQuote = /([\u0022\uFF02\u0027\u201D\u2019\u00BB\u203A\u2032\u2033\u2034\u301E\u00B4])/;
|
|
3277
3397
|
|
|
3278
3398
|
const hasHyphen$1 = /^[-–—]$/;
|
|
3279
|
-
const hasDash$1 = / [-–—] /;
|
|
3399
|
+
const hasDash$1 = / [-–—]{1,3} /;
|
|
3280
3400
|
|
|
3281
3401
|
/** search the term's 'post' punctuation */
|
|
3282
3402
|
const hasPost = (term, punct) => term.post.indexOf(punct) !== -1;
|
|
@@ -3298,6 +3418,8 @@
|
|
|
3298
3418
|
hasEllipses: term => hasPost(term, '..') || hasPost(term, '…') || hasPre(term, '..') || hasPre(term, '…'),
|
|
3299
3419
|
/** is there a semicolon after term word? */
|
|
3300
3420
|
hasSemicolon: term => hasPost(term, ';'),
|
|
3421
|
+
/** is there a colon after term word? */
|
|
3422
|
+
hasColon: term => hasPost(term, ':'),
|
|
3301
3423
|
/** is there a slash '/' in term word? */
|
|
3302
3424
|
hasSlash: term => /\//.test(term.text),
|
|
3303
3425
|
/** a hyphen connects two words like-term */
|
|
@@ -3336,6 +3458,10 @@
|
|
|
3336
3458
|
if (reg.end === true && index !== length - 1) {
|
|
3337
3459
|
return false
|
|
3338
3460
|
}
|
|
3461
|
+
// match an id
|
|
3462
|
+
if (reg.id !== undefined && reg.id === term.id) {
|
|
3463
|
+
return true
|
|
3464
|
+
}
|
|
3339
3465
|
//support a text match
|
|
3340
3466
|
if (reg.word !== undefined) {
|
|
3341
3467
|
// check case-sensitivity, etc
|
|
@@ -3680,17 +3806,82 @@
|
|
|
3680
3806
|
};
|
|
3681
3807
|
var doAndBlock = andBlock;
|
|
3682
3808
|
|
|
3809
|
+
const negGreedy = function (state, reg, nextReg) {
|
|
3810
|
+
let skip = 0;
|
|
3811
|
+
for (let t = state.t; t < state.terms.length; t += 1) {
|
|
3812
|
+
let found = matchTerm(state.terms[t], reg, state.start_i + state.t, state.phrase_length);
|
|
3813
|
+
// we don't want a match, here
|
|
3814
|
+
if (found) {
|
|
3815
|
+
break//stop going
|
|
3816
|
+
}
|
|
3817
|
+
// are we doing 'greedy-to'?
|
|
3818
|
+
// - "!foo+ after" should stop at 'after'
|
|
3819
|
+
if (nextReg) {
|
|
3820
|
+
found = matchTerm(state.terms[t], nextReg, state.start_i + state.t, state.phrase_length);
|
|
3821
|
+
if (found) {
|
|
3822
|
+
break
|
|
3823
|
+
}
|
|
3824
|
+
}
|
|
3825
|
+
skip += 1;
|
|
3826
|
+
// is it max-length now?
|
|
3827
|
+
if (reg.max !== undefined && skip === reg.max) {
|
|
3828
|
+
break
|
|
3829
|
+
}
|
|
3830
|
+
}
|
|
3831
|
+
if (skip === 0) {
|
|
3832
|
+
return false //dead
|
|
3833
|
+
}
|
|
3834
|
+
// did we satisfy min for !foo{min,max}
|
|
3835
|
+
if (reg.min && reg.min > skip) {
|
|
3836
|
+
return false//dead
|
|
3837
|
+
}
|
|
3838
|
+
state.t += skip;
|
|
3839
|
+
// state.r += 1
|
|
3840
|
+
return true
|
|
3841
|
+
};
|
|
3842
|
+
|
|
3843
|
+
var negGreedy$1 = negGreedy;
|
|
3844
|
+
|
|
3683
3845
|
// '!foo' should match anything that isn't 'foo'
|
|
3684
3846
|
// if it matches, return false
|
|
3685
3847
|
const doNegative = function (state) {
|
|
3686
3848
|
const { regs } = state;
|
|
3687
3849
|
let reg = regs[state.r];
|
|
3850
|
+
|
|
3851
|
+
// match *anything* but this term
|
|
3688
3852
|
let tmpReg = Object.assign({}, reg);
|
|
3689
3853
|
tmpReg.negative = false; // try removing it
|
|
3690
|
-
|
|
3691
|
-
if
|
|
3692
|
-
|
|
3854
|
+
|
|
3855
|
+
// found it? if so, we die here
|
|
3856
|
+
let found = matchTerm(state.terms[state.t], tmpReg, state.start_i + state.t, state.phrase_length);
|
|
3857
|
+
if (found) {
|
|
3858
|
+
return false//bye
|
|
3859
|
+
}
|
|
3860
|
+
// should we skip the term too?
|
|
3861
|
+
if (reg.optional) {
|
|
3862
|
+
// "before after" - "before !foo? after"
|
|
3863
|
+
// does the next reg match the this term?
|
|
3864
|
+
let nextReg = regs[state.r + 1];
|
|
3865
|
+
if (nextReg) {
|
|
3866
|
+
let fNext = matchTerm(state.terms[state.t], nextReg, state.start_i + state.t, state.phrase_length);
|
|
3867
|
+
if (fNext) {
|
|
3868
|
+
state.r += 1;
|
|
3869
|
+
} else if (nextReg.optional && regs[state.r + 2]) {
|
|
3870
|
+
// ugh. ok,
|
|
3871
|
+
// support "!foo? extra? need"
|
|
3872
|
+
// but don't scan ahead more than that.
|
|
3873
|
+
let fNext2 = matchTerm(state.terms[state.t], regs[state.r + 2], state.start_i + state.t, state.phrase_length);
|
|
3874
|
+
if (fNext2) {
|
|
3875
|
+
state.r += 2;
|
|
3876
|
+
}
|
|
3877
|
+
}
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3880
|
+
// negative greedy - !foo+ - super hard!
|
|
3881
|
+
if (reg.greedy) {
|
|
3882
|
+
return negGreedy$1(state, tmpReg, regs[state.r + 1])
|
|
3693
3883
|
}
|
|
3884
|
+
state.t += 1;
|
|
3694
3885
|
return true
|
|
3695
3886
|
};
|
|
3696
3887
|
var doNegative$1 = doNegative;
|
|
@@ -3822,6 +4013,7 @@
|
|
|
3822
4013
|
* starting at this certain term.
|
|
3823
4014
|
*/
|
|
3824
4015
|
const tryHere = function (terms, regs, start_i, phrase_length) {
|
|
4016
|
+
// console.log(`\n\n:start: '${terms[0].text}':`)
|
|
3825
4017
|
if (terms.length === 0 || regs.length === 0) {
|
|
3826
4018
|
return null
|
|
3827
4019
|
}
|
|
@@ -3884,6 +4076,10 @@
|
|
|
3884
4076
|
}
|
|
3885
4077
|
// support '.' as any-single
|
|
3886
4078
|
if (reg.anything === true) {
|
|
4079
|
+
// '!.' negative anything should insta-fail
|
|
4080
|
+
if (reg.negative && reg.anything) {
|
|
4081
|
+
return null
|
|
4082
|
+
}
|
|
3887
4083
|
let alive = simpleMatch$1(state);
|
|
3888
4084
|
if (!alive) {
|
|
3889
4085
|
return null
|
|
@@ -3898,22 +4094,27 @@
|
|
|
3898
4094
|
}
|
|
3899
4095
|
continue
|
|
3900
4096
|
}
|
|
3901
|
-
// ok,
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
let alive =
|
|
4097
|
+
// ok, it doesn't match - but maybe it wasn't *supposed* to?
|
|
4098
|
+
if (reg.negative) {
|
|
4099
|
+
// we want *anything* but this term
|
|
4100
|
+
let alive = doNegative$1(state);
|
|
3905
4101
|
if (!alive) {
|
|
3906
4102
|
return null
|
|
3907
4103
|
}
|
|
3908
4104
|
continue
|
|
3909
4105
|
}
|
|
3910
|
-
// ok,
|
|
3911
|
-
|
|
3912
|
-
|
|
4106
|
+
// ok, finally test the term-reg
|
|
4107
|
+
// console.log(' - ' + state.terms[state.t].text)
|
|
4108
|
+
let hasMatch = matchTerm(state.terms[state.t], reg, state.start_i + state.t, state.phrase_length);
|
|
4109
|
+
if (hasMatch === true) {
|
|
4110
|
+
let alive = simpleMatch$1(state);
|
|
3913
4111
|
if (!alive) {
|
|
3914
4112
|
return null
|
|
3915
4113
|
}
|
|
4114
|
+
continue
|
|
3916
4115
|
}
|
|
4116
|
+
// console.log('=-=-=-= here -=-=-=-')
|
|
4117
|
+
|
|
3917
4118
|
//ok who cares, keep going
|
|
3918
4119
|
if (reg.optional === true) {
|
|
3919
4120
|
continue
|
|
@@ -3967,6 +4168,24 @@
|
|
|
3967
4168
|
};
|
|
3968
4169
|
var getGroup$1 = getGroup;
|
|
3969
4170
|
|
|
4171
|
+
const notIf = function (results, not, docs) {
|
|
4172
|
+
results = results.filter(res => {
|
|
4173
|
+
let [n, start, end] = res.pointer;
|
|
4174
|
+
let terms = docs[n].slice(start, end);
|
|
4175
|
+
for (let i = 0; i < terms.length; i += 1) {
|
|
4176
|
+
let slice = terms.slice(i);
|
|
4177
|
+
let found = fromHere(slice, not, i, terms.length);
|
|
4178
|
+
if (found !== null) {
|
|
4179
|
+
return false
|
|
4180
|
+
}
|
|
4181
|
+
}
|
|
4182
|
+
return true
|
|
4183
|
+
});
|
|
4184
|
+
return results
|
|
4185
|
+
};
|
|
4186
|
+
|
|
4187
|
+
var notIf$1 = notIf;
|
|
4188
|
+
|
|
3970
4189
|
// make proper pointers
|
|
3971
4190
|
const addSentence = function (res, n) {
|
|
3972
4191
|
res.pointer[0] = n;
|
|
@@ -4042,6 +4261,9 @@
|
|
|
4042
4261
|
return docs[n].length === res.pointer[2]
|
|
4043
4262
|
});
|
|
4044
4263
|
}
|
|
4264
|
+
if (todo.notIf) {
|
|
4265
|
+
results = notIf$1(results, todo.notIf, docs);
|
|
4266
|
+
}
|
|
4045
4267
|
// grab the requested group
|
|
4046
4268
|
results = getGroup$1(results, group);
|
|
4047
4269
|
// add ids to pointers
|
|
@@ -4078,7 +4300,7 @@
|
|
|
4078
4300
|
};
|
|
4079
4301
|
|
|
4080
4302
|
var match = {
|
|
4081
|
-
api: api$
|
|
4303
|
+
api: api$b,
|
|
4082
4304
|
methods: methods$a,
|
|
4083
4305
|
lib: lib$3,
|
|
4084
4306
|
};
|
|
@@ -4268,6 +4490,7 @@
|
|
|
4268
4490
|
form: 'normal',
|
|
4269
4491
|
},
|
|
4270
4492
|
machine: {
|
|
4493
|
+
keepSpace: false,
|
|
4271
4494
|
whitespace: 'some',
|
|
4272
4495
|
punctuation: 'some',
|
|
4273
4496
|
case: 'none',
|
|
@@ -4275,6 +4498,7 @@
|
|
|
4275
4498
|
form: 'machine',
|
|
4276
4499
|
},
|
|
4277
4500
|
root: {
|
|
4501
|
+
keepSpace: false,
|
|
4278
4502
|
whitespace: 'some',
|
|
4279
4503
|
punctuation: 'some',
|
|
4280
4504
|
case: 'some',
|
|
@@ -4646,6 +4870,7 @@
|
|
|
4646
4870
|
if (starts.hasOwnProperty(t.id)) {
|
|
4647
4871
|
let { fn, end } = starts[t.id];
|
|
4648
4872
|
let m = doc.update([[n, i, end]]);
|
|
4873
|
+
text += terms[i].pre || '';
|
|
4649
4874
|
text += fn(m);
|
|
4650
4875
|
i = end - 1;
|
|
4651
4876
|
text += terms[i].post || '';
|
|
@@ -4749,7 +4974,11 @@
|
|
|
4749
4974
|
/** */
|
|
4750
4975
|
debug: debug$1,
|
|
4751
4976
|
/** */
|
|
4752
|
-
out
|
|
4977
|
+
out,
|
|
4978
|
+
/** */
|
|
4979
|
+
wrap: function (obj) {
|
|
4980
|
+
return wrap$1(this, obj)
|
|
4981
|
+
},
|
|
4753
4982
|
};
|
|
4754
4983
|
|
|
4755
4984
|
var out$1 = methods$7;
|
|
@@ -4761,26 +4990,30 @@
|
|
|
4761
4990
|
var text = {
|
|
4762
4991
|
/** */
|
|
4763
4992
|
text: function (fmt) {
|
|
4764
|
-
let opts = {
|
|
4765
|
-
keepSpace: true,
|
|
4766
|
-
keepPunct: true,
|
|
4767
|
-
};
|
|
4993
|
+
let opts = {};
|
|
4768
4994
|
if (fmt && typeof fmt === 'string' && fmts$1.hasOwnProperty(fmt)) {
|
|
4769
4995
|
opts = Object.assign({}, fmts$1[fmt]);
|
|
4770
4996
|
} else if (fmt && isObject$1(fmt)) {
|
|
4771
|
-
opts = Object.assign({}, fmt
|
|
4997
|
+
opts = Object.assign({}, fmt);//todo: fixme
|
|
4772
4998
|
}
|
|
4773
|
-
if (this.pointer) {
|
|
4999
|
+
if (opts.keepSpace === undefined && this.pointer) {
|
|
4774
5000
|
opts.keepSpace = false;
|
|
5001
|
+
}
|
|
5002
|
+
if (opts.keepPunct === undefined && this.pointer) {
|
|
4775
5003
|
let ptr = this.pointer[0];
|
|
4776
5004
|
if (ptr && ptr[1]) {
|
|
4777
5005
|
opts.keepPunct = false;
|
|
4778
5006
|
} else {
|
|
4779
5007
|
opts.keepPunct = true;
|
|
4780
5008
|
}
|
|
4781
|
-
}
|
|
5009
|
+
}
|
|
5010
|
+
// set defaults
|
|
5011
|
+
if (opts.keepPunct === undefined) {
|
|
4782
5012
|
opts.keepPunct = true;
|
|
4783
5013
|
}
|
|
5014
|
+
if (opts.keepSpace === undefined) {
|
|
5015
|
+
opts.keepSpace = true;
|
|
5016
|
+
}
|
|
4784
5017
|
return textFromDoc(this.docs, opts)
|
|
4785
5018
|
},
|
|
4786
5019
|
};
|
|
@@ -4790,10 +5023,10 @@
|
|
|
4790
5023
|
const addAPI$1 = function (View) {
|
|
4791
5024
|
Object.assign(View.prototype, methods$6);
|
|
4792
5025
|
};
|
|
4793
|
-
var api$
|
|
5026
|
+
var api$a = addAPI$1;
|
|
4794
5027
|
|
|
4795
5028
|
var output = {
|
|
4796
|
-
api: api$
|
|
5029
|
+
api: api$a,
|
|
4797
5030
|
methods: {
|
|
4798
5031
|
one: {
|
|
4799
5032
|
hash: md5
|
|
@@ -4929,7 +5162,7 @@
|
|
|
4929
5162
|
|
|
4930
5163
|
var splitAll$1 = splitAll;
|
|
4931
5164
|
|
|
4932
|
-
const max$1 =
|
|
5165
|
+
const max$1 = 20;
|
|
4933
5166
|
|
|
4934
5167
|
// sweep-around looking for our start term uuid
|
|
4935
5168
|
const blindSweep = function (id, doc, n) {
|
|
@@ -5205,11 +5438,11 @@
|
|
|
5205
5438
|
// add set/intersection/union
|
|
5206
5439
|
Object.assign(View.prototype, methods$4);
|
|
5207
5440
|
};
|
|
5208
|
-
var api$
|
|
5441
|
+
var api$9 = addAPI;
|
|
5209
5442
|
|
|
5210
5443
|
var pointers = {
|
|
5211
5444
|
methods: methods$5,
|
|
5212
|
-
api: api$
|
|
5445
|
+
api: api$9,
|
|
5213
5446
|
};
|
|
5214
5447
|
|
|
5215
5448
|
var lib$2 = {
|
|
@@ -5222,7 +5455,7 @@
|
|
|
5222
5455
|
}
|
|
5223
5456
|
};
|
|
5224
5457
|
|
|
5225
|
-
const api$
|
|
5458
|
+
const api$7 = function (View) {
|
|
5226
5459
|
|
|
5227
5460
|
/** speedy match a sequence of matches */
|
|
5228
5461
|
View.prototype.sweep = function (net, opts = {}) {
|
|
@@ -5266,7 +5499,7 @@
|
|
|
5266
5499
|
};
|
|
5267
5500
|
|
|
5268
5501
|
};
|
|
5269
|
-
var api$
|
|
5502
|
+
var api$8 = api$7;
|
|
5270
5503
|
|
|
5271
5504
|
// extract the clear needs for an individual match token
|
|
5272
5505
|
const getTokenNeeds = function (reg) {
|
|
@@ -5338,6 +5571,9 @@
|
|
|
5338
5571
|
if (typeof obj.ifNo === 'string') {
|
|
5339
5572
|
obj.ifNo = [obj.ifNo];
|
|
5340
5573
|
}
|
|
5574
|
+
if (obj.notIf) {
|
|
5575
|
+
obj.notIf = parseMatch(obj.notIf, {}, world);
|
|
5576
|
+
}
|
|
5341
5577
|
// cache any requirements up-front
|
|
5342
5578
|
obj.needs = getNeeds(obj.regs);
|
|
5343
5579
|
let { wants, count } = getWants(obj.regs);
|
|
@@ -5426,7 +5662,7 @@
|
|
|
5426
5662
|
});
|
|
5427
5663
|
// ensure nothing matches in our 'ifNo' property
|
|
5428
5664
|
list = list.filter(obj => {
|
|
5429
|
-
if (obj.ifNo !== undefined && obj.ifNo.some(no =>
|
|
5665
|
+
if (obj.ifNo !== undefined && obj.ifNo.some(no => haves.has(no)) === true) {
|
|
5430
5666
|
return false
|
|
5431
5667
|
}
|
|
5432
5668
|
return true
|
|
@@ -5447,7 +5683,7 @@
|
|
|
5447
5683
|
|
|
5448
5684
|
// finally,
|
|
5449
5685
|
// actually run these match-statements on the terms
|
|
5450
|
-
const runMatch = function (maybeList, document, methods, opts) {
|
|
5686
|
+
const runMatch = function (maybeList, document, docCache, methods, opts) {
|
|
5451
5687
|
let results = [];
|
|
5452
5688
|
for (let n = 0; n < maybeList.length; n += 1) {
|
|
5453
5689
|
for (let i = 0; i < maybeList[n].length; i += 1) {
|
|
@@ -5456,9 +5692,28 @@
|
|
|
5456
5692
|
let res = methods.one.match([document[n]], m);
|
|
5457
5693
|
// found something.
|
|
5458
5694
|
if (res.ptrs.length > 0) {
|
|
5459
|
-
// let index=document[n][0].index
|
|
5460
5695
|
res.ptrs.forEach(ptr => {
|
|
5461
5696
|
ptr[0] = n; // fix the sentence pointer
|
|
5697
|
+
// check ifNo
|
|
5698
|
+
// if (m.ifNo !== undefined) {
|
|
5699
|
+
// let terms = document[n].slice(ptr[1], ptr[2])
|
|
5700
|
+
// for (let k = 0; k < m.ifNo.length; k += 1) {
|
|
5701
|
+
// const no = m.ifNo[k]
|
|
5702
|
+
// // quick-check cache
|
|
5703
|
+
// if (docCache[n].has(no)) {
|
|
5704
|
+
// if (no.startsWith('#')) {
|
|
5705
|
+
// let tag = no.replace(/^#/, '')
|
|
5706
|
+
// if (terms.find(t => t.tags.has(tag))) {
|
|
5707
|
+
// console.log('+' + tag)
|
|
5708
|
+
// return
|
|
5709
|
+
// }
|
|
5710
|
+
// } else if (terms.find(t => t.normal === no || t.tags.has(no))) {
|
|
5711
|
+
// console.log('+' + no)
|
|
5712
|
+
// return
|
|
5713
|
+
// }
|
|
5714
|
+
// }
|
|
5715
|
+
// }
|
|
5716
|
+
// }
|
|
5462
5717
|
let todo = Object.assign({}, m, { pointer: ptr });
|
|
5463
5718
|
if (m.unTag !== undefined) {
|
|
5464
5719
|
todo.unTag = m.unTag;
|
|
@@ -5500,16 +5755,8 @@
|
|
|
5500
5755
|
// if we don't have enough words
|
|
5501
5756
|
maybeList = tooSmall(maybeList, document);
|
|
5502
5757
|
|
|
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
5758
|
// now actually run the matches
|
|
5512
|
-
let results = runMatch$1(maybeList, document, methods, opts);
|
|
5759
|
+
let results = runMatch$1(maybeList, document, docCache, methods, opts);
|
|
5513
5760
|
// console.dir(results, { depth: 5 })
|
|
5514
5761
|
return results
|
|
5515
5762
|
};
|
|
@@ -5537,6 +5784,7 @@
|
|
|
5537
5784
|
const tagger$3 = function (list, document, world) {
|
|
5538
5785
|
const { model, methods } = world;
|
|
5539
5786
|
const { getDoc, setTag, unTag } = methods.one;
|
|
5787
|
+
const looksPlural = methods.two.looksPlural;
|
|
5540
5788
|
if (list.length === 0) {
|
|
5541
5789
|
return list
|
|
5542
5790
|
}
|
|
@@ -5565,9 +5813,12 @@
|
|
|
5565
5813
|
if (todo.tag !== undefined) {
|
|
5566
5814
|
setTag(terms, todo.tag, world, todo.safe, `[post] '${reason}'`);
|
|
5567
5815
|
// quick and dirty plural tagger
|
|
5568
|
-
if (
|
|
5569
|
-
|
|
5570
|
-
|
|
5816
|
+
if (todo.tag === 'Noun') {
|
|
5817
|
+
let term = terms[terms.length - 1];
|
|
5818
|
+
if (looksPlural(term.text)) {
|
|
5819
|
+
setTag([term], 'Plural', world, todo.safe, 'quick-plural');
|
|
5820
|
+
} else {
|
|
5821
|
+
setTag([term], 'Singular', world, todo.safe, 'quick-singular');
|
|
5571
5822
|
}
|
|
5572
5823
|
}
|
|
5573
5824
|
}
|
|
@@ -5590,7 +5841,7 @@
|
|
|
5590
5841
|
|
|
5591
5842
|
var sweep = {
|
|
5592
5843
|
lib: lib$2,
|
|
5593
|
-
api: api$
|
|
5844
|
+
api: api$8,
|
|
5594
5845
|
methods: {
|
|
5595
5846
|
one: methods$3,
|
|
5596
5847
|
}
|
|
@@ -5691,6 +5942,10 @@
|
|
|
5691
5942
|
tag.forEach(tg => setTag(terms, tg, world, isSafe));
|
|
5692
5943
|
return
|
|
5693
5944
|
}
|
|
5945
|
+
if (typeof tag !== 'string') {
|
|
5946
|
+
console.warn(`compromise: Invalid tag '${tag}'`);// eslint-disable-line
|
|
5947
|
+
return
|
|
5948
|
+
}
|
|
5694
5949
|
tag = tag.trim();
|
|
5695
5950
|
// support '#Noun . #Adjective' syntax
|
|
5696
5951
|
if (isMulti.test(tag)) {
|
|
@@ -5956,6 +6211,7 @@
|
|
|
5956
6211
|
|
|
5957
6212
|
/** return only the terms that can be this tag */
|
|
5958
6213
|
canBe: function (tag) {
|
|
6214
|
+
tag = tag.replace(/^#/, '');
|
|
5959
6215
|
let tagSet = this.model.one.tagSet;
|
|
5960
6216
|
// everything can be an unknown tag
|
|
5961
6217
|
if (!tagSet.hasOwnProperty(tag)) {
|
|
@@ -5980,7 +6236,7 @@
|
|
|
5980
6236
|
const tagAPI = function (View) {
|
|
5981
6237
|
Object.assign(View.prototype, tag$1);
|
|
5982
6238
|
};
|
|
5983
|
-
var api$
|
|
6239
|
+
var api$6 = tagAPI;
|
|
5984
6240
|
|
|
5985
6241
|
// wire-up more pos-tags to our model
|
|
5986
6242
|
const addTags = function (tags) {
|
|
@@ -6034,12 +6290,16 @@
|
|
|
6034
6290
|
tagRank: tagRank$1
|
|
6035
6291
|
},
|
|
6036
6292
|
methods: methods$2,
|
|
6037
|
-
api: api$
|
|
6293
|
+
api: api$6,
|
|
6038
6294
|
lib: lib$1
|
|
6039
6295
|
};
|
|
6040
6296
|
|
|
6041
|
-
|
|
6297
|
+
// split by periods, question marks, unicode ⁇, etc
|
|
6298
|
+
const initSplit = /([.!?\u203D\u2E18\u203C\u2047-\u2049]+\s)/g;
|
|
6299
|
+
// merge these back into prev sentence
|
|
6300
|
+
const splitsOnly = /^[.!?\u203D\u2E18\u203C\u2047-\u2049]+\s$/;
|
|
6042
6301
|
const newLine = /((?:\r?\n|\r)+)/; // Match different new-line formats
|
|
6302
|
+
|
|
6043
6303
|
// Start with a regex:
|
|
6044
6304
|
const basicSplit = function (text) {
|
|
6045
6305
|
let all = [];
|
|
@@ -6049,7 +6309,14 @@
|
|
|
6049
6309
|
//split by period, question-mark, and exclamation-mark
|
|
6050
6310
|
let arr = lines[i].split(initSplit);
|
|
6051
6311
|
for (let o = 0; o < arr.length; o++) {
|
|
6052
|
-
|
|
6312
|
+
// merge 'foo' + '.'
|
|
6313
|
+
if (arr[o + 1] && splitsOnly.test(arr[o + 1]) === true) {
|
|
6314
|
+
arr[o] += arr[o + 1];
|
|
6315
|
+
arr[o + 1] = '';
|
|
6316
|
+
}
|
|
6317
|
+
if (arr[o] !== '') {
|
|
6318
|
+
all.push(arr[o]);
|
|
6319
|
+
}
|
|
6053
6320
|
}
|
|
6054
6321
|
}
|
|
6055
6322
|
return all
|
|
@@ -6106,6 +6373,114 @@
|
|
|
6106
6373
|
};
|
|
6107
6374
|
var smartMerge$1 = smartMerge;
|
|
6108
6375
|
|
|
6376
|
+
// merge embedded quotes into 1 sentence
|
|
6377
|
+
// like - 'he said "no!" and left.'
|
|
6378
|
+
const MAX_QUOTE = 280;// ¯\_(ツ)_/¯
|
|
6379
|
+
|
|
6380
|
+
// don't support single-quotes for multi-sentences
|
|
6381
|
+
const pairs = {
|
|
6382
|
+
'\u0022': '\u0022', // 'StraightDoubleQuotes'
|
|
6383
|
+
'\uFF02': '\uFF02', // 'StraightDoubleQuotesWide'
|
|
6384
|
+
// '\u0027': '\u0027', // 'StraightSingleQuotes'
|
|
6385
|
+
'\u201C': '\u201D', // 'CommaDoubleQuotes'
|
|
6386
|
+
// '\u2018': '\u2019', // 'CommaSingleQuotes'
|
|
6387
|
+
'\u201F': '\u201D', // 'CurlyDoubleQuotesReversed'
|
|
6388
|
+
// '\u201B': '\u2019', // 'CurlySingleQuotesReversed'
|
|
6389
|
+
'\u201E': '\u201D', // 'LowCurlyDoubleQuotes'
|
|
6390
|
+
'\u2E42': '\u201D', // 'LowCurlyDoubleQuotesReversed'
|
|
6391
|
+
'\u201A': '\u2019', // 'LowCurlySingleQuotes'
|
|
6392
|
+
'\u00AB': '\u00BB', // 'AngleDoubleQuotes'
|
|
6393
|
+
'\u2039': '\u203A', // 'AngleSingleQuotes'
|
|
6394
|
+
'\u2035': '\u2032', // 'PrimeSingleQuotes'
|
|
6395
|
+
'\u2036': '\u2033', // 'PrimeDoubleQuotes'
|
|
6396
|
+
'\u2037': '\u2034', // 'PrimeTripleQuotes'
|
|
6397
|
+
'\u301D': '\u301E', // 'PrimeDoubleQuotes'
|
|
6398
|
+
// '\u0060': '\u00B4', // 'PrimeSingleQuotes'
|
|
6399
|
+
'\u301F': '\u301E', // 'LowPrimeDoubleQuotesReversed'
|
|
6400
|
+
};
|
|
6401
|
+
const openQuote = RegExp('(' + Object.keys(pairs).join('|') + ')', 'g');
|
|
6402
|
+
const closeQuote = RegExp('(' + Object.values(pairs).join('|') + ')', 'g');
|
|
6403
|
+
|
|
6404
|
+
const closesQuote = function (str) {
|
|
6405
|
+
if (!str) {
|
|
6406
|
+
return false
|
|
6407
|
+
}
|
|
6408
|
+
let m = str.match(closeQuote);
|
|
6409
|
+
if (m !== null && m.length === 1) {
|
|
6410
|
+
return true
|
|
6411
|
+
}
|
|
6412
|
+
return false
|
|
6413
|
+
};
|
|
6414
|
+
|
|
6415
|
+
// allow micro-sentences when inside a quotation, like:
|
|
6416
|
+
// the doc said "no sir. i will not beg" and walked away.
|
|
6417
|
+
const quoteMerge = function (splits) {
|
|
6418
|
+
let arr = [];
|
|
6419
|
+
for (let i = 0; i < splits.length; i += 1) {
|
|
6420
|
+
let split = splits[i];
|
|
6421
|
+
// do we have an open-quote and not a closed one?
|
|
6422
|
+
let m = split.match(openQuote);
|
|
6423
|
+
if (m !== null && m.length === 1) {
|
|
6424
|
+
|
|
6425
|
+
// look at the next sentence for a closing quote,
|
|
6426
|
+
if (closesQuote(splits[i + 1]) && splits[i + 1].length < MAX_QUOTE) {
|
|
6427
|
+
splits[i] += splits[i + 1];// merge them
|
|
6428
|
+
arr.push(splits[i]);
|
|
6429
|
+
splits[i + 1] = '';
|
|
6430
|
+
i += 1;
|
|
6431
|
+
continue
|
|
6432
|
+
}
|
|
6433
|
+
// look at n+2 for a closing quote,
|
|
6434
|
+
if (closesQuote(splits[i + 2])) {
|
|
6435
|
+
let toAdd = splits[i + 1] + splits[i + 2];// merge them all
|
|
6436
|
+
//make sure it's not too-long
|
|
6437
|
+
if (toAdd.length < MAX_QUOTE) {
|
|
6438
|
+
splits[i] += toAdd;
|
|
6439
|
+
arr.push(splits[i]);
|
|
6440
|
+
splits[i + 1] = '';
|
|
6441
|
+
splits[i + 2] = '';
|
|
6442
|
+
i += 2;
|
|
6443
|
+
continue
|
|
6444
|
+
}
|
|
6445
|
+
}
|
|
6446
|
+
}
|
|
6447
|
+
arr.push(splits[i]);
|
|
6448
|
+
}
|
|
6449
|
+
return arr
|
|
6450
|
+
};
|
|
6451
|
+
var quoteMerge$1 = quoteMerge;
|
|
6452
|
+
|
|
6453
|
+
const MAX_LEN = 250;// ¯\_(ツ)_/¯
|
|
6454
|
+
|
|
6455
|
+
// support unicode variants?
|
|
6456
|
+
// https://stackoverflow.com/questions/13535172/list-of-all-unicodes-open-close-brackets
|
|
6457
|
+
const hasOpen = /\(/g;
|
|
6458
|
+
const hasClosed = /\)/g;
|
|
6459
|
+
const mergeParens = function (splits) {
|
|
6460
|
+
let arr = [];
|
|
6461
|
+
for (let i = 0; i < splits.length; i += 1) {
|
|
6462
|
+
let split = splits[i];
|
|
6463
|
+
let m = split.match(hasOpen);
|
|
6464
|
+
if (m !== null && m.length === 1) {
|
|
6465
|
+
// look at next sentence, for closing parenthesis
|
|
6466
|
+
if (splits[i + 1] && splits[i + 1].length < MAX_LEN) {
|
|
6467
|
+
let m2 = splits[i + 1].match(hasClosed);
|
|
6468
|
+
if (m2 !== null && m.length === 1 && !hasOpen.test(splits[i + 1])) {
|
|
6469
|
+
// merge in 2nd sentence
|
|
6470
|
+
splits[i] += splits[i + 1];
|
|
6471
|
+
arr.push(splits[i]);
|
|
6472
|
+
splits[i + 1] = '';
|
|
6473
|
+
i += 1;
|
|
6474
|
+
continue
|
|
6475
|
+
}
|
|
6476
|
+
}
|
|
6477
|
+
}
|
|
6478
|
+
arr.push(splits[i]);
|
|
6479
|
+
}
|
|
6480
|
+
return arr
|
|
6481
|
+
};
|
|
6482
|
+
var parensMerge = mergeParens;
|
|
6483
|
+
|
|
6109
6484
|
//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.
|
|
6110
6485
|
// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.
|
|
6111
6486
|
//regs-
|
|
@@ -6124,9 +6499,13 @@
|
|
|
6124
6499
|
// First do a greedy-split..
|
|
6125
6500
|
let splits = simpleSplit(text);
|
|
6126
6501
|
// Filter-out the crap ones
|
|
6127
|
-
let
|
|
6502
|
+
let sentences = simpleMerge(splits);
|
|
6128
6503
|
//detection of non-sentence chunks:
|
|
6129
|
-
|
|
6504
|
+
sentences = smartMerge$1(sentences, world);
|
|
6505
|
+
// allow 'he said "no sir." and left.'
|
|
6506
|
+
sentences = quoteMerge$1(sentences);
|
|
6507
|
+
// allow 'i thought (no way!) and left.'
|
|
6508
|
+
sentences = parensMerge(sentences);
|
|
6130
6509
|
//if we never got a sentence, return the given text
|
|
6131
6510
|
if (sentences.length === 0) {
|
|
6132
6511
|
return [text]
|
|
@@ -6151,6 +6530,10 @@
|
|
|
6151
6530
|
}
|
|
6152
6531
|
const { prefixes, suffixes } = model.one;
|
|
6153
6532
|
|
|
6533
|
+
// l-theanine, x-ray
|
|
6534
|
+
if (parts[0].length === 1 && /[a-z]/i.test(parts[0])) {
|
|
6535
|
+
return false
|
|
6536
|
+
}
|
|
6154
6537
|
//dont split 're-do'
|
|
6155
6538
|
if (prefixes.hasOwnProperty(parts[0])) {
|
|
6156
6539
|
return false
|
|
@@ -6226,7 +6609,7 @@
|
|
|
6226
6609
|
const isBoundary = /^[!?.]+$/;
|
|
6227
6610
|
const naiiveSplit = /(\S+)/;
|
|
6228
6611
|
|
|
6229
|
-
let notWord = ['.', '?', '!', ':', ';', '-', '–', '—', '--', '...', '(', ')', '[', ']', '"', "'", '`'];
|
|
6612
|
+
let notWord = ['.', '?', '!', ':', ';', '-', '–', '—', '--', '...', '(', ')', '[', ']', '"', "'", '`', '«', '»', '*'];
|
|
6230
6613
|
notWord = notWord.reduce((h, c) => {
|
|
6231
6614
|
h[c] = true;
|
|
6232
6615
|
return h
|
|
@@ -6293,49 +6676,75 @@
|
|
|
6293
6676
|
var splitTerms = splitWords;
|
|
6294
6677
|
|
|
6295
6678
|
//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation
|
|
6679
|
+
|
|
6296
6680
|
//we have slightly different rules for start/end - like #hashtags.
|
|
6297
|
-
const
|
|
6298
|
-
|
|
6299
|
-
const endings =
|
|
6300
|
-
/[ \n\t.'[\](){}⟨⟩:,،、‒–—―…!‹›«»‐\-?‘’;/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022\uFF02\u201D\u00B4\u301E]+$/;
|
|
6301
|
-
const hasApostrophe$1 = /['’]/;
|
|
6681
|
+
const isLetter = /\p{Letter}/u;
|
|
6682
|
+
const isNumber = /[\p{Number}\p{Currency_Symbol}]/u;
|
|
6302
6683
|
const hasAcronym = /^[a-z]\.([a-z]\.)+/i;
|
|
6303
|
-
const
|
|
6304
|
-
const shortYear = /^'[0-9]{2}/;
|
|
6684
|
+
const chillin = /[sn]['’]$/;
|
|
6305
6685
|
|
|
6306
|
-
const normalizePunctuation = function (str) {
|
|
6686
|
+
const normalizePunctuation = function (str, model) {
|
|
6687
|
+
// quick lookup for allowed pre/post punctuation
|
|
6688
|
+
let { prePunctuation, postPunctuation, emoticons } = model.one;
|
|
6307
6689
|
let original = str;
|
|
6308
6690
|
let pre = '';
|
|
6309
6691
|
let post = '';
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6330
|
-
|
|
6331
|
-
|
|
6332
|
-
|
|
6333
|
-
|
|
6334
|
-
|
|
6335
|
-
|
|
6336
|
-
}
|
|
6337
|
-
|
|
6338
|
-
|
|
6692
|
+
let chars = Array.from(str);
|
|
6693
|
+
|
|
6694
|
+
// punctuation-only words, like '<3'
|
|
6695
|
+
if (emoticons.hasOwnProperty(str.trim())) {
|
|
6696
|
+
return { str: str.trim(), pre, post: ' ' } //not great
|
|
6697
|
+
}
|
|
6698
|
+
|
|
6699
|
+
// pop any punctuation off of the start
|
|
6700
|
+
let len = chars.length;
|
|
6701
|
+
for (let i = 0; i < len; i += 1) {
|
|
6702
|
+
let c = chars[0];
|
|
6703
|
+
// keep any declared chars
|
|
6704
|
+
if (prePunctuation[c] === true) {
|
|
6705
|
+
continue//keep it
|
|
6706
|
+
}
|
|
6707
|
+
// keep '+' or '-' only before a number
|
|
6708
|
+
if ((c === '+' || c === '-') && isNumber.test(chars[1])) {
|
|
6709
|
+
break//done
|
|
6710
|
+
}
|
|
6711
|
+
// '97 - year short-form
|
|
6712
|
+
if (c === "'" && c.length === 3 && isNumber.test(chars[1])) {
|
|
6713
|
+
break//done
|
|
6714
|
+
}
|
|
6715
|
+
// start of word
|
|
6716
|
+
if (isLetter.test(c) || isNumber.test(c)) {
|
|
6717
|
+
break //done
|
|
6718
|
+
}
|
|
6719
|
+
// punctuation
|
|
6720
|
+
pre += chars.shift();//keep going
|
|
6721
|
+
}
|
|
6722
|
+
|
|
6723
|
+
// pop any punctuation off of the end
|
|
6724
|
+
len = chars.length;
|
|
6725
|
+
for (let i = 0; i < len; i += 1) {
|
|
6726
|
+
let c = chars[chars.length - 1];
|
|
6727
|
+
// keep any declared chars
|
|
6728
|
+
if (postPunctuation[c] === true) {
|
|
6729
|
+
continue//keep it
|
|
6730
|
+
}
|
|
6731
|
+
// start of word
|
|
6732
|
+
if (isLetter.test(c) || isNumber.test(c)) {
|
|
6733
|
+
break //done
|
|
6734
|
+
}
|
|
6735
|
+
// F.B.I.
|
|
6736
|
+
if (c === '.' && hasAcronym.test(original) === true) {
|
|
6737
|
+
continue//keep it
|
|
6738
|
+
}
|
|
6739
|
+
// keep s-apostrophe - "flanders'" or "chillin'"
|
|
6740
|
+
if (c === "'" && chillin.test(original) === true) {
|
|
6741
|
+
continue//keep it
|
|
6742
|
+
}
|
|
6743
|
+
// punctuation
|
|
6744
|
+
post = chars.pop() + post;//keep going
|
|
6745
|
+
}
|
|
6746
|
+
|
|
6747
|
+
str = chars.join('');
|
|
6339
6748
|
//we went too far..
|
|
6340
6749
|
if (str === '') {
|
|
6341
6750
|
// do a very mild parse, and hope for the best.
|
|
@@ -6350,9 +6759,9 @@
|
|
|
6350
6759
|
};
|
|
6351
6760
|
var tokenize$1 = normalizePunctuation;
|
|
6352
6761
|
|
|
6353
|
-
const parseTerm = txt => {
|
|
6762
|
+
const parseTerm = (txt, model) => {
|
|
6354
6763
|
// cleanup any punctuation as whitespace
|
|
6355
|
-
let { str, pre, post } = tokenize$1(txt);
|
|
6764
|
+
let { str, pre, post } = tokenize$1(txt, model);
|
|
6356
6765
|
const parsed = {
|
|
6357
6766
|
text: str,
|
|
6358
6767
|
pre: pre,
|
|
@@ -6466,7 +6875,7 @@
|
|
|
6466
6875
|
input = sentences.map((txt) => {
|
|
6467
6876
|
let terms = splitTerms(txt, model);
|
|
6468
6877
|
// split into [pre-text-post]
|
|
6469
|
-
terms = terms.map(splitWhitespace);
|
|
6878
|
+
terms = terms.map(t => splitWhitespace(t, model));
|
|
6470
6879
|
// add normalized term format, always
|
|
6471
6880
|
terms.forEach((t) => {
|
|
6472
6881
|
normal(t, world);
|
|
@@ -6477,9 +6886,10 @@
|
|
|
6477
6886
|
};
|
|
6478
6887
|
var fromString = parse$1;
|
|
6479
6888
|
|
|
6480
|
-
const isAcronym$2 = /[ .][A-Z]\.? *$/i;
|
|
6481
|
-
const hasEllipse$1 = /(?:\u2026|\.{2,}) *$/;
|
|
6889
|
+
const isAcronym$2 = /[ .][A-Z]\.? *$/i; //asci - 'n.s.a.'
|
|
6890
|
+
const hasEllipse$1 = /(?:\u2026|\.{2,}) *$/; // '...'
|
|
6482
6891
|
const hasLetter$1 = /\p{L}/u;
|
|
6892
|
+
const leadInit = /^[A-Z]\. $/; // "W. Kensington"
|
|
6483
6893
|
|
|
6484
6894
|
/** does this look like a sentence? */
|
|
6485
6895
|
const isSentence$2 = function (str, abbrevs) {
|
|
@@ -6491,6 +6901,10 @@
|
|
|
6491
6901
|
if (isAcronym$2.test(str) === true) {
|
|
6492
6902
|
return false
|
|
6493
6903
|
}
|
|
6904
|
+
// check for leading initial - "W. Kensington"
|
|
6905
|
+
if (str.length === 3 && leadInit.test(str)) {
|
|
6906
|
+
return false
|
|
6907
|
+
}
|
|
6494
6908
|
//check for '...'
|
|
6495
6909
|
if (hasEllipse$1.test(str) === true) {
|
|
6496
6910
|
return false
|
|
@@ -6609,7 +7023,6 @@
|
|
|
6609
7023
|
'lt',
|
|
6610
7024
|
'maj',
|
|
6611
7025
|
'messrs',
|
|
6612
|
-
'mister',
|
|
6613
7026
|
'mlle',
|
|
6614
7027
|
'mme',
|
|
6615
7028
|
'mr',
|
|
@@ -6630,7 +7043,7 @@
|
|
|
6630
7043
|
'sir',
|
|
6631
7044
|
'sr',
|
|
6632
7045
|
'supt',
|
|
6633
|
-
'surg'
|
|
7046
|
+
'surg'
|
|
6634
7047
|
//miss
|
|
6635
7048
|
//misses
|
|
6636
7049
|
];
|
|
@@ -6807,6 +7220,8 @@
|
|
|
6807
7220
|
'tri',
|
|
6808
7221
|
'un',
|
|
6809
7222
|
'out', //out-lived
|
|
7223
|
+
'ex',//ex-wife
|
|
7224
|
+
|
|
6810
7225
|
// 'counter',
|
|
6811
7226
|
// 'mid',
|
|
6812
7227
|
// 'out',
|
|
@@ -6883,14 +7298,58 @@
|
|
|
6883
7298
|
});
|
|
6884
7299
|
var unicode$3 = unicode$2;
|
|
6885
7300
|
|
|
7301
|
+
// https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp?a=%5Cp%7Bpunctuation%7D
|
|
7302
|
+
|
|
7303
|
+
// punctuation to keep at start of word
|
|
7304
|
+
const prePunctuation = {
|
|
7305
|
+
'#': true, //#hastag
|
|
7306
|
+
'@': true, //@atmention
|
|
7307
|
+
'_': true,//underscore
|
|
7308
|
+
'°': true,
|
|
7309
|
+
// '+': true,//+4
|
|
7310
|
+
// '\\-',//-4 (escape)
|
|
7311
|
+
// '.',//.4
|
|
7312
|
+
// zero-width chars
|
|
7313
|
+
'\u200B': true,
|
|
7314
|
+
'\u200C': true,
|
|
7315
|
+
'\u200D': true,
|
|
7316
|
+
'\uFEFF': true
|
|
7317
|
+
};
|
|
7318
|
+
|
|
7319
|
+
// punctuation to keep at end of word
|
|
7320
|
+
const postPunctuation = {
|
|
7321
|
+
'%': true,//88%
|
|
7322
|
+
'_': true,//underscore
|
|
7323
|
+
'°': true,//degrees, italian ordinal
|
|
7324
|
+
// '\'',// sometimes
|
|
7325
|
+
// zero-width chars
|
|
7326
|
+
'\u200B': true,
|
|
7327
|
+
'\u200C': true,
|
|
7328
|
+
'\u200D': true,
|
|
7329
|
+
'\uFEFF': true
|
|
7330
|
+
};
|
|
7331
|
+
|
|
7332
|
+
const emoticons = {
|
|
7333
|
+
'<3': true,
|
|
7334
|
+
'</3': true,
|
|
7335
|
+
'<\\3': true,
|
|
7336
|
+
':^P': true,
|
|
7337
|
+
':^p': true,
|
|
7338
|
+
':^O': true,
|
|
7339
|
+
':^3': true,
|
|
7340
|
+
};
|
|
7341
|
+
|
|
6886
7342
|
var model$3 = {
|
|
6887
7343
|
one: {
|
|
6888
7344
|
aliases: aliases$1,
|
|
6889
7345
|
abbreviations,
|
|
6890
7346
|
prefixes,
|
|
6891
7347
|
suffixes,
|
|
7348
|
+
prePunctuation,
|
|
7349
|
+
postPunctuation,
|
|
6892
7350
|
lexicon: lexicon$3, //give this one forward
|
|
6893
7351
|
unicode: unicode$3,
|
|
7352
|
+
emoticons
|
|
6894
7353
|
},
|
|
6895
7354
|
};
|
|
6896
7355
|
|
|
@@ -7121,10 +7580,10 @@
|
|
|
7121
7580
|
return this
|
|
7122
7581
|
};
|
|
7123
7582
|
|
|
7124
|
-
const api$
|
|
7583
|
+
const api$4 = function (View) {
|
|
7125
7584
|
View.prototype.autoFill = autoFill;
|
|
7126
7585
|
};
|
|
7127
|
-
var api$
|
|
7586
|
+
var api$5 = api$4;
|
|
7128
7587
|
|
|
7129
7588
|
// generate all the possible prefixes up-front
|
|
7130
7589
|
const getPrefixes = function (arr, opts, world) {
|
|
@@ -7206,7 +7665,7 @@
|
|
|
7206
7665
|
};
|
|
7207
7666
|
var typeahead = {
|
|
7208
7667
|
model: model$2,
|
|
7209
|
-
api: api$
|
|
7668
|
+
api: api$5,
|
|
7210
7669
|
lib,
|
|
7211
7670
|
compute: compute$1,
|
|
7212
7671
|
hooks: ['typeahead']
|
|
@@ -7226,6 +7685,8 @@
|
|
|
7226
7685
|
nlp$1.extend(lexicon$4); //1kb
|
|
7227
7686
|
nlp$1.extend(sweep); //1kb
|
|
7228
7687
|
|
|
7688
|
+
console.log('local-path');
|
|
7689
|
+
|
|
7229
7690
|
const prefix$1 = /^.([0-9]+)/;
|
|
7230
7691
|
|
|
7231
7692
|
// handle compressed form of key-value pair
|
|
@@ -7365,15 +7826,16 @@
|
|
|
7365
7826
|
};
|
|
7366
7827
|
var reverse$1 = reverse;
|
|
7367
7828
|
|
|
7368
|
-
// generated in ./learn/tiger/conjugate
|
|
7369
7829
|
var presentModel = {
|
|
7370
|
-
rules: '
|
|
7371
|
-
exceptions: '
|
|
7830
|
+
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',
|
|
7831
|
+
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',
|
|
7832
|
+
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
7833
|
};
|
|
7373
7834
|
|
|
7374
7835
|
var pastModel = {
|
|
7375
|
-
rules: '
|
|
7376
|
-
exceptions: '
|
|
7836
|
+
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',
|
|
7837
|
+
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',
|
|
7838
|
+
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
7839
|
};
|
|
7378
7840
|
|
|
7379
7841
|
let infToPresent = uncompress$1(presentModel);
|
|
@@ -7397,8 +7859,24 @@
|
|
|
7397
7859
|
return convert$1(str, pastToInf)
|
|
7398
7860
|
};
|
|
7399
7861
|
|
|
7862
|
+
const all = function (str) {
|
|
7863
|
+
let arr = [str];
|
|
7864
|
+
let past = toPast(str);
|
|
7865
|
+
if (past !== str) {
|
|
7866
|
+
arr.push(past);
|
|
7867
|
+
}
|
|
7868
|
+
let present = toPresent(str);
|
|
7869
|
+
if (present !== str) {
|
|
7870
|
+
arr.push(present);
|
|
7871
|
+
}
|
|
7872
|
+
return arr
|
|
7873
|
+
};
|
|
7400
7874
|
|
|
7401
|
-
var
|
|
7875
|
+
var verb = { toPresent, fromPresent, toPast, fromPast, all };
|
|
7876
|
+
|
|
7877
|
+
|
|
7878
|
+
// console.log(toPresent('zusammenzufuehren'))
|
|
7879
|
+
// console.log(toPast('gehen'))
|
|
7402
7880
|
|
|
7403
7881
|
// generated in ./lib/lexicon
|
|
7404
7882
|
var lexData = {
|
|
@@ -7409,7 +7887,7 @@
|
|
|
7409
7887
|
"Conjunction": "true¦bAd7entwed6falls,in5nach5o3so2und,w0zumal;e0ohingegen;d4il,nn2;lange,ndern,wie;b0d2;!glei3;dem;er;a1enn,o0;ch;ss,ß;e0zw;vor,ziehungsweise",
|
|
7410
7888
|
"Determiner": "true¦d2ein0;!e0;!m,n,r,s;as,e0ie;m,n,r,s",
|
|
7411
7889
|
"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:
|
|
7890
|
+
"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
7891
|
"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
7892
|
"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
7893
|
"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 +8072,12 @@
|
|
|
7594
8072
|
// add conjugations for our verbs
|
|
7595
8073
|
if (tag === 'Infinitive') {
|
|
7596
8074
|
// add present tense
|
|
7597
|
-
let pres =
|
|
8075
|
+
let pres = verb.toPresent(w);
|
|
7598
8076
|
if (pres && pres !== w) {
|
|
7599
8077
|
lexicon$1[pres] = 'PresentTense';
|
|
7600
8078
|
}
|
|
7601
8079
|
// add past tense
|
|
7602
|
-
let past =
|
|
8080
|
+
let past = verb.toPast(w);
|
|
7603
8081
|
if (past && past !== w) {
|
|
7604
8082
|
lexicon$1[past] = 'PastTense';
|
|
7605
8083
|
}
|
|
@@ -7611,11 +8089,90 @@
|
|
|
7611
8089
|
|
|
7612
8090
|
var lexicon$2 = lexicon$1;
|
|
7613
8091
|
|
|
8092
|
+
const verbForm = function (term) {
|
|
8093
|
+
let want = [
|
|
8094
|
+
'FirstPerson',
|
|
8095
|
+
'SecondPerson',
|
|
8096
|
+
'ThirdPerson',
|
|
8097
|
+
'FirstPersonPlural',
|
|
8098
|
+
'SecondPersonPlural',
|
|
8099
|
+
'ThirdPersonPlural',
|
|
8100
|
+
];
|
|
8101
|
+
return want.find(tag => term.tags.has(tag))
|
|
8102
|
+
};
|
|
8103
|
+
|
|
8104
|
+
//relajarse -> relajar
|
|
8105
|
+
const stripReflexive = function (str) {
|
|
8106
|
+
str = str.replace(/se$/, '');
|
|
8107
|
+
str = str.replace(/te$/, '');
|
|
8108
|
+
str = str.replace(/me$/, '');
|
|
8109
|
+
return str
|
|
8110
|
+
};
|
|
8111
|
+
|
|
8112
|
+
const root = function (view) {
|
|
8113
|
+
|
|
8114
|
+
const { verb, noun, adjective } = view.world.methods.two.transform;
|
|
8115
|
+
view.docs.forEach(terms => {
|
|
8116
|
+
terms.forEach(term => {
|
|
8117
|
+
let str = term.implicit || term.normal || term.text;
|
|
8118
|
+
|
|
8119
|
+
if (term.tags.has('Reflexive')) {
|
|
8120
|
+
str = stripReflexive(str);
|
|
8121
|
+
}
|
|
8122
|
+
// get infinitive form of the verb
|
|
8123
|
+
if (term.tags.has('Verb')) {
|
|
8124
|
+
let form = verbForm(term);
|
|
8125
|
+
if (term.tags.has('Gerund')) {
|
|
8126
|
+
term.root = verb.fromGerund(str, form);
|
|
8127
|
+
} else if (term.tags.has('PresentTense')) {
|
|
8128
|
+
term.root = verb.fromPresent(str, form);
|
|
8129
|
+
} else if (term.tags.has('PastTense')) {
|
|
8130
|
+
term.root = verb.fromPast(str, form);
|
|
8131
|
+
} else if (term.tags.has('FutureTense')) {
|
|
8132
|
+
term.root = verb.fromFuture(str, form);
|
|
8133
|
+
} else if (term.tags.has('Conditional')) {
|
|
8134
|
+
term.root = verb.fromConditional(str, form);
|
|
8135
|
+
} else ;
|
|
8136
|
+
}
|
|
8137
|
+
|
|
8138
|
+
// nouns -> singular masculine form
|
|
8139
|
+
// if (term.tags.has('Noun')) {
|
|
8140
|
+
// if (term.tags.has('Plural')) {
|
|
8141
|
+
// str = noun.toSingular(str)
|
|
8142
|
+
// }
|
|
8143
|
+
// if (term.tags.has('FemaleNoun')) {
|
|
8144
|
+
// // not sure about this
|
|
8145
|
+
// // str = noun.toMasculine(str)
|
|
8146
|
+
// }
|
|
8147
|
+
// term.root = str
|
|
8148
|
+
// }
|
|
8149
|
+
|
|
8150
|
+
// // nouns -> singular masculine form
|
|
8151
|
+
// if (term.tags.has('Adjective')) {
|
|
8152
|
+
// if (term.tags.has('PluralAdjective')) {
|
|
8153
|
+
// if (term.tags.has('FemaleAdjective')) {
|
|
8154
|
+
// str = adjective.fromFemalePlural(str)
|
|
8155
|
+
// } else {
|
|
8156
|
+
// str = adjective.toSingular(str)
|
|
8157
|
+
// }
|
|
8158
|
+
// }
|
|
8159
|
+
// if (term.tags.has('FemaleAdjective')) {
|
|
8160
|
+
// str = adjective.fromFemale(str)
|
|
8161
|
+
// }
|
|
8162
|
+
// term.root = str
|
|
8163
|
+
// }
|
|
8164
|
+
});
|
|
8165
|
+
});
|
|
8166
|
+
return view
|
|
8167
|
+
};
|
|
8168
|
+
var root$1 = root;
|
|
8169
|
+
|
|
7614
8170
|
var lexicon = {
|
|
8171
|
+
compute: { root: root$1 },
|
|
7615
8172
|
methods: {
|
|
7616
|
-
|
|
8173
|
+
two: {
|
|
7617
8174
|
transform: {
|
|
7618
|
-
|
|
8175
|
+
verb: verb
|
|
7619
8176
|
}
|
|
7620
8177
|
}
|
|
7621
8178
|
},
|
|
@@ -7744,7 +8301,7 @@
|
|
|
7744
8301
|
},
|
|
7745
8302
|
};
|
|
7746
8303
|
|
|
7747
|
-
var verbs$
|
|
8304
|
+
var verbs$2 = {
|
|
7748
8305
|
Verb: {
|
|
7749
8306
|
not: ['Noun', 'Adjective', 'Adverb', 'Value', 'Expression'],
|
|
7750
8307
|
},
|
|
@@ -7962,7 +8519,7 @@
|
|
|
7962
8519
|
},
|
|
7963
8520
|
};
|
|
7964
8521
|
|
|
7965
|
-
let tags = Object.assign({}, nouns$1, verbs$
|
|
8522
|
+
let tags = Object.assign({}, nouns$1, verbs$2, values$1, dates, misc);
|
|
7966
8523
|
|
|
7967
8524
|
var tagset = {
|
|
7968
8525
|
tags
|
|
@@ -8099,7 +8656,7 @@
|
|
|
8099
8656
|
|
|
8100
8657
|
let values = { more: [] };
|
|
8101
8658
|
let nouns = { more: [] };
|
|
8102
|
-
let verbs = { more: [] };
|
|
8659
|
+
let verbs$1 = { more: [] };
|
|
8103
8660
|
let adjectives = { more: [] };
|
|
8104
8661
|
|
|
8105
8662
|
var model$1 = {
|
|
@@ -8107,7 +8664,7 @@
|
|
|
8107
8664
|
splitter: {
|
|
8108
8665
|
values,
|
|
8109
8666
|
nouns,
|
|
8110
|
-
verbs,
|
|
8667
|
+
verbs: verbs$1,
|
|
8111
8668
|
adjectives
|
|
8112
8669
|
}
|
|
8113
8670
|
}
|
|
@@ -9230,9 +9787,9 @@
|
|
|
9230
9787
|
var format = formatNumber;
|
|
9231
9788
|
|
|
9232
9789
|
// return the nth elem of a doc
|
|
9233
|
-
const getNth = (doc, n) => (typeof n === 'number' ? doc.eq(n) : doc);
|
|
9790
|
+
const getNth$1 = (doc, n) => (typeof n === 'number' ? doc.eq(n) : doc);
|
|
9234
9791
|
|
|
9235
|
-
const api = function (View) {
|
|
9792
|
+
const api$2 = function (View) {
|
|
9236
9793
|
/** */
|
|
9237
9794
|
class Numbers extends View {
|
|
9238
9795
|
constructor(document, pointer, groups) {
|
|
@@ -9240,13 +9797,13 @@
|
|
|
9240
9797
|
this.viewType = 'Numbers';
|
|
9241
9798
|
}
|
|
9242
9799
|
parse(n) {
|
|
9243
|
-
return getNth(this, n).map(parse)
|
|
9800
|
+
return getNth$1(this, n).map(parse)
|
|
9244
9801
|
}
|
|
9245
9802
|
get(n) {
|
|
9246
|
-
return getNth(this, n).map(parse).map(o => o.num)
|
|
9803
|
+
return getNth$1(this, n).map(parse).map(o => o.num)
|
|
9247
9804
|
}
|
|
9248
9805
|
json(n) {
|
|
9249
|
-
let doc = getNth(this, n);
|
|
9806
|
+
let doc = getNth$1(this, n);
|
|
9250
9807
|
return doc.map(p => {
|
|
9251
9808
|
let json = p.toView().json(n)[0];
|
|
9252
9809
|
let parsed = parse(p);
|
|
@@ -9477,19 +10034,62 @@
|
|
|
9477
10034
|
}
|
|
9478
10035
|
// make sure splitter has run
|
|
9479
10036
|
m.compute('splitter');
|
|
9480
|
-
m = getNth(m, n);
|
|
10037
|
+
m = getNth$1(m, n);
|
|
9481
10038
|
return new Numbers(this.document, m.pointer)
|
|
9482
10039
|
};
|
|
9483
10040
|
// alias
|
|
9484
10041
|
View.prototype.values = View.prototype.numbers;
|
|
9485
10042
|
};
|
|
9486
|
-
var api$
|
|
10043
|
+
var api$3 = api$2;
|
|
9487
10044
|
|
|
9488
10045
|
var numbers = {
|
|
9489
|
-
api: api$
|
|
10046
|
+
api: api$3
|
|
9490
10047
|
};
|
|
9491
10048
|
|
|
9492
|
-
|
|
10049
|
+
const getNth = (doc, n) => (typeof n === 'number' ? doc.eq(n) : doc);
|
|
10050
|
+
|
|
10051
|
+
// get root form of adjective
|
|
10052
|
+
const getRoot = function (m, methods) {
|
|
10053
|
+
m.compute('root');
|
|
10054
|
+
let str = m.text('root');
|
|
10055
|
+
return str
|
|
10056
|
+
};
|
|
10057
|
+
|
|
10058
|
+
const api = function (View) {
|
|
10059
|
+
class Verbs extends View {
|
|
10060
|
+
constructor(document, pointer, groups) {
|
|
10061
|
+
super(document, pointer, groups);
|
|
10062
|
+
this.viewType = 'Verbs';
|
|
10063
|
+
}
|
|
10064
|
+
conjugate(n) {
|
|
10065
|
+
const methods = this.methods.two.transform.verb;
|
|
10066
|
+
const { toPresent, toPast, toFuture, toConditional, toGerund } = methods;
|
|
10067
|
+
return getNth(this, n).map(m => {
|
|
10068
|
+
let str = getRoot(m);
|
|
10069
|
+
return {
|
|
10070
|
+
presentTense: toPresent(str),
|
|
10071
|
+
pastTense: toPast(str),
|
|
10072
|
+
// futureTense: toFuture(str),
|
|
10073
|
+
// conditional: toConditional(str),
|
|
10074
|
+
// gerund: toGerund(str),
|
|
10075
|
+
}
|
|
10076
|
+
}, [])
|
|
10077
|
+
}
|
|
10078
|
+
}
|
|
10079
|
+
|
|
10080
|
+
View.prototype.verbs = function (n) {
|
|
10081
|
+
let m = this.match('#Verb+');
|
|
10082
|
+
m = getNth(m, n);
|
|
10083
|
+
return new Verbs(this.document, m.pointer)
|
|
10084
|
+
};
|
|
10085
|
+
};
|
|
10086
|
+
var api$1 = api;
|
|
10087
|
+
|
|
10088
|
+
var verbs = {
|
|
10089
|
+
api: api$1,
|
|
10090
|
+
};
|
|
10091
|
+
|
|
10092
|
+
var version = '0.0.7';
|
|
9493
10093
|
|
|
9494
10094
|
nlp$1.plugin(tokenizer);
|
|
9495
10095
|
nlp$1.plugin(tagset);
|
|
@@ -9498,13 +10098,25 @@
|
|
|
9498
10098
|
nlp$1.plugin(postTagger);
|
|
9499
10099
|
nlp$1.plugin(splitter);
|
|
9500
10100
|
nlp$1.plugin(numbers);
|
|
9501
|
-
|
|
10101
|
+
nlp$1.plugin(verbs);
|
|
9502
10102
|
|
|
9503
10103
|
const de = function (txt, lex) {
|
|
9504
10104
|
let dok = nlp$1(txt, lex);
|
|
9505
10105
|
return dok
|
|
9506
10106
|
};
|
|
9507
10107
|
|
|
10108
|
+
// copy constructor methods over
|
|
10109
|
+
Object.keys(nlp$1).forEach(k => {
|
|
10110
|
+
if (nlp$1.hasOwnProperty(k)) {
|
|
10111
|
+
de[k] = nlp$1[k];
|
|
10112
|
+
}
|
|
10113
|
+
});
|
|
10114
|
+
|
|
10115
|
+
// this one is hidden
|
|
10116
|
+
Object.defineProperty(de, '_world', {
|
|
10117
|
+
value: nlp$1._world,
|
|
10118
|
+
writable: true,
|
|
10119
|
+
});
|
|
9508
10120
|
/** log the decision-making to console */
|
|
9509
10121
|
de.verbose = function (set) {
|
|
9510
10122
|
let env = typeof process === 'undefined' ? self.env || {} : process.env; //use window, in browser
|