如何在基于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/

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

  1. 【Elasticsearch】Elasticsearch analyzer 中文 分词器

    1.概述 转载: https://blog.csdn.net/tzs_1041218129/article/details/77887767 分词器首先看文章:[Elasticsearch]Elast ...

  2. 基于Lucene的中文文本分词

    王继明,杨国林 (内蒙古工业大学信息工程学院,呼和浩特010051) 摘要:中文文本分词技术是文本挖掘领域的一个重要分支,在中国仍然处于发展阶段.Apache Jakarta的开源工程Lucene是一 ...

  3. 玩转ES,一文教你掌握IK中文分词器

    前言 ES默认的分词器对中文分词并不友好,所以我们一般会安装中文分词插件,以便能更好的支持中文分词检索. 而ES的中文分词器中,最流行的必然是IK分词器. 一.IK分词器介绍 IK分词器在是一款基于词 ...

  4. python统计词频瓦尔登湖_自然语言处理之中文分词器-jieba分词器详解及python实战...

    (转https://blog.csdn.net/gzmfxy/article/details/78994396) 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自 ...

  5. ES7 IK中文分词器

    IK中文分词器的安装 ES默认是没有IK中文分词器的,我们要将IK中文分词器作为一个插件安装到ES中,安装的步骤也很简单: 从GitHub上下载适合自己ES版本的IK中文分词器,地址如下:https: ...

  6. 架构师成长记_第八周_11_ES- ik中文分词器与自定义中文词库

    文章目录 ik中文分词器 1. 安装ik中文分词器(7.4.2版本) 2. 使用ik中文分词器 2.1 分词器: ik_max_word 2.1 分词器: ik_smart 自定义中文词库 自定义词库 ...

  7. python中文分词器-jieba分词器详解及wordcloud词云生成

    jieba分词 jieba分词支持三种分词模式: 精确模式, 试图将句子最精确地切开,适合文本分析 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义 搜索引擎模式,在精确模 ...

  8. 当前几个主要的Lucene中文分词器的比较

    http://blog.fulin.org/2009/08/lucene_chinese_analyzer_compare.html 1. 基本介绍: paoding :Lucene中文分词" ...

  9. Lucene全文检索_分词_复杂搜索_中文分词器

    1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search)  1.1.1 定义 全文检索就是先分词创建索引,再执行搜索的过 ...

最新文章

  1. 服务发现与负载均衡 dubbo zk原理
  2. DNS 学习笔记之6- DNS区域的管理②
  3. 为什么阿里工程师纷纷在内网晒代码?
  4. 新一代 Tor发布, 它牛在哪里
  5. 如何用孩子兄弟表示法存储树c语言,C语言,数据结构,树的孩子兄弟表示法,程序一切正常,但是有个问题不太懂了,园豆不多,帮帮忙,求助一下....
  6. log file switch
  7. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(5)
  8. LoadRunner函数的介绍
  9. Shell学习笔记 - 运算符
  10. easyui 中iframe嵌套页面,提示弹窗遮罩的解决方法,parent.$.messager.alert和parent.$.messager.confirm...
  11. ubuntu14 卸载 mysql_ubuntu14.04完全卸载mysql
  12. 南师大GIS考研数据库2019年第五题
  13. 个人如何获取美团外卖推广链接
  14. Dynamics 365 窗体中设置可编辑的子网格
  15. 切面条/猜字母/大衍数列/奇怪的分式
  16. Unity+Vuforia+Hololens2 AR开发
  17. 如今的微信时代,这份微信公众号代运营方案值得你去看一下
  18. 南京中医药大学计算机考研资料汇总
  19. 关于 UGUI 字体花屏或乱码。
  20. pageHelper简单使用过程

热门文章

  1. “Live城市”作品介绍:
  2. 攒机笔记二十三:触控商务本
  3. 做P2C必须了解的二维码知识
  4. 东方龙马 · 大数据应用让数据“活”起来了
  5. 《设计模式入门》 1.简单工厂模式
  6. python代码转jar包
  7. 《软件需求规格说明书》几点重要内容
  8. 淘宝cp210X提示“VeriFone USB Modem”无法匹配驱动
  9. 快速排序算法C语言实现
  10. 机器智慧能否超越人类?三派专家观点