var nlp = require('compromise')
nlp('Wee-ooh, I look just like buddy holly.').sentences().toPastTense()
// 'Wee-ooh, I looked just like buddy holly.'
nlp('..then consider me Miles Davis!').people().out('freq')
// [{ text:'Miles Davis', count:1 }]
with deliberate, rule-based nlp,
compromise makes working with text easy
compromise makes working with text easy
🙌 you can do it!
Part-of-Speech tags | nouns, verbs, adjectives.. | Verb conjugation | change tense of a verb or sentence |
Number parsing | 'seven hundred and fifty' -> 750 | Named-entities | the people, places, orgs.. |
Template-matches | match natural-language forms | Text cleanup | contractions, hyphenation, punctuation |
<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>
var nlp = require('compromise')
var doc = nlp('London is calling')
doc.sentences().toNegative()
// 'London is not calling'
you can use pre-defined selections (like .nouns()) or grab any pattern with .match()
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'
grab the noun-phrases, make em plural:
doc = nlp('a bottle of beer on the wall.')
doc.nouns().first().toPlural()
doc.out('text')
//'The bottles of beer on the wall.'
parse written-out numbers, and change their form:
doc = nlp('ninety five thousand and fifty two')
doc.values().toNumber().out('text')
// '95052'
doc = nlp('the 23rd of December')
doc.values().add(2).toText()
doc.out('text')
// 'the twenty fifth of December'
handle the craziness:
doc = nlp("the guest-singer's björk at seven thirty.").normalize().out('text')
// 'The guest singer is Bjork at 7:30.'
all your base are belong:
let doc = nlp('she sells seashells by the seashore.')
doc.sentences().toFutureTense().out('text')
//'she will sell seashells...'
doc.verbs().conjugate()
// [{ PastTense: 'sold',
// Infinitive: 'sell',
// Gerund: 'selling', ...
// }]
get the people, places, organizations:
doc = nlp('that opera about richard nixon visiting china')
doc.topics().data()
// [
// { text: 'richard nixon' },
// { text: 'china' }
// ]
make it say what you'd like:
var lexicon={
'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
get sensible data:
doc = nlp('We like Roy! We like Roy!').sentences().out('array')
// ['We like Roy!', 'We like Roy!']
doc = nlp('Tony Hawk').out('html')
/*
<span>
<span class="nl-Person nl-FirstName">Tony</span>
<span> </span>
<span class="nl-Person nl-LastName">Hawk</span>
</span>
*/
and yes, ofcourse, there's a lot more stuff.
Join in - we're fun, using semver, and moving fast. get involved
Twitter
|
Slack group
|
Mailing-list
|
Applications
|
Pull-requests
|
- ✨ naturalNode - decidedly fancier, statistical nlp in javascript
- 🍭 SuperScript - clever conversation engine in js
- 💗 NodeBox Linguistics - conjugation, inflection in javascript
- 🎀 reText - very impressive text utilities in javascript
- 💎 jsPos - javascript build of the time-tested Brill-tagger
- 🚗 spaCy - speedy, multilingual tagger in C/python
For the former promise-library, see jnewman/compromise (Thanks Joshua!)