前言

.Net 下分词组件选择不多,最近看到宝玉发布了改进版本的mmseg分词,正好跟使用已久的盘古分词做个对比。

盘古是用自动机来实现分词 

mmseg的算法相对先进一些 ​

这里只对比盘古默认的配置,因为默认中不打开一元分词已经满足需求,mmseg只对比maxword的配置,目标是多元分词的效率和效果。

效率对比

硬件配置:CPU i7 2.3GHz RAM 4GB

盘古分词

官方效率:Core Duo 1.8 GHz 下单线程 分词速度为 390K 字符每秒,2线程分词速度为 690K 字符每秒。

Lucene分词组件盘古与mmseg4j评测_lucene

 

默认配置单线程:395kw/s,比官方要慢一些因为硬件配置比官方高,但相差不多。

Lucene分词组件盘古与mmseg4j评测_hive_02

默认配置多线程:744.7,也跟官方差不多;

mmseg分词

官方效率(java):

  • 1.5版的分词速度simple算法是 1100kb/s左右、complex算法是 700kb/s左右,(测试机:AMD athlon 64 2800+ 1G内存 xp)。
  • 1.6版在complex基础上实现了最多分词(max-word)。“很好听” -> "很好|好听"; “中华人民共和国” -> "中华|华人|共和|国"; “中国人民银行” -> "中国|人民|银行"。
  • 1.7-beta 版, 目前 complex 1200kb/s左右, simple 1900kb/s左右, 但内存开销了50M左右. 上几个版都是在10M左右.
  • 1.8 后,增加 CutLetterDigitFilter过虑器,切分“字母和数”混在一起的过虑器。比如:mb991ch 切为 "mb 991 ch"。

Lucene分词组件盘古与mmseg4j评测_hive_03

MaxWord方式单线程:比盘古慢很多,可能跟mmseg算法比较复杂有关,每个chunk都要计算四个因子。

Lucene分词组件盘古与mmseg4j评测_hive_04

MaxWord方式多线程:没有提升很多,这也说明了mmseg的瓶颈实在计算上。


作者:KKcat