`
chenlb
  • 浏览: 696460 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

中文分词 mmseg4j

阅读更多
使用 paoding 的配置觉得有点复杂,而且管理词库也有点不方便,同时自己也想了解下中文分词算法,然后就想自己写个中文分词器,在lucene和solr中使用。在 javaeye 看到有关 mmseg 的简介,看了下还不错,简单方便,那就用它来写个java版吧,我搜索 mmseg的java版(好像是 solo,官方已经下载不了),弄清分词算法还是自己写写吧。

实在想不到其它名字,就称它为 mmseg4j。关于 mmseg的算法我先不在这介绍,
可以参考:
  1. mmseg
  2. libmmseg
  3. rmmseg


mmseg4j 也实现了两种分词方式:Simple和Complex。

mmseg4j 扩展 lucene的analyzer,叫MMSegAnalyzer默认使用Complex方式,也可以用SimpleAnalyzer(Simple方式)。

来看下分词效果。

引用
M:\mmseg4j\build>java -Dmmseg.dic.path=../data -jar mmseg4j-1.0.jar 羽毛球拍,研究生命起源,国际化,眼看就要来了,为首要考虑
2009-3-22 22:29:45 com.chenlb.mmseg4j.Dictionary
信息: look up in mmseg.dic.path=../data
2009-3-22 22:29:45 com.chenlb.mmseg4j.Dictionary init
信息: chars loaded time=297ms, line=12638, on file=..\data\chars.dic
2009-3-22 22:29:46 com.chenlb.mmseg4j.Dictionary init
信息: words loaded time=485ms, line=120330, on file=..\data\words.dic
2009-3-22 22:29:46 com.chenlb.mmseg4j.Dictionary init
信息: sort time=125ms
2009-3-22 22:29:46 com.chenlb.mmseg4j.Dictionary init
信息: load dic use time=937ms

羽毛 | 球拍 | 研究 | 生命 | 起源 | 国际化 | 眼看 | 就要 | 来 | 了 | 为首 | 要 | 考虑 |


mmseg4j还扩展了solr的TokenizerFactory可以在Solr中方便的使用。可以指定词库的目录(paoding 到现在我还没搞懂怎么指定词库,在solr中使用,只能放到solr.war中)。mmseg4j在solr中使用的示例:
1、把mmseg4j-1.0.jar 放到solr.home/lib目录下(solr1.3支持)。
2、schema.xml定义field type
	<fieldType name="textComplex" class="solr.TextField" >
      <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" dicPath="dic"/>
      </analyzer>
    </fieldType>
	<fieldType name="textSimple" class="solr.TextField" >
      <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" 
			dicPath="n:/OpenSource/apache-solr-1.3.0/example/solr/my_dic"/>
      </analyzer>
    </fieldType>

3、打开http://localhost:8080/solr/admin/analysis.jsp 察看分词效果。

MMSegTokenizerFactory 支持两个参数,mode=simple(默认是complex),dicPath可以用词库目录绝对路径或相对路径(相对路径是是相对solr.home目录)。可以为每个不同的MMSegTokenizerFactory指定不同的目录(一般应用中没有必要,一般用相同的目录,默认是CWD的data目录下找词库)。

词库,由于mmseg算法的特性要两个文件,我指定用chars.dic、words.dic,基本上chars.dic不需要改动,words.dic可以添加自己的词。现在用的是rmmseg的词库,当然你也可以用sogou的词库(下个版本准备用它)。

现在把 mmseg4j 发在 http://code.google.com/p/mmseg4j/ 上。可以下载 mmseg4j-1.0.jar

发现有 bug,联系我 chenlb2008#gmail.com。
分享到:
评论
37 楼 cm_baije 2013-07-19  
那个加载词词库的方法怎么用啊?
36 楼 chenlb 2009-04-15  
哦, 那个是我本机上测的, 没打包到 jar 里。

呵呵
35 楼 mikeandmore 2009-04-15  
chenlb 写道
mikeandmore 写道
chenlb 写道
mikeandmore 写道
囧,为什么出来的结果都是乱码啊。。。。。。


正确编码的Reader应该没有乱码问题。

因为Linux是unicode(utf-8)的,不是国标,(GB2312)



词库,我强制使用 utf-8 编码。

reader 层里没有编码的概念了

是你的Performance.java里面hardcode的。。嘿嘿
34 楼 chenlb 2009-04-15  
mikeandmore 写道
chenlb 写道
mikeandmore 写道
囧,为什么出来的结果都是乱码啊。。。。。。


正确编码的Reader应该没有乱码问题。

因为Linux是unicode(utf-8)的,不是国标,(GB2312)



词库,我强制使用 utf-8 编码。

reader 层里没有编码的概念了
33 楼 mikeandmore 2009-04-15  
chenlb 写道
mikeandmore 写道
囧,为什么出来的结果都是乱码啊。。。。。。


正确编码的Reader应该没有乱码问题。

因为Linux是unicode(utf-8)的,不是国标,(GB2312)
32 楼 mikeandmore 2009-04-15  
5.57s user
0.28s system
99% cpu
5.871 total

user是用户态的时间。
system是内核态的时间。
31 楼 chenlb 2009-04-15  
mikeandmore 写道
囧,为什么出来的结果都是乱码啊。。。。。。


正确编码的Reader应该没有乱码问题。
30 楼 chenlb 2009-04-15  
楼上的结果, 8.68s 是总时间? user 0.30s 是什么意思,词库加载时间?
29 楼 mikeandmore 2009-04-15  
===========================MMSEG4J=============================
mikeandmore% time java -cp build/mmseg4j-1.7-beta.jar:. Performance /mnt/source/workspace/segc > /dev/null 2>/dev/null
java -cp build/mmseg4j-1.7-beta.jar:. Performance /mnt/source/workspace/segc   8.68s user 0.30s system 100% cpu 8.912 total

=============================SEGC==============================
C Version:
mikeandmore% time ./test > /dev/null 2>/dev/null
./test > /dev/null 2> /dev/null  5.57s user 0.28s system 99% cpu 5.871 total

Python Version:
mikeandmore% time python test_per.py >/dev/null 2>/dev/null
python test_per.py > /dev/null 2> /dev/null  17.32s user 0.26s system 99% cpu 17.593 total
28 楼 mikeandmore 2009-04-15  
囧,为什么出来的结果都是乱码啊。。。。。。
27 楼 mikeandmore 2009-04-14  
chenlb 写道
mikeandmore 写道

刚才改成了StringIO。Python拷贝词结果能到1.16M/s。竟然能和以前一样。。。


1.7 beta 版的可能能与你的pk, 我机子上 complex 是 1200kb/s左右

啊,我明天测试一下。。。  
26 楼 chenlb 2009-04-12  
mikeandmore 写道

刚才改成了StringIO。Python拷贝词结果能到1.16M/s。竟然能和以前一样。。。


1.7 beta 版的可能能与你的pk, 我机子上 complex 是 1200kb/s左右
25 楼 chenlb 2009-04-07  
mikeandmore 写道
或许是搜狗词库?
我用的就是mmseg-cpp那个词库的。。。


词库基本没影响, 可能是还有不必要的数组复制.
24 楼 mikeandmore 2009-04-07  
刚才改成了StringIO。
Python拷贝词结果能到1.16M/s。竟然能和以前一样。。。
23 楼 mikeandmore 2009-04-07  
或许是搜狗词库?
我用的就是mmseg-cpp那个词库的。。。
22 楼 mikeandmore 2009-04-07  

python的太慢了。。。没办法,我的核心库只负责计算下一个分词词的长度,Python的[:]来substring实在开销太大了。。。现在正在把以前的换成StringIO。。。然后再测试看看,以前比较土,不知道有StringIO这东西。。。T_T

C的和以前差不多。。。2.36M/s
我的测试环境P4 3.06G, 1.5GDDR2, debian Linux2.6.26

21 楼 chenlb 2009-04-07  
mikeandmore 写道
chenlb 写道
mikeandmore 写道
呃。。。忘了说了。。。
性能。。我这个项目的目的是性能的。。。


1.5版的分词速度simple算法是 1100kb/s左右、complex算法是 700kb/s左右,(测试机:AMD athlon 64 2800+ 1G内存 xp)。

simple > paoding(900Kb/s左右) > complex > ik & mik > je

后续的版本努力提升性能....

C版本,2.6M/s
python版本惨不忍睹。。。。。T_T
但是如果不对结果进行字符串拷贝的话。
python wrapper是1.16M/s

都是complex算法


如果对结果拷贝, 是多少? 你机器怎么样?

我测试的都是分出词的, 近10M的几篇小说进行,5次测试的平均值.
20 楼 mikeandmore 2009-04-07  
chenlb 写道
mikeandmore 写道
呃。。。忘了说了。。。
性能。。我这个项目的目的是性能的。。。


1.5版的分词速度simple算法是 1100kb/s左右、complex算法是 700kb/s左右,(测试机:AMD athlon 64 2800+ 1G内存 xp)。

simple > paoding(900Kb/s左右) > complex > ik & mik > je

后续的版本努力提升性能....

C版本,2.6M/s
python版本惨不忍睹。。。。。T_T
但是如果不对结果进行字符串拷贝的话。
python wrapper是1.16M/s

都是complex算法
19 楼 chenlb 2009-04-07  
mikeandmore 写道
呃。。。忘了说了。。。
性能。。我这个项目的目的是性能的。。。


1.5版的分词速度simple算法是 1100kb/s左右、complex算法是 700kb/s左右,(测试机:AMD athlon 64 2800+ 1G内存 xp)。

simple > paoding(900Kb/s左右) > complex > ik & mik > je

后续的版本努力提升性能....
18 楼 mikeandmore 2009-04-07  
chenlb 写道
mikeandmore 写道
赞...
话说可以考虑跟我的segc PK试试看...哈哈...

http://github.com/mikeandmore/segc/tree/master


PK 那方面?

呃。。。忘了说了。。。
性能。。我这个项目的目的是性能的。。。

相关推荐

    中文分词mmseg4j

    中文分词 solr 支持solr 4.7

    兼容solr4.10.3的mmseg4j-1.9.1分词器

    mmseg4j是一款广泛使用的Java实现的中文分词库,它提供了高效且精准的中文分词功能。而“兼容solr4.10.3”意味着这个分词器已经过测试,可以无缝集成到Solr 4.10.3的搜索引擎环境中,用于提高中文文本处理的性能。 ...

    word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估

    本话题将深入探讨四种常用的Java分词工具:word分词器、ansj分词器、mmseg4j分词器以及ik-analyzer,以及它们在实际应用中的效果评估。 首先,ansj分词器是由李弄潮开发的一款开源分词工具,它具有强大的词典支持和...

    mmseg4j-solr-2.4.0.jar

    首先,mmseg4j是由李智勇开发的一个基于Java的中文分词工具,它的全称是“Minimum Match Segmentation for Java”。mmseg4j采用了最小匹配算法,能有效地进行中文词汇的切分,具有较高的分词准确率。该库的特点包括...

    mmseg4j1.9.1.zip 中文分词器

    **中文分词器mmseg4j详解** 在自然语言处理(NLP)领域,中文分词是基础且关键的一环。中文不同于英文,其词汇之间没有明显的边界,因此需要通过分词来识别句子中的词语。`mmseg4j`便是一款专为Java平台设计的高效...

    solr中文分词包mmseg4j-core-1.10.0.jar和mmseg4j-solr-2.3.0.jar

    mmseg4j-solr-2.3.0-with-mmseg4j-core是Solr的中文分词包,该压缩包含有mmseg4j-core-1.10.0.jar和mmseg4j-solr-2.3.0.jar。

    mmseg4j分词器jar包

    **mmseg4j分词器** 是一个专为Java平台设计的中文分词库,它在中文信息处理领域中扮演着重要的角色。该库的主要功能是将连续的汉字序列分割成具有语义意义的词语,这是自然语言处理(NLP)中的基础任务,对搜索引擎...

    solr mmseg4j 中文分词器

    mmseg4j-solr-2.3.0.jar 支持 solr5.x 版本以上 分词器本身并未做升级还是mmseg4j-core-1.10.0 和 mmseg4j-analysis-1.9.1.jar为了方便也一并上传

    mmseg4j-1.9.1 分词器 包含修复bug的mmseg4j-analysis-1.9.1.jar

    mmseg4j-1.9.1是一个强大的中文分词工具,它的1.9.1版本修复了已知问题,提高了整体性能。对于任何需要处理中文文本的Java应用,特别是对分词精度和效率有要求的项目,mmseg4j都是一个值得信赖的选择。升级到修复bug...

    mmseg4j-solr-mmseg4j-solr-2.2.0.zip

    mmseg4j是Java实现的中文分词库,它支持多种分词模式,包括最短路径分词、最长匹配分词以及全模式分词等,可以根据实际需求选择合适的模式。 当mmseg4j与Solr结合时,mmseg4j-solr便成为了一个强大的中文处理插件。...

    mmseg4j 2.3 源码

    Lucene中文分词 mmseg4j 2.3 源码

    mmseg4j-solr-2.1.0-with-mmseg4j-core.zip

    后者则是mmseg4j为Solr定制的插件,它使得Solr能够无缝集成mmseg4j的分词功能,为Solr的索引和查询提供强大的中文处理能力。 为了在Solr4.8中使用mmseg4j,我们需要进行以下步骤: 1. 解压下载的"mmseg4j-solr-...

    mmseg4j.jar

    《mmseg4j在中文分词中的应用与详解》 mmseg4j是Java实现的中文分词库,广泛应用于搜索引擎、文本分析等领域。在Java社区中,它因其高效、灵活的特点而备受青睐。本篇文章将围绕mmseg4j的核心组件、功能特性以及在...

    mmseg4j\mmseg4j-1.8.5.zip

    《mmseg4j:中文分词利器》 mmseg4j是一个专为Java设计的高效中文分词库,它的核心是基于"最小编辑距离"算法的分词方法,旨在提高中文文本处理的效率和准确性。在Java开发环境中,面对海量中文文本的处理,mmseg4j...

    mmseg4j 2.3 jar包

    mmseg4j采用了多级分词策略,主要包括四种分词模式:精确模式、全模式、简模式和搜索引擎模式。这些模式可根据实际应用场景灵活选择,以平衡分词速度和准确性。 **3. Lucene集成** Lucene是Apache开源项目的一款高...

    mmseg4j-1.9.1

    《mmseg4j-1.9.1:中文分词技术的卓越实践》 在中文信息处理领域,分词是至关重要的第一步,它涉及到搜索引擎、文本挖掘、机器翻译等多个应用场景。mmseg4j是一个专门为Java设计的高效中文分词工具,它的出现极大地...

    solr6配置mmseg4j

    在Solr6中配置mmseg4j是为了实现中文分词,从而提升搜索效果。mmseg4j是基于Java的一个高性能中文分词库,它提供了多种分词算法,如最长匹配、最短路径等,以满足不同的分词需求。 首先,我们需要理解Solr6的基本...

    mmseg4j-all-with-dic-1.8.6-sources.jar和mmseg4j-all-with-dic-1.8.6.jar

    《mmseg4j在Lucene中文分词中的应用与实现》 在中文信息处理领域,分词是至关重要的一步,它决定了后续文本分析的准确性和效率。mmseg4j是Java环境下广泛使用的中文分词库,尤其在搜索引擎构建和文本挖掘中发挥着...

    mmseg4j分词

    mmseg4j是一款针对Java平台的高效中文分词工具,因其准确性和高性能而在许多项目中得到广泛应用。 mmseg4j的设计灵感来源于MaxEnt Segmentation(最大熵分词)算法,这是一种基于统计模型的分词方法,它通过学习...

    MMseg4j中文分词词库

    《MMseg4j中文分词词库:深入理解与应用》 在中文信息处理领域,分词是文本分析的基础步骤,它将连续的汉字序列分割成具有语义的词汇单元。MMseg4j是一个广泛应用于Java环境中的中文分词工具,它以其高效、灵活和...

Global site tag (gtag.js) - Google Analytics