3大Node.js中文分词模块对比
最近有个需求,需要对文章自动设置关键词。关键词根据标题来获取,那么就需要一个效果比较好的中文分词模块。我在网上找到了3个效果还可以的node.js模块,并测试了它们的分词效果。
三大Node.js中文分词模块是什么
三大Node.js中文分词模块效果对比测试
我从网易的热门新闻中取了3个标题,进行效果测试。
测试代码如下:
/**
* node-segment 实例
*/
// 载入模块
var Segment = require('segment');
// 创建实例
var segment = new Segment();
// 使用默认的识别模块及字典,载入字典文件需要1秒,仅初始化时执行一次即可
segment.useDefault();
segment.loadStopwordDict('stopword.txt');
/**
* nodejieba
*/
var nodejieba = require("nodejieba");
nodejieba.load({
dict: nodejieba.DEFAULT_DICT,
hmmDict: nodejieba.DEFAULT_HMM_DICT,
idfDict: nodejieba.DEFAULT_IDF_DICT,
stopWordDict: nodejieba.DEFAULT_STOP_WORD_DICT
});
/**
* node-analyzer
*/
var Segmenter = require('node-analyzer');
var segmenter = new Segmenter();
// 原始词组
var text = [
'非洲富二代娶中国媳妇 送女方父亲劳斯莱斯.',
'美女开猛禽车位不够大 物业: 你买俩车位呗',
'这些都是重量级选手, 广州车展全新SUV盘点'
];
for (var i = 0, len = text.length; i < len; i++) {
var curTxt = text[i];
console.log('【node-segment】 的分词结果为:\n' + segment.doSegment(curTxt, {
simple: true,
stripStopword: true
}));
var jieba = nodejieba.extract(curTxt, 5);
var newJieba = [];
for (var j = 0, jlen = jieba.length; j < jlen; j++) {
var tempJieba = jieba[j] || {};
if (tempJieba.word) {
newJieba.push(tempJieba.word);
}
if (newJieba.length === jlen) {
console.log('【nodejieba】 的分词结果为:\n' + newJieba.join(','));
}
}
console.log('【node-analyzer】 的分词结果为:\n' + segmenter.analyze(curTxt) + '\n');
}
三大Node.js中文分词模块测试结果
- 第一句
【node-segment】 的分词结果为:
非洲,富,二代,娶,中国,媳妇,送,女,方,父亲,劳斯莱斯
【nodejieba】 的分词结果为:
劳斯莱斯,女方,二代,媳妇,非洲
【node-analyzer】 的分词结果为:
非洲 富 二代 娶 中国 媳妇 送 女方 父亲 劳斯莱斯 .
- 第二句
【node-segment】 的分词结果为:
美女,开,猛禽,车位,不够,大,物业,买,俩,车位
【nodejieba】 的分词结果为:
车位,猛禽,美女,物业,不够
【node-analyzer】 的分词结果为:
美女 开 猛禽 车位 不够 大 物业 : 你 买 俩 车位 呗
- 第三句
【node-segment】 的分词结果为:
都是,重量,级,选手,广州,车展,全新,SUV,盘点
【nodejieba】 的分词结果为:
SUV,盘点,重量级,选手,车展
【node-analyzer】 的分词结果为:
这些 都是 重量级 选手 , 广州 车展 全新 SUV 盘点
3大Node.js中文分词效果总结
总的来说:nodejieba效果最好;node-segment和node-analyzer效果差不多,差强人意。