DEV Community

Devashish Datt Mamgain
Devashish Datt Mamgain

Posted on

NLP Libraries for Node.js and JavaScript

In this post, we will talk about the best NLP libraries for Node.js and JavaScript that we have come across. Let’s start right away.

What is Natural Language Processing (NLP)?

Natural language refers to the way humans communicate with each other.

Natural Language Processing (NLP) is broadly defined as the electronic manipulation of natural language, like speech and text, by software.

NLP is important because we want to open up communication between machines and humans in a more natural way. NLP has various use cases such as running a search engine, sentimental analysis, entity-recognition, voice-based apps, chatbots, and personal assistants.

The history of natural language processing (NLP) generally started in the 1950s. Alan Turing published the article “Computing Machinery and Intelligence,” a pioneer seminal paper on artificial intelligence.

Alt Text

The introduction to Turing’s paper

Some of the notably successful NLP systems developed in the 1960s were SHRDLU and ELIZA. Up to the 1980s, most natural language processing systems were based on complex sets of hand-written rules. In the 1980s, the NLP started to pick up after the introduction of machine learning algorithms.

Now, decades later, the world is full of multiple NLP libraries and engines. Let’s look at some of them, especially for the newer languages, such as Node.js and JavaScript.

NLP Libraries for Node.js and JavaScript

Though there are many useful NLP libraries available such as Spacy, NLTK, and CoreNLP. However, most of these libraries are not available in JavaScript. We had a hard time finding some good NLP libraries in JavaScript. After a lot of research and testing, the following are the libraries we found to be useful:

1. NLP.js

Github: https://github.com/axa-group/nlp.js

NLP.js is developed by the AXA group. It is an NLP library for building bots, with entity extraction, sentiment analysis, automatic language identify, and so more, supports 40 languages.

NLP.js is a perfect node.js library for building chatbots. Documentation is very clear, and usage is very easy.

Here is a basic code snippet to help you understand how easy it is to set it up.

const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'] });

// Adds the utterances and intents for the NLP
manager.addDocument('en', 'goodbye for now', 'greetings.bye');
manager.addDocument('en', 'bye bye take care', 'greetings.bye');

// Train also the NLG
manager.addAnswer('en', 'greetings.bye', 'Till next time');
manager.addAnswer('en', 'greetings.bye', 'see you soon!');

// Train and save the model.
(async() => {
    await manager.train();
    manager.save();
    const response = await manager.process('en', 'I should go now');
    console.log(response);
})();

2. Natural

Github: https://github.com/NaturalNode/natural

Natural is another famous NLP library for Node.js. “Natural” is a general natural language facility for Node.js. It currently supports tokenizing, stemming, classification, phonetics, tf-idf, WordNet, string similarity, and some inflections.

var natural = require('natural');
var tokenizer = new natural.WordTokenizer();
console.log(tokenizer.tokenize("your dog has fleas."));
// [ 'your', 'dog', 'has', 'fleas' ]

console.log(natural.HammingDistance("karolin", "kathrin", false));
console.log(natural.HammingDistance("karolin", "kerstin", false));
// If strings differ in length -1 is returned

3. Compromise.cool

Github: https://github.com/spencermountain/compromise/

Compromise.cool is indeed a cool and lightweight library and very easy to use. It can be used to run NLP on your browser.

Please note that Compromise works with the English language only.

let doc = nlp(entireNovel)

doc.if('the #Adjective of times').text()
// "it was the blurst of times??"
if (doc.has('simon says #Verb')) {
  return true
}

4. Wink.js

Github: https://github.com/winkjs/wink-nlp-utils

Wink provides NLP functions for amplifying negations, managing elisions, creating ngrams, stems, phonetic codes to tokens, and more.

// Load wink-nlp-utils
var nlp = require( 'wink-nlp-utils' );

// Extract person's name from a string:
var name = nlp.string.extractPersonsName( 'Dr. Sarah Connor M. Tech., PhD. - AI' );
console.log( name );

// Tokenize a sentence.
var s = 'For details on wink, check out http://winkjs.org/ URL!';
console.log( nlp.string.tokenize( s, true ) );
// -> [ { value: 'For', tag: 'word' },
//      { value: 'details', tag: 'word' },
//      { value: 'on', tag: 'word' },
//      { value: 'wink', tag: 'word' },
//      { value: ',', tag: 'punctuation' },
//      { value: 'check', tag: 'word' },
//      { value: 'out', tag: 'word' },
//      { value: 'http://winkjs.org/', tag: 'url' },
//      { value: 'URL', tag: 'word' },
//      { value: '!', tag: 'punctuation' } ]

Conclusion

Choosing a library depends finally on the use case and the tech stack you are using. If you are looking for an NLP library for building chatbots, then I would recommend NLP.js.

References: https://machinelearningmastery.com/natural-language-processing/

Originally published on https://www.kommunicate.io/blog/nlp-libraries-node-javascript/

Discussion (5)

Collapse
nyxtom profile image
Tom Holloway 🏕

Nice!

Self-plug: I also wrote a NLP library with sentiment analysis for Node.js. A lot of the concepts were used when I helped found a startup in social media analytics. Check it out!

github.com/nyxtom/salient/

Collapse
ender_minyard profile image
ender minyard • Edited on

In your README: It should be noted that most machine learning algorithms would be better suited in environments that can take advantage of many cores, such as in the case of GPU accelerated machine learning.

If you removed all dependencies for your library (or at least minimized the quantity) and bundled it for browser usage, web workers making use of concurrent JavaScript would be able to make this NLP library performant.

Since your focus is Node.js, that may not be practical - just a thought.

Collapse
devashishmamgain profile image
Devashish Datt Mamgain Author

Thanks Tom for sharing. nyxtom looks good

Collapse
bias profile image
Tobias Nickel

I think t building some interesting chatbot does not depend on the number of cores. More CPU can help, but I am sure, often node is fast enough.

Also with shared memory and workers available in node, the situation for more computation gets better.

For multi-core computing, check out piscina. It makes it w piece of cake.

Collapse
sanjayaksaxena profile image
Sanjaya Kumar Saxena

Interesting read. Thanks for including winkjs. Request you to look at winkjs.org/wink-nlp/ and review the same sometime.