geoapi / compromise

Natural language processing in javascript

Home Page:http://compromise.cool

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

natural language processing, actually in the browser
(formerly nlp_compromise)
inspect and play with english text.

📯 Welcome to v7 📯
a lot has changed!
let r = nlp('I look just like buddy holly.')
r.sentences().toPastTense()
r.out('text')
// "I looked just like buddy holly."
220k
  one javascript file  
86%
  on the Penn treebank  
🙏
  npm install compromise  
IE9+
    caniuse, youbetcha    

demos   |   quickStart   |   docs

no training, configuration, or prolog

the idea is, reach-in to a part of the text, and change it:

r = nlp('john is really nice. sara sings loudly.')

r.match('#Person').toUpperCase()
//JOHN is really nice. SARA sings loudly.

or pluck-out some parts,

r.remove('#Adverb')
// "JOHN is nice. SARA sings."

//replacements,
r.replace('is nice', 'is bad')
// "JOHN is bad. SARA sings."

or just be downright fancy

r.sentences().toNegative()
// "JOHN is not bad. SARA doesn't sing."

or grab specific parts, and analyze-the-heck out of them:

r = nlp(chomskyFanFic)
r.places().sort('freq').unique().data()
/*[
  {text: 'MIT lecture hall'},
  {text: '23 Desperado dr.'},
  {text: 'desert island'},
]*/
Part-of-Speech Tagging️ Named-Entity Recognition️ 🍾Verb Conjugation ✨Inflection/Pluralization

###Client-side:

<script src="https://unpkg.com/compromise@latest/builds/compromise.min.js"></script>
<script>
  var r = nlp('dinosaur').nouns().toPlural()
  console.log(r.out('text'))
  //dinosaurs
</script>

###Tense:

let r = nlp('she sells seashells by the seashore.')
r.sentences().toFutureTense().out('text')
//'she will sell seashells...'

r.verbs().conjugate()
// [{ PastTense: 'sold',
//    Infinitive: 'sell',
//    Gerund: 'selling', ...
// }]

###Plural/singular:

r = nlp('a bottle of beer on the wall.')
r.nouns().first().toPlural()
r.out('text')
//'The bottles of beer on the wall.'

###Negation:

r = nlp('london is calling')
r.sentences().toNegative()
// 'london is not calling'

###Number interpretation:

r = nlp('fifth of december')

r.values().toCardinal().out('text')
// 'five of december'

r.values().toNumber().out('text')
// '5 of december'

###Normalization:

r = nlp("the guest-singer's björk at seven thirty.").normalize().out('text')
// 'The guest singer is Bjork at 7:30.'

###Named-entity recognition:

r = nlp('the opera about richard nixon visiting china')
r.topics().data()
// [
//   { text: 'richard nixon' },
//   { text: 'china' }
// ]

###Fancy outputs:

r = nlp('Tony Hawk won').out('html')
/*
<span>
  <span class="nl-Person nl-Noun nl-FirstName">Tony</span>
  <span class="nl-Person nl-Noun nl-LastName">Hawk</span>
  <span>&nbsp;</span>
  <span class="nl-Verb nl-PastTense">won</span>
</span>
*/

and yes, ofcourse, there's a lot more stuff.

Join in! we're fun, we're using semver, and moving fast. get involved

      Twitter      
      Slack group      
      Mailing-list      
      Pull-requests      

###Don't forget about:

For the former promise-library, see jnewman/compromise (Thanks Joshua!)

(also don't forget NLTK, GATE, Stanford, and Illinois toolkit ) ❤️️

Codacy Badge

About

Natural language processing in javascript

http://compromise.cool


Languages

Language:JavaScript 99.8%Language:HTML 0.2%