de-compromise 0.1.0 → 0.1.2

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.
Files changed (64) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +15 -11
  3. package/builds/de-compromise.cjs +2392 -1254
  4. package/builds/de-compromise.min.js +3 -1
  5. package/builds/de-compromise.mjs +3 -1
  6. package/package.json +54 -39
  7. package/src/01-one/lexicon/_data.js +22 -22
  8. package/src/01-one/lexicon/compute/root.js +3 -3
  9. package/src/01-one/lexicon/lexicon.js +6 -6
  10. package/src/01-one/lexicon/methods/_data.js +29 -174
  11. package/src/01-one/lexicon/methods/adjectives/_test-back.js +1 -1
  12. package/src/01-one/lexicon/methods/adjectives/_test.js +4 -4
  13. package/src/01-one/lexicon/methods/adjectives/inflect.js +1 -1
  14. package/src/01-one/lexicon/methods/adjectives/new/adjective.js +1 -1
  15. package/src/01-one/lexicon/methods/adjectives/new/comparative.js +1 -1
  16. package/src/01-one/lexicon/methods/adjectives/new/superlative.js +1 -1
  17. package/src/01-one/lexicon/methods/adjectives/toRoot.js +1 -1
  18. package/src/01-one/lexicon/methods/nouns/_test-back.js +6 -6
  19. package/src/01-one/lexicon/methods/nouns/new.js +1 -1
  20. package/src/01-one/lexicon/methods/nouns/toPlural.js +2 -2
  21. package/src/01-one/lexicon/methods/nouns/toSingular.js +2 -2
  22. package/src/01-one/lexicon/methods/verbs/conjugate.js +4 -4
  23. package/src/01-one/lexicon/methods/verbs/custom/_test-from.js +6 -6
  24. package/src/01-one/lexicon/methods/verbs/custom/_test-to.js +7 -7
  25. package/src/01-one/lexicon/methods/verbs/custom/fromPastParticiple.js +1 -1
  26. package/src/01-one/lexicon/methods/verbs/custom/rules.js +2 -2
  27. package/src/01-one/lexicon/methods/verbs/custom/toPastParticiple.js +2 -2
  28. package/src/01-one/lexicon/methods/verbs/irregulars.js +6 -6
  29. package/src/01-one/lexicon/methods/verbs/toRoot.js +8 -8
  30. package/src/01-one/splitter/build.js +3 -3
  31. package/src/01-one/splitter/compute/splitter.js +4 -4
  32. package/src/01-one/splitter/model/index.js +4 -4
  33. package/src/01-one/splitter/trie.js +3 -3
  34. package/src/01-one/tagset/plugin.js +1 -1
  35. package/src/01-one/tagset/tags/dates.js +10 -0
  36. package/src/01-one/tagset/tags/misc.js +21 -2
  37. package/src/01-one/tagset/tags/nouns.js +26 -1
  38. package/src/01-one/tagset/tags/values.js +10 -0
  39. package/src/01-one/tagset/tags/verbs.js +18 -0
  40. package/src/01-one/tokenizer/is-sentence.js +3 -3
  41. package/src/01-one/tokenizer/unicode.js +2 -2
  42. package/src/02-two/preTagger/compute/1st-pass/regex.js +4 -4
  43. package/src/02-two/preTagger/compute/1st-pass/titlecase.js +2 -2
  44. package/src/02-two/preTagger/compute/1st-pass/year.js +2 -2
  45. package/src/02-two/preTagger/compute/2nd-pass/acronym.js +3 -3
  46. package/src/02-two/preTagger/compute/2nd-pass/fallback.js +2 -2
  47. package/src/02-two/preTagger/compute/2nd-pass/prefix-lookup.js +5 -5
  48. package/src/02-two/preTagger/compute/2nd-pass/suffix-lookup.js +5 -5
  49. package/src/02-two/preTagger/compute/index.js +1 -1
  50. package/src/03-three/adjectives/api.js +3 -3
  51. package/src/03-three/nouns/api.js +6 -6
  52. package/src/03-three/numbers/api.js +35 -35
  53. package/src/03-three/numbers/data.js +2 -2
  54. package/src/03-three/numbers/format/index.js +2 -2
  55. package/src/03-three/numbers/format/toText.js +12 -12
  56. package/src/03-three/numbers/parse/fromText.js +3 -3
  57. package/src/03-three/numbers/parse/index.js +5 -5
  58. package/src/03-three/verbs/api.js +1 -1
  59. package/src/_version.js +1 -1
  60. package/src/index.js +2 -2
  61. package/types/index.d.cts +9 -0
  62. package/types/index.d.ts +3 -4
  63. package/types/view/de.ts +18 -18
  64. package/types/view/one.ts +1 -1
@@ -1,4 +1,4 @@
1
- let data = {
1
+ const data = {
2
2
  ones: [
3
3
  [1, 'eins', 'erste'],
4
4
  [2, 'zwei', 'zweite'],
@@ -57,7 +57,7 @@ const toNumber = {}
57
57
 
58
58
  Object.keys(data).forEach(k => {
59
59
  data[k].forEach(a => {
60
- let [num, w, ord] = a
60
+ const [num, w, ord] = a
61
61
  toCardinal[ord] = w
62
62
  toOrdinal[w] = ord
63
63
  toNumber[w] = num
@@ -4,8 +4,8 @@ import { toOrdinal } from '../data.js'
4
4
 
5
5
  const formatNumber = function (parsed, fmt) {
6
6
  if (fmt === 'TextOrdinal') {
7
- let words = toText(parsed.num)
8
- let last = words[words.length - 1]
7
+ const words = toText(parsed.num)
8
+ const last = words[words.length - 1]
9
9
  words[words.length - 1] = toOrdinal[last]
10
10
  return words.join('')
11
11
  }
@@ -1,17 +1,17 @@
1
1
  import { data } from '../data.js'
2
- let tens = data.tens.reverse()
3
- let teens = data.teens.reverse()
4
- let ones = data.ones.reverse()
5
- let hundreds = data.hundreds.reverse()
2
+ const tens = data.tens.reverse()
3
+ const teens = data.teens.reverse()
4
+ const ones = data.ones.reverse()
5
+ const hundreds = data.hundreds.reverse()
6
6
 
7
7
 
8
8
  const doThousands = function (num) {
9
- let words = []
9
+ const words = []
10
10
  // hunderttausend
11
11
  if (num >= 100000) {
12
12
  for (let i = 0; i < ones.length; i += 1) {
13
13
  if (num >= ones[i][0] * 100000) {
14
- let found = ones[i][0] === 1 ? 'ein' : ones[i][1]
14
+ const found = ones[i][0] === 1 ? 'ein' : ones[i][1]
15
15
  words.push(found)
16
16
  words.push('hunderttausend')
17
17
  num -= teens[i][0] * 100000
@@ -31,7 +31,7 @@ const doThousands = function (num) {
31
31
  // dreitausend, viertausend...
32
32
  for (let i = 0; i < ones.length; i += 1) {
33
33
  if (num >= ones[i][0] * 1000) {
34
- let found = ones[i][0] === 1 ? 'ein' : ones[i][1]
34
+ const found = ones[i][0] === 1 ? 'ein' : ones[i][1]
35
35
  return [found, 'tausend']
36
36
  }
37
37
  }
@@ -39,7 +39,7 @@ const doThousands = function (num) {
39
39
  }
40
40
 
41
41
  const doHundreds = function (num) {
42
- let words = []
42
+ const words = []
43
43
  for (let i = 0; i < hundreds.length; i += 1) {
44
44
  if (num >= hundreds[i][0]) {
45
45
  words.push(hundreds[i][1])
@@ -52,7 +52,7 @@ const doHundreds = function (num) {
52
52
 
53
53
  // 23 -> '[drei][und][zwanzig]'
54
54
  const twoDigit = function (num) {
55
- let words = []
55
+ const words = []
56
56
  // ninety, eighty ...
57
57
  for (let i = 0; i < tens.length; i += 1) {
58
58
  if (num >= tens[i][0]) {
@@ -74,7 +74,7 @@ const twoDigit = function (num) {
74
74
  // drei und zwanzig
75
75
  if (words.length === 1) {
76
76
  // use '[ein][und][zwanzig]', not 'eins..'
77
- let found = ones[i][0] === 1 ? 'ein' : ones[i][1]
77
+ const found = ones[i][0] === 1 ? 'ein' : ones[i][1]
78
78
  return [found, 'und', words[0]]
79
79
  }
80
80
  // just 'drei'
@@ -99,13 +99,13 @@ const toText = function (num) {
99
99
  }
100
100
  // do '[sieben][tausend]'
101
101
  if (num >= 1000) {
102
- let res = doThousands(num)
102
+ const res = doThousands(num)
103
103
  words = words.concat(res)
104
104
  num %= 1000
105
105
  }
106
106
  // do '[zwei][hundert]'
107
107
  if (num >= 100) {
108
- let res = doHundreds(num)
108
+ const res = doHundreds(num)
109
109
  words = words.concat(res)
110
110
  num %= 100
111
111
  }
@@ -5,9 +5,9 @@ const parseNumbers = function (terms = []) {
5
5
  let carry = 0
6
6
  let minus = false
7
7
 
8
- let words = terms[0].splits || []
8
+ const words = terms[0].splits || []
9
9
  // console.log(words)
10
- let tags = terms[0].tags
10
+ const tags = terms[0].tags
11
11
  for (let i = 0; i < words.length; i += 1) {
12
12
  let w = words[i]
13
13
 
@@ -25,7 +25,7 @@ const parseNumbers = function (terms = []) {
25
25
  }
26
26
  // 'hundert'
27
27
  if (isMultiple.has(w)) {
28
- let mult = toNumber[w] || 1
28
+ const mult = toNumber[w] || 1
29
29
  if (carry === 0) {
30
30
  carry = 1
31
31
  }
@@ -5,12 +5,12 @@ const fromNumber = function (m) {
5
5
  let str = (m.text() || m.text('normal')).toLowerCase().trim()
6
6
  str = str.replace(/(e|er)$/, '')
7
7
  // get prefix/suffix
8
- let arr = str.split(/([0-9.,]*)/)
8
+ const arr = str.split(/([0-9.,]*)/)
9
9
  let [prefix, num] = arr
10
10
  let suffix = arr.slice(2).join('')
11
11
  // german format - '.' groups thousands, ',' marks the decimal
12
12
  num = num.replace(/[.,]$/, '')
13
- let hasComma = /\d\.\d/.test(num)
13
+ const hasComma = /\d\.\d/.test(num)
14
14
  num = num.replace(/\./g, '').replace(/,/, '.')
15
15
  if (num !== '' && m.length < 2) {
16
16
  num = Number(num)
@@ -34,16 +34,16 @@ const fromNumber = function (m) {
34
34
  }
35
35
 
36
36
  const parseNumber = function (m) {
37
- let terms = m.docs[0]
37
+ const terms = m.docs[0]
38
38
  let num = null
39
39
  let prefix = ''
40
40
  let suffix = ''
41
41
  let hasComma = false
42
- let isText = m.has('#TextValue')
42
+ const isText = m.has('#TextValue')
43
43
  if (isText) {
44
44
  num = fromText(terms)
45
45
  } else {
46
- let res = fromNumber(m)
46
+ const res = fromNumber(m)
47
47
  prefix = res.prefix
48
48
  suffix = res.suffix
49
49
  num = res.num
@@ -17,7 +17,7 @@ const api = function (View) {
17
17
  const methods = this.methods.two.transform.verb
18
18
  const { toPresent, toPast, toSubjunctive1, toSubjunctive2, toImperative, toPastParticiple, toPresentParticiple } = methods
19
19
  return getNth(this, n).map(m => {
20
- let str = getRoot(m, methods)
20
+ const str = getRoot(m, methods)
21
21
  return {
22
22
  infinitive: str,
23
23
  presentTense: toPresent(str),
package/src/_version.js CHANGED
@@ -1 +1 @@
1
- export default '0.1.0'
1
+ export default '0.1.2'
package/src/index.js CHANGED
@@ -23,7 +23,7 @@ nlp.plugin(adjectives)
23
23
  nlp.plugin(nouns)
24
24
 
25
25
  const de = function (txt, lex) {
26
- let dok = nlp(txt, lex)
26
+ const dok = nlp(txt, lex)
27
27
  return dok
28
28
  }
29
29
 
@@ -41,7 +41,7 @@ Object.defineProperty(de, '_world', {
41
41
  })
42
42
  /** log the decision-making to console */
43
43
  de.verbose = function (set) {
44
- let env = typeof process === 'undefined' ? self.env || {} : process.env //use window, in browser
44
+ const env = typeof process === 'undefined' ? self.env || {} : process.env //use window, in browser
45
45
  env.DEBUG_TAGS = set === 'tagger' || set === true ? true : ''
46
46
  env.DEBUG_MATCH = set === 'match' || set === true ? true : ''
47
47
  env.DEBUG_CHUNKS = set === 'chunker' || set === true ? true : ''
@@ -0,0 +1,9 @@
1
+ // CommonJS exports the callable directly; share its API with the ESM declarations.
2
+ import type esm from './index.js' with { "resolution-mode": "import" }
3
+
4
+ declare const nlp: typeof esm
5
+ declare namespace nlp {
6
+ export type TypedPlugin<Methods extends object> = esm.TypedPlugin<Methods>
7
+ }
8
+
9
+ export = nlp
package/types/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { Lexicon, Plugin, matchOptions, Match, Net } from './misc'
2
- import View from './view/de'
1
+ import { Lexicon, Plugin, matchOptions, Match, Net } from './misc.js'
2
+ import View from './view/de.js'
3
3
 
4
4
  /** parse a given text */
5
5
  declare function nlp(text: string, lexicon?: Lexicon): View
6
6
 
7
7
  // Constructor
8
- declare module nlp {
8
+ declare namespace nlp {
9
9
  /** interpret text without tagging */
10
10
  export function tokenize(text: string, lexicon?: Lexicon): View
11
11
  /** scan through text with minimal analysis */
@@ -43,4 +43,3 @@ declare module nlp {
43
43
  }
44
44
 
45
45
  export default nlp
46
-
package/types/view/de.ts CHANGED
@@ -1,4 +1,4 @@
1
- import View from './one'
1
+ import View from './one.js'
2
2
 
3
3
 
4
4
  interface Numbers extends View {
@@ -9,37 +9,37 @@ interface Numbers extends View {
9
9
  /** grab 'kilos' from `25 kilos' */
10
10
  // units: () => View
11
11
  /** return only ordinal numbers */
12
- isOrdinal: () => View
12
+ isOrdinal: () => Numbers
13
13
  /** return only cardinal numbers */
14
- isCardinal: () => View
14
+ isCardinal: () => Numbers
15
15
  /** convert number to `5` or `5th` */
16
- toNumber: () => View
16
+ toNumber: () => Numbers
17
17
  /** add commas, or nicer formatting for numbers */
18
- toLocaleString: () => View
18
+ toLocaleString: () => Numbers
19
19
  /** convert number to `five` or `fifth` */
20
- toText: () => View
20
+ toText: () => Numbers
21
21
  /** convert number to `five` or `5` */
22
- toCardinal: () => View
22
+ toCardinal: () => Numbers
23
23
  /** convert number to `fifth` or `5th` */
24
- toOrdinal: () => View
24
+ toOrdinal: () => Numbers
25
25
  /** return numbers with this value */
26
- isEqual: () => View
26
+ isEqual: () => Numbers
27
27
  /** return numbers bigger than n */
28
- greaterThan: (min: number) => View
28
+ greaterThan: (min: number) => Numbers
29
29
  /** return numbers smaller than n */
30
- lessThan: (max: number) => View
30
+ lessThan: (max: number) => Numbers
31
31
  /** return numbers between min and max */
32
- between: (min: number, max: number) => View
32
+ between: (min: number, max: number) => Numbers
33
33
  /** set number to n */
34
- set: (n: number) => View
34
+ set: (n: number) => Numbers
35
35
  /** increase number by n */
36
- add: (n: number) => View
36
+ add: (n: number) => Numbers
37
37
  /** decrease number by n*/
38
- subtract: (n: number) => View
38
+ subtract: (n: number) => Numbers
39
39
  /** increase number by 1 */
40
- increment: () => View
40
+ increment: () => Numbers
41
41
  /** decrease number by 1*/
42
- decrement: () => View
42
+ decrement: () => Numbers
43
43
  }
44
44
 
45
45
  interface Contractions extends View {
@@ -58,4 +58,4 @@ interface FrView extends View {
58
58
  topics(): View
59
59
  }
60
60
 
61
- export default FrView
61
+ export default FrView
package/types/view/one.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Document, Pointer, Groups, JsonProps, outMethods, matchOptions, Term, Net } from '../misc'
1
+ import { Document, Pointer, Groups, JsonProps, outMethods, matchOptions, Term, Net } from '../misc.js'
2
2
 
3
3
  class View {
4
4
  // Utils