`
leiyongping88
  • 浏览: 75956 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何在基于Lucene的中文分词器中添加自定义词典(如Paoding、mmseg4j、IK Analyzer)

 
阅读更多

如何在基于Lucene的中文分词器中添加自定义词典(如Paoding、mmseg4j、IK Analyzer)  

2013-07-08 21:54:29|  分类: 计算机 |字号 订阅

 
1. 使用Paoding自定义词典

参考文章:http://blog.csdn.net/zhangt85/article/details/8067743

(1)首先自定义一个XXX.dic的文件,以utf-8保存;

(2)将自定义词添加到dic/division下的XXX.dic中;

(3)删除.compile文件夹

有时候我们自定义词典的时候,发现不起作用,那么我们需要查看分词模式。

庖丁有两种分词模式:

most-words:最大词量分词方式,此模式对应的词典编译类为MostWordsModeDictionariesCompiler

max-word-length:按词在词典中的原序来进行编译,基本不再做其他处理,此模式对应的词典编译类为SortingDictionariesCompiler

most-words是默认的分词模式。为了解决不起作用的问题,我们更改分词模式,步骤如下:

(1)找到你工程中引入的paoding-analysis.jar,将其打开,你会看到这样的一个配置文件paoding-analyzer.properties,打开内容如下:

#PaodingAnlyzer Mode, "most-words", "max-word-length", "class:com.xxx.MyTokenCollectorImpl"...

#paoding.analyzer.mode=most-words

#paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.MostWordsModeDictionariesCompiler

#paoding.analyzer.mode=max-word-length

#paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.SortingDictionariesCompiler

我们需要做的就是去掉最后一行的注释,即去掉#,文件内容变为:

#PaodingAnlyzer Mode, "most-words", "max-word-length", "class:com.xxx.MyTokenCollectorImpl"...

#paoding.analyzer.mode=most-words

#paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.MostWordsModeDictionariesCompiler

#paoding.analyzer.mode=max-word-length

paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.SortingDictionariesCompiler

删掉.compile文件

未添加自定义词典之前,分词效果如下:

普洱|市|孟连|连县|赴|华南|理工|大|大学|进行|产学研|合作|洽谈|

然后我将“普洱市”和“孟连县”加入自定义词典XXX.dic,分词效果如下:

普洱|普洱市|孟连|连县|孟连县|赴|华南|理工|大|大学|理工大学|华南理工大学|进行|产学研|合作|洽谈|

通过上面结果的对比,可以发现,添加的自定义词都分出来了,满足了我的需求,同时发现,Sort模式是在most模式的基础上,在按照字典中的词,再来一遍分词,所以分词的结果数也多很多。

 

2. 使用mmseg4j自定义词典

 

参考文章:http://blog.chenlb.com/2009/04/chinese-segment-mmseg4j-dictionary-format.html#postcomment

在mmseg4j中自定义词典相对简单,目前mmseg4j的词库存放在data目录中,包括 chars.dic、units.dic、words.dic,并且强制使用 UTF-8 编码。

下面一一解说下词库的格式。

1、 chars.dic,是单个字,和对应的频率,一行一对,字在全面,频率在后面,中间用空格分开。这个文件的信息是 complex 模式要用到的。在最后一条过虑规则中使用了频率信息。从 1.5 版后已经把它打包进 jar 里,一般不用关心它。不过可以在词库目录下放一个同名文件覆盖它。

2、 units.dic,是单位的字,如:分、秒、年。这一文件是我在 mmseg4j 1.6 后加入的,也是一行一条。主要是在数字后面的单位信息切分好,不与words.dic中的词有混淆。同时也打包进 jar 里,目前还是试行,如果不喜欢它,可以用空的文件放到词库目录下覆盖它。

3、words.dic,是核心的词库文件,一行一条,不需要其它任何数据(如词长)。1.0 版是用 rmmseg(ruby 的 mmseg 实现) 的词库。1.5版后 mmseg4j 改用 sogou 词库,可以 http://www.sogou.com/labs/dl/w.html 找到下载。然后我把它去了频率等信息,并转为 UTF-8 编码。

4、 wordsXXX.dic,是自定义词库文件(其实是 mmseg4j 可以从多个文件读取词)。这功能是 1.6 版加入的。它的格式与 words.dic 一样,只不过 XXX 部分是如您自己写的名字,如:源码包里的 data/words-my.dic。注意:自定义词库文件名必需是 "words" 为前缀和 ".dic" 为后缀。

mmseg4j 默认从当前目录下的 data 目录读取上面的文件。当然也可以指定别的目录,如:new ComplexAnalyzer("./my_dic")。

所以如果想自己定义词典,直接讲词加到wordsXXX.dic里面即可。如果加了自定义的词,要用 simple 或 complex 分词模式是检验它是否有效。因为目前 max-word 模式分出来的词长不会超过2。

未添加自定义词典之前,分词效果如下:

SimplexAnalyzer分词结果是:普|||||||华南理工大学|进行||||合作|洽谈|

ComplexAnalyzer分词结果是:普|||||||华南理工大学|进行||||合作|洽谈|

MaxWordAnalyzer分词结果是:|||||||华南|理工|大学|进行||||合作|洽谈|

然后我将“普洱市”和“孟连县”加入自定义词典words-my.dic,分词效果如下

SimplexAnalyzer分词效果为:普洱市|孟连县||华南理工大学|进行||||合作|洽谈|

ComplexAnalyzer分词效果为:普洱市|孟连县||华南理工大学|进行||||合作|洽谈|

MaxWordAnalyzer分词效果为:|||||||华南|理工|大学|进行||||合作|洽谈|

 

3. 使用IK Analyzer自定义词典

 

IK Analyzer 可以加载扩展停止词典,也可以自定义词典,配置过程也很简单,将自己定义的词写入到文档中,存储为XXX.dic格式,例如ext.dic,放在与stopword.dic同一个目录下,打开IKAnalyzer.cfg.xml,内容如下:

 

<properties>  

<comment>IK Analyzer 扩展配置</comment>

<!--用户可以在这里配置自己的扩展字典-->

<entry key="ext_dict">ext.dic;</entry>

 

<!--用户可以在这里配置自己的扩展停止词字典-->

<entry key="ext_stopwords">stopword.dic;</entry>

 

</properties>

将自定义词典在配置文件里面写入即可。

未添加自定义词典之前,分词效果如下:
普洱|||连县||华南理工大学|进行|产学研|合作|洽谈|
然后我将“普洱市”和“孟连县”加入自定义词典ext.dic,分词效果如下
普洱市|孟连县||华南理工大学|进行|产学研|合作|洽谈|。
 
另外,需要说明的是 imdict-chinese-analyzer不支持自定义词库,自带了两个字典,coredict核心字典和bigramdict词关系字典,这是两个最重要的字典,没有地名和人名的词典,所以要识别人名地名比较麻烦。
转载:http://lilongbao.blog.163.com/blog/static/2128760512013689194583/
分享到:
评论

相关推荐

    solr 分词器 mmseg4j IKAnalyzer

    solr 分词器 mmseg4j IKAnalyzer

    基于Lucene的中文分词器代码paoding,IK,imdict,mmseg4j

    基于Lucene的中文分词器代码paoding,IK,imdict,mmseg4j。测试可运行,输入一个段落,每个分词器的分词结果不同,可得到结果和所需时间。

    IKAnalyzer中文分词.rar

    IK Analyzer是什么呢,就是我们需要的这个工具,是基于java开发的轻量级的中文分词工具包。它是以开源项目Luence为主体的...如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的分词器:IK-analyzer。

    Lucene中文分词器包

    来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...

    Lucene的IK Analyzer 3.0 中文分词器 全解

    Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器 Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器Lucene IK Analyzer 3.0 Lucene的IK Analyzer 3.0 中文分词器

    IKAnalyzer中文分词器支持Lucene6.0以上

    提示:IKAnalyzer中文分词器支持Lucene6.0以上,IKAnalyzer中文分词器支持Lucene6.0以上。

    Lucene4.7+IK Analyzer中文分词入门教程

    Lucene4.7+IK Analyzer中文分词入门教程

    使用IK Analyzer实现中文分词之Java实现

    IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版... 在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。

    中文分词库 IKAnalyzer For Lucene 5.2.1(适用Lucene 5.2.1)

    此版本是基于IK-Analyzer-2012FF修改而来,专门适用于Lucene 5.2.1。 IK Analyzer 是一个开源的,基于java语言...在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

    lucene中文分词器(paoding解牛)

    lucene搜索引擎中文分词器,版本2.0.4,强大的中文分词效果在其它中文分词器当中独领风骚

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词

    IKAnalyzer中文分词支持lucene6.5.0版本

    由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本

    IKAnalyzer开源轻量级中文分词工具包2012u6

    IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文...

    IKAnalyzer 3.0 中文分词器

    IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer 已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文...

    ikanalyzer中文分词支持lucene7.1.0

    由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本

    IKAnalyzer中文分词器V3.2使用

    IKAnalyzer 中文分词器V3.2使用手册 lucene

    几种分词工具的jar包(IKAnalyzer、hanlp、mmseg4j-analysis)

    几种分词工具都试过,对于中文来说的的话个人觉得IKAnalyzer 最好用,不同版本的IKAnalyzer jar包,包括IKAnalyzer6.5.0、IKAnalyzer5.0、IKAnalyzer2012,IKAnalyzer6.5.0可完美兼容Lucene6+,IKAnalyzer5.0兼容...

    IkAnalyzer分词工具

    IK Analyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12 月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合词典分词和文法分析...

    使用IK Analyzer实现中文分词之Java实现(包含所有工具包)

    1、lucene-core-3.6.0.jar 2、IKAnalyzer2012.jar(主jar包) 3、IKAnalyzer.cfg.xml(分词器扩展配置文件) 4、stopword.dic(停止词典) 5、IkSegmentation.java(样例类)

    lucene中文分词器Jceseg和IK Analyzer使用示例

    lucene中文分词器Jceseg和IK Analyzer使用示例,lucene5可以使用,本人亲测成功,大家放心用,喜欢lucene的人大家关注我的博客 http://blog.csdn.net/wuyinggui10000/article/category/3173543 大家共同交流,有需要...

Global site tag (gtag.js) - Google Analytics