Web前端之路Web前端之路让前端飞

Nlp_compromise在JavaScript中使用自然语言

2017-04-28  本文已影响118人  掌雄

NLP自然语言处理,涌现了很多技术框架,当中不乏前端JavaScript实现的框架:nlp-compromise.js,本文为大家介绍自然语言处理的基本原理与nlp-compromise.js的调用例子,以及应用场景。

基本原理概述

(1).语料库

语料库中存放的是在语言的实际使用中真实出现过的语言材料,即我们可以自定义自己的语料库,比如把一些相同题材的文章整合在一起形成语料库。

接着要对自定义的语料库进行标注,标注出同义词,反义词,各种词性如名词、动词等。

(2).去掉停用词低信息词与词干提取

定义完语料库后,由于里面包含了很多经常重复出现的低信息词比如the、will等,中文的‘的’,‘了’等,所以要去掉这些词

接着进行词干提取比如英文的response、responsitive等都可以提取词干respon出来

(3).词袋

语料库精简后把各个词单独提取出来,重复的词则不重复提取,提取后放去词袋,词袋是一个列表,可以理解为一个没有重复词的数组容器。

词袋生成后我们可以用词袋来对要解析的句子,生成词频向量:
例如要解析的句子为:
Nice day!
词袋有这么几个词:
nice in day he she night
接着我们统计词频,即句子里面每一个词在词袋里面对应的词里出现过几次,组合成向量:
[1 0 1 0 0 0]

(4).TF-IDF提取关键词

TF是词频指标即为一篇文章中重复出现的词出现次数越多,就越关键,公式为:

IDF是逆向文件频率指标即为该词在众多文档中出现次数越少,越罕见就越能包含于说明发生什么事,越关键,公式为:

两个指标合在一起的公式为:

那么提取一篇文章的关键词方法则为,计算出每个词的TF-IDF值,再从大到小排序,排在前几个就是这篇文章的关键词。

(5).原理小结

原理概述先讲述到这里,还有分词技巧最大匹配法,文章自动摘要、文章相似的匹配、消除歧义与识别未登陆词的规律分类训练,训练方法也有用到循环神经网络的,还有一些应答模型,例如微信图灵就是一个nlp的应答例子,感兴趣的小伙伴可深入研究。

nlp-compromise.js的调用例子

引入官方提供的compromise.min.js
<pre>
<script type="text/javascript" src="compromise.min.js"></script>
</pre>

调用:
<pre>
case 1: // 转数字
r = window.nlp(inputObj.value).values().toNumber();
reStr = r.out('text');
break;
case 2: // 把句子分开
r = window.nlp(inputObj.value).data();
console.log(r);
for(i = 0; i < r.length; i++) {
reStr += i + ' : ' + r[i].text + ' ';
}
break;
case 3: // 统计句子中的人数
r = window.nlp(inputObj.value).people().length;
reStr = r;
break;
case 4: // 转成反义句子
r = window.nlp(inputObj.value).verbs().toNegative().out();
reStr = r;
break;
case 5: // 转换出人名代词
r = window.nlp(inputObj.value).people().pronoun();
reStr = r;
break;
</pre>

例子运行结果页面


例子截图.jpeg

例子完整代码:
https://github.com/zhangxiongwu/nlp-compromise-demo
nlp-compromise-JS官方地址:
https://nlp-expo.firebaseapp.com/
nlp-compromise-JS官方github地址:
https://github.com/nlp-compromise/compromise

nlp-compromise.js的应用场景

我们可以在github的官方工程下载整个源工程,然后在上面填写自己的语料库,再运行生成一个min.js的压缩文件,这个压缩文件不到300k的大小,放到前端运行也可以,以nodejs搭建放到服务器上运行也可以。

具体可以做的东西为训练自定义语料库出分词,获取句子的各词性,可以把句子变积极消极、分词等。

具体应用场景可以为:多维高精的模糊匹配搜索,比如用户在搜索框输入一些模糊的句子,比如句子中包含几个他想要的名词,那么我们可以用这个库做名词的提取,在搜索数据库。又如一些智能客服对话框的问答,提取出用户问题的主干词的意思再回复相应的答案。

您的意见是我改善的东西,欢迎评论提建议,如果对您有帮助,请点个赞,谢谢~~
菲麦前端专题,汇聚前端好文,邀您关注!

上一篇下一篇

猜你喜欢

热点阅读