Node.js从入门到精通 natural模块进行自然语言处理浅析
沉沙 2018-06-13 来源 : 阅读 1296 评论 0

摘要:用Python的TextBlob模块可以对文本进行情感分析,Node.js同样可以进行自然预言处理。natural模块已经支持词法分析、词干分析、分类、语音、反比文档频数权重评价、WordNet、字符串相似度等处理。希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

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

 Node.js从入门到精通       natural模块进行自然语言处理浅析

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

安装

使用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.74666666666666660

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

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

输出:

10

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'));

输出:

10

词干分析

目前的实现支持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());


本文由职坐标整理发布,更多相关知识,请关注职坐标WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程