LogoDuyệtSr. Data Engineer
HomeAboutPhotosInsightsCV

Footer

Logo

Resources

  • Rust Tiếng Việt
  • /archives
  • /series
  • /tags
  • Status

me@duyet.net

  • About
  • LinkedIn
  • Resume
  • Projects

© 2026 duyet.net | Sr. Data Engineer | 2026-02-27

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ị.

Aug 6, 2017·9 years ago
|Machine Learning|
Data EngineeringNode.jsJavascriptNlpMachine Learning
|Edit|

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, ...

Mar 1, 2018·8 years ago
Read more

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.

Feb 19, 2018·8 years ago
Read more

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.

Aug 11, 2017·9 years ago
Read more

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.

Apr 16, 2017·9 years ago
Read more
On this page
  • Cài đặt
  • Tokenizers
  • String Distance
  • Classifiers
  • N-Grams
  • bigrams
  • trigrams
  • Kết
On this page
  • Cài đặt
  • Tokenizers
  • String Distance
  • Classifiers
  • N-Grams
  • bigrams
  • trigrams
  • Kết