Socket
Socket
Sign inDemoInstall

compromise

Package Overview
Dependencies
Maintainers
2
Versions
169
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

compromise - npm Package Compare versions

Comparing version 10.7.2 to 11.0.0

LICENSE

62

changelog.md

@@ -1,4 +0,30 @@

`compromise` uses semver, with occasional releases to npm and bower.
here, 'Major' is considered an api change, while 'Minor' is considered a performance change.
compromise uses semver, and pushes to npm frequently
(github-releases occasionally)
* **Major** is considered a breaking api change,
* **Minor** is considered a behaviour/performance change.
* **Patch** is an obvious, non-controversial bugfix
### v11
##### 11.0.0
- support for persistent lexicon/tagset changes
- `addTags, addWords, addRegs, addPlurals, addConjugations` methods to extend native data
- - `.plugin()` method to wrap all of these into one
- - (removal of `.packWords()` method)
- more `.organizations()` matches
- regex-support in .match() - `nlp('it is waaaay cool').match('/aaa/').out()//'waaaay'`
- improved apostrophe-s disambiguation
- support whitespace before sentence boundary
- improved QuestionWord tagging, some `.questions()` without a question-mark
- phrasalVerb conjugation
- new #Activity tag for Gerunds as nouns 'walking is fun'
- change ngram params to an object `{size:int, max:int}`
- implement '[]' capture-group syntax in .match()
- bring-back `map, filter, foreach and reduce` methods
- set `.words()` as alias for .terms()
- `people().firstNames()`, `people().lastNames()`
- split-out comma-separated adverbs
<!-- * include 'the #TitleCase' matches in .topics() -->
### v10

@@ -16,14 +42,14 @@ - cleanup & rename some `.value()` methods

- changes params of `.replaceWith()` method to a 'keyTags' boolean
- improved .debug() and logging on clientside
* 10.1.0
- improved .debug() and logging on client-side
##### 10.1.0
- fix return format of .isPlural(), so it acts like a match filter
- less-greedy date tagging & ambiguous month fixes
* 10.2.0
##### 10.2.0
- .trim() method,
- adjective tagging fixes
- some new .out() methods
* 10.3.0
##### 10.3.0
- new `Percent` tag
- lump more units in with `.values()`
* 10.4.0
##### 10.4.0
- improved tagging of `VerbPhrase` and `Condition`

@@ -33,3 +59,3 @@ - fixes to contractions in sentence-changes - "i'm going -> i went"

- accept Terms & Result objects in .match() and .replace()
* 10.5.0
##### 10.5.0
- add increment/decrement/add/subtract methods to .values()

@@ -39,7 +65,7 @@ - add units(), noUnits() methods to .values()

- money tag is no longer always a value
* 10.6.0
##### 10.6.0
- move internal lexicon around, to support new format in v11
- added states & provinces as #Region
- added #Comparable tag for adjectives that conjugate
* 10.7.0
##### 10.7.0
- improved `places()` parsing

@@ -49,7 +75,7 @@ - improved `{min,max}` match syntax

- quiet addition of .pack() and .unpack() for owen
* 10.7.2
##### 10.7.2
- fix for '.watch' reserved word in efrt
### v9 &nbsp;
* 9.0.0
##### 9.0.0
- rename `Term.tag` object to `Term.tags` so the `.tag()` method can work throughout more-consistently

@@ -61,9 +87,11 @@ - fix 'Auxillary' tag typo to 'Auxiliary'

- new `.has()` method for faster lookups
* 9.1.0 - pretty-real filesize reduction by swapping es6 classes for es5 inheritance
##### 9.1.0
- pretty-real filesize reduction by swapping es6 classes for es5 inheritance
### v8 &nbsp;
* 8.0.0 - less-ambitious date-parsing of nl-date forms
* - filesize reduction using [efrt](https://github.com/nlp-compromise/efrt) data structure (254k -> 214k)
* 8.1.0 - add `nlp.tokenize()` method for disabling pos-tagging of input
* 8.2.0 - add `nlp.out('index')` method, 12 bugs
##### 8.0.0
- less-ambitious date-parsing of nl-date forms
- filesize reduction using [efrt](https://github.com/nlp-compromise/efrt) data structure (254k -> 214k)
- 8.1.0 - add `nlp.tokenize()` method for disabling pos-tagging of input
- 8.2.0 - add `nlp.out('index')` method, 12 bugs

@@ -70,0 +98,0 @@ ### v7 &nbsp; :postal_horn:

@@ -56,2 +56,27 @@ 'use strict';

},
forEach: {
desc: 'do something on each result independently',
returns: 'Text',
example: 'nlp(\'Larry, Curly, and Moe\').people().map((m,i)=> i + m.out() )\n//0curly\n//1larry\n//2moe'
},
map: {
desc: 'create a new array from these results',
returns: 'Text',
example: 'nlp(\'Larry, Curly, and Moe\').people().map((m)=> m.out(\'normal\'))\n// [\'curly\', \'larry\', \'moe\']'
},
filter: {
desc: 'select only the results that return true for some function',
returns: 'Text',
example: 'nlp(\'Larry, Curly, and Moe\').people().filter(m => m.out(\'normal\')===\'larry\' ).length\n//1'
},
find: {
desc: 'select only the first result that returns true',
returns: 'Text',
example: 'nlp(\'Larry, Curly, and Moe\').people().find(m => m.out(\'normal\')===\'larry\' ).out()\n//"Larry,"'
},
reduce: {
desc: 'combine the results of a function into one thing',
returns: 'Text',
example: 'nlp(\'Larry, Curly, and Moe\').people().reduce((h,m) => {\n var str=m.out(\'normal\');\n h[str]=true;\n return h }, {})\n//{larry:true, curly:true, moe:true}'
},
},

@@ -95,3 +120,2 @@

}
},

@@ -102,2 +126,3 @@

desc: 'append a word (or words) before each match',
mutative: true,
returns: 'Text',

@@ -108,2 +133,3 @@ example: 'nlp(\'stupid flanders\').match(\'flanders\').insertBefore(\'sexy\').all().out()\n//stupid sexy flanders'

desc: 'append a word (or words) after each match',
mutative: true,
returns: 'Text',

@@ -114,2 +140,3 @@ example: 'nlp(\'i know so many words\').insertAfter(\'bigly\').all().out()\n//i know so many words bigly'

desc: 'insert a word or words at a known index (zero-based)',
mutative: true,
returns: 'Text',

@@ -120,2 +147,3 @@ example: 'nlp(\'so you are from Africa?\').insertAt(2, \'like,\').all().out()\n//so you are like, from africa?'

desc: 'merge matches into one term, with shared tags.',
mutative: true,
returns: 'Text',

@@ -126,2 +154,3 @@ example: 'nlp(\'Keanu Reeves said whoa\').match(\'#Person\').lump().all().out(\'terms\')\n//[\'Keanu Reeves\', \'said\', \'whoa\']'

desc: 'turn the current selection into something else. Essentially just delete() -> insertAt(). The second param says whether to keep original tags around.',
mutative: true,
returns: 'Text',

@@ -132,2 +161,3 @@ example: 'nlp(\'it was the worst of times\').match(\'worst\').replaceWith(\'blurst\', true).all().out()\n//it was the blurst of times'

desc: 'turn a new selection into something else. Essentially just match() -> delete() -> insertAt(). Third optional param keeps original tags around.',
mutative: true,
returns: 'Text',

@@ -138,2 +168,3 @@ example: 'nlp(\'trust me folks, big league.\').replace(\'big league\',\'bigly\').all().out()\n//trust me folks, bigly.'

desc: 'remove a match from the Text permanently. For a temporary filter, see `.not()`',
mutative: true,
returns: 'Text',

@@ -144,2 +175,3 @@ example: 'nlp(\'you don\u2019t win friends with salad\').delete(\'do not\').out()\n//you win friends with salad'

desc: 'split matches into [before, match, after]',
mutative: true,
returns: 'Text',

@@ -150,2 +182,3 @@ example: 'nlp(\'Monorail...Once again! Monorail... Monorail!\').splitOn(\'monorail\').get(0).out()\n//Monorail'

desc: 'split matches into [before, match + after]',
mutative: true,
returns: 'Text',

@@ -156,17 +189,21 @@ example: 'nlp(\'Monorail...Once again! Monorail... Monorail!\').splitBefore(\'monorail\').get(0).out()\n//Monorail...Once again!'

desc: 'split matches into [before + match, after]',
mutative: true,
returns: 'Text',
example: 'nlp(\'Monorail...Once again! Monorail... Monorail!\').splitAfter(\'monorail\').get(0).out()\n//Monorail'
},
slice: {
desc: 'grab a subset of the results',
mutative: false,
returns: 'Text',
example: 'nlp(\'Homer, have you been eating that sandwich again?\').terms().slice(0, 3).out()\n//Homer, have you'
},
clone: {
desc: 'copy the object, so changes no longer effect the original (make it ~immutable)',
mutative: false,
returns: 'Text',
example: 'nlp(\'would somebody please think of the children\').clone().toUpperCase().parent.out()\n//would somebody please think of the children'
},
slice: {
desc: 'grab a subset of the results',
returns: 'Text',
example: 'nlp(\'Homer, have you been eating that sandwich again?\').terms().slice(0, 3).out()\n//Homer, have you'
},
concat: {
desc: 'combine two results into one',
mutative: false,
returns: 'Text',

@@ -177,5 +214,6 @@ example: 'nlp(\'My name is Otto\').concat(\'and i love to get blotto\').sentences().length\n//1'

desc: 'turn a list of results into one result',
mutative: false,
returns: 'Text',
example: 'nlp(\'sex cauldron? I thought they closed that place down.\').flatten().length\n//1'
},
}
},

@@ -182,0 +220,0 @@

@@ -5,4 +5,4 @@ 'use strict';

data: {
desc: 'return a handy array of meta-data for the n-grams in this text',
example: 'nlp(\'love love me do.\').ngrams().data()\n//[{text:\'love\', count:2, size:1}..]',
desc: 'return a handy array of meta-data for the n-grams in this text. accepts an obj with `max` or `size` number',
example: "nlp('love love me do.').ngrams({max:3}).data()\n//[{text:'love', count:2, size:1}..]",
returns: 'array'

@@ -13,3 +13,4 @@ },

returns: 'Text',
example: 'nlp(\'University of Toronto, in toronto\').ngrams().unigrams(0).data()\n//[{normal:\'toronto\', count:2, size:1}]'
example:
"nlp('University of Toronto, in toronto').ngrams().unigrams(0).data()\n//[{normal:'toronto', count:2, size:1}]"
},

@@ -19,3 +20,4 @@ bigrams: {

returns: 'Text',
example: 'nlp(\'The University of Ryerson and University of Toronto, in toronto\').ngrams().bigrams(0).data()\n//[{normal:\'university of\', count:2, size:2}]'
example:
"nlp('The University of Ryerson and University of Toronto, in toronto').ngrams().bigrams(0).data()\n//[{normal:'university of', count:2, size:2}]"
},

@@ -25,3 +27,3 @@ trigrams: {

returns: 'Text',
example: 'nlp(\'we like Roy! we like Roy!\').ngrams().trigrams(0).data()\n//[{normal:\'we like roy\', count:2, size:3}]'
example: "nlp('we like Roy! we like Roy!').ngrams().trigrams(0).data()\n//[{normal:'we like roy', count:2, size:3}]"
},

@@ -31,4 +33,4 @@ sort: {

returns: 'Text',
example: 'nlp(\'i scream, you scream, we all scream for icecream.\').ngrams().sort().first().out()\n//scream'
example: "nlp('i scream, you scream, we all scream for icecream.').ngrams().sort().first().out()\n//scream"
}
};

@@ -12,3 +12,13 @@ 'use strict';

example: 'nlp(\'Tony Hawk did a 900\').people().pronoun()\n//\'he\''
},
firstNames: {
desc: 'grab only the first-names',
returns: 'Text',
example: 'nlp(\'Tony Hawk did a 900\').people().firstNames().out(\'array\')\n//[\'tony\']'
},
lastNames: {
desc: 'grab only the last-names',
returns: 'Text',
example: 'nlp(\'Tony Hawk did a 900\').people().lastNames().out(\'array\')\n//[\'hawk\']'
}
};

@@ -5,3 +5,3 @@ {

"description": "natural language processing in the browser",
"version": "10.7.2",
"version": "11.0.0",
"main": "./builds/compromise.js",

@@ -14,13 +14,13 @@ "repository": {

"test": "node ./scripts/test.js",
"testBuild": "TESTENV=prod node ./scripts/test.js",
"testb": "TESTENV=prod node ./scripts/test.js",
"buildTest": "TESTENV=prod node ./scripts/test.js",
"test:types": "tsc --project test/types",
"testb": "node ./scripts/browserTest.js",
"browserTest": "node ./scripts/browserTest.js",
"benchmark": "node ./scripts/benchmark.js",
"build": "node ./scripts/build/index.js",
"pack": "node ./scripts/pack.js",
"prepublish": "node ./scripts/prepublish",
"prepublishOnly": "node ./scripts/prepublish",
"postpublish": "node ./scripts/postpublish",
"demo": "node ./scripts/demo.js",
"watch": "node ./scripts/watch.js",
"watch": "amble ./scratch.js",
"filesize": "node ./scripts/filesize.js",

@@ -30,7 +30,11 @@ "coverage": "node ./scripts/coverage.js",

},
"files": ["builds/", "docs/"],
"files": [
"builds/",
"docs/"
],
"dependencies": {
"efrt": "1.1.1"
"efrt-unpack": "2.0.3"
},
"devDependencies": {
"amble": "0.0.5",
"babel-preset-es2015": "^6.24.0",

@@ -41,14 +45,12 @@ "babelify": "7.3.0",

"browserify-glob": "^0.2.0",
"bundle-collapser": "^1.2.1",
"chalk": "^1.1.3",
"codacy-coverage": "^2.0.0",
"compromise-plugin": "0.0.3",
"derequire": "^2.0.3",
"eslint": "^3.1.1",
"gaze": "^1.1.1",
"http-server": "0.9.0",
"nyc": "^8.4.0",
"shelljs": "^0.7.2",
"tap-min": "^1.1.0",
"tap-spec": "4.1.1",
"tape": "4.6.0",
"tap-spec": "^4.1.1",
"uglify-js": "2.7.0"

@@ -55,0 +57,0 @@ },

@@ -11,9 +11,6 @@ <div align="center">

</a>
<a href="https://nodejs.org/api/documentation.html#documentation_stability_index">
<img src="https://img.shields.io/badge/stability-stable-green.svg?style=flat-square" />
</a>
<a href="https://www.codacy.com/app/spencerkelly86/nlp_compromise">
<img src="https://api.codacy.com/project/badge/Coverage/82cc8ebd98b64ed199d7be6021488062" />
</a>
<div>natural language processing, actually in the browser</div>
<div>natural language processing, in javascript</div>
<sub>

@@ -45,3 +42,3 @@ by

<a href="https://unpkg.com/compromise@latest/builds/compromise.min.js">
210k
210kb
</a>

@@ -81,22 +78,44 @@ </b>

<div align="center">
<sub>with <a href="https://github.com/nlp-compromise/compromise/wiki/Justification">deliberate, rule-based</a> nlp,</sub>
<br/>
<b>compromise</b> makes working with text easy
<sub>
a <a href="https://github.com/nlp-compromise/compromise/wiki/Justification">
least-fancy</a> way to handle text,
</sub>
<h3 align="center">
Text in โ†’ data out.
</h3>
<sub>without <b>training</b>, <b>jargon</b> or <b>config</b></sub>
</div>
<h6 align="center">
no jargon, &nbsp; | &nbsp; no config, &nbsp; | &nbsp; no training
&nbsp; &nbsp; &nbsp;
<sub><i>๐Ÿ™Œ you can do it!</i></sub>
</h6>
<h4 align="center">
<a href="http://compromise.cool/docs">API doc</a>
&nbsp; &nbsp; &nbsp;
<h3 align="center">
<a href="http://compromise.cool/demos">Demos</a>
&nbsp; &nbsp; &nbsp;
<a href="https://github.com/nlp-compromise/compromise/wiki/QuickStart">QuickStart</a>
<a href="https://github.com/nlp-compromise/compromise/wiki/Usage">Usage</a>
&nbsp; &nbsp; &nbsp;
<a href="https://github.com/nlp-compromise/compromise/wiki/Usage">Tutorials</a>
<a href="http://compromise.cool/docs">API</a>
&nbsp; &nbsp; &nbsp;
<a href="https://github.com/nlp-compromise/compromise/wiki/How-it-Works">WTF</a>
</h3>
#### โšก๏ธ on the Client-side
```html
<script src="https://unpkg.com/compromise@latest/builds/compromise.min.js"></script>
<script>
var doc = nlp('dinosaur')
var str = doc.nouns().toPlural().out('text')
console.log(str)
// 'dinosaurs'
</script>
```
#### ๐ŸŒ‹ Server-side!
```javascript
var nlp = require('compromise')
var doc = nlp('London is calling')
doc.sentences().toNegative()
// 'London is not calling'
```
<table>

@@ -169,50 +188,60 @@ <tr>

#### โšก๏ธ Client-side!
```html
<script src="https://unpkg.com/compromise@latest/builds/compromise.min.js"></script>
<script>
var doc = nlp('dinosaur')
<p></p>
var str = doc.nouns().toPlural().out('text')
console.log(str)
// 'dinosaurs'
</script>
```
<table>
<tr>
<td>
<i>pop right in:</i>
<pre lang="javascript">var doc= nlp(myNovel) //whoosh
doc.match('the #Superlative of times').length</pre>
</td>
<td>
<i>API is bearable:</i>
<pre lang="javascript">doc.contractions().expand()
doc.people().lastNames()</pre>
</td>
</tr>
<tr>
<td>
<b align="center"><i>loosely-held opinions..</i></b>
<pre lang="js">var ayeRight= require('nlp-scottish-slang')
nlp.plugin(ayeRight)
#### ๐ŸŒ‹ Server-side!
```javascript
var nlp = require('compromise')
nlp('Taps aff, high doh!')</pre>
</td>
<td>
<b align="center"><i>no foolin,</i></b>
<pre lang="haml">6 years, 150 PRs, 60 devs</pre>
<sub align="center">
in production in <a href="https://www.microsoft.com/developerblog/2017/06/06/geocoding-social-conversations-nlp-javascript/">the United Nations๐ŸŽˆ</a>
</sub>
</td>
</tr>
</table>
var doc = nlp('London is calling')
doc.sentences().toNegative()
// 'London is not calling'
### Throw in text,
even if it's just one word:
```js
var doc = nlp('Ludwig van Beethoven')
```
## Toss in text,
even if it's just one word:
<ul>
<h3>Grab a part:</h3>
use <a href="https://github.com/nlp-compromise/compromise/wiki/Usage#subset-methods">built-in methods</a> like <b>.nouns()</b>, or <b>.people()</b> - or query any pattern with <b><a href="https://github.com/nlp-compromise/compromise/wiki/Match-syntax">.match()</a></b>:
query any pattern with <b><a href="https://github.com/nlp-compromise/compromise/wiki/Match-syntax">.match()</a></b>, or use <a href="https://github.com/nlp-compromise/compromise/wiki/Usage#subset-methods">built-in methods</a> like <b>.nouns()</b>, or <b>.people()</b>:
</ul>
```js
doc = nlp('Ludwig van Beethoven wrote to Josephine Brunsvik')
doc.people().out('list')
// ['ludwig van beethoven', 'josephine brunsvik']
doc.match('#TitleCase van #LastName').out()
// 'Ludwig van Beethoven'
doc.match('#PastTense to').hyphenate().out()
// 'wrote-to'
doc.people().out('list')
// ['ludwig van beethoven']
```
<ul>
<h3>Throw stuff around:</h3>
<h3>Move stuff around:</h3>
</ul>
* <a href="https://github.com/nlp-compromise/compromise/wiki/Nouns"><b>Plural/singular:</b></a> - grab the noun-phrases, make em plural:
```javascript
```js
doc = nlp('a bottle of beer on the wall.')

@@ -225,3 +254,3 @@ doc.nouns().first().toPlural()

* <a href="https://github.com/nlp-compromise/compromise/wiki/Values"><b>Number parsing:</b></a> - parse written-out numbers, and change their form:
```javascript
```js
doc = nlp('ninety five thousand and fifty two')

@@ -238,3 +267,3 @@ doc.values().toNumber().out('text')

* <a href="https://github.com/nlp-compromise/compromise/wiki/Usage"><b>Normalization:</b></a> - handle the craziness:
```javascript
```js
doc = nlp("the guest-singer's bjรถrk at seven thirty.").normalize().out('text')

@@ -245,3 +274,3 @@ // 'The guest singer is Bjork at 7:30.'

* <a href="https://github.com/nlp-compromise/compromise/wiki/Verbs"><b>Tense:</b></a> - switch between conjugations of any verb
```javascript
```js
let doc = nlp('she sells seashells by the seashore.')

@@ -258,4 +287,13 @@ doc.sentences().toFutureTense().out('text')

* <a href="https://github.com/nlp-compromise/compromise/wiki/Contractions"><b> Contractions:</b></a> - grab, expand and contract them:
```js
doc = nlp("we're not gonna take it, no we ain't gonna take it.")
doc.has('going') // true
doc.match('are not').length // == 2
doc.contractions().expand().out()
//'we are not going to take it, no we are not going to take it'
```
* <a href="https://github.com/nlp-compromise/compromise/wiki/Usage"><b> Named-entities:</b></a> - get the people, places, organizations:
```javascript
```js
doc = nlp('that opera about richard nixon visiting china')

@@ -270,3 +308,3 @@ doc.topics().data()

* <a href="https://github.com/nlp-compromise/compromise/wiki/Lexicon"><b>Error correction:</b></a> - make it say what you'd like:
```javascript
```js
var lexicon={

@@ -276,13 +314,9 @@ 'boston': 'MusicalGroup'

doc = nlp('i heard Boston\'s set in Chicago', lexicon)
doc.match('#MusicalGroup').length
// 1
//alternatively, fix it all 'in-post':
doc.match('heard #Possessive set').terms(1).tag('MusicalGroup')
doc.match('#MusicalGroup').length
// 1
```
* <a href="https://github.com/nlp-compromise/compromise/wiki/Output"><b> Handy outputs:</b></a> - get sensible data:
```javascript
```js
doc = nlp('We like Roy! We like Roy!').sentences().out('array')

@@ -301,8 +335,7 @@ // ['We like Roy!', 'We like Roy!']

<h3 align="center">
and yes, ofcourse, there's <a href="http://compromise.cool/demos">a lot more stuff</a>.
of course, there's <a href="https://github.com/nlp-compromise/compromise/wiki">a lot more stuff</a>.
</h3>
<h4 align="center">
<b>Join in -</b>
we're fun, using <b>semver</b>, and moving fast.
<a href="https://github.com/nlp-compromise/compromise/wiki">get involved</a>
we're fun, using <b>semver</b>, and moving fast:
</h4>

@@ -358,36 +391,37 @@

<details>
<summary>๐ŸŒŽ Other Languages?</summary>
<summary>โ˜‚๏ธ Isn't javascript too...</summary>
<p></p>
<ul>
okay! we've got work-in-progress forks for <a href="https://github.com/nlp-compromise/de-compromise">German</a> and <a href="https://github.com/nlp-compromise/fr-compromise">French</a>, in the same philosophy.
yeah!
<br/>
Get involved!
it wasn't built to compete with the stanford tagger, and may not fit every project.
<br/>
string stuff is synchronous too, and parallelizing is weird.
<br/>
See <a href="https://github.com/nlp-compromise/compromise/wiki/Speed">here</a> for information about speed & performance, and
<a href="https://github.com/nlp-compromise/compromise/wiki/Justification">here></a> for project motivations
</ul>
<p></p>
</details>
</p>
</p>
<p>
<details>
<summary>โ˜‚๏ธ Isn't javascript too...</summary>
<summary>๐Ÿ’ƒ Can it run on my arduino-watch?</summary>
<p></p>
<ul>
yeah..
Only if it's water-proof!
<br/>
it wasn't built to compete with the stanford tagger, and may not fit every project.
<br/>
all string stuff is synchronous too, and parallelizing is weird.
<br/>
See <a href="https://github.com/nlp-compromise/compromise/wiki/Speed">here</a> for information about speed & performance.
Read <a href="https://github.com/nlp-compromise/compromise/wiki/QuickStart">quickStart</a> for all sorts of funny environments.
</ul>
<p></p>
</details>
</p>
</p>
<p>
<details>
<summary>๐Ÿ’ƒ Can it run on my arduino-watch?</summary>
<summary>๐ŸŒŽ Other Languages?</summary>
<p></p>
<ul>
Only if it's water-proof!
okay! we've got work-in-progress forks for <a href="https://github.com/nlp-compromise/de-compromise">German</a> and <a href="https://github.com/nlp-compromise/fr-compromise">French</a>, in the same philosophy.
<br/>
See <a href="https://github.com/nlp-compromise/compromise/wiki/QuickStart">quickStart</a> for all sorts of funny environments.
Get involved!
</ul>

@@ -394,0 +428,0 @@ <p></p>

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with โšก๏ธ by Socket Inc