Python 和 Golang 中 Jieba 中文分词库的准确性对比

在 Python 和 Golang 中,都有一个中文分词库 Jieba , 是由一个作者发布的,本文尝试对比两种语言中这个库的准确度或者准确性。

 

准备

使用分词库 Jieba 对长文本进行词频分析,大致流程如下:

从文件读取文本-->进行中文分词-->过滤掉utf-8编码时长度为1的词语,过滤掉不需要的词语,合并同义词(比如在《红楼梦》中,贾母和老太太是严格的同义词,宝玉和二爷是严格的同义词,凤姐和王熙凤是严格的同义词)-->生成词频字典-->把字典按照元素的值(也就是词语出现的频度)进行DESC排序-->输出指定数量(也就是若干个)出现次数比较多的词语。

具体的样本获取的话,可以在网络上搜索 "红楼梦 txt" , 找个合适的地方,下载来,然后用 NotePad++ 把它格式调整为 UTF-8 无DOM 头。

Python

使用 pip3 安装 jieba

然后写一个分析红楼梦中人物出现次数的脚本:

注意文件的相对位置,由于是测试,所以没有添加异常处理。

Python 得出的相应结果如下(人物以及对应的出现次数,不是人物的词语,请肉眼忽略)

 

Golang

确定电脑上安装了 Golang,获取 Golang 版本的 Jieba 中文分词包

然后准备 Golang 相应的分析脚本

注意文件的相对位置,由于是测试,所以没有添加异常处理。

近似的结果是(人物以及对应的出现次数,不是人物的词语,请肉眼忽略)

 

准确性对比

nlp jieba for golang and python

 

上面截图左侧是 Golang 使用 Jieba 对红楼梦中词语频度的分析,右侧是 Python 中的相应结果。

从截图中可以发现:

  1. Golang 中的 Jieba 的分词能力更强;
  2. Golang 中的 Jieba 和 Python 中的 Jieba 相比,发现的几乎每一个词都要更多;

为了验证 Golang 中 Jieba 的准确性,我使用没有“合并”可能的没有歧义的“平儿”这个词,在文本文件中查找和替换,结果为:

NLP Jieba for Golang and Python

实际结果是我下载的这个红楼梦文本里,平儿这个词出现了683次, 和 Golang 中 Jieba 的分词结果一致。由此看来, Python 中的 Jieba 分词的结果是不准确的。

结论

在性能上, Python的执行效率从理论和实际上都是远低于 Golang 的, Jieba 库的作者在其博客中有相应的分析( Golang 使用 Jieba 进行中文分词的要比 Python 进行相应操作快 9 倍左右)。

 

在准确度上, Golang 中的 Jieba 库在进行中文分词时,更加准确。

同一个作者基于 Cpp 做的一个中文分词库,为什么在不同语言上准确度会有如此大的差异呢? 这个就不去分析了。

还有什么理由不用 Golang 呢?

 


error: 错误信息!