natural - NLTK cho Javascript
Note: This post is over 9 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 Bayes và logistic 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ị.
Related Posts
Propel - Machine learning for Javascript
Propel cung cấp cơ chế GPU-backed giống như thư viện Numpy trên Python, propel có thể cung cấp 1 kiến trúc rất mạnh cho các thuật toán Machine learning trên Javascript, như hỗ trợ tính toán rất mạnh và nhanh, như các tính toán trên ma trận, list, plot, ...
Duckling - phân tích văn bản sang dữ liệu có cấu trúc
Duckling là một thư viện của Haskell, phát triển bởi Facebook, rất hay để phân tích (parses) dữ liệu text sang dạng có cấu trúc (structured data). Công cụ này rất hữu ích trong các ứng dụng phân tích văn bản trong NLP và nhất là lĩnh vực chatbot.
Phân lớp văn bản
Trong Machine Learning và NLP, phân lớp văn bản là một bài toán xử lí văn bản cổ điển, gán các nhãn phân loại lên một văn bản mới dựa trên mức độ tương tự của văn bản đó so với các văn bản đã được gán nhãn trong tập huấn luyện.
NLP - Truyện Kiều Word2vec
Khám phá Word2vec qua "Truyện Kiều" của Nguyễn Du. Hướng dẫn chi tiết về word embeddings, cách xử lý tiếng Việt với n-grams, và sử dụng Gensim Python để training mô hình. Bài viết giải thích về distributed representation, PCA visualization, và những phát hiện thú vị về mối quan hệ ngữ nghĩa giữa các từ trong kinh điển văn học Việt Nam.
