compromise
Advanced tools
Comparing version 14.3.1 to 14.4.0
@@ -9,5 +9,18 @@ compromise uses semver, and pushes to npm and github frequently | ||
<!-- #### [Unreleased] | ||
<!-- #### 14.4.0 [Unreleased] | ||
--> | ||
#### 14.4.0 [July 2021] | ||
- **[change]** - support root matches like '{walk}' work without doing .compute('root') | ||
- **[change]** - split numbers+units '12km' as contraction - #919 | ||
- **[new]** - `.lazy(txt, match)` fast-scan method [1](https://observablehq.com/@spencermountain/compromise-performance) | ||
- **[fix]** - support apostrophes in lexicon #932 | ||
- **[fix]** - support unTag property in sweep | ||
- **[change]** - keep sentence caches, when still valid | ||
- **[change]** - alias nlp.compile() to .buildTrie() | ||
- **[fix]** - tagging fixes | ||
- **[update]** - dependencies | ||
_plugin-releases_: dates, speed, de-compromise | ||
#### 14.3.1 [June 2021] | ||
@@ -14,0 +27,0 @@ - **[fix]** - missed caches in .sweep() |
@@ -5,3 +5,3 @@ { | ||
"description": "modest natural language processing", | ||
"version": "14.3.1", | ||
"version": "14.4.0", | ||
"main": "./src/three.js", | ||
@@ -101,6 +101,6 @@ "unpkg": "./builds/compromise.js", | ||
"amble": "1.3.0", | ||
"eslint": "8.17.0", | ||
"eslint": "8.19.0", | ||
"eslint-plugin-regexp": "1.7.0", | ||
"nlp-corpus": "4.3.0", | ||
"rollup": "2.75.6", | ||
"nlp-corpus": "4.4.0", | ||
"rollup": "2.75.7", | ||
"rollup-plugin-filesize-check": "0.0.1", | ||
@@ -119,2 +119,2 @@ "rollup-plugin-terser": "7.0.2", | ||
"license": "MIT" | ||
} | ||
} |
@@ -515,2 +515,3 @@ <div align="center"> | ||
- **[.grow('')](https://observablehq.com/@spencermountain/compromise-match)** - add any matching terms before or after each match | ||
- **[.sweep(net)](https://observablehq.com/@spencermountain/compromise-sweep)** - apply a series of match objects to the document | ||
- **[.splitOn('')](https://observablehq.com/@spencermountain/compromise-split)** - return a Document with three parts for every match ('splitOn') | ||
@@ -577,5 +578,6 @@ - **[.splitBefore('')](https://observablehq.com/@spencermountain/compromise-split)** - partition a phrase before each matching segment | ||
- **[nlp.tokenize()](https://observablehq.com/@spencermountain/compromise-tokenization)** - parse text without running POS-tagging | ||
- **[nlp.plugin()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - mix in a compromise-plugin | ||
- **[nlp.parseMatch()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - pre-parse any match statements for faster lookups | ||
- **[nlp.tokenize(str)](https://observablehq.com/@spencermountain/compromise-tokenization)** - parse text without running POS-tagging | ||
- **[nlp.lazy(str, match)](https://observablehq.com/@spencermountain/compromise-performance)** - scan through a text with minimal analysis | ||
- **[nlp.plugin({})](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - mix in a compromise-plugin | ||
- **[nlp.parseMatch(str)](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - pre-parse any match statements into json | ||
- **[nlp.world()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - grab or change library internals | ||
@@ -585,5 +587,11 @@ - **[nlp.model()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - grab all current linguistic data | ||
- **[nlp.hooks()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - see which compute methods run automatically | ||
- **[nlp.verbose()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - log our decision-making for debugging | ||
- **[nlp.verbose(mode)](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - log our decision-making for debugging | ||
- **[nlp.version](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - current semver version of the library | ||
- **[nlp.addWords(obj)](https://observablehq.com/@spencermountain/compromise-plugin)** - add new words to the lexicon | ||
- **[nlp.addTags(obj)](https://observablehq.com/@spencermountain/compromise-plugin)** - add new tags to the tagSet | ||
- **[nlp.typeahead(arr)](https://observablehq.com/@spencermountain/compromise-typeahead)** - add words to the auto-fill dictionary | ||
- **[nlp.buildTrie(arr)](https://observablehq.com/@spencermountain/compromise-lookup)** - compile a list of words into a fast lookup form | ||
- **[nlp.buildNet(arr)](https://observablehq.com/@spencermountain/compromise-sweep)** - compile a list of matches into a fast match form | ||
<!-- spacer --> | ||
@@ -590,0 +598,0 @@ <img height="30px" src="https://user-images.githubusercontent.com/399657/68221862-17ceb980-ffb8-11e9-87d4-7b30b6488f16.png"/> |
@@ -1,1 +0,1 @@ | ||
export default '14.3.1' | ||
export default '14.4.0' |
@@ -42,2 +42,3 @@ import { cleanAppend, cleanPrepend } from './lib/insert.js' | ||
const { document, world } = view | ||
view.uncache() | ||
// insert words at end of each doc | ||
@@ -44,0 +45,0 @@ let ptrs = view.fullPointer |
@@ -48,2 +48,3 @@ import pluckOutTerm from './lib/remove.js' | ||
const { indexN } = this.methods.one.pointer | ||
this.uncache() | ||
// two modes: | ||
@@ -80,3 +81,2 @@ // - a. remove self, from full parent | ||
} | ||
// self._cache = null | ||
let res = self.toView(ptrs) //return new document | ||
@@ -83,0 +83,0 @@ return res |
@@ -36,2 +36,3 @@ const dollarStub = /\$[0-9a-z]+/g | ||
let main = this | ||
this.uncache() | ||
if (typeof input === 'function') { | ||
@@ -38,0 +39,0 @@ return replaceByFn(main, input) |
@@ -22,2 +22,3 @@ import methods from './lib/_sort.js' | ||
let { docs, pointer } = this | ||
this.uncache() | ||
if (typeof input === 'function') { | ||
@@ -62,2 +63,5 @@ return customSort(this, input) | ||
ptrs = ptrs.reverse() | ||
if (this._cache) { | ||
this._cache = this._cache.reverse() | ||
} | ||
return this.update(ptrs) | ||
@@ -64,0 +68,0 @@ } |
@@ -31,3 +31,3 @@ /* | ||
*/ | ||
let start = 0 | ||
let index = 0 | ||
@@ -41,15 +41,13 @@ const pad3 = (str) => { | ||
let [n, i] = term.index || [0, 0] | ||
start += 1 | ||
var now = start; | ||
now = parseInt(now, 10) | ||
index += 1 | ||
//don't overflow time | ||
now = now > 46655 ? 46655 : now | ||
//don't overflow index | ||
index = index > 46655 ? 0 : index | ||
//don't overflow sentences | ||
n = n > 46655 ? 46655 : n | ||
n = n > 46655 ? 0 : n | ||
// //don't overflow terms | ||
i = i > 1294 ? 1294 : i | ||
i = i > 1294 ? 0 : i | ||
// 3 digits for time | ||
let id = pad3(now.toString(36)) | ||
let id = pad3(index.toString(36)) | ||
// 3 digit for sentence index (46k) | ||
@@ -56,0 +54,0 @@ id += pad3(n.toString(36)) |
@@ -6,2 +6,3 @@ import splice from './_splice.js' | ||
import numberRange from './number-range.js' | ||
import numberUnit from './number-unit.js' | ||
@@ -24,6 +25,2 @@ const byApostrophe = /'/ | ||
tmp.ptrs = [[0, start, end]] | ||
tmp.compute('lexicon') | ||
if (tmp.world.compute.preTagger) { | ||
tmp.compute('preTagger') | ||
} | ||
} | ||
@@ -70,3 +67,3 @@ | ||
let doc = view.fromText(words.join(' ')) | ||
doc.compute('id') | ||
doc.compute(['id', 'alias']) | ||
return doc.docs[0] | ||
@@ -80,2 +77,3 @@ } | ||
let list = model.one.contractions || [] | ||
let units = new Set(model.one.units || []) | ||
// each sentence | ||
@@ -116,7 +114,15 @@ document.forEach((terms, n) => { | ||
if (words[2] && words[2].tags.has('Time')) { | ||
methods.one.setTag([words[0]], 'Time', world) | ||
methods.one.setTag([words[0]], 'Time', world, null, 'time-range') | ||
} | ||
reTag(document[n], view, i, words.length) | ||
} | ||
continue | ||
} | ||
// split-apart '4km' | ||
words = numberUnit(terms, i, units) | ||
if (words) { | ||
words = toDocs(words, view) | ||
splice(document, [n, i], words) | ||
methods.one.setTag([words[1]], 'Unit', world, null, 'contraction-unit') | ||
} | ||
} | ||
@@ -123,0 +129,0 @@ }) |
import contractions from './contractions.js' | ||
export default { one: { contractions } } |
@@ -6,3 +6,3 @@ import multiWord from './multi-word.js' | ||
// rest of pre-tagger is in ./two/preTagger | ||
const firstPass = function (view) { | ||
const lexicon = function (view) { | ||
const world = view.world | ||
@@ -22,3 +22,3 @@ view.docs.forEach(terms => { | ||
export default { | ||
lexicon: firstPass | ||
lexicon | ||
} |
@@ -7,3 +7,2 @@ // derive clever things from our lexicon key-value pairs | ||
let _multi = {} | ||
// go through each word in this key-value obj: | ||
@@ -14,2 +13,3 @@ Object.keys(words).forEach(word => { | ||
word = word.toLowerCase().trim() | ||
word = word.replace(/'s\b/, '') | ||
// cache multi-word terms | ||
@@ -16,0 +16,0 @@ let split = word.split(/ /) |
@@ -1,2 +0,2 @@ | ||
import build from './compile/build.js' | ||
import build from './buildTrie/index.js' | ||
import scan from './scan.js' | ||
@@ -3,0 +3,0 @@ |
import api from './api/index.js' | ||
import compress from './api/compile/compress.js' | ||
import build from './api/compile/build.js' | ||
import compress from './api/buildTrie/compress.js' | ||
import build from './api/buildTrie/index.js' | ||
@@ -8,3 +8,3 @@ /** pre-compile a list of matches to lookup */ | ||
/** turn an array or object into a compressed trie*/ | ||
compile: function (input) { | ||
buildTrie: function (input) { | ||
const trie = build(input, this.world()) | ||
@@ -14,2 +14,4 @@ return compress(trie) | ||
} | ||
// add alias | ||
lib.compile = lib.buildTrie | ||
@@ -16,0 +18,0 @@ export default { |
import { fixPointers, isView, isNet } from './_lib.js' | ||
const parseRegs = function (regs, opts, world) { | ||
const one = world.methods.one | ||
if (typeof regs === 'number') { | ||
regs = String(regs) | ||
} | ||
// support param as string | ||
if (typeof regs === 'string') { | ||
regs = one.killUnicode(regs, world) | ||
regs = one.parseMatch(regs, opts, world) | ||
} | ||
return regs | ||
} | ||
const match = function (regs, group, opts) { | ||
@@ -13,7 +26,3 @@ const one = this.methods.one | ||
} | ||
// support param as string | ||
if (typeof regs === 'string') { | ||
regs = one.killUnicode(regs, this.world) | ||
regs = one.parseMatch(regs, opts, this.world) | ||
} | ||
regs = parseRegs(regs, opts, this.world) | ||
let todo = { regs, group } | ||
@@ -24,11 +33,2 @@ let res = one.match(this.docs, todo, this._cache) | ||
view._groups = byGroup | ||
// try to keep some of the cache | ||
// if (this._cache) { | ||
// view._cache = view.ptrs.map(ptr => { | ||
// if (isFull(ptr, this.document)) { | ||
// return this._cache[ptr[0]] | ||
// } | ||
// return null | ||
// }) | ||
// } | ||
return view | ||
@@ -47,6 +47,3 @@ } | ||
} | ||
if (typeof regs === 'string') { | ||
regs = one.killUnicode(regs, this.world) | ||
regs = one.parseMatch(regs, opts, this.world) | ||
} | ||
regs = parseRegs(regs, opts, this.world) | ||
let todo = { regs, group, justOne: true } | ||
@@ -71,6 +68,3 @@ let res = one.match(this.docs, todo, this._cache) | ||
} | ||
if (typeof regs === 'string') { | ||
regs = one.killUnicode(regs, this.world) | ||
regs = one.parseMatch(regs, opts, this.world) | ||
} | ||
regs = parseRegs(regs, opts, this.world) | ||
let todo = { regs, group, justOne: true } | ||
@@ -93,6 +87,3 @@ let ptrs = one.match(this.docs, todo, this._cache).ptrs | ||
} | ||
if (typeof regs === 'string') { | ||
regs = one.killUnicode(regs, this.world) | ||
regs = one.parseMatch(regs, opts, this.world) | ||
} | ||
regs = parseRegs(regs, opts, this.world) | ||
let todo = { regs, group, justOne: true } | ||
@@ -127,6 +118,3 @@ let ptrs = this.fullPointer | ||
// otherwise parse the match string | ||
if (typeof regs === 'string') { | ||
regs = one.killUnicode(regs, this.world) | ||
regs = one.parseMatch(regs, opts, this.world) | ||
} | ||
regs = parseRegs(regs, opts, this.world) | ||
let cache = this._cache || [] | ||
@@ -133,0 +121,0 @@ let view = this.filter((m, i) => { |
@@ -95,2 +95,6 @@ import fuzzy from './_fuzzy.js' | ||
if (reg.fastOr !== undefined) { | ||
// {work/verb} must be a verb | ||
if (reg.pos && !term.tags.has(reg.pos)) { | ||
return null | ||
} | ||
return reg.fastOr.has(term.implicit) || reg.fastOr.has(term.normal) || reg.fastOr.has(term.text) || reg.fastOr.has(term.machine) | ||
@@ -97,0 +101,0 @@ } |
@@ -130,10 +130,20 @@ const hasMinMax = /\{([0-9]+)?(, *[0-9]*)?\}/ | ||
//machine/sense overloaded | ||
//root/sense overloaded | ||
if (start(w) === '{' && end(w) === '}') { | ||
w = stripBoth(w) | ||
obj.id = w | ||
obj.root = w | ||
if (/\//.test(w)) { | ||
obj.sense = w | ||
obj.greedy = true | ||
} else { | ||
obj.machine = w | ||
let split = obj.root.split(/\//) | ||
obj.root = split[0] | ||
obj.pos = split[1] | ||
if (obj.pos === 'adj') { | ||
obj.pos = 'Adjective' | ||
} | ||
// titlecase | ||
obj.pos = obj.pos.charAt(0).toUpperCase() + obj.pos.substr(1).toLowerCase() | ||
// add sense-number too | ||
if (split[2] !== undefined) { | ||
obj.num = split[2] | ||
} | ||
} | ||
@@ -140,0 +150,0 @@ return obj |
import parseBlocks from './01-parseBlocks.js' | ||
import parseToken from './02-parseToken.js' | ||
import splitHyphens from './03-splitHyphens.js' | ||
import postProcess from './04-postProcess.js' | ||
import inflectRoot from './04-inflect-root.js' | ||
import postProcess from './05-postProcess.js' | ||
@@ -21,2 +22,4 @@ /** parse a match-syntax string into json */ | ||
tokens = splitHyphens(tokens, world) | ||
// '{walk}' | ||
tokens = inflectRoot(tokens, world) | ||
//clean up anything weird | ||
@@ -23,0 +26,0 @@ tokens = postProcess(tokens, opts) |
@@ -35,2 +35,5 @@ import debug from './debug/index.js' | ||
} | ||
if (method === 'root') { | ||
return this.text('root') | ||
} | ||
if (method === 'machine' || method === 'reduced') { | ||
@@ -37,0 +40,0 @@ return this.text('machine') |
import parse from './01-parse.js' | ||
// do some indexing on the list of matches | ||
const compile = function (matches, world) { | ||
const buildNet = function (matches, world) { | ||
// turn match-syntax into json | ||
@@ -42,2 +42,2 @@ matches = parse(matches, world) | ||
export default compile | ||
export default buildNet |
@@ -15,3 +15,3 @@ import canBe from './canBe.js' | ||
return list.map(todo => { | ||
if (!todo.tag && !todo.chunk) { | ||
if (!todo.tag && !todo.chunk && !todo.unTag) { | ||
return | ||
@@ -18,0 +18,0 @@ } |
@@ -44,3 +44,3 @@ const isMulti = / / | ||
term.tags.add(tag) | ||
// now it's dirty | ||
// now it's dirty? | ||
term.dirty = true | ||
@@ -47,0 +47,0 @@ // add a chunk too, if it's easy |
@@ -8,3 +8,3 @@ const hasSlash = /\// | ||
const addAliases = function (term, world) { | ||
let str = term.normal || term.text | ||
let str = term.normal || term.text || term.machine | ||
const aliases = world.model.one.aliases | ||
@@ -11,0 +11,0 @@ // lookup known aliases like '&' |
@@ -1,3 +0,4 @@ | ||
import basicSplit from './01-basic.js' | ||
import isSentence from './02-isSentence.js' | ||
import simpleSplit from './01-simple-split.js' | ||
import simpleMerge from './02-simple-merge.js' | ||
import smartMerge from './03-smart-merge.js' | ||
//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences. | ||
@@ -8,53 +9,18 @@ // Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc. | ||
const startWhitespace = /^\s+/ | ||
const hasLetter = /[a-z0-9\u00C0-\u00FF\u00a9\u00ae\u2000-\u3300\ud000-\udfff]/i | ||
const splitSentences = function (text, model) { | ||
let abbrevs = model.one.abbreviations || new Set() | ||
const splitSentences = function (text, world) { | ||
text = text || '' | ||
text = String(text) | ||
let sentences = [] | ||
// First do a greedy-split.. | ||
let chunks = [] | ||
// Ensure it 'smells like' a sentence | ||
if (!text || typeof text !== 'string' || hasSomething.test(text) === false) { | ||
return sentences | ||
return [] | ||
} | ||
// cleanup unicode-spaces | ||
text = text.replace('\xa0', ' ') | ||
// Start somewhere: | ||
let splits = basicSplit(text) | ||
// First do a greedy-split.. | ||
let splits = simpleSplit(text) | ||
// Filter-out the crap ones | ||
for (let i = 0; i < splits.length; i++) { | ||
let s = splits[i] | ||
if (s === undefined || s === '') { | ||
continue | ||
} | ||
//this is meaningful whitespace | ||
if (hasSomething.test(s) === false || hasLetter.test(s) === false) { | ||
//add it to the last one | ||
if (chunks[chunks.length - 1]) { | ||
chunks[chunks.length - 1] += s | ||
continue | ||
} else if (splits[i + 1]) { | ||
//add it to the next one | ||
splits[i + 1] = s + splits[i + 1] | ||
continue | ||
} | ||
} | ||
//else, only whitespace, no terms, no sentence | ||
chunks.push(s) | ||
} | ||
let chunks = simpleMerge(splits) | ||
//detection of non-sentence chunks: | ||
//loop through these chunks, and join the non-sentence chunks back together.. | ||
for (let i = 0; i < chunks.length; i++) { | ||
let c = chunks[i] | ||
//should this chunk be combined with the next one? | ||
if (chunks[i + 1] && isSentence(c, abbrevs, hasLetter) === false) { | ||
chunks[i + 1] = c + (chunks[i + 1] || '') | ||
} else if (c && c.length > 0) { | ||
//this chunk is a proper sentence.. | ||
sentences.push(c) | ||
chunks[i] = '' | ||
} | ||
} | ||
let sentences = smartMerge(chunks, world) | ||
//if we never got a sentence, return the given text | ||
@@ -61,0 +27,0 @@ if (sentences.length === 0) { |
//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation | ||
//we have slightly different rules for start/end - like #hashtags. | ||
const startings = | ||
/^[ \n\t.[\](){}⟨⟩:,،、‒–—―…!‹›«»‐\-?‘’;/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022\uFF02\u0027\u201C\u201F\u201B\u201E\u2E42\u201A\u2035\u2036\u2037\u301D\u0060\u301F]+/ | ||
/^[ \n\t.[\](){}⟨⟩:,،、‒–—―…!‹›«»‐\-?‘’;/⁄·&*•^†‡¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022\uFF02\u0027\u201C\u201F\u201B\u201E\u2E42\u201A\u2035\u2036\u2037\u301D\u0060\u301F]+/ | ||
const endings = | ||
@@ -6,0 +6,0 @@ /[ \n\t.'[\](){}⟨⟩:,،、‒–—―…!‹›«»‐\-?‘’;/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022\uFF02\u201D\u00B4\u301E]+$/ |
@@ -1,28 +0,8 @@ | ||
import sentence from './01-sentences/index.js' | ||
import term from './02-terms/index.js' | ||
import whitespace from './03-whitespace/index.js' | ||
import normalize from '../compute/normal/index.js' | ||
import splitSentences from './01-sentences/index.js' | ||
import splitTerms from './02-terms/index.js' | ||
import splitWhitespace from './03-whitespace/index.js' | ||
import killUnicode from './unicode.js' | ||
import fromString from './parse.js' | ||
import isSentence from './01-sentences/is-sentence.js' | ||
// turn a string input into a 'document' json format | ||
const fromString = function (input, world) { | ||
const { methods, model } = world | ||
const { splitSentences, splitTerms, splitWhitespace } = methods.one.tokenize | ||
input = input || '' | ||
// split into sentences | ||
let sentences = splitSentences(input, model) | ||
// split into word objects | ||
input = sentences.map((txt) => { | ||
let terms = splitTerms(txt, model) | ||
// split into [pre-text-post] | ||
terms = terms.map(splitWhitespace) | ||
// add normalized term format, always | ||
terms.forEach((t) => { | ||
normalize(t, world) | ||
}) | ||
return terms | ||
}) | ||
return input | ||
} | ||
export default { | ||
@@ -32,5 +12,6 @@ one: { | ||
tokenize: { | ||
splitSentences: sentence, | ||
splitTerms: term, | ||
splitWhitespace: whitespace, | ||
splitSentences, | ||
isSentence, | ||
splitTerms, | ||
splitWhitespace, | ||
fromString, | ||
@@ -37,0 +18,0 @@ }, |
@@ -6,3 +6,3 @@ // units that are abbreviations too | ||
'gal', | ||
'ft', //ambiguous | ||
// 'ft', //ambiguous | ||
'qt', | ||
@@ -36,10 +36,9 @@ 'pt', | ||
'mb', //megabyte | ||
'gb', //ambig | ||
// 'gb', //ambig | ||
'tb', //terabyte | ||
'lx', //lux | ||
'lm', //lumen | ||
'pa', //ambig | ||
// 'pa', //ambig | ||
'fl oz', // | ||
'yb', | ||
] |
@@ -32,3 +32,3 @@ //a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii. | ||
t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт', | ||
u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ', | ||
u: 'ÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰυϋύ', | ||
v: 'νѴѵѶѷ', | ||
@@ -35,0 +35,0 @@ w: 'ŴŵƜωώϖϢϣШЩшщѡѿ', |
@@ -22,4 +22,4 @@ const round = n => Math.round(n * 100) / 100 | ||
View.prototype.tagger = function () { | ||
return this.compute(['preTagger', 'contractionTwo', 'postTagger']) | ||
return this.compute(['tagger']) | ||
} | ||
} |
@@ -22,2 +22,5 @@ let net = null | ||
export default { postTagger } | ||
// helper function for compute('tagger') | ||
const tagger = (view) => view.compute(['lexicon', 'preTagger', 'postTagger']) | ||
export default { postTagger, tagger } |
@@ -29,8 +29,7 @@ export default [ | ||
//felt loved | ||
{ | ||
match: '(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]', | ||
group: 0, | ||
tag: 'Adjective', | ||
reason: 'felt-loved', | ||
}, | ||
{ match: '(seem|seems|seemed|appear|appeared|appears|feel|feels|felt|sound|sounds|sounded) (#Adverb|#Adjective)? [#PastTense]', group: 0, tag: 'Adjective', reason: 'felt-loved' }, | ||
// seem confused | ||
{ match: '(seem|feel|seemed|felt) [#PastTense]', group: 0, tag: 'Adjective', reason: 'seem-confused' }, | ||
// a bit confused | ||
{ match: 'a (bit|little|tad) [#PastTense]', group: 0, tag: 'Adjective', reason: 'a-bit-confused' }, | ||
] |
@@ -46,7 +46,9 @@ export default [ | ||
// thousand and two | ||
{ | ||
match: `#Multiple+ and #Value`, | ||
tag: 'Value', | ||
reason: 'magnitude-and-value', | ||
}, | ||
{ match: `#Multiple+ and #Value`, tag: 'Value', reason: 'magnitude-and-value' }, | ||
// ambiguous units like 'gb' | ||
// { match: '#Value square? [(kb|mb|gb|tb|ml|pt|qt|tbl|tbsp|km|cm|mm|mi|ft|yd|kg|hg|mg|oz|lb|mph|pa|miles|yard|yards|pound|pounds)]', group: 0, tag: 'Unit', reason: '12-gb' }, | ||
// 5 miles per hour | ||
{ match: '#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]', group: 0, tag: 'Unit', reason: '12-miles-per-second' }, | ||
// 5 square miles | ||
{ match: '#Value [(square|cubic)] #Unit', group: 0, tag: 'Unit', reason: 'square-miles' }, | ||
] |
@@ -15,2 +15,10 @@ | ||
// 'a rental' | ||
const isEndNoun = function (terms, i) { | ||
if (!terms[i + 1] && terms[i - 1] && terms[i - 1].tags.has('Determiner')) { | ||
return 'Noun' | ||
} | ||
return null | ||
} | ||
const adhoc = { | ||
@@ -21,3 +29,3 @@ 'Adj|Gerund': (terms, i) => { | ||
'Adj|Noun': (terms, i) => { | ||
return isCapital(terms, i) | ||
return isCapital(terms, i) || isEndNoun(terms, i) | ||
}, | ||
@@ -24,0 +32,0 @@ 'Adj|Past': (terms, i) => { |
@@ -0,1 +1,2 @@ | ||
import fillTags from './_fillTags.js' | ||
const env = typeof process === 'undefined' || !process.env ? self.env || {} : process.env // eslint-disable-line | ||
@@ -29,3 +30,3 @@ import adhoc from './_adhoc.js' | ||
if (found && env.DEBUG_TAGS) { | ||
console.log(` \x1b[2m\x1b[3m ↓ - '${term.normal}' (#${found}) \x1b[0m`)//eslint-disable-line | ||
console.log(` \x1b[2m\x1b[3m ↓ - '${term.normal || term.implicit}' (#${found}) \x1b[0m`)//eslint-disable-line | ||
} | ||
@@ -77,3 +78,6 @@ found = obj[found] | ||
if (tag) { | ||
setTag([term], tag, world, null, `3-[variable] (${form})`) | ||
// tag it | ||
setTag([term], tag, world, null, `3-[switch] (${form})`) | ||
// add plural/singular etc. | ||
fillTags(terms, i, model) | ||
} else if (env.DEBUG_TAGS) { | ||
@@ -80,0 +84,0 @@ console.log(`\n -> X - '${str}' : (${form}) `)//eslint-disable-line |
@@ -24,2 +24,5 @@ //similar to plural/singularize rules, but not the same | ||
'men', | ||
], | ||
t: [ | ||
'feet' | ||
] | ||
@@ -26,0 +29,0 @@ } |
@@ -14,3 +14,3 @@ | ||
import nounFallback from './3rd-pass/04-fallback.js' | ||
import variables from './3rd-pass/06-switches.js' | ||
import switches from './3rd-pass/06-switches.js' | ||
import checkHyphen from './3rd-pass/05-prefixes.js' | ||
@@ -33,3 +33,3 @@ | ||
nounFallback, | ||
variables, | ||
switches, | ||
} | ||
@@ -73,3 +73,3 @@ | ||
// verb-noun disambiguation, etc | ||
third.variables(terms, i, world) | ||
third.switches(terms, i, world) | ||
} | ||
@@ -93,4 +93,2 @@ } | ||
} | ||
// leave a nice cache for the next people | ||
view.compute('cache') | ||
return document | ||
@@ -97,0 +95,0 @@ } |
@@ -15,2 +15,3 @@ import fancyThings from './byTag.js' | ||
word = word.toLowerCase().trim() | ||
word = word.replace(/'s\b/, '') | ||
// cache multi-word terms | ||
@@ -17,0 +18,0 @@ let split = word.split(/ /) |
@@ -36,2 +36,4 @@ import methods from '../../methods/index.js' | ||
'Plural|Verb': 'Plural', //(these are already derivative) | ||
// 'miles' | ||
'Unit|Noun': 'Noun', | ||
} | ||
@@ -38,0 +40,0 @@ |
@@ -51,2 +51,4 @@ const jj = 'Adjective' | ||
anything: jj, | ||
not: jj,//not swell | ||
me: jj,//called me swell | ||
}, | ||
@@ -53,0 +55,0 @@ afterWords: { |
@@ -11,2 +11,3 @@ import adjGerund from './adj-gerund.js' | ||
import personPlace from './person-place.js' | ||
import unitNoun from './unit-noun.js' | ||
@@ -24,2 +25,3 @@ const clues = { | ||
'Person|Place': personPlace, | ||
'Unit|Noun': unitNoun, | ||
} | ||
@@ -26,0 +28,0 @@ |
@@ -14,2 +14,3 @@ // generated in ./lib/lexicon | ||
"Plural": "true¦ones,records", | ||
"Unit|Noun": "true¦cEfDgChBinchAk9lb,m6newt5oz,p4qt,t1y0;ardEd;able1b0ea1sp;!l,sp;spo1;a,oundAt,x;on9;!b,g,i1l,m,p0;h,s;!les;!b,elvin,g,m;!es;g,z;al,b;eet,oot,t;m,up0;!s", | ||
"Value": "true¦a few", | ||
@@ -22,14 +23,14 @@ "Imperative": "true¦come here", | ||
"Possessive": "true¦any2its,my,no4o0somet3their1yo0;ur0;!s;o1t0;hing;ne", | ||
"Noun|Verb": "true¦0:7T;1:6L;2:7P;3:80;4:7Z;5:83;6:6Y;7:7J;a7Jb6Uc5Td58e50f4Cg42h3Ui3Oj3Mk3Kl3Am31n2Xo2Tp1Zques7Lr1Bs05tRuPvKwAy9z8;ip,o6C;awn,e1Uie4S;aFeaEhCiAo8re7L;nd0r8;k,ry;mp,n8pe,re,sh,tne83;!d,g;e6Gi8;p,st6;r,th0;it,r8s4t2ve,x;ehou1ra82;aBiAo8;i8lunte0te,w;ce,d;be,ew,s6X;cuum,l38;p8sh0;da4gra4Y;aJeIhrHiGoFrBu9wi8y4M;n,st;n8rn;e,n61;aAe9i8u7;bu4ck,gg0m,p;at,nd;ck,de,in,nsf0p,v5X;ll,ne,r3Qss,t75u2;ck,e,me,p,re;e1Low,u7;ar,e,st;g,l8rg61s4;k,ly;a0Cc07e04hZiXkVlTmSnRou6BpNtDu9w8;ear,it2;b1Wit,m,pp9r8spe5;ge,pri1vey;l8o5A;e57y;aFeEiDoBr9u8y6;dy,ff,mb6;a6Be8i4E;am,ss,t2;cking,p,r8;e,m;ck,t2;m,p;ck,in,ke,ll,mp,nd,r8te,y;!e,t;aAeed,i9la4Jons6Lr8y;ay,e10ink6u3;n,r6Hte;n,rk;ee1Dow;e0Di6o41;eep,i8;ce,p,t;ateboa5Yi8;!p;de,gn8ze;!al;aBeAi9o8;ck,p,w;ft,p,v0;d,i31;pe,re;a9ed,n8rv14t;se,t1W;l,r2t;aBhedu6oAr8;at2e8;en,w;re,ut;le,n,r0H;crifi3il;aTeCiBoAu8;b,in,le,n,s8;h,t;a7ck,ll,ot;de,ng,p,s1A;as5DcMdo,el,fKgJje5lImGnFo0TpDque7sAturn,v8wa5B;e8i1H;al,r1;er5Io9t,u8;lt,me;l5Grt;air,ea8ly,o3X;l,t;dezvo24t;a8edy;ke,rk;ea1i3D;a4Zist0r4C;act5Dorm,u8;nd,se;a8o4Wru4P;ll;ck,i1ke,l46n8tT;ge,k;aYeVhTiQlLoHr9u8;mp,n2rcha1sh;ai1eDiCo8u3J;be,ceAdu3gr8je5mi1te7;am8e5D;!me;ed,ss;ce,de;s8y;er4Ts;iAl8ol,p,re,s2Qw0;i8l;ce,sh;nt,s4H;aAe9u8;g,n3U;ad;ce,n8y;!t;ck,l9n8pe,t,vot;!e;e,ot;a1o8;ne,tograph;ak,e9n,r8t;fu3Tm3W;!l;cka3Ii9n,rt8ss,t2u1;!y;nt,r;bAff0il,o9r8utli2R;d0ie4R;ze;je5;a3KeAo8;d,t8;e,i3;ed,gle5rd,t;aDeBiAo9u8;rd0;d2Snit43p,ve;lk,n2Wrr42x;asu10n3Nr8ss;ge,it;il,n9p,rk2Xs8t2;h,k;da4oeuv0W;aEeBiAo8ump;a8bby,ck,g,ok,ve;d,n;cen1ft,m37nCst;a9c0Bv8;el,y;ch,d,p,se;b9c8nd,t2un2;e,k;el,o23;e2Bi8no3B;ck,ll,ss;am,o15u8;d2Li3;mpCn9r35ss8;ue;cr17dex,flu9ha6k,se1Ttervi8voi3;ew;en3;a5le1O;aCeAi9o8u3R;ld,no1Rok,pe,r1st,u1;ghlight,ke,re,t;a8lp;d,t;nd9r8te;bo2Zm,ne3Gve7;!le;aGeek,lo3EoFrAu8;ar8e3Di0Ln;antee,d;aAi9o8umb6;om,u2A;nd,p;d8sp;e,ua4;of,ssip;in,me,ng,s,te,ze;aUeQiLlHoErAu8;el,n8zz;c2Ed;a9o8y;st,wn;c8me;tuN;c9g,ol,r8;ce,e1Mm;us;aAe0Iip,o8y;at,od,w8;!er;g,re,sh,vo0X;eBgAl9n8re,sh,t,x;an3i0D;e,m,t0;ht,uC;ld;a9e8n3;d,l;r,tu8;re;ce,il,ll,rm,vo20;cho,nEsCx8ye;cAerci1hib1Jp8tra5;eri8o0H;en3me2I;el,han14;ca8tima4;pe;count0d,gine0vy;aQeKiEoDr9u8ye;b,mp,pli23;aAe9i8;ft,nk,ve;am,ss;ft,in;cu03d0Uubt;p,sAv8;e,i8or3;de;char0Qli9p8;at2lay,u4;ke;al,ba4cBfeAl9ma0Vpos0Zsi8tail;gn,re;ay,ega4;at,ct;liVr8;ea1;ma0Hn3r8te;e,t;a05ent04hXlUoErAu8;be,r8t;e,l;aft,eAo9u8y;sh;p,ss,wd;d0Lep;de,in,lLmFnAok,py,re,st,u8v0;gh,n8p6;sTt;ceAdu5glomeBstru5t8veG;a5r8;a7ol;nt8rn;ra4;biCfoBmAp8;le8ou07romi1;me1B;a05e1Au4;rt;ne;lap1o8;r,ur;a9i8;ck,p;im,w;a9e8ip;at,ck,er;iBllenNmpi08n9r8se,uffe0E;ge,m,t;ge,n8;el;n,r;er,re;ke,ll,mp,p,r9sh,t2u1ve;se;d,e;aSePiOlLoHrBu8ypa0M;bb6ck6dg9ff0l8rn,st,zz;ly;et;anCeaBi9oad8;ca7;be,d8;ge;ch,k;ch,d;aAmb,ne,o9ss,tt6x,ycott;le;k,st,t;rd,st;a9e8itz,oN;nd;me;as,d,ke,te;a9nef8t;it;r,t;il,lan3nArga9s8;e,h;in;!d,g,k;cZdRffilQge,iPlt0nMppJrFssDttBuc9wa8;rd;ti8;on;a8empt;ck;i7ocK;st;ch9mo8;ur;!i8;ve;e9roa2;ch;al;ch8sw0;or;er;d,m,r;ia4;dCv8;an3o8;ca4;te;ce;i5re8;ss;ct;c8he,t;eAo8;rd,u8;nt;nt,ss", | ||
"Noun|Verb": "true¦0:7T;1:6L;2:7P;3:80;4:7Z;5:83;6:6Y;7:7J;8:76;9:6U;a7Lb6Wc5Vd59e51f4Dg43h3Vi3Pj3Nk3Ll3Bm32n2Yo2Up21ques7Nr1Ds07tTuRvMwCyBzA;ip,o6E;awn,e1Wie4T;aHeaGhEiCoAre7N;nd0rA;k,ry;mp,nApe,re,sh,tne85;!d,g;e6IiA;p,st6;r,th0;it,rAs4t2ve,x;ehou1ra84;aDiCoA;iAlunte0te,w;ce,d;be,ew,s8;cuum,l39;pAsh0;da4gra50lo4X;aLeKhrJiIoHrDuBwiAy4N;n,st;nArn;e,n63;aCeBiAu7;bu4ck,gg0m,p;at,nd;ck,de,in,nsf0p,v5Z;ll,ne,r3Rss,t77u2;ck,e,me,p,re;e4Mow,u7;ar,e,st;g,lArg63s4;k,ly;a0Ec09e06h01iZkXlVmUnTou6DpPtFuBwA;ear,it2;b1Xit,m,ppBrAspe5;ge,pri1vey;lAo5C;e59y;aHeGiFoDrBuAy6;dy,ff,mb6;a6DeAi4G;am,ss,t2;cking,p,rA;e,m;ck,t2;m,p;ck,in,ke,ll,mp,nd,rAte,y;!e,t;aCeed,iBla4Lons6NrAy;ay,e41ink6u3;n,r6Jte;n,rk;ee1Eow;e0Fi6o43;eep,iA;ce,p,t;ateboa60iA;!p;de,gnAze;!al;aDeCiBoA;ck,p,w;ft,p,v0;d,i32;pe,re;aBed,nArv15t;se,t1X;l,r2t;aDhedu6oCrA;at2eA;en,w;re,ut;le,n,r0I;crifi3il;aVeEiDoCuA;b,in,le,n,sA;h,t;a7ck,ll,ot;de,ng,p,s1B;as5FcOdo,el,fMgLje5lKmInHo0UpFque7sCturn,vAwa5D;eAi1I;al,r1;er5KoBt,uA;lt,me;l5Irt;air,eaAly,o3Z;l,t;dezvo25t;aAedy;ke,rk;ea1i3F;a51ist0r4E;act5Form,uA;nd,se;aAo4Yru8;ll;ck,i1ke,l48nAtU;ge,k;aZeWhUiRlNoJrBuA;mp,n2rcha1sh;ai1eFiEoAu3L;be,ceCdu3grAje5mi1te7;amAe5F;!me;ed,ss;ce,de;sAy;er4Vs;iClAol,p,re,s2Sw0;iAl;ce,sh;nt,s4J;aBe2AuA;g,n9;ce,nAy;!t;ck,lBnApe,t,vot;!e;e,ot;a1oA;ne,tograph;ak,eBn,rAt;fu3Wm8;!l;cka9iBn,rtAss,t2u1;!y;nt,r;bCff0il,oBrAutli2U;d0ie4U;ze;je5;a3NeCoA;d,tA;e,i3;ed,gle5rd,t;aFeDiCoBuA;rd0;d2Vnit46p,ve;lk,n2Zrr45x;asu12n3QrAss;ge,it;il,nBp,rk30sAt2;h,k;da4oeuv0Y;aGeDiCoAump;aAbby,ck,g,ok,ve;d,n;cen1ft,m8nEst;aBc0DvA;el,y;ch,d,p,se;bBcAnd,t2un2;e,k;el,o26;e2EiAno3E;ck,ll,ss;am,o18uA;d9i3;mpEnBr38ssA;ue;cr1Adex,fluBha6k,se1WterviAvoi3;ew;en3;a5le1R;aEeCiBoAu3U;ld,no1Uok,pe,r1st,u1;ghlight,ke,re,t;aAlp;d,t;ndBrAte;bo32m,ne3Jve7;!le;aIeek,lo3HoHrCuA;arAe3Gi0On;antee,d;aCiBoAumb6;om,u2D;nd,p;dAsp;e,ua4;of,ssip;in,me,ng,s,te,ze;aWeSiNlJoGrCuA;el,nAzz;c2Hd;aBoAy;st,wn;cAme;tuP;cBg,ol,rA;ce,e1Pm;us;aCe0Lip,oAy;at,od,wA;!er;g,re,sh,vo10;eDgClBnAre,sh,t,x;an3i0G;e,m,t0;ht,uE;ld;aBeAn3;d,l;r,tuA;re;ce,il,ll,rm,vo23;cho,nGsExAye;cCerci1hib8pAtra5;eriAo0K;en3me2L;el,han9;caAtima4;pe;count0d,gine0vy;aTeNiHoFrBuAye;b,mp,pli26;aCeBiA;ft,nk,ve;am,ss;ft,in;cu06d9ubt,wnloA;ad;p,sCvA;e,iAor3;de;char9liBpA;at2lay,u4;ke;al,ba4cDfeClBma0Xpos8siAtail;gn,re;ay,ega4;at,ct;liXrA;ea1;ma9n3rAte;e,t;a07ent06hZlWoGrCuA;be,rAt;e,l;aft,eCoBuAy;sh;p,ss,wd;d8ep;de,in,lNmHnCok,py,re,st,uAv0;gh,nAp6;sVt;ceCdu5glomeDstru5tAveI;a5rA;a7ol;ntArn;ra4;biEfoDmCpA;leAou09romi1;me1D;a07e1Cu4;rt;ne;lap1oA;r,ur;aBiA;ck,p;im,w;aBeAip;at,ck,er;iDllen9mpi0AnBrAuffe0G;ge,m,t;ge,nA;el;n,r;er,re;ke,ll,mp,p,rBsh,t2u1ve;se;d,e;aUeRiQlNoJrDuAypa0O;bb6ck6dgBff0lArn,st,zz;ly;et;anEeaDiBoadA;ca7;be,d9;ge;ch,k;ch,d;aCmb,ne,oBss,tt6x,ycott;le;k,st,t;rd,st;aBeAitz,oP;nd;me;as,d,ke,te;aBnef8t;it;r,t;il,lan3nCrgaBsA;e,h;in;!d,g,k;c01dTffilSge,iRlt0nOppLrHssFttDucBwaA;rd;tiA;on;aAempt;ck;i7ocM;st;chBmoA;ur;!iA;ve;eBroa2;ch;al;chAsw0;or;er;d,m,r;ia4;dEvA;an3oA;ca4;te;ce;i5reA;ss;ct;cAhe,t;eCoA;rd,uA;nt;nt,ss", | ||
"Actor": "true¦aJbGcFdCfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJecretary,oldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt", | ||
"Honorific": "true¦aObrigadiNcGdFexcellency,fiAliCma9officNp5queen,r2s0taoiseach,vice4;e0ultJ;cond liArgeaB;abbi,e0;ar0verend; adK;astGr0;eside6i0ofessF;me ministFnce0;!ss;gistrate,r4yC;eld mar3rst l0;ady,i0;eutena0;nt;shB;oct6utchess;aptain,hance4o0;lonel,mmand5n0unci3;gress0stable;m0wom0;an;ll0;or;er;d0yatullah;mir0;al", | ||
"Pronoun": "true¦'em,elle,h3i2me,she4th0us,we,you;e0ou;m,y;!l,t;e0im;!'s", | ||
"Singular": "true¦0:58;1:4H;2:57;3:4U;4:4S;5:4N;6:4R;7:51;8:4I;a4Rb46c39d2We2Pf2Fg24h1Sin1Pjel3k1Nl1Km1Bn18o14p0Nqu0Mr0DsUtJuGvCw9;a9ha3Bom2B;f1i4Vt0Ey9;! arou4E;arn4FeAo9;cabu07l52;gKr9;di6t1J;nc34p2RrAs 9;do3Rs55;bani2in0; rex,aIeHhGiEoDrBuAv9;! show;m2In5rntJto16;agedy,ib9o44;e,u2O;p5rq3D;c,de,er,m9;etE;ere,i8;am,mp38;ct5le4x return;aQcOeNhMi2kKoJtEuBy9;ll9n26st4O;ab2O;bAnri19per bowl,r9;f1roga2;st3Ctot0;aCepBipe3Po1ArAudent9;! lo1J;ang1i8;fa1Emo1E;ff1t2Z;loi40meo15;elet12i9;er,ll,rm3K;ack,or47;ab0Tcurity gu2C;e4ho9;l2Yol;la31;av0VeChetor5iAo9;de4om;te,v9;erb0M;bCcBf9publ5r0Nspi2;er9orm1;e4r0;it0ord label;a2u40;estion mark,ot27;aMeKhJiHlFort0rAu9yram1B;ddi8ppy,rpo0I;eCie3Go9;bl3Ts9;pe6t9;a2itu2;diction,mi0Droga7ss relea0D;a9ebisci2;q26te,y1;cn5e9g;!r;armaci37otocoH;dest0ncil,r9t0;cen3Fsp3G;nAr2Qte9;!nt;el2Qop3;bj3CcApia2rde0thers,ve9wn1;n,rview;cu9e0E;pi1;aAit23ot9umb1;a24hi8;n28rra7;aFeEiDoAu9é0F;m0Rr0;mAnopo3pPrni8sq1Ot9u12;h1i34;!my;li0Vn08;d5nu,t0;mm0nd11te9yf3;ri0;aurea2iAu9;ddi2nch;ght bulb,p0C;ey9ittL;!no2;cAdices,itia7se6te4vert9;eb1L;en7ide4;aJeaFighDo9uman right,ygie10;le,meAsp1Jtb9;ed;! r9;un; scho12ri9;se;dAv9;en; start,pho9;ne;m,ndful,ze;aHeFirl1KlaQoErAu9;l3y;an9enadi1id;a16d9; slam,fa9mo9;th1;d,lf1;lat0Dntlem9;an;df3r9;l5n1D;aHeGiElDol3rAun9;er0;ee market,iAon9;ti1;e16ga2;ame,u2;nan9ref3;ci1;lla,t14;br5mi3n0Uth1;conoEffDgg,lecto0MnCs1Xth5venBxAyel9;id;ampTempl0Ite4;i8t;er1K;e6i1J;my;adKeGiDoAr9u0P;agonf3i1;cAg1Fi3or,ssi1wn9;si0M;to0BumenB;ale6gniAnn1s9vide0O;conte4incen7tri6;ta0A;aBc0fAni0te9;c7rre4;ault 05err0;th;!dy;aXeVhOiNlLoDr9;edit cBit5uc9;ib9;le;ard;efficFke,lDmmuniqNnBpi1rr0t11u9yo2;ri1s9;in;ne6s9;ervatoVuI;ic,lQum9;ni0L;ie4;er9ie4;gy,ic;ty,vil wL;aDeqCocoBr9;istmas car9ysanthemum;ol;la2;ue;ndeli1racter9;ist5;ili8llDr9;e0tifica2;hi1naFpErCshi1t9ucus;erpi9hedr0;ll9;ar;bohyd9ri1;ra2;it0;ry;aPeOiMlemLoHrDu9;ddhiYnBr9tterf3;glar9i0;!y;ny;eakBiAo9;!th1;de;faRthroC;dy,g,roBwl,y9;!frie9;nd;ugh;ish;cyc9oH;liK;an,l3;nki8r9;!ri1;er;ng;cTdNllLnIppeti2rray,sFtBu9;nt,to9;psy;hAt5;ic;ie9le2;st;ce4pe6;ct;nt;ecAoma3tiA;ly;do2;er9y;gy; hominDjAvan9;tage;ec7;ti9;ve;em;cru0eAqui9;tt0;ta2;te;al", | ||
"Singular": "true¦0:59;1:4I;2:58;3:4V;4:4T;5:4O;6:4S;7:52;8:4J;a4Sb47c3Ad2Xe2Qf2Gg25h1Tin1Qjel3k1Ol1Lm1Bn18o14p0Nqu0Mr0DsUtJuGvCw9;a9ha3Com2C;f1i4Wt0Ey9;! arou4F;arn4GeAo9;cabu07l53;gKr9;di6t1K;nc35p2SrAs 9;do3Ss56;bani2in0; rex,aIeHhGiEoDrBuAv9;! show;m2Jn5rntJto16;agedy,ib9o45;e,u2P;p5rq3E;c,de,er,m9;etE;ere,i8;am,mp39;ct5le4x return;aQcOeNhMi2kKoJtEuBy9;ll9n27st4P;ab2P;bAnri1Aper bowl,r9;f1roga2;st3Dtot0;aCepBipe3Qo1BrAudent9;! lo1K;ang1i8;fa1Fmo1F;ff1t30;loi41meo16;elet13i9;er,ll,rm3L;ack,or48;ab0Ucurity gu2D;e4ho9;l2Zol;la32;av0WeChetor5iAo9;de4om;te,v9;erb0N;bCcBf9publ5r0Ospi2;er9orm1;e4r0;it0ord label;a2u41;estion mark,ot28;aMeKhJiHlFort0rAu9yram1C;ddi8ppy,rpo0J;eCie3Ho9;bl3Us9;pe6t9;a2itu2;diction,mi0Eroga7ss relea0E;a9ebisci2;q27te,y1;cn5e9g;!r;armaci38otocoH;dest0ncil,r9t0;cen3Gsp3H;nAr2Rte9;!nt;el2Rop3;bj3DcApia2rde0thers,ve9wn1;n,rview;cu9e0F;pi1;aAit24ot9umb1;a25hi8;n29rra7;aFeEiDoAu9é0G;m0Sr0;mAnopo3pQrni8sq1Pt9u13;h1i35;!my;li0Wn09;d5nu,t0;mm0nAte9yf3;ri0;!d10;aurea2iAu9;ddi2nch;ght bulb,p0C;ey9ittL;!no2;cAdices,itia7se6te4vert9;eb1L;en7ide4;aJeaFighDo9uman right,ygie10;le,meAsp1Jtb9;ed;! r9;un; scho12ri9;se;dAv9;en; start,pho9;ne;m,ndful,ze;aHeFirl1KlaQoErAu9;l3y;an9enadi1id;a16d9; slam,fa9mo9;th1;d,lf1;lat0Dntlem9;an;df3r9;l5n1D;aHeGiElDol3rAun9;er0;ee market,iAon9;ti1;e16ga2;ame,u2;nan9ref3;ci1;lla,t14;br5mi3n0Uth1;conoEffDgg,lecto0MnCs1Xth5venBxAyel9;id;ampTempl0Ite4;i8t;er1K;e6i1J;my;adKeGiDoAr9u0P;agonf3i1;cAg1Fi3or,ssi1wn9;si0M;to0BumenB;ale6gniAnn1s9vide0O;conte4incen7tri6;ta0A;aBc0fAni0te9;c7rre4;ault 05err0;th;!dy;aXeVhOiNlLoDr9;edit cBit5uc9;ib9;le;ard;efficFke,lDmmuniqNnBpi1rr0t11u9yo2;ri1s9;in;ne6s9;ervatoVuI;ic,lQum9;ni0L;ie4;er9ie4;gy,ic;ty,vil wL;aDeqCocoBr9;istmas car9ysanthemum;ol;la2;ue;ndeli1racter9;ist5;ili8llDr9;e0tifica2;hi1naFpErCshi1t9ucus;erpi9hedr0;ll9;ar;bohyd9ri1;ra2;it0;ry;aPeOiMlemLoHrDu9;ddhiYnBr9tterf3;glar9i0;!y;ny;eakBiAo9;!th1;de;faRthroC;dy,g,roBwl,y9;!frie9;nd;ugh;ish;cyc9oH;liK;an,l3;nki8r9;!ri1;er;ng;cTdNllLnIppeti2rray,sFtBu9;nt,to9;psy;hAt5;ic;ie9le2;st;ce4pe6;ct;nt;ecAoma3tiA;ly;do2;er9y;gy; hominDjAvan9;tage;ec7;ti9;ve;em;cru0eAqui9;tt0;ta2;te;al", | ||
"Preposition": "true¦'o,-,aLbIcHdGexcept,fFinEmid,notwithstandiRoCpSqua,sBt7u4v2w0;/o,hereNith0;!in,oR;ersus,i0;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut", | ||
"SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", | ||
"Uncountable": "true¦0:2S;1:1Z;2:27;a2Gb27c1Xd1Oe1Gf1Ag13h0Wi0Pj0Ok0Nl0Im08n06o05pZrUsIt9v7w3;a5i4oo3;d,l;ldlife,ne;rm8t2;ernacul1Ui3;neg1Tol0Otae;eAh9oothpas1Nr4un3yranny;a,gst1V;aff29ea18o4ue nor3;th;oZu3;ble3se1Ft;!shoot1X;ermod2Cund2;a,nnis;aCcene0JeBhAil9ki8o7p6t4u3weepstak1;g1Inshi12;ati02e3;am,el;ace24eci1;ap,cc2;n,ttl1;k,v2;eep,ingl1;na15ri1;d0Ofe1Wl3nd,t0C;m1Lt;a6e4ic3;e,ke0W;c3laxa0Tsearch;ogni0Srea0S;bi1in;aWe7hys0last1Lo5re3;amble,mis1s3ten1L;en1Ksu0D;l3rk;it0yC;a1Ptr07;bstetr0vercrowd17xyg10;a3ews;il polXtional securi1H;aAe8o5u3;m3s1B;ps;n3o1A;ey,o3;gamy;a3chan0rchandi17tallurgy;sl1t;chine3themat0; learn0Vry;aught2e6i5ogi4u3;ck,g0X;c,st0;ce,ghtn0Rngui1AteraSv2;ath2isuSss;ara09indergart0Inowled0U;azz,ewelD;ce,gnor8mp5n3;formaZter3;net,sta05;a3ort5;ti3;en0Z;an0Y;a6eIisto5o3;ckey,mework,ne3rserad7spitali0R;s0Qy;ry;ir,libYppiGs3;h3te;ish;ene6l5o4r3um,ymna0S;aDeed;lf,re;utZyce0D; 3t0;edit04po3;ol;aMicFlour,o5urni3;tu3;re;od,rgive3uri2wl;ne3;ss;conom0duca9lectr8n6quip7th0very4xper3;ti04;body,o3thU;ne;joy3tertain3;ment;ici02on0;tiR;e9i6o4raugh3ynas00;ts;pe,wnstai3;rs;abet1s3;honUrepu3;te;b3miQ;ut;aBelciAh7iv0l5o3urrency;al,ld w3nfusiGral,ttGusco9;ar;ass0oth1;es;aos,e4ick3;en;eHw8;us;d,rJ;a8eef,i6lood,read,u3;nt4tt2;er;ing;lliarEs3;on;g3ss;ga3;ge;cEdviDeroBirAm6ni5ppeal court,rithmet4spi3thlet0;rin;ic;se;en5n3;es3;ty;ds;craft;b0d3naut0;ynam0;ce;id,ou3;st0;ics", | ||
"Person|Noun": "true¦a07b01cYdRePfOgMhJjFkClBm9olive,p6r3s2trini00v0wang;an,enus,iol0;a,et;ky,on5umm03;ay,e1o0uby;b9d,se;ed,x;atQe0ol;aIn0;ny;a0eloTiles;x,ya;aBeo,iG;elv1i0;ng,tM;in;a2e1o0;lDy;an,w3;de,smi4y;a0iKol8;ll,z0;el;ail,e0;ne;aith,ern,lo;a0dDmir,ula,ve;rl;a4e3i1ol0;ly;ck,x0;ie;an,ja;i0wn;sy;h0liff,rystal;ari0in,ristian;ty;ak4e3i2r0;an0ook;dy;ll;nedict,rg;er;l0rt;fredo,ma", | ||
"Noun|Gerund": "true¦0:26;1:25;2:1W;3:1I;4:1Y;a24b1Nc1Bd15en13f0Xg0Vh0Si0Qjog1Zk0Ol0Km0Hn0Fo0Bp04ques07rVsFtAunder9volunt14w5yCzo2;a7ed1Ri3or6r5;ap1Nest1Bi1;ki0r1N;i1r2s1Ttc1T;st1Mta4;al4e8hin4i7ra5y1J;c4di0i2v5;el15;mi0p1G;a1Xs1;ai12cHeGhEin1OkatClYmo4nowBpeAt8u6w5;ea3im1T;f01r5;fi0vi0I;a1Kretc1Iu5;d1AfI;l0Wn1B;b6i0;eb5i0;oar18;ip14o5;rte2u1;a1r09t1;h6o3re5;a1Ge2;edu0Noo0N;aCe8i11o6u5;li0n2;o5wi0;fi0;a7c6hear1Cnde3por1struct5;r1Au3;or0Vyc0G;di0so2;p0Qti0;aAeacek9la8o6r5ublis0X;a0Peten0Rin1oces16;iso2si5;tio2;n2yi0;ee0K;cka0Tin1rt0K;f7pe6rgani5vula1;si0zi0;ni0ra1;fe3;e5ur0W;gotia1twor4;a6e5i2onito3;e1ssa0L;nufactu3rke1;a7ea6i5od0Jyi0;cen0Qf1s1;r2si0;n09ug0E;i5n0J;c4lS;ci0magi2n5ro2;nova1terac1;andPea1i6o5un1;l03wO;ki0ri0;athe3rie5ui01;vi0;ar0CenHi7l6or5ros1unZ;ecas1mat1;ir1ooX;l6n5;anDdi0;i0li0;di0gin5;ee3;a8eba1irec1o7r5umO;awi0es05i5;n4vi0;ub1wnloaO;n5ti0;ci0;aEelebra1hClAo7r5ur6;aw5osZ;li0;a6di0lo3mplai2n5o4pi0ve3;duc1sul1;cLti0;apCea3imHo5ubH;ni0tJ;a5ee3;n1t1;m8s1te3;ri0;aIeFitDlCoAr8u5;il8ll6r5;pi0;yi0;an5;di0;a1m5o4;bi0;esGoa1;c5i0;hi0;gin2lon5t1;gi0;ni0;bys6c4ki0;ki0;it1;c8dverti7gi0rg6ssu5;mi0;ui0;si0;coun1ti0;ti0;ng", | ||
"Unit": "true¦0:0X;a0Sb0Qc0Cd0Bex0Af07g04he02in0Ljoule0kVlSmInHoGpDquart0square 9t5volts,w4y2ze3°1µs;c,f,n;a0Dd0Jears old,o1;tt07;att0b;able3e2on1;!ne0;a1r03;spoY;c0Ad09f3i07kilo0Bm1ya06;e0Eil1;e0li09;eet0o05;ascals,e2i1ou0I;c0Fnt0;rcent,tV;hms,uS;an0CewtP;/s,e6i1m²,²,³;/h,cro4l1;e1li03;! pFs 1²;anFpE;g02s07;gMter1;! 2s1;! 1;per second;it2u1;men0x;er0re0;elvins,ilo2m1nM;/h,²;byUgSmeter1;! p2s1;! p1;er1; hour;ct1rtz0;aTogM;all2ig6ra1;in0m0;on0;a2emtMluid ou1tE;nce0;hrenheit,rad0;abyH;eciCmA;arat0eAm9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;²,³;lsius,nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", | ||
"Adj|Noun": "true¦0:0S;a0Rb0Mc0Cde0Be06f00gZhomel08iXjuWlVmPnOoNpMrJsBt7u4va2w1;atershed,elcome;gabo4nilla,ria1;b0Dnt;ndergr1pstairs;adua0Jou1;nd;a3e1oken,ri0;en,r1;min0ror0B;boo,n;e6istZo4qua3ta2u1;bordina0Cper6;b03ndard;re,t;cial05l1;e,ve0G;cret,n1ri0;ior;e1outiIubbish;ar,laUnt0p1;resentaTublican;atie0Aeriodic0otenti0rincip0;ffiYpposi01v0;agging,ovel;aRe4in3o1;biQdernUr1;al,t0;iature,or;di1tr04;an,um;attFiber0;stice,veniK;de0mpressionNn1;cumbeYdividu0noXstaY;enious,old;a4e2i1luid;ne;llow,m1;aDinH;t,vo1;riJuriJ;l3pRx1;c1ecu7pM;ess;d1iF;er;mographMriva3;hiDlassLo1rude;m4n2opera1;tive;cre9stitueHtemporary,vertab1;le;m2p1;anion,lex;er2un1;ist;ci0;lank,o4r1;i2u1;te;ef;ttom,urgeois;cadem6d3l2nim0rab;al;ert;oles1ult;ce1;nt;ic", | ||
"Person|Noun": "true¦a05bZcWdPeNfMgKhHjDkiClBm9olive,p6r3s2triniYv0wang;an,enus,iol0;a,et;ky,on5umm01;ay,e1o0uby;bin,d,se;ed,x;atOe0ol;aGn0;ny;a0eloR;x,ya;a9eo,iE;ng,tL;a2e1o0;lDy;an,w3;de,smi4y;a0iKol8;ll,z0;el;ail,e0;ne;aith,ern,lo;a0dDmir,ula,ve;rl;a4e3i1ol0;ly;ck,x0;ie;an,ja;i0wn;sy;h0liff,rystal;ari0in,ristian;ty;ak4e3i2r0;an0ook;dy;ll;nedict,rg;er;l0rt;fredo,ma", | ||
"Noun|Gerund": "true¦0:25;1:24;2:1V;3:1H;4:1X;5:1N;a24b1Nc1Bd16en14f0Yg0Wh0Ti0Rjog1Zk0Pl0Lm0In0Go0Cp05ques08rWsGtBunderAvolunt15w6yDzo2;a8ed5i3or7r6;ap1Nest1Bi1;ki0r1N;i1r2s1Ttc1T;st1Mta4;al4e9hin4i8ra6y1J;c4di0i2v6;el15;mi0p1G;a1Xs1;ai12cIeHhFin1OkatDlZmo4nowCpeBt9u7w6;ea3im1T;f02r6;fi0vi0J;a1Kretc1Iu6;d1AfJ;l0Wn5;b7i0;eb6i0;oar5;ip14o6;rte2u1;a1r0At1;h7o3re6;a1Ge2;edu0Noo0N;aDe9i5o7u6;li0n2;o6wi0;fi0;a8c7hear1Cnde3por1struct6;r1Au3;or5yc0G;di0so2;p0Qti0;aBeacekAla9o7r6ublis0X;a0Peten5in1oces16;iso2si6;tio2;n2yi0;ee0K;cka0Tin1rt0K;f8pe7rgani6vula1;si0zi0;ni0ra1;fe3;e6ur0W;gotia1twor4;a7e6i2onito3;e1ssa0L;nufactu3rke1;a8ea7i6od0Jyi0;cen0Qf1s1;r2si0;n5ug0E;i6n0J;c4lS;ci0magi2n6ro2;nova1terac1;andPea1i7o6un1;l5wO;ki0ri0;athe3rie6ui5;vi0;ar0CenHi8l7or6ros1un5;ecas1mat1;ir1oo5;l7n6;anDdi0;i0li0;di0gin6;ee3;a8eba1irec1oub1r6umO;awi0es05i6;n4vi0;n6ti0;ci0;aFelebra1hDlBo8r6ur7;aw6os00;li0;a7di0lo3mplai2n6o4pi0ve3;duc1sul1;cMti0;apDea3imIo6ubI;ni0tK;a6ee3;n1t1;m9s1te3;ri0;aJeGitElDoBr9u6;il5ll7r6;pi0;yi0;an5;di0;a1m6o4;bi0;esHoa1;c6i0;hi0;gin2lon6t1;gi0;ni0;bys7c4ki0;ki0;it1;c9dverti8gi0rg7ssu6;mi0;ui0;si0;coun1ti0;ti0;ng", | ||
"Unit": "true¦a09b06cZdYexXfTgRhePin00joule0DkMlJmDnan0AoCp9quart0Dsq ft,t7volts,w6y2ze3°1µ0;g,s;c,f,n;dXear1o0;ttT; 0s 0;old;att06b;erPon0;!ne04;ascals,e1i0;cZnt02;rcent,tL;hms,uI;/s,e4i0m²,²,³;/h,cro2l0;e0liM;!²;grNsT;gEtL;it1u0;menSx;erRreR;b5elvins,ilo1m0notQ;/h,ph,²;!byIgrGmEs;ct0rtzN;aLogrE;allonLb0ig5rD;ps;a2emtGl0t6; oz,uid ou0;nceH;hrenheit,radG;aby9;eci3m1;aratDe1m0oulombD;²,³;lsius,nti0;gr2lit1m0;et0;er8;am7;b1y0;te5;l,ps;c2tt0;os0;econd1;re0;!s", | ||
"Adj|Noun": "true¦0:0S;a0Rb0Mc0Cde0Be06f00gZhomel08iXjuWlVmPnOoNpMrJsBt7u4va2w1;atershed,elcome;gabo4nilla,ria1;b0Dnt;ndergr1pstairs;adua0Jou1;nd;a3e1oken,ri0;en,r1;min0ror0B;boo,n;e6istZo4qua3ta2u1well;bordina0Cper6;b03ndard;re,t;cial05l1;e,ve0G;cret,n1ri0;ior;e1outiIubbish;ar,laUnt0p1;resentaTublican;atie0Aeriodic0otenti0rincip0;ffiYpposi01v0;agging,ovel;aRe4in3o1;biQdernUr1;al,t0;iature,or;di1tr04;an,um;attFiber0;stice,veniK;de0mpressionNn1;cumbeYdividu0noXstaY;enious,old;a4e2i1luid;ne;llow,m1;aDinH;t,vo1;riJuriJ;l3pRx1;c1ecu7pM;ess;d1iF;er;mographMriva3;hiDlassLo1rude;m4n2opera1;tive;cre9stitueHtemporary,vertab1;le;m2p1;anion,lex;er2un1;ist;ci0;lank,o4r1;i2u1;te;ef;ttom,urgeois;cadem6d3l2nim0rab;al;ert;oles1ult;ce1;nt;ic", | ||
"ProperNoun": "true¦barbie,c4diego,e3f2kirby,m0nis,riel;ercedes,i0;ckey,ssy;inn,ranco;lmo,uro;atalina,hristi", | ||
@@ -64,5 +65,5 @@ "Ordinal": "true¦eBf7nin5s3t0zeroE;enDhir1we0;lfCn7;d,t3;e0ixt8;cond,vent7;et0th;e6ie7;i2o0;r0urt3;tie4;ft1rst;ight0lev1;e0h,ie1;en0;th", | ||
"Adj|Past": "true¦0:2T;1:2K;2:2N;3:23;a2Db28c1Qd1Ae14f0Zgift0h0Wi0Pj0Oknown,l0Lm0Gn0Eo0Bp04qua03rUsEtAu8v6w4;arp0ea4or6;kIth2N;a4e0V;ri0;ni4pd1s0;fi0t0;ar6hreatDr4wi2M;a4ou18;ck0in0pp0;get0ni1K;aHcaGeFhEimDm01oak0pBt7u4;bsid23gge2Hs4;pe4ta1O;ct0nd0;at0e6r4uV;ength4ip0;en0;am0reotyp0;eci4ik0ott0;al1Vfi0;pIul1;ar0ut;al0c1Fle2t1N;r0tt21;t4ut0;is3ur1;aBe4;c8duc0f19g7l1new0qu6s4;pe2t4;or0ri2;e1Yir0;ist1Tul1;eiv0o4;mme0Ard0v1R;lli0ti3;li3;arallel0l8o7r4ump0;e5o4;c0Ilo0Hnou1Ppos0te2;fe0Koc9pZ;i1Cli0P;a4e15;nn0;c5rgan17verlo4;ok0;cupi0;e4ot0;ed0gle2;a6e5ix0o4;di3t0E;as0Nlt0;n4rk0;ag0ufact0L;eft,i5o4;ad0st;cens0mit0st0;agg0us0K;mp9n4sol1;br0debt0f7t4volv0;e4ox0C;gr1n4re14;d0si3;e2oW;li0oMrov0;amm0We1o4;ok0r4;ri3;aNe7i6lavo06ocus0r4;a4i0;ct04g0Im0;niVx0;ar0;duc1n8quipp0stabliTx4;p4te6;a5e4;ct0rie0O;nd0;ha0MsW;aIeAi4;gni3miniMre2s4;a7c6grun01t4;o4rBurb0;rt0;iplPou05;bl0;cenTdMf8lay0pr7ra6t4velop0;a4ermM;il0;ng0;ess0;e5o4;rm0;rr0;mag0t0;alcul1eHharg0lGo9r6u4;lt4stomR;iv1;a5owd0u4;sh0;ck0mp0;d0lo9m6n4ok0vW;centr1s4troll0;idUolid1;b5pl4;ic1;in0;ur0;assi3os0;lebr1n6r4;ti3;fi0;tralB;a7i6o4urn0;il0r0t4und;tl0;as0;laJs0;bandon0cKdHffe2lEnCppAss8u4ward0;g5thor4;iz0;me4;nt0;o6u4;m0r0;li0re4;ci1;im1ticip1;at0;leg0t4;er0;ct0;ju5o7va4;nc0;st0;ce4knowledg0;pt0;ed", | ||
"Person|Verb": "true¦b1chu2drew,grant,ja2ma0ollie,pat,rob,sue,wade;ck,rk;ob,u0;ck", | ||
"Person|Verb": "true¦b2ch1drew,grant,ja3ma0ollie,pat,rob,sue,wade;ck,rk;ase,u1;ob,u0;ck", | ||
"Person|Place": "true¦a5darw6h3jordan,k2orlando,s0victo7;a0ydney;lvador,mara,ntiago;ent,obe;amil0ous0;ton;lexand1ust0;in;ria", | ||
"Person|Date": "true¦a2j0sep;an0une;!uary;p0ugust,v0;ril" | ||
} |
@@ -10,2 +10,19 @@ //words that can't be compressed, for whatever reason | ||
'km2': 'Unit', | ||
'm2': 'Unit', | ||
'dm2': 'Unit', | ||
'cm2': 'Unit', | ||
'mm2': 'Unit', | ||
'mile2': 'Unit', | ||
'in2': 'Unit', | ||
'yd2': 'Unit', | ||
'ft2': 'Unit', | ||
'm3': 'Unit', | ||
'dm3': 'Unit', | ||
'cm3': 'Unit', | ||
'in3': 'Unit', | ||
'ft3': 'Unit', | ||
'yd3': 'Unit', | ||
// ampersands | ||
@@ -12,0 +29,0 @@ 'at&t': 'Organization', |
@@ -19,5 +19,5 @@ // generated in ./lib/pairs | ||
"PastTense": { | ||
"rules": "een|1,egan|2in,on|in,pun|1in,hun|3ned,wn|1,ave|ive,poke|1eak,hose|2ose,roke|1eak,roze|1eeze,ode|ide,orbade|3id,hone|1ine,tole|1eal,ollide|6d,rose|1ise,woke|1ake,wrote|2ite,made|2ke,came|1ome,ove|ive,ore|ear,elped|3,elcomed|6,hared|4,nvited|5,eclared|6,eard|3,avelled|4,ombined|6,uided|4,etired|5,choed|3,ncelled|4,epeated|5,moked|4,entred|5,dhered|5,esired|5,ompeted|6,erseded|6,ramed|4,qualled|4,iloted|4,stponed|6,uelled|3,opelled|4,gnored|5,xtruded|6,caled|4,ndured|5,lamed|4,quared|5,mpeded|5,rouped|4,efeated|5,robed|4,lid|3e,magined|6,nselled|4,uthored|6,ebuted|4,shrined|6,tialled|4,erfered|6,eaped|3,yped|3,laked|4,tirred|3,ooted|3,leated|4,ncited|5,oubted|4,mpelled|4,nnulled|4,pined|4,ircled|5,ecited|5,reathed|6,nvaded|5,onfided|6,pedited|6,alcined|6,ycotted|5,dmired|5,xcreted|6,ubed|3,taked|4,onfined|6,heated|4,rimed|4,amelled|4,achined|6,litzed|4,xcited|5,xpelled|4,xtolled|4,ouled|3,imicked|4,ivalled|4,eeped|3,naked|4,tyled|4,iased|3,nhaled|5,oeuvred|6,grammed|6,kied|2,miled|4,pited|4,lodded|3,eterred|4,hoked|4,kidded|3,rod|3ded,pleted|5,cided|4,plored|5,stored|5,longed|4,filed|4,rbed|2,suaded|5,ciled|4,edded|2,tined|4,phoned|5,fled|3,nited|4,iped|3,hauled|4,treated|5,nnelled|4,basted|5,njured|5,twined|5,uzzed|3,did|1o,vided|4,old|ell,pared|4,mbed|2,stood|2and,pired|4,held|1old,vened|4,cored|4,read|4,piled|4,aped|3,gled|3,named|4,arred|2,oated|3,kled|3,ooled|3,uned|3,figured|6,bid|3,ound|ind,oped|2,ibed|3,quired|5,uled|3,oded|3,mmed|1,ceded|4,cured|4,sided|4,voked|4,rled|2,outed|3,mined|4,urred|2,ighted|4,umed|3,sured|4,iked|3,pled|3,fed|1,bbed|1,eled|2,luded|4,aid|1y,ferred|3,tled|3,dled|3,raded|4,oted|3,eed|2,aled|2,lined|4,mped|2,fted|2,lted|2,gged|1,eted|2,xed|1,bled|3,pted|2,tured|4,uted|3,nned|1,ued|2,iled|2,yed|1,rted|2,pped|1,tted|1,wed|1,lled|2,ited|2,med|1,sted|2,ssed|2,ged|2,ved|2,nted|2,ked|1,cted|2,ced|2,ied|y,hed|1,sed|2,ded|1,zed|2,ned|1,red|1,ated|3,ell|all,ulfil|5led,rought|1ing,hought|1ink,eft|1ave,eant|3,ealt|3,eat|3,hot|2ot,urt|3,eapt|3,elt|1el,went|go,built|4d,at|it,got|1et,ut|2,it|2,et|2,ent|2d,ept|1ep,st|2,truck|2ike,nuck|1eak,tunk|1ink,ank|ink,ook|ake,lew|1y,utgrow|4ew,drew|2aw,saw|1ee,ew|ow,ug|ig,ang|ing,ung|ing,nderlay|5ie,dezvous|7,wam|1im,lam|3med,nearth|6s", | ||
"rules": "een|1,egan|2in,on|in,pun|1in,hun|3ned,wn|1,ave|ive,poke|1eak,hose|2ose,roke|1eak,roze|1eeze,ode|ide,orbade|3id,hone|1ine,tole|1eal,ollide|6d,rose|1ise,woke|1ake,wrote|2ite,made|2ke,came|1ome,ove|ive,ore|ear,elped|3,elcomed|6,hared|4,nvited|5,eclared|6,eard|3,avelled|4,ombined|6,uided|4,etired|5,choed|3,ncelled|4,epeated|5,moked|4,entred|5,dhered|5,esired|5,ompeted|6,erseded|6,ramed|4,qualled|4,iloted|4,stponed|6,uelled|3,opelled|4,gnored|5,xtruded|6,caled|4,ndured|5,lamed|4,quared|5,mpeded|5,rouped|4,efeated|5,robed|4,lid|3e,magined|6,nselled|4,uthored|6,ebuted|4,shrined|6,tialled|4,erfered|6,eaped|3,yped|3,laked|4,tirred|3,ooted|3,leated|4,ncited|5,oubted|4,mpelled|4,nnulled|4,pined|4,ircled|5,ecited|5,reathed|6,nvaded|5,onfided|6,pedited|6,alcined|6,ycotted|5,dmired|5,xcreted|6,ubed|3,taked|4,onfined|6,heated|4,rimed|4,amelled|4,achined|6,litzed|4,xcited|5,xpelled|4,xtolled|4,ouled|3,imicked|4,ivalled|4,eeped|3,naked|4,tyled|4,iased|3,nhaled|5,oeuvred|6,grammed|6,kied|2,miled|4,pited|4,lodded|3,eterred|4,hoked|4,kidded|3,rod|3ded,pleted|5,cided|4,plored|5,stored|5,longed|4,filed|4,rbed|2,suaded|5,ciled|4,edded|2,tined|4,phoned|5,fled|3,nited|4,iped|3,hauled|4,treated|5,nnelled|4,basted|5,njured|5,twined|5,uzzed|3,did|1o,vided|4,old|ell,pared|4,mbed|2,stood|2and,pired|4,held|1old,vened|4,cored|4,read|4,piled|4,aped|3,gled|3,named|4,arred|2,oated|3,kled|3,ooled|3,uned|3,figured|6,bid|3,ound|ind,oped|2,ibed|3,quired|5,uled|3,oded|3,mmed|1,ceded|4,cured|4,sided|4,voked|4,rled|2,outed|3,mined|4,urred|2,ighted|4,umed|3,sured|4,iked|3,pled|3,fed|1,bbed|1,eled|2,luded|4,aid|1y,ferred|3,tled|3,dled|3,raded|4,oted|3,eed|2,aled|2,lined|4,mped|2,fted|2,lted|2,gged|1,eted|2,xed|1,bled|3,pted|2,tured|4,uted|3,nned|1,ued|2,iled|2,yed|1,rted|2,pped|1,tted|1,wed|1,lled|2,ited|2,med|1,sted|2,ssed|2,ged|2,ved|2,nted|2,ked|1,cted|2,ced|2,ied|y,hed|1,sed|2,ded|1,zed|2,ned|1,red|1,ated|3,ell|all,ulfil|5led,rought|1ing,hought|1ink,eft|1ave,eant|3,ealt|3,eat|3,hot|2ot,urt|3,eapt|3,elt|1el,went|go,built|4d,at|it,got|1et,ut|2,it|2,et|2,ent|2d,ept|1ep,st|2,truck|2ike,nuck|1eak,tunk|1ink,ank|ink,ook|ake,lew|1y,utgrow|4ew,drew|2aw,saw|1ee,ew|ow,ug|ig,ang|ing,ung|ing,nderlay|5ie,dezvous|7,wam|1im,lam|3med", | ||
"exceptions": "was|is,were|are,had|2ve,led|2ad,met|2et,cited|4,focused|5,sought|1eek,lost|3e,defined|6,died|3,hired|4,bought|1uy,ran|1un,controlled|7,taught|1each,hoped|4,shed|4,refined|6,caught|2tch,owed|3,fought|1ight,fired|4,fed|2ed,pied|3,fared|4,tied|3,fled|3e,cared|4,ate|eat,dyed|3,lit|2ght,winged|4,bred|3ed,pent|3,wired|4,persevered|9,baked|4,dined|4,fined|4,shored|5,hid|3e,padded|3,waned|4,wove|1eave,lied|3,wasted|5,sloped|5,joked|4,ached|4,baled|4,bit|3e,bled|3ed,boned|4,caned|4,dispelled|6,egged|3,hung|1ang,patrolled|6,tasted|5,faked|4,bored|4,eyed|3,gamed|4,gassed|3,pored|4,timed|4,toned|4,zoned|4,poked|4,dared|4,been|2,said|2y,found|1ind,took|1ake,came|1ome,gave|1ive,fell|1all,brought|2ing,rose|1ise,grew|2ow,put|3,sent|3d,spent|4d,spoke|2eak,left|2ave,won|1in,told|1ell,meant|4,heard|4,got|1et,arose|2ise,read|4,let|3,hit|3,cost|4,dealt|4,laid|2y,drove|2ive,sat|1it,cast|4,beat|4,flew|2y,lent|3d,sang|1ing,banned|3,jarred|3,wound|1ind,omitted|4,quit|4,rang|1ing,fit|3,rent|3d,bet|3,sank|1ink,reaped|4,manned|3,rode|1ide,rebutted|5,bound|1ind,barred|3,recast|6,netted|3,tanned|3,plotted|4,tore|1ear,spun|2in,pitted|3,shone|2ine,donned|3,dove|1ive,spat|2it,bent|3d,blown|4,leapt|4,seeped|4,sewn|3,twinned|4,wrung|2ing,deterred|5", | ||
"rev": "egin|2an,lan|3ned,nderpin|7ned,kin|3ned,tun|3ned,hin|3ned,pan|3ned,can|3ned,n|1ed,ecome|2ame,hoose|2se,trike|2uck,lee|2d,trive|2ove,vercome|4ame,lide|3,reeze|1oze,hake|1ook,nderlie|5ay,istake|3ook,etake|2ook,wake|1oke,write|2ote,make|2de,rtake|2ook,see|1aw,e|1d,elp|3ed,roup|4ed,oop|3ed,velop|5ed,eep|1pt,mp|2ed,p|1ped,hink|1ought,eek|ought,reak|1oke,neak|1uck,tink|1unk,rink|1ank,k|1ed,ommit|5ted,ermit|5ted,oadcast|7,dmit|4ted,hoot|2t,plit|4,hut|3,llot|4ted,nit|3ted,orget|3ot,egret|5ted,hrust|5,ormat|5ted,hat|3ted,lat|3ted,urt|3,cquit|5ted,urst|4,ransmit|7ted,emit|4ted,pot|3ted,cut|3,submit|6ted,set|3,t|1ed,now|1ew,trew|4n,utgrew|4ow,draw|2ew,throw|3ew,w|1ed,uy|ought,ey|2ed,pay|2id,oy|2ed,ay|2ed,y|ied,ravel|5led,ancel|5led,qual|4led,uel|3led,ounsel|6led,nitial|6led,nnul|4led,namel|5led,xtol|4led,ival|4led,teal|1ole,eel|1lt,trol|4led,sell|1old,nnel|4led,pel|3led,l|1ed,ransfer|7red,pur|3red,lur|3red,tir|3red,par|3red,nfer|4red,wear|1ore,bear|1ore,efer|4red,cur|3red,r|1ed,pread|5,hed|3,rind|1ound,mbed|4ded,reed|2d,hred|4ded,eread|5,orbid|3ade,leed|2d,lod|3ded,kid|3ded,ollided|6,lammed|3,hunned|3,rodded|3,lfilled|4,build|4t,stand|2ood,hold|1eld,bid|3,d|1ed,cho|3ed,go|went,do|1id,tem|3med,um|2med,rim|3med,kim|3med,wim|1am,m|1ed,lug|3ged,ig|ug,pring|2ang,gg|2ed,ang|ung,long|4ed,og|2ged,ling|1ung,ag|2ged,ub|2bed,ib|2bed,ob|2bed,rb|2ed,ab|2bed,mb|2ed,imic|4ked,dezvous|7,nearths|6,s|1ed,ki|2ed,z|1ed,f|1ed,x|1ed,h|1ed" | ||
"rev": "egin|2an,lan|3ned,nderpin|7ned,kin|3ned,tun|3ned,hin|3ned,pan|3ned,can|3ned,n|1ed,ecome|2ame,hoose|2se,trike|2uck,lee|2d,trive|2ove,vercome|4ame,lide|3,reeze|1oze,hake|1ook,nderlie|5ay,istake|3ook,etake|2ook,wake|1oke,write|2ote,make|2de,rtake|2ook,see|1aw,e|1d,elp|3ed,roup|4ed,oop|3ed,velop|5ed,eep|1pt,mp|2ed,p|1ped,hink|1ought,eek|ought,reak|1oke,neak|1uck,tink|1unk,rink|1ank,k|1ed,ommit|5ted,ermit|5ted,oadcast|7,dmit|4ted,hoot|2t,plit|4,hut|3,llot|4ted,nit|3ted,orget|3ot,egret|5ted,hrust|5,ormat|5ted,hat|3ted,lat|3ted,urt|3,cquit|5ted,urst|4,ransmit|7ted,emit|4ted,pot|3ted,cut|3,submit|6ted,set|3,t|1ed,now|1ew,trew|4n,utgrew|4ow,draw|2ew,throw|3ew,w|1ed,uy|ought,ey|2ed,pay|2id,oy|2ed,ay|2ed,y|ied,ravel|5led,ancel|5led,qual|4led,uel|3led,ounsel|6led,nitial|6led,nnul|4led,namel|5led,xtol|4led,ival|4led,teal|1ole,eel|1lt,trol|4led,sell|1old,nnel|4led,pel|3led,l|1ed,ransfer|7red,pur|3red,lur|3red,tir|3red,par|3red,nfer|4red,wear|1ore,bear|1ore,efer|4red,cur|3red,r|1ed,pread|5,hed|3,rind|1ound,mbed|4ded,reed|2d,hred|4ded,eread|5,orbid|3ade,leed|2d,lod|3ded,kid|3ded,ollided|6,lammed|3,hunned|3,rodded|3,lfilled|4,build|4t,stand|2ood,hold|1eld,bid|3,d|1ed,cho|3ed,go|went,do|1id,tem|3med,um|2med,rim|3med,kim|3med,wim|1am,m|1ed,lug|3ged,ig|ug,pring|2ang,gg|2ed,ang|ung,long|4ed,og|2ged,ling|1ung,ag|2ged,ub|2bed,ib|2bed,ob|2bed,rb|2ed,ab|2bed,mb|2ed,imic|4ked,dezvous|7,s|1ed,ki|2ed,z|1ed,f|1ed,x|1ed,h|1ed" | ||
}, | ||
@@ -24,0 +24,0 @@ "PresentTense": { |
@@ -58,4 +58,4 @@ export default [ | ||
[/^[0-9]{1,2}(:[0-9][0-9])?(am|pm)? ?[-–—] ?[0-9]{1,2}(:[0-9][0-9])?(am|pm)$/, ['Time', 'NumberRange'], '3-4pm'], | ||
//with unit | ||
//number with unit | ||
[/^[0-9.]+([a-z]{1,4})$/, 'Value', '9km'], | ||
] |
@@ -6,9 +6,9 @@ export default { | ||
Month: { | ||
is: 'Singular', | ||
also: ['Date'], | ||
is: 'Date', | ||
also: ['Noun'], | ||
not: ['Year', 'WeekDay', 'Time'], | ||
}, | ||
WeekDay: { | ||
is: 'Noun', | ||
also: ['Date'], | ||
is: 'Date', | ||
also: ['Noun'], | ||
}, | ||
@@ -33,4 +33,4 @@ Year: { | ||
Timezone: { | ||
is: 'Noun', | ||
also: ['Date'], | ||
is: 'Date', | ||
also: ['Noun'], | ||
not: ['ProperNoun'], | ||
@@ -37,0 +37,0 @@ }, |
@@ -31,2 +31,3 @@ import find from './find.js' | ||
hasComma: parsed.hasComma, | ||
unit: parsed.unit | ||
} | ||
@@ -33,0 +34,0 @@ return json |
@@ -18,5 +18,5 @@ const prefixes = { | ||
// s: 'seconds', | ||
cm: 'centimetres', | ||
km: 'kilometres', | ||
ft: 'feet', | ||
// cm: 'centimetres', | ||
// km: 'kilometres', | ||
// ft: 'feet', | ||
'°': 'degrees' | ||
@@ -23,0 +23,0 @@ } |
@@ -45,2 +45,4 @@ import parseText from './toNumber/index.js' | ||
let str = m.text('reduced') | ||
// reach for '12 litres' | ||
let unit = m.growRight('#Unit').match('#Unit$').text('machine') | ||
// is it in '3,123' format? | ||
@@ -53,2 +55,3 @@ let hasComma = /[0-9],[0-9]/.test(m.text('text')) | ||
res.hasComma = hasComma | ||
res.unit = unit | ||
return res | ||
@@ -80,6 +83,8 @@ } | ||
} | ||
return { | ||
hasComma: hasComma, | ||
hasComma, | ||
prefix: '', | ||
num: num, | ||
num, | ||
suffix: '', | ||
@@ -90,4 +95,5 @@ isOrdinal: m.has('#Ordinal'), | ||
isMoney: m.has('#Money'), | ||
unit | ||
} | ||
} | ||
export default parseNumber |
@@ -145,3 +145,3 @@ import { noop, getTense } from '../lib.js' | ||
vb = forms[form](vb, parsed) | ||
vb.fullSentence().compute(['lexicon', 'preTagger', 'postTagger', 'chunks']) | ||
vb.fullSentence().compute(['tagger', 'chunks']) | ||
return vb | ||
@@ -148,0 +148,0 @@ } |
@@ -31,5 +31,5 @@ import { getTense, isAreAm } from '../lib.js' | ||
vb.replace('not are', 'are not') | ||
vb.fullSentence().compute(['preTagger', 'postTagger', 'chunks']) | ||
vb.fullSentence().compute(['tagger', 'chunks']) | ||
return vb | ||
} | ||
export default toGerund |
@@ -202,3 +202,3 @@ import { noop, getTense, wasWere, noWill } from '../lib.js' | ||
vb = forms[form](vb, parsed) | ||
vb.fullSentence().compute(['lexicon', 'preTagger', 'postTagger', 'chunks']) | ||
vb.fullSentence().compute(['tagger', 'chunks']) | ||
return vb | ||
@@ -205,0 +205,0 @@ } |
@@ -227,3 +227,3 @@ import { noop, isPlural, isAreAm, doDoes, getSubject, toInf, getTense } from '../lib.js' | ||
vb = forms[form](vb, parsed) | ||
vb.fullSentence().compute(['lexicon', 'preTagger', 'postTagger', 'chunks']) | ||
vb.fullSentence().compute(['tagger', 'chunks']) | ||
return vb | ||
@@ -230,0 +230,0 @@ } |
@@ -0,1 +1,3 @@ | ||
// wrappers for loops in javascript arrays | ||
const forEach = function (cb) { | ||
@@ -12,7 +14,10 @@ let ptrs = this.fullPointer | ||
let ptrs = this.fullPointer | ||
// let cache = this._cache || [] | ||
let res = ptrs.map((ptr, i) => { | ||
let view = this.update([ptr]) | ||
// view._cache = cache[i] | ||
return cb(view, i) | ||
let out = cb(view, i) | ||
// if we returned nothing, return a view | ||
if (out === undefined) { | ||
return this.none() | ||
} | ||
return out | ||
}) | ||
@@ -44,10 +49,7 @@ if (res.length === 0) { | ||
let ptrs = this.fullPointer | ||
// let cache = this._cache || [] | ||
ptrs = ptrs.filter((ptr, i) => { | ||
let view = this.update([ptr]) | ||
// view._cache = cache[i] | ||
return cb(view, i) | ||
}) | ||
let res = this.update(ptrs) //TODO: keep caches automatically | ||
// res._cache = ptrs.map(ptr => cache[ptr[0]]) | ||
let res = this.update(ptrs) | ||
return res | ||
@@ -58,6 +60,4 @@ } | ||
let ptrs = this.fullPointer | ||
// let cache = this._cache || [] | ||
let found = ptrs.find((ptr, i) => { | ||
let view = this.update([ptr]) | ||
// view._cache = cache[i] | ||
return cb(view, i) | ||
@@ -70,6 +70,4 @@ }) | ||
let ptrs = this.fullPointer | ||
// let cache = this._cache || [] | ||
return ptrs.some((ptr, i) => { | ||
let view = this.update([ptr]) | ||
// view._cache = cache[i] | ||
return cb(view, i) | ||
@@ -76,0 +74,0 @@ }) |
@@ -37,3 +37,2 @@ const utils = { | ||
let ptr = this.pointer | ||
let cache = this._cache || [] | ||
if (!ptr) { | ||
@@ -43,5 +42,3 @@ ptr = this.docs.map((_doc, i) => [i]) | ||
if (ptr[n]) { | ||
let view = this.update([ptr[n]]) | ||
view._cache = cache[n] | ||
return view | ||
return this.update([ptr[n]]) | ||
} | ||
@@ -48,0 +45,0 @@ return this.none() |
@@ -76,15 +76,16 @@ import world from './world.js' | ||
// send the cache down, too? | ||
if (m._cache && pointer && pointer.length > 1) { | ||
// only if it's full | ||
if (this._cache && pointer && pointer.length > 0) { | ||
// only keep cache if it's a full-sentence | ||
let cache = [] | ||
pointer.forEach(ptr => { | ||
pointer.forEach((ptr, i) => { | ||
let [n, start, end] = ptr | ||
if (ptr.length === 1) { | ||
cache.push(m._cache[ptr[0]]) | ||
cache[i] = this._cache[n] | ||
} else if (start === 0 && this.document[n].length === end) { | ||
cache[i] = this._cache[n] | ||
} | ||
// let [n, start, end] = ptr | ||
// if (start === 0 && this.document[n][end - 1] && !this.document[n][end]) { | ||
// console.log('=-=-=-= here -=-=-=-') | ||
// } | ||
}) | ||
m._cache = cache | ||
if (cache.length > 0) { | ||
m._cache = cache | ||
} | ||
} | ||
@@ -96,8 +97,3 @@ m.world = this.world | ||
toView(pointer) { | ||
if (pointer === undefined) { | ||
pointer = this.pointer | ||
} | ||
let m = new View(this.document, pointer) | ||
// m._cache = this._cache // share this full thing | ||
return m | ||
return new View(this.document, pointer || this.pointer) | ||
} | ||
@@ -104,0 +100,0 @@ fromText(input) { |
@@ -41,3 +41,2 @@ import View from './API/View.js' | ||
/** extend compromise functionality */ | ||
@@ -44,0 +43,0 @@ nlp.plugin = function (plugin) { |
@@ -5,2 +5,3 @@ import nlp from './one.js' | ||
import postTag from './2-two/postTagger/plugin.js' | ||
import lazy from './2-two/lazy/plugin.js' | ||
import swap from './2-two/swap/plugin.js' | ||
@@ -11,4 +12,5 @@ | ||
nlp.plugin(postTag) //~33kb | ||
nlp.plugin(lazy) // | ||
nlp.plugin(swap) // | ||
export default nlp |
@@ -78,2 +78,16 @@ export type Document = Term[][] | ||
caseSensitive?: boolean, | ||
} | ||
export interface Match { | ||
match: string, | ||
tag?: string | string[], | ||
unTag?: string | string[], | ||
group?: string | number, | ||
reason?: string, | ||
} | ||
export interface Net { | ||
hooks: object, | ||
always?: any, | ||
isNet: boolean | ||
} |
@@ -1,2 +0,2 @@ | ||
import { Lexicon, Plugin, matchOptions } from './misc' | ||
import { Lexicon, Plugin, matchOptions, Match, Net } from './misc' | ||
import View from './view/one' | ||
@@ -11,2 +11,4 @@ | ||
export function tokenize(text: string, lexicon?: Lexicon): View | ||
/** scan through text with minimal analysis */ | ||
export function lazy(text: string, match?: string): View | ||
/** mix-in a compromise plugin */ | ||
@@ -35,3 +37,5 @@ export function plugin(plugin: Plugin): any | ||
/** turn a list of words into a searchable graph */ | ||
export function compile(words: string[]): object | ||
export function buildTrie(words: string[]): object | ||
/** compile a set of match objects to a more optimized form */ | ||
export function buildNet(matches: Match[]): Net | ||
/** add words to the autoFill dictionary */ | ||
@@ -38,0 +42,0 @@ export function typeahead(words: Lexicon): any |
@@ -1,2 +0,2 @@ | ||
import { Lexicon, Plugin, matchOptions } from './misc' | ||
import { Lexicon, Plugin, matchOptions, Match, Net } from './misc' | ||
import View from './view/three' | ||
@@ -11,2 +11,4 @@ | ||
export function tokenize(text: string, lexicon?: Lexicon): View | ||
/** scan through text with minimal analysis */ | ||
export function lazy(text: string, match?: string): View | ||
/** mix in a compromise-plugin */ | ||
@@ -33,3 +35,5 @@ export function plugin(plugin: Plugin): any | ||
/** turn a list of words into a searchable graph */ | ||
export function compile(words: string[]): object | ||
export function buildTrie(words: string[]): object | ||
/** compile a set of match objects to a more optimized form */ | ||
export function buildNet(matches: Match[]): Net | ||
/** add words to the autoFill dictionary */ | ||
@@ -36,0 +40,0 @@ export function typeahead(words: Lexicon): any |
@@ -1,2 +0,2 @@ | ||
import { Lexicon, Plugin, matchOptions } from './misc' | ||
import { Lexicon, Plugin, matchOptions, Match, Net } from './misc' | ||
import View from './view/two' | ||
@@ -11,2 +11,4 @@ | ||
export function tokenize(text: string, lexicon?: Lexicon): View | ||
/** scan through text with minimal analysis */ | ||
export function lazy(text: string, match?: string): View | ||
/** mix in a compromise-plugin */ | ||
@@ -33,3 +35,5 @@ export function plugin(plugin: Plugin): any | ||
/** turn a list of words into a searchable graph */ | ||
export function compile(words: string[]): object | ||
export function buildTrie(words: string[]): object | ||
/** compile a set of match objects to a more optimized form */ | ||
export function buildNet(matches: Match[]): Net | ||
/** add words to the autoFill dictionary */ | ||
@@ -36,0 +40,0 @@ export function typeahead(words: Lexicon): any |
@@ -1,2 +0,2 @@ | ||
import { Document, Pointer, Groups, JsonProps, outMethods, matchOptions, Term } from '../misc' | ||
import { Document, Pointer, Groups, JsonProps, outMethods, matchOptions, Term, Net } from '../misc' | ||
@@ -84,11 +84,11 @@ class View { | ||
/** return matching patterns in this doc */ | ||
match: (match: string | View, group?: string | number, options?: matchOptions) => View | ||
match: (match: string | View | Net, group?: string | number, options?: matchOptions) => View | ||
/** return only the first match */ | ||
matchOne: (match: string | View, group?: string | number, options?: matchOptions) => View | ||
matchOne: (match: string | View | Net, group?: string | number, options?: matchOptions) => View | ||
/** Return a boolean if this match exists */ | ||
has: (match: string | View, group?: string | number, options?: matchOptions) => boolean | ||
has: (match: string | View | Net, group?: string | number, options?: matchOptions) => boolean | ||
/** return each current phrase, only if it contains this match */ | ||
if: (match: string | View, group?: string | number, options?: matchOptions) => View | ||
if: (match: string | View | Net, group?: string | number, options?: matchOptions) => View | ||
/** Filter-out any current phrases that have this match */ | ||
ifNo: (match: string | View, group?: string | number, options?: matchOptions) => View | ||
ifNo: (match: string | View | Net, group?: string | number, options?: matchOptions) => View | ||
@@ -105,2 +105,4 @@ /** return the terms before each match */ | ||
grow: (match: string | View, group?: string | number, options?: matchOptions) => View | ||
/** apply a sequence of match objects to the document */ | ||
sweep: (match: Net, opts?: object) => { view: View, found: object[] } | ||
@@ -107,0 +109,0 @@ /** .split() [alias] */ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2207556
426
24663
1066