使用 Node.js 对文本内容分词和关键词抽取


Posted in Javascript onMay 27, 2017

在讨论技术前先卖个萌,吃货的世界你不懂~~

使用 Node.js 对文本内容分词和关键词抽取

众成翻译的文章有 tag,用户可以基于 tag 来快速筛选感兴趣的文章,文章也可以依照 tag 关联来进行相关推荐。但是现在众成翻译的 tag 是在推荐文章的时候设置的,都是英文的,而且人工设置难免不规范和不完全。虽然发布文章后也可以人工编辑,但是我们也不能指望用户或管理员能够时时刻刻编辑出恰当的 tag,所以我们需要用工具来自动生成 tag。

在现在开源的分词工具里面,jieba是一个功能强大性能优越的分词组件,更幸运地是,它有 node 版本。

nodejieba 的安装和使用十分简单:

npm install nodejieba
var nodejieba = require("nodejieba");
var result = nodejieba.cut("帝国主义要把我们的地瓜分掉");
console.log(result);
//[ '帝国主义', '要', '把', '我们', '的', '地', '瓜分', '掉' ]
result = nodejieba.cut('土地,俺老孙的金箍棒在哪里?');
console.log(result);
//[ '土地', ',', '俺', '老', '孙', '的', '金箍棒', '在', '哪里', '?' ]
result = nodejieba.cut('大圣,您的金箍棒就棒在特别配您的头型!');
console.log(result); 
//[ '大圣',',','您','的','金箍棒','就','棒','在','特别','配','您','的','头型','!' ]

我们可以载入自己的字典,在字典里给每个词分别设置权重和词性:

编辑 user.uft8
地瓜 9999 n
金箍 9999 n
棒就棒在 9999
然后通过 nodejieba.load 加载字典。

var nodejieba = require("nodejieba");
nodejieba.load({
 userDict: './user.utf8',
});
var result = nodejieba.cut("帝国主义要把我们的地瓜分掉");
console.log(result);
//[ '帝国主义', '要', '把', '我们', '的', '地瓜', '分', '掉' ]
result = nodejieba.cut('土地,俺老孙的金箍棒在哪里?');
console.log(result);
//[ '土地', ',', '俺', '老', '孙', '的', '金箍棒', '在', '哪里', '?' ]
result = nodejieba.cut('大圣,您的金箍棒就棒在特别配您的头型!');
console.log(result); 
//[ '大圣', ',', '您', '的', '金箍', '棒就棒在', '特别', '配', '您', '的', '头型', '!' ]

除了分词以外,我们可以利用 nodejieba 提取关键词:

const content = `

HTTP、HTTP/2与性能优化

本文的目的是通过比较告诉大家,为什么应该从HTTP迁移到HTTPS,以及为什么应该添加到HTTP/2的支持。在比较HTTP和HTTP/2之前,先看看什么是HTTP。

什么是HTTP

HTTP是在万维网上通信的一组规则。HTTP属于应用层协议,跑在TCP/IP层之上。用户通过浏览器请求网页时,HTTP负责处理请求并在Web服务器与客户端之间建立连接。

有了HTTP/2,不使用雪碧图、压缩、拼接,也可以提升性能。然而,这不代表不应该使用这些技术。不过这已经清楚表明了我们从HTTP/1.1移动到HTTP/2的必要性。
`;

const nodejieba = require("nodejieba");
const result = nodejieba.extract(content, 20);
console.log(result);

输出的结果类似下面这样:

[ { word: 'HTTP', weight: 140.8704516850025 },
 { word: '请求', weight: 14.23018001394 },
 { word: '应该', weight: 14.052171126120001 },
 { word: '万维网', weight: 12.2912397395 },
 { word: 'TCP', weight: 11.739204307083542 },
 { word: '1.1', weight: 11.739204307083542 },
 { word: 'Web', weight: 11.739204307083542 },
 { word: '雪碧图', weight: 11.739204307083542 },
 { word: 'HTTPS', weight: 11.739204307083542 },
 { word: 'IP', weight: 11.739204307083542 },
 { word: '应用层', weight: 11.2616203224 },
 { word: '客户端', weight: 11.1926274509 },
 { word: '浏览器', weight: 10.8561552143 },
 { word: '拼接', weight: 9.85762638414 },
 { word: '比较', weight: 9.5435285574 },
 { word: '网页', weight: 9.53122979951 },
 { word: '服务器', weight: 9.41204128224 },
 { word: '使用', weight: 9.03259988558 },
 { word: '必要性', weight: 8.81927328699 },
 { word: '添加', weight: 8.0484751722 } ]

我们添加一些新的关键词到字典里:

性能
HTTP/2

输出结果如下:

[ { word: 'HTTP', weight: 105.65283876375187 },
 { word: 'HTTP/2', weight: 58.69602153541771 },
 { word: '请求', weight: 14.23018001394 },
 { word: '应该', weight: 14.052171126120001 },
 { word: '性能', weight: 12.61259281884 },
 { word: '万维网', weight: 12.2912397395 },
 { word: 'IP', weight: 11.739204307083542 },
 { word: 'HTTPS', weight: 11.739204307083542 },
 { word: '1.1', weight: 11.739204307083542 },
 { word: 'TCP', weight: 11.739204307083542 },
 { word: 'Web', weight: 11.739204307083542 },
 { word: '雪碧图', weight: 11.739204307083542 },
 { word: '应用层', weight: 11.2616203224 },
 { word: '客户端', weight: 11.1926274509 },
 { word: '浏览器', weight: 10.8561552143 },
 { word: '拼接', weight: 9.85762638414 },
 { word: '比较', weight: 9.5435285574 },
 { word: '网页', weight: 9.53122979951 },
 { word: '服务器', weight: 9.41204128224 },
 { word: '使用', weight: 9.03259988558 } ]

在这个基础上,我们采用白名单的方式过滤出一些可以作为 tag 的词:

const content = `

HTTP、HTTP/2与性能优化

本文的目的是通过比较告诉大家,为什么应该从HTTP迁移到HTTPS,以及为什么应该添加到HTTP/2的支持。在比较HTTP和HTTP/2之前,先看看什么是HTTP。

什么是HTTP

HTTP是在万维网上通信的一组规则。HTTP属于应用层协议,跑在TCP/IP层之上。用户通过浏览器请求网页时,HTTP负责处理请求并在Web服务器与客户端之间建立连接。

有了HTTP/2,不使用雪碧图、压缩、拼接,也可以提升性能。然而,这不代表不应该使用这些技术。不过这已经清楚表明了我们从HTTP/1.1移动到HTTP/2的必要性。
`;

const nodejieba = require("nodejieba");
nodejieba.load({
 userDict: './user.utf8',
});
const result = nodejieba.extract(content, 20);
const tagList = ['HTTPS', 'HTTP', 'HTTP/2', 'Web', '浏览器', '性能'];
console.log(result.filter(item => tagList.indexOf(item.word) >= 0));

最后得到:

[ { word: 'HTTP', weight: 105.65283876375187 },
 { word: 'HTTP/2', weight: 58.69602153541771 },
 { word: '性能', weight: 12.61259281884 },
 { word: 'HTTPS', weight: 11.739204307083542 },
 { word: 'Web', weight: 11.739204307083542 },
 { word: '浏览器', weight: 10.8561552143 } ]

这就是我们想要的结果。

以上就是分词库 nodejieba 基本的使用方法,在将来我们可以利用它对众成翻译发布的译文自动分析添加相应的 tag,以为各位译者和读者提供更好的用户体验。

以上所述是小编给大家介绍的使用 Node.js 对文本内容分词和关键词抽取,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
JavaScript实现基于十进制的四舍五入实例
Jul 17 Javascript
jQuery实现Tab菜单滚动切换的方法
Sep 21 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 Javascript
JS实现淡入淡出图片效果的方法分析
Dec 20 Javascript
JQuery判断正整数整理小结
Aug 21 jQuery
关于Ajax的原理以及代码封装详解
Sep 08 Javascript
js实现简单模态框实例
Nov 16 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 Javascript
vue子组件使用自定义事件向父组件传递数据
May 27 #Javascript
javascript回调函数的概念理解与用法分析
May 27 #Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 #Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 #Javascript
详细讲解vue2+vuex+axios
May 27 #Javascript
AngularJS获取json数据的方法详解
May 27 #Javascript
vue中用H5实现文件上传的方法实例代码
May 27 #Javascript
You might like
与文件上传有关的php配置参数总结
2013/06/14 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
python获取url的返回信息方法
2018/12/17 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
Python函数调用追踪实现代码
2020/11/27 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
项目建议书怎么写
2014/05/15 职场文书
检讨书范文500字
2015/01/28 职场文书
财务会计岗位职责
2015/02/03 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Python开发简易五子棋小游戏
2022/05/02 Python