natural - NLTK cho Javascript

Note: This post is over 8 years old. The information may be outdated.

"Natural" được ví như nltk cho Node. natural có nhiều chức năng xử lý ngôn ngữ tự nhiên như: Tokenizing, stemming, classification, phonetics, tf-idf, WordNet, string similarity, ...

Nếu bạn là người yêu thích cả NLP và Javascript/Node, thì đây là một thư viện thú vị nên thử qua.

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

Cài đặt

Sử dụng npm để cài package

npm install natural

Mình sẽ ví dụ một số tác vụ xử lý ngôn ngữ tự nhiên mà natural có thể làm được.

Tokenizers

Word, Regexp, and Treebank tokenizers

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

tokenizer = new natural.TreebankWordTokenizer();
console.log(tokenizer.tokenize("my dog hasn't any fleas."));
// [ 'my', 'dog', 'has', 'n\'t', 'any', 'fleas', '.' ]

tokenizer = new natural.RegexpTokenizer({pattern: /\-/});
console.log(tokenizer.tokenize("flea-dog"));
// [ 'flea', 'dog' ]

tokenizer = new natural.WordPunctTokenizer();
console.log(tokenizer.tokenize("my dog hasn't any fleas."));
// [ 'my',  'dog',  'hasn',  '\'',  't',  'any',  'fleas',  '.' ]

String Distance

Natural sử dụng thuật toán Jaro–Winkler, Levenshtein và Dice's co-efficient để tính khoảng cách giữa 2 string.

var natural = require('natural');

// JaroWinklerDistance (0 = not at all, 1 = exact match)
console.log(natural.JaroWinklerDistance("dixon","dicksonx")) // -> 0.7466666666666666
console.log(natural.JaroWinklerDistance('not', 'same')); // -> 0

console.log(natural.LevenshteinDistance("ones","onez")); // -> 1
console.log(natural.LevenshteinDistance('one', 'one')); // -> 0

Classifiers

Để phân lớp văn bản, natural hỗ trợ 2 thuật toán là Naive Bayeslogistic regression. Ví dụ sau sử dụng BayesClassifier.

var natural = require('natural');
var classifier = new natural.BayesClassifier();

Training dữ liệu:

classifier.addDocument('i am long qqqq', 'buy');
classifier.addDocument('buy the q\'s', 'buy');
classifier.addDocument('short gold', 'sell');
classifier.addDocument('sell gold', 'sell');

classifier.train();

Classify một đoạn văn bản mới:

console.log(classifier.classify('i am short silver')); // sell
console.log(classifier.classify('i am long copper')); // buy

N-Grams

var NGrams = natural.NGrams;

bigrams

console.log(NGrams.bigrams('some words here'));
console.log(NGrams.bigrams(['some',  'words',  'here']));

Cả 2 đoạn trên đều cho kết quả [ [ 'some', 'words' ], [ 'words', 'here' ] ]

trigrams

console.log(NGrams.trigrams('some other words here'));
console.log(NGrams.trigrams(['some',  'other', 'words',  'here']));

Cả 2 đoạn trên đều cho kết quả [ [ 'some', 'other', 'words' ], [ 'other', 'words', 'here' ] ]

Kết

natural còn khá nhiều chức năng và thuật toán khác hay cho xử lý ngôn ngữ tự nhiên. Nếu bạn là người yêu thích Javascript và NLP như mình, thay vì Python có NLTK, thì Natural là một sự lựa chọn khá hay và thú vị.