zoukankan      html  css  js  c++  java
  • Lucene分词组件盘古与mmseg4j评测

    前言

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

    盘古是用自动机来实现分词,更详细的分析http://www.cnblogs.com/eaglet/archive/2008/10/02/1303142.html

    mmseg的算法相对先进一些,更详细的解释:http://www.coreseek.cn/opensource/mmseg/

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

    效率对比

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

    盘古分词

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

    盘古默认效率

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

    Screen Shot 2013-06-07 at 上午11.59.13

    默认配置多线程: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"。

    Screen Shot 2013-06-07 at 下午1.46.22

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

    Screen Shot 2013-06-07 at 下午1.54.48

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

    实例分析对比

    实例一

    原文

    【用数据告诉你手游有多热】今天,作为本届GMIC 的一部分,GGS全球移动游戏峰会召开。嘉宾和游戏开发者们探讨了移动游戏的现状与发展趋势。手游则是最为重要的一大关键词。盛大游戏总裁钱东海分享了日本最大手游公司CEO预测的数据:2015年全球游戏产业的格局中80%都是手机游戏。http://t.cn/zTHdkFY

    盘古

    用/数据/告诉/你/手游有多热/今天/作为/本届/GMIC/的/一部分/GGS/全球/移动/游戏/峰会/召开/嘉宾/和/游戏/开发者/们/探讨/了/移动/游戏/的/现状/与/发展趋势/手游则是/最为/重要/的/一/大/关键词/盛大/游戏/总裁/钱/东海/分享/了/日本/最大/手/游/公司/CEO/预测/的/数据/2015/年/全球/游戏/产业/的/格局/中/80/都是/手机/游戏/http/t/cn/zTHdkFY

    mmseg

    用/数据/告诉/你手/游/有多/热/今天/作为/本届/gmic/的/一部/部分/ggs/全球/移动/游戏/峰会/召开/嘉宾/和/游戏/开发/者/们/探讨/了/移动/游戏/的/现状/与/发展/趋势/手/游/则是/最为/重要/要的/一大/关键/词/盛大/游戏/总裁/钱/东海/分享/了/日本/最大/手/游/公司/ceo/预测/的/数据/2015/年/全球/游戏/产业/的/格局/中/80/都是/手机/游戏/http/t/cn/zthdkfy

    评测

    盘古的分词要理想一些,mmseg的“你手”分词不理想;

    实例二

    原文

    前几天看到一篇文章里提到过,在批量插入时,需要加上Context.Configuration.AutoDetectChangesEnabled = false;

    文章原话:EF默认会自动的跟踪数据的变化,当变更的数据量较大的时候,EF的跟踪工作量就会骤增,但指定操作变得非常缓慢(这也是部分同学怀疑EF的性能问题的一个怀疑点),其实,只要在批量操作的时候把自动更新关闭,即可解决缓慢的问题。

    大家自己去看看:http://www.cnblogs.com/guomingfeng/archive/2013/05/28/mvc-ef-repository.html 由于没测试,所以不知道结果是不是变快,快多少

    结果早上发现首页一个测试Entity Framework的文章,http://www.cnblogs.com/newton/archive/2013/06/06/3120497.html 说EF性能不行,正好没加这句,我也好奇,所以自己测试下,写这个文章不是针对作者,只是自己好奇,互相讨论

    盘古

    前几天/看到/一篇/文章/里/提到/过/在/批量/插/入时/需要/加上/Context/Configuration/AutoDetectChangesEnabled/=/false/文章/原话/EF/默认/会/自动/的/跟踪/数据/的/变化/当/变更/的/数据量/较大/的/时候/EF/的/跟踪/工作量/就/会/骤增/但/指定/操作/变得/非常/缓慢/这/也是/部分/同学/怀疑/EF/的/性能/问题/的/一个/怀疑/点/)/其实/只要/在/批量/操作/的/时候/把/自动更新/关闭/即可/解决/缓慢/的/问题/大家/自己/去/看看/http/www/cnblogs/com/guomingfeng/archive/2013/05/28/mvc/ef/repository/html/由于/没/测试/所以/不/知道/结果/是不是/变/快/快/多少/结果/早上/发现/首页/一个/测试/Entity/Framework/的/文章/http/www/cnblogs/com/newton/archive/2013/06/06/3120497./html/说/EF/性能/不行/正好/没加这句/我/也/好奇/所以/自己/测试/下/写/这个/文章/不是/针对/作者/只是/自己/好奇/互相/讨论

    mmseg

    前/几天/看到/一篇/文章/里/提到/过/在/批量/插入/时/需要/加上/context/configuration/autodetectchangesenabled/false/文章/原话/ef/默认/会/自动/的/跟踪/数据/的/变化/当/变更/的/数据/量/较大/的/时候/ef/的/跟踪/工作/量/就会/骤增/但/指定/操作/变得/非常/缓慢/这也/是/部分/同学/怀疑/ef/的/性能/问题/的/一个/怀疑/点/其实/只要/在/批量/操作/的/时候/把/自动/更新/关闭/即可/解决/缓慢/的/问题/大家/自己/去看/看/http/www/cnblogs/com/guomingfeng/archive/2013/05/28/mvc/ef/repository/html/由于/没/测试/所以/不知/知道/结果/果是/不是/变/快/快/多少/结果/早上/发现/首页/一个/测试/entity/framework/的/文章/http/www/cnblogs/com/newton/archive/2013/06/06/3120497/html/说/ef/性能/不行/正好/没/加/这句/我也/好奇/所以/自己/测试/下/写/这个/文章/不是/针对/作者/只是/自己/好奇/互相/讨论

    评测

    mmseg的分词要细一些,对“前几天”和“不知道结果是不是变快很多”的分词都优于盘古。

    总结

    最后的分词评测的用例还是不多,更多的用例可以下载下面的源码后自行测试。分词器上盘古的功能更完整丰富,mmseg更多的是算法上的实现,但是功能匮乏。

    下载

  • 相关阅读:
    JavaScript对原始数据类型的拆装箱操作
    Javascript继承(原始写法,非es6 class)
    动态作用域与词法作用域
    自行车的保养
    探索JS引擎工作原理 (转)
    C语言提高 (7) 第七天 回调函数 预处理函数DEBUG 动态链接库
    C语言提高 (6) 第六天 文件(续) 链表的操作
    C语言提高 (5) 第五天 结构体,结构体对齐 文件
    C语言提高 (4) 第四天 数组与数组作为参数时的数组指针
    C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
  • 原文地址:https://www.cnblogs.com/jinzhao/p/3123530.html
Copyright © 2011-2022 走看看