Galaxy's World 银河雪尘

[结巴]中文分词 与[令完成已经完成令计划的计划]

源起是这则推文:

把“令完成已经完成令计划的计划”这个新闻标题分词之后发到群里的结果

令完成已经完成令计划的计划

微博链接当然被和谐了,但咱对jieba的出现有些好奇,就g了下,然后 发现 结巴分词 有一堆语言版本……

最初的应该是Python版本,fxsjy/jieba 的 结巴中文分词。 同时搜到的还有 PHP版,fukuball/jieba-php 的 目前翻譯版本為 jieba-0.19 版本。 然后就是 R语言版,qinwf/jiebaR 的 jiebaR 中文分词

最后,网上说有C/C++的,于是咱再搜,终于找到了,是Yanyi Wu写的。 包括yanyiwu/cppjieba, yanyiwu/cjieba。 以及清爽头文件库的 yanyiwu/libcppjieba, yanyiwu/nodejieba

然后,有个“结巴”中文分词系列性能评测

性能测试

测试机器是同一台机器,低配MacBookAir。

测试过程也是一样:

先按行读取文本围城到一个数组里,然后循环对围城每行文字作为一个句子进行分词。因为只对围城这本书分词一遍太快了,容易误差。 所以循环对围城这本书分词50次。基本上每次分词耗时都很稳定。 分词算法都是采用【精确模式】

####【耗时数据平均值如下,从低到高排序。】

  • C++版本 CppJieba 7.6 s
  • Node.js版本 NodeJieba 10.2 s
  • go语言版本 Jiebago 67.4 s
  • Python版本 Jieba 89.6 s

注明:以上耗时都是计算分词过程的耗时,不包括词典载入的耗时。

测试的源码分别如下:

  • CppJieba Performance Test 基于 CppJieba 版本 v3.0.0
  • NodeJieba Performance Test 基于 NodeJieba 版本 v1.0.3
  • Jiebago Performance Test 基于 Jiebago 版本 v0.3.2
  • Jieba Performance Test 基于 Jieba 版本 v0.32

这些时间数据本身没什么意义,因为在不同机器上跑出来的都不一样。 但是他们之间的对比是有意义的。

拿最低的基准数据 CppJieba 的耗时 7.6s 作为参照物。那么其他程序的耗时分别是:

  • NodeJieba = 1.34 * CppJieba
  • Jiebago = 8.86 * CppJieba
  • Jieba = 11.79 * CppJieba

###【结果分析】

  • CppJieba 性能最高这个符合我的预期,因为自己在它的开发过程也一直在考虑性能方面。
  • NodeJieba 是 CppJieba 包装而来的,所以我觉得在两倍之内都是正常的。
  • Jiebago 这么高的耗时就完全不正常了,毕竟是go语言写的,简单翻阅过源码,可优化空间还是很大的。
  • Jieba 耗时确实比较多,应该也有不小的优化空间,但是我想说的是,性能不是唯一标准,简单易用也很重要,Jieba依然最优秀的国产开源软件之一。

额,就酱啦。 懒得开个repo去整理加mirror。理论上这种没有政治问题的软件不会被自主规制才对。而且fork的人也不少,咱就不fork了。
其实是咱现在用不上,的说。

No comments

You today

Comments are closed