作者:eaglet
两年前我开发了一个KTDictSeg 中文分词组件,这个组件推出2年来受到很多朋友的喜爱。不过由于我当初开发KTDictSeg时比较仓促,底子没有打好,而且当时对分词的理解也比较肤浅,所以KTDictSeg组件存在很多问题,我一直想重新开放一个更好的开源分词组件,但一直没有抽出时间。上周我终于下定决心开始做这个事情,经过两周的开发(业余时间),今天终于完成了盘古分词的V1.0版本。盘古分词和KTDictSeg完全不同,几乎所有的算法我全部都推倒重写了,其分词速度大概比KTDictSeg快5倍左右(多线程下快10倍以上),内存占用只有KTDictSeg的一半,分词的准确度方面也比 KTDictSeg 有显著提高,功能也增加了很多。下面我就简单介绍一下盘古分词组件的基本功能,希望能对有这方面需求的朋友有所帮助。
盘古分词 英文名 PanGuSegment
项目 Logo:
项目首页 盘古分词项目首页
开源协议 : Apache License 2.0
商业应用:免费 商业应用授权
下载地址 同项目首页
功能
中文分词功能
- 中文未登录词识别
盘古分词可以对一些不在字典中的未登录词自动识别
- 词频优先
盘古分词可以根据词频来解决分词的歧义问题
- 多元分词
盘古分词提供多重输出解决分词粒度和分词精度权衡的问题
详见 盘古分词版本功能介绍 - 多元分词
- 中文人名识别
盘古分词在中文人名识别上较KTDictSeg取得了较大突破,这里简单演示一下中文人名的识别效果
输入: “张三说的确实在理”
分词结果:张三/说/的/确实/在理/
但是如果输入 “李三买了一张三角桌子”
分词结果:李三/买/了/一张/三角/桌子/
这里可以在第一个句子中盘古分词识别出张三是一个人名,从而按照人名输出了这个词,而第二句中盘古分词识别出其句子中包含的张三并不是一个人名,从而没有按中文人名来输出这个词。
详见 盘古分词-中文人名识别
- 强制一元分词
有的项目需要在输出精确分词结果的同时输出单个汉字,从而保证搜索组件可以按照任意颗粒度来搜索文本。盘古分词提供了这种功能,分词结果中精确分词的权值较高,单个汉字的权值较低,通过权值的设置可以知道搜索组件找到最匹配的结果。
如 “张三说的确实在理”
分词结果: 张(0,1)/张三(0,5)/三说的(1,1)/三(1,1)/说(2,5)/的(3,5)/确(4,1)/确实(4,5)/实(5,1)/在(6,1)/在理(6,5)/理(7,1)/
挎号里面第一个数字表示单词在句子中的位置,第二个数字表示权值,下同
- 繁体中文分词
盘古分词提供了对繁体中文分词的支持。国内很多站内搜索对繁体中文分词支持不是特别好,这其中就包括博客园的找找看。你可以在找找看中输出 "我的選擇",你会发现只找到一条匹配的记录,该匹配记录匹配的是 "我的選擇" 这个整词,但如果你输入"我的 選擇" 这时就能搜到包括"我的" 和 " 選擇" 的所有记录。从这个测试中可以分析博客园的找找看在处理繁体中文时是简单根据空格或者一些符号来分割的,无法分解连续的汉字。
盘古分词可以实现繁体中文的分词
还是输入"我的選擇"
分词结果是: 我/的/選擇/
- 同时输出简体和繁体
这个功能也很有趣,如果你用google 搜 "我的選擇",你会发现它可以同时将简体和繁体的 "我的選擇" 全部搜出来。要实现这个功能,就必须在分词时同时将简繁两种汉字输出。
还是输入"我的選擇"
分词结果是:我(0,5)/的(1,5)/选择(2,1)/選擇(2,5)/
- 中文词性输出
盘古分词可以将以登录词的中文词性输出给用户,以方便用户做进一步处理。
- 全角字符支持
盘古分词可以识别全角的字母和数字
英文分词
- 英文分词
英文单词通常都是靠空格等符号分割,这个比较简单,盘古分词分英文自然也没有什么问题。
- 英文专用词识别
一些英文简写是字母符号混合,或者是字母数字混合,这个分词起来就不能按照空格符号这样分割了,对于字母符号混合的如 U.S.A ,只要将这个词录入到字典中,盘古分词就可以分出整词。对于字母和数字混合的,盘古分词会自动作为整词输出。
- 英文原词输出 (后续版本提供)
- 英文大小写同时输出(后续版本提供)
其他功能
- 停用词过滤
对于一些标点符号,连词,助词等有时候需要在分词时过滤掉,盘古分词提供一个 StopWord.txt 文件,用户只要将需要过滤的词加入到这个文件中,并将停用词过滤开发打开,就可以过滤掉这些词。
- 设置分词权值
盘古分词可以让用户对如下特性设置自定义权值
未登录词权值
最匹配词权值
次匹配词权值
再次匹配词权值
强行输出的单字的权值
数字的权值
英文词汇权值
符号的权值
强制同时输出简繁汉字时,非原来文本的汉字输出权值。
- 字典管理
盘古分词提供一个字典管理工具 DictManage 通过这个工具,你可以增加,修改,和删除字典中的单词
- 动态加载字典
通过字典工具增加,修改,和删除字典中的单词后,保持字典,盘古分词会自动将新的字典文件加载进去,而不需要重新启动。
- 关键词高亮组件
Lucene 提供了一个关键词高亮组件,但这个组件对中文的支持不是特别好,特别是如果还有多元分词的情况,处理的就更不好。盘古分词提供了一个针对中文和英文的关键词高亮组件 PanGu.HighLight ,其对中文的支持要好于Lucene 那个高亮组件。
- 同义词输出(后续版本提供)
- Lucene.net 接口及示例
在PanGu4Lucene 这个包里面有我做的一个盘古+Lucene 的简单新闻搜索Web示例程序,Release 包里面有使用说明。
性能指标
Core Duo 1.8 GHz 下单线程 分词速度为 390K 字符每秒,2线程分词速度为 690K 字符每秒。
其他说明
盘古分词提供的字典包括17万个中文常用单词,但这个字典依然不够完整,如果要分词更准确,需要适当维护一下这个字典。
中文人名的识别能力取决于 ChsSingleName.txt, ChsDoubleName1.txt, ChsDoubleName2.txt 这三个文件,它们分别表示单子人名,双字人名的首字和双字人名的尾字,如果有的人名没有分出来,需要维护这三个文件。
V1.0.0.2 版本演示截图
从这个测试来看,盘古分词在中文人名这块的识别能力还是比较突出的,在未登录词识别方面也有了一定的改进。不过这个分词结果有一处有一点问题。就是一次性交一百元, 正常理解应该是一次性/交/一百/元 但盘古分词分出来是 一次/性交/一百/元 。虽然有点黄,但从语义上看也不是完全说不过去。
来源:https://www.cnblogs.com/mingyongcheng/p/3251734.html