`
leiyongping88
  • 浏览: 76895 次
  • 性别: 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

    总之,mmseg4j 和 IKAnalyzer 都是 Solr 中用于中文全文检索的重要工具,它们各有特点,适用于不同的应用场景。选择哪个分词器取决于项目需求、性能要求以及团队对每个工具的熟悉程度。通过合理的配置和优化,可以...

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

    本文将深入探讨基于Lucene的四种中文分词器:Paoding、IK、Imdict和Mmseg4j,它们都是针对Java开发的高效、开源的中文分词工具。 1. Paoding(庖丁)分词器: Paoding是一款高性能的中文分词器,设计目标是提供...

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

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

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

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

    lucene中文分词器(paoding解牛)

    《Lucene中文分词器——Paoding解牛详解》 在中文信息检索领域,分词是至关重要的一环,它能够将连续的汉字序列切割成具有独立意义的词语,为后续的索引和查询提供基础。Lucene作为Java最著名的全文搜索引擎库,其...

    ikanalyzer中文分词支持lucene7.1.0

    ikanalyzer中文分词支持lucene7.1.0是一个针对Lucene搜索引擎的中文分词扩展,由林良益先生开发,旨在提供高效、精准的中文词汇拆解功能。Lucene是一个开源全文检索库,它提供了索引和搜索文本的强大工具。然而,...

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

    IK Analyzer 3.0 是一个专为 Lucene 设计的开源中文分词器,它基于 Java 开发,提供轻量级且高效的分词功能。自2006年12月发布1.0版以来,IK Analyzer 经历了多次升级,3.0版已演变为独立于 Lucene 的通用分词组件,...

    IKAnalyzer中文分词器V3.2使用

    IKAnalyzer是一款开源的、适用于Java环境的中文分词器,主要用于解决在信息检索、文本挖掘等领域中遇到的中文处理问题。这款分词器的设计目标是提高分词的准确率,并且具有良好的可扩展性,能够方便地与其他Java应用...

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

    在Lucene中,你可以通过创建`Analyzer`实例,然后使用`Document`对象来添加字段,如药品名称和功能主治,这些字段会被分词器处理。 在索引建立完成后,可以使用Lucene提供的搜索API来进行查询。这通常涉及到创建`...

    Lucene中文分词器组件

    2. **配置与初始化**:根据项目需求,配置分词器的参数,如自定义词典、分词模式等,然后在Lucene的Analyzer中实例化该分词器。 3. **索引建立**:在创建索引时,使用配置好的分词器对中文文本进行分词,生成分词后...

    IKAnalyzer中文分词.rar

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

    IKAnalyzer 支持高版本最新Lucene 5.x、6.x、7.x

    IKAnalyzer 是一个开源的、基于Java实现的中文分词器,专为全文检索和搜索引擎提供高效、快速的分词服务。这款工具广泛应用于Lucene、Elasticsearch、Solr等全文检索框架,以提高中文处理的性能。在给定的标题和描述...

    IK Analyzer中文分词器

    **IK Analyzer中文分词器详解** IK Analyzer是一个在IT领域广泛应用的开源项目,它专注于Java平台上的中文分词处理。中文分词是自然语言处理(NLP)中的基础任务,对于信息检索、文本挖掘、机器翻译等领域至关重要...

    IK Analyzer 中文分词器下载

    IK Analyzer 是一个开源的、基于Java实现的中文分词器,专为全文检索或信息提取等任务设计。它由尹力(Wu Li)在2006年发起,最初是为了改善Lucene的中文处理能力。自那时起,IK Analyzer已经发展成为一个广泛使用的...

    IKAnalyzer中文分词器

    ### IKAnalyzer中文分词器V3.1.6:深入解析与使用指南 #### 一、IKAnalyzer3.0概述 IKAnalyzer是一个基于Java语言开发的高性能中文分词工具包,自2006年发布以来,已历经多次迭代升级。起初作为开源项目Lucene的一...

    Lucene中文分词器包

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

    c# 中文分词 LUCENE IKAnalyzer

    标题中的"C# 中文分词 LUCENE IKAnalyzer"是指使用C#语言实现的一个中文分词工具,它基于开源全文检索引擎Lucene,并且采用了IKAnalyzer(智能汉字分词系统)的Java版本进行移植。Lucene是一个强大的、高性能的信息...

    基于ik动态词库分词实现--无需重启服务

    IK Analyzer是一个广泛使用的Java分词器,特别为满足中文处理需求而设计。本篇将深入探讨如何基于IK Analyzer实现动态词库分词,并且在整个过程中无需重启服务,极大地提高了系统的灵活性和效率。 首先,我们需要...

    IKAnalyzer 中文分词 完整java项目demo

    IKAnalyzer非常易用的java分词工具。可以自定义扩展词汇。 这个是一个完整的java项目demo。直接可以用,不用再去google下载了。添加了几个自定义词汇,测试好用。 运行ika.java里的main方法即可

    ikanalyzer分词器

    ikanalyzer分词器是一款在Java环境下广泛使用的中文分词工具,尤其在搜索引擎和文本分析领域中扮演着重要角色。它的核心是ikanalyzer.jar类库,这个库包含了分词算法和其他必要的支持类,使得开发者能够轻松地集成到...

Global site tag (gtag.js) - Google Analytics