natural 用 node.js 进行自然语言处理

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

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

image.png

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


安装

使用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页面上都有详细的用例,可以参考。

相关文章
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
4629 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
自然语言处理 机器人 机器学习/深度学习
带你读《实用Bot开发指南:基于Node.js与Bot框架设计并构建聊天机器人》之二:聊天机器人与自然语言理解
本书讲述机器人设计和实现背后的基本概念。每一章都建立在前面的主题之上,并且在适当的地方显示了实现这些概念的实际工作代码。通过选择一个代码编辑器,你可以开始体验创建智能、迷人和有用的机器人。本书将教你如何在Facebook Messenger和Slack等平台上创建自己的机器人,整合扩展API,并在云中应用人工智能和机器学习算法。在本书的最后,你将会有足够的信息通过你创建的机器人来接触成千上万的新用户。
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
571 2
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
432 1
JavaScript中的原型 保姆级文章一文搞懂
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
330 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
701 5
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的家政平台附带文章源码部署视频讲解等
544 4
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
904 4
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
714 4
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
506 4