2

我们曾经介绍过用Python的TextBlob模块对文本进行情感分析,node.js同样可以进行自然预言处理。natural模块已经支持词法分析、词干分析、分类、语音、反比文档频数权重评价、WordNet、字符串相似度等处理。

NLP

目前为止,大多数算法还仅限于英文,以后会逐渐增加多语言支持。现在已支持俄语和西班牙语的词干分析。

安装

使用npm安装

npm install natural

词法分析

支持按词切割,按正则表达式切割和按句法树切割:

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

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

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

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

字符串距离

实现了Jaro-Winkler字符串距离,用0到1之间的数字表示匹配程度:

var natural = require('natural');
console.log(natural.JaroWinklerDistance("dixon","dicksonx"))
console.log(natural.JaroWinklerDistance('not', 'same'));

输出:

0.7466666666666666
0

同样支持Levenshtein距离(编辑距离):

var natural = require('natural');
console.log(natural.LevenshteinDistance("ones","onez"));
console.log(natural.LevenshteinDistance('one', 'one'));

输出:

1
0

Levenshtein的三种编辑操作可以修改:

console.log(natural.LevenshteinDistance("ones","onez", {
    insertion_cost: 1,
    deletion_cost: 1,
    substitution_cost: 1
}));

输出:

1

Dice系数:

var natural = require('natural');
console.log(natural.DiceCoefficient('thing', 'thing'));
console.log(natural.DiceCoefficient('not', 'same'));

输出:

1
0

词干分析

目前的实现支持Porter算法。

var natural = require('natural');

返回word

console.log(natural.PorterStemmer.stem("words")); // 分析一个单词的词干

俄语:

console.log(natural.PorterStemmerRu.stem("падший"));

西班牙语:

console.log(natural.PorterStemmerEs.stem("jugaría"));

stem()tokenizeAndStem()加上attach(),是PorterStemmer.stem(token).tokenizeAndStem()的简写形式。

natural.PorterStemmer.attach();
console.log("i am waking up to the sounds of chainsaws".tokenizeAndStem());
console.log("chainsaws".stem());

同样可以用Lancaster算法实现:

natural.LancasterStemmer.attach();
console.log("i am waking up to the sounds of chainsaws".tokenizeAndStem());
console.log("chainsaws".stem());

我想这些例子已经足以说明natural是如何使用的了。其他自然预言处理操作,在natural的GitHub页面上都有详细的用例,可以参考。


weakish
24.6k 声望844 粉丝

a vigorously lazy deadbeat with matured immaturity