Tiny中文分词

Maven引用坐标:
1
2
3
4
5
<dependency>
<groupId>org.tinygroup</groupId>
<artifactId>chinese</artifactId>
<version>0.0.12</version>
</dependency>



Tiny中文分词是本人一开始做的一个验证性开发,结果开发出来效果还非常不错,因此就加入到Tiny框架中。
Tiny中文分词支持下面的功能:
1.中文分词
2.中文转化拼音
3.词性标注
中文分词,就是把中文句子分解成一个一个的词组,实现起来比较容易,但是实现到最快最好就非常难了。
Tiny中的中文分词从以下特性:
1.词库自由扩充-也就是说使用者可以方便的增加新的词库,词库的扩展会带来分词的准确性
2.词库具有丰富属性:包含同义词、反义词、拼音、词性、词组权重,同义词与反义词可以便于进行后续处理。拼音用于正确的转换为拼音,词性用于标注,词级权重用于提高分词准确性。
看一个实际测试:
下面是一个语料库中的文章:

1
2
3
4
5
6
7
8
19980131-03-008-001/m『/w回家/v的/u感觉/n真/d好/a』/w
19980131-03-008-002/m本报/r驻/v日本/ns记者/n于/nr青/nr
19980131-03-008-003/m欢聚/v使馆/n喜迎/v新春/t,/w留/v日/j学子/n年年/q如此/r。/w1月/t23日/t,/w近/a300/m名/q中国/ns留学人员/n前来/v出席/v[中国/ns驻/v日/j大使馆/n]nt举办/v的/u春节/t招待会/n,/w兴高采烈/i地/u送/v“/w牛/n”/w迎/v“/w虎/n”/w。/w使馆/n临时代办/n武/nr大伟/nr向/p大家/r拜年/v,/w教育/vn参赞/n曲/nr德林/nr向/p大家/r慰问/v祝酒/v,/w使馆/n大厅/n响起/v阵阵/q掌声/n,/w充满/v欢声笑语/l。/w
19980131-03-008-004/m辞旧迎新/l之际/f,/w是/v抚今追昔/i之/u时/Ng。/w回首/v牛年/t令/v人/n心潮难平/l,/w难忘/v庆祝/v香港/ns回归/v的/u不眠之夜/l、/w[中共/j十五大/j]nz举世瞩目/i。/w有人/r说/v起/v,/w去年/t是/v毛/nr/n接见/v留/v苏/j学生/n并/c发表/v“/w希望/v寄托/v在/p你们/r身上/s”/w著名/a演说/vn40/m周年/q,/w对/p海外/s学子/n来说/u是/v值得/v纪念/v的/u一/m年/q;/w又/c有人/r说/v起/v,/w去年/t是/v中/j日/j邦交/n正常化/vn25/m周年/q,/w对/p留/v日/j学子/n来说/u又/d多/a了/u一/m分/q喜庆/v的/u一/m年/q;/w还/d有人/r说/v起/v,/w去年/t是/v祖国/n农业/n大/d丰收/v的/u一/m年/q,/w蔬菜/n水果/n物美价廉/l。/w
19980131-03-008-005/m辞旧迎新/l之际/f,/w也/d是/v展望/v未来/t之/u时/Ng。/w大家/r你一言我一语/l议论/v着/u:/w今年/t是/v中/j日/j和平/a友好/a条约/n缔结/v20/m周年/q,/w江/nr泽民/nr/n年内/t将/d来/v日/j访问/v,/w这/r是/v中国/ns国家/n元首/n首/m次/q访问/v日本/ns,/w衷心/d希望/v中/j日/j关系/n稳定/a健康/a不断/d发展/v;/w今年/t是/v中国/ns实行/v改革/v开放/vn政策/n20/m周年/q,/w国家/n继续/v贯彻/v“/w支持/v留学/v,/w鼓励/v回国/v,/w来去/v自由/a”/w的/u方针/n,/w海外/s学子/n应该/v为/p“/w科教兴国/l”/w刻苦/ad学习/v,/w多/ad做/v实事/n,/w贡献/v力量/n。/w
19980131-03-008-006/m海外/s学子/n聚会/v也/d是/v交流/v信息/n的/u机会/n。/w那位/r刚/d从/p国内/s回来/v的/u学生/n说/v,/w现在/t国内/s收视率/n最高/a的/u是/v电视/n连续剧/n《/w水浒传/nz》/w,/w最/d流行/v的/u歌词/n是/v“/w路/n见/v不/d平/a一/m声/q吼/v,/w该/v出手/v时/Ng就/d出手/v”/w;/w还/d听说/v,/w一/m位/q搞/v摄影/v的/u在/p台湾/ns举行/v的/u作品展/n圆满/ad成功/a,/w另/r一/m位/q搞/v摄影/v的/u将/d在/p维也纳/ns举办/v作品展/n;/w这/r位/q从/p使馆/n教育处/n获悉/v,/w去年/t从/p日本/ns回国/v的/u留学人员/n总计/v1623/m人/n,/w其中/r博士生/n266/m人/n,/w硕士生/n224/m人/n;/w另/r一/m位/q说/v,/w一些/m在/p日/j就职/v的/u中国/ns留学人员/n正在/d酝酿/v成立/v社会/n团体/n,/w制订/v为/p国/n服务/vn规划/n。/w
19980131-03-008-007/m海外/s学子/n聚会/v也/d是/v抒发/v思乡/v爱国/a情怀/n的/u时候/n。/w他们/r唱歌/v时/Ng都/d是/v那么/r投入/a,/w那么/r动情/v。/w《/w草原/n之/u夜/Tg》/w、/w《/w长江/ns之/u歌/n》/w、/w《/w在/p希望/v的/u田野/n上/f》/w让/v人/n怀念/v故乡/n;/w《/w达坂城/ns的/u姑娘/n》/w、/w《/w拉/v骆驼/n的/u黑/a小伙/n》/w、/w《/w父老乡亲/l》/w令/v人/n思念/v家人/n;/w《/w我/r和/c我/r的/u祖国/n》/w、/w《/w我/r爱/v你/r中国/ns》/w使/v人/n爱国/a之/u情/n在/p胸中/s激荡/v。/w
19980131-03-008-008/m“/w到/v使馆/n就/d是/v到/v家/n了/y”/w,/w看/v着/u餐桌/n上/f的/u春卷/n、/w麻团/n、/w水饺/n……/w“/w回家/v的/u感觉/n真/d好/a!/w”/w一/m位/q留学生/n自言自语/i地/u说道/v。/w(/w本报/r东京/ns1月/t26日/t电/n)/w



为了进行分词测试,我做了个程序把其中的所有中文字取了出来:

1
回家的感觉真好本报驻日本记者于青欢聚使馆喜迎新春留日学子年年如此月日近名中国留学人员前来出席中国驻日大使馆举办的春节招待会兴高采烈地送牛迎虎使馆临时代办武大伟向大家拜年教育参赞曲德林向大家慰问祝酒使馆大厅响起阵阵掌声充满欢声笑语辞旧迎新之际是抚今追昔之时回首牛年令人心潮难平难忘庆祝香港回归的不眠之夜中共十五大举世瞩目有人说起去年是接见留苏学生并发表希望寄托在你们身上著名演说周年对海外学子来说是值得纪念的一年又有人说起去年是中日邦交正常化周年对留日学子来说又多了一分喜庆的一年还有人说起去年是祖国农业大丰收的一年蔬菜水果物美价廉辞旧迎新之际也是展望未来之时大家你一言我一语议论着今年是中日和平友好条约缔结周年年内将来日访问这是中国国家元首首次访问日本衷心希望中日关系稳定健康不断发展今年是中国实行改革开放政策周年国家继续贯彻支持留学鼓励回国来去自由的方针海外学子应该为科教兴国刻苦学习多做实事贡献力量海外学子聚会也是交流信息的机会那位刚从国内回来的学生说现在国内收视率最高的是电视连续剧水浒传最流行的歌词是路见不平一声吼该出手时就出手还听说一位搞摄影的在台湾举行的作品展圆满成功另一位搞摄影的将在维也纳举办作品展这位从使馆教育处获悉去年从日本回国的留学人员总计人其中博士生人硕士生人另一位说一些在日就职的中国留学人员正在酝酿成立社会团体制订为国服务规划海外学子聚会也是抒发思乡爱国情怀的时候他们唱歌时都是那么投入那么动情草原之夜长江之歌在希望的田野上让人怀念故乡达坂城的姑娘拉骆驼的黑小伙父老乡亲令人思念家人我和我的祖国我爱你中国使人爱国之情在胸中激荡到使馆就是到家了看着餐桌上的春卷麻团水饺回家的感觉真好一位留学生自言自语地说道本报东京月日电



接下来就是看看原来的分词,去掉数字和英文之后是怎么分的:

1
回家 的 感觉 真 好 本报 驻 日本 记者 于 青 欢聚 使馆 喜迎 新春 留 日 学子 年年 如此 月 日 近 名 中国 留学人员 前来 出席 中国 驻 日 大使馆 举办 的 春节 招待会 兴高采烈 地 送 牛 迎 虎 使馆 临时代办 武 大伟 向 大家 拜年 教育 参赞 曲 德林 向 大家 慰问 祝酒 使馆 大厅 响起 阵阵 掌声 充满 欢声笑语 辞旧迎新 之际 是 抚今追昔 之 时 回首 牛年 令 人 心潮难平 难忘 庆祝 香港 回归 的 不眠之夜 中共 十五大 举世瞩目 有人 说 起 去年 是 毛 接见 留 苏 学生 并 发表 希望 寄托 在 你们 身上 著名 演说 周年 对 海外 学子 来说 是 值得 纪念 的 一 年 又 有人 说 起 去年 是 中 日 邦交 正常化 周年 对 留 日 学子 来说 又 多 了 一 分 喜庆 的 一 年 还 有人 说 起 去年 是 祖国 农业 大 丰收 的 一 年 蔬菜 水果 物美价廉 辞旧迎新 之际 也 是 展望 未来 之 时 大家 你一言我一语 议论 着 今年 是 中 日 和平 友好 条约 缔结 周年 江 泽民 年内 将 来 日 访问 这 是 中国 国家 元首 首 次 访问 日本 衷心 希望 中 日 关系 稳定 健康 不断 发展 今年 是 中国 实行 改革 开放 政策 周年 国家 继续 贯彻 支持 留学 鼓励 回国 来去 自由 的 方针 海外 学子 应该 为 科教兴国 刻苦 学习 多 做 实事 贡献 力量 海外 学子 聚会 也 是 交流 信息 的 机会 那位 刚 从 国内 回来 的 学生 说 现在 国内 收视率 最高 的 是 电视 连续剧 水浒传 最 流行 的 歌词 是 路 见 不 平 一 声 吼 该 出手 时 就 出手 还 听说 一 位 搞 摄影 的 在 台湾 举行 的 作品展 圆满 成功 另 一 位 搞 摄影 的 将 在 维也纳 举办 作品展 这 位 从 使馆 教育处 获悉 去年 从 日本 回国 的 留学人员 总计 人 其中 博士生 人 硕士生 人 另 一 位 说 一些 在 日 就职 的 中国 留学人员 正在 酝酿 成立 社会 团体 制订 为 国 服务 规划 海外 学子 聚会 也 是 抒发 思乡 爱国 情怀 的 时候 他们 唱歌 时 都 是 那么 投入 那么 动情 草原 之 夜 长江 之 歌 在 希望 的 田野 上 让 人 怀念 故乡 达坂城 的 姑娘 拉 骆驼 的 黑 小伙 父老乡亲 令 人 思念 家人 我 和 我 的 祖国 我 爱 你 中国 使 人 爱国 之 情 在 胸中 激荡 到 使馆 就 是 到 家 了 看 着 餐桌 上 的 春卷 麻团 水饺 回家 的 感觉 真 好 一 位 留学生 自言自语 地 说道 本报 东京 月 日 电



我们用原来的分词结果,建立词库后,进行分词试验:
下面是源代码:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
AbstractTestUtil.init(null, true);
ChineseParser chineseParser = SpringUtil.getBean(ChineseParser.CHINESE_PARSER_BEAN_NAME);
List<Token> list = new ArrayList<Token>();
chineseParser.segmentWordMax("回家的感觉真好本报驻日本记者于青欢聚使馆喜迎新春留日学子年年如此月日近名中国留学人员前来出席中国驻日大使馆举办的春节招待会兴高采烈地送牛迎虎使馆临时代办武大伟向大家拜年教育参赞曲德林向大家慰问祝酒使馆大厅响起阵阵掌声充满欢声笑语辞旧迎新之际是抚今追昔之时回首牛年令人心潮难平难忘庆祝香港回归的不眠之夜中共十五大举世瞩目有人说起去年是接见留苏学生并发表希望寄托在你们身上著名演说周年对海外学子来说是值得纪念的一年又有人说起去年是中日邦交正常化周年对留日学子来说又多了一分喜庆的一年还有人说起去年是祖国农业大丰收的一年蔬菜水果物美价廉辞旧迎新之际也是展望未来之时大家你一言我一语议论着今年是中日和平友好条约缔结周年年内将来日访问这是中国国家元首首次访问日本衷心希望中日关系稳定健康不断发展今年是中国实行改革开放政策周年国家继续贯彻支持留学鼓励回国来去自由的方针海外学子应该为科教兴国刻苦学习多做实事贡献力量海外学子聚会也是交流信息的机会那位刚从国内回来的学生说现在国内收视率最高的是电视连续剧水浒传最流行的歌词是路见不平一声吼该出手时就出手还听说一位搞摄影的在台湾举行的作品展圆满成功另一位搞摄影的将在维也纳举办作品展这位从使馆教育处获悉去年从日本回国的留学人员总计人其中博士生人硕士生人另一位说一些在日就职的中国留学人员正在酝酿成立社会团体制订为国服务规划海外学子聚会也是抒发思乡爱国情怀的时候他们唱歌时都是那么投入那么动情草原之夜长江之歌在希望的田野上让人怀念故乡达坂城的姑娘拉骆驼的黑小伙父老乡亲令人思念家人我和我的祖国我爱你中国使人爱国之情在胸中激荡到使馆就是到家了看着餐桌上的春卷麻团水饺回家的感觉真好一位留学生自言自语地说道本报东京月日电", list);
for (Token token : list) {
System.out.printf("%s ", token.getText());
}
}



运行结果:

1
2
3
4
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Seehttp://logging.apache.org/log4j/1.2/faq.html#noconfigfor more info.
回家 的 感觉 真 好 本报 驻 日本 记者 于 青 欢聚 使馆 喜迎 新春 留 日 学子 年年 如此 月 日 近 名 中国 留学人员 前来 出席 中国 驻 日 大使馆 举办 的 春节 招待会 兴高采烈 地 送 牛 迎 虎 使馆 临时代办 武 大伟 向 大家 拜年 教育 参赞 曲 德林 向 大家 慰问 祝酒 使馆 大厅 响起 阵阵 掌声 充满 欢声笑语 辞旧迎新 之际 是 抚今追昔 之 时 回首 牛年 令 人心 潮 难 平 难忘 庆祝 香港 回归 的 不眠之夜 中共 十五大 举世瞩目 有人 说 起 去年 是 毛 接见 留 苏 学生 并发 表 希望 寄托 在 你们 身上 著名 演说 周年 对 海外 学子 来说 是 值得 纪念 的 一 年 又 有人 说 起 去年 是 中 日 邦交 正常化 周年 对 留 日 学子 来说 又 多 了 一 分 喜庆 的 一 年 还有 人 说 起 去年 是 祖国 农业 大 丰收 的 一 年 蔬菜 水果 物美价廉 辞旧迎新 之际 也 是 展望 未来 之 时 大家 你一言我一语 议论 着 今年 是 中 日 和平 友好 条约 缔结 周年 江 泽民 年内 将来 日 访问 这 是 中国 国家 元首 首 次 访问 日本 衷心 希望 中 日 关系 稳定 健康 不断 发展 今年 是 中国 实行 改革 开放 政策 周年 国家 继续 贯彻 支持 留学 鼓励 回国 来去 自由 的 方针 海外 学子 应该 为 科教兴国 刻苦 学习 多 做 实事 贡献 力量 海外 学子 聚会 也 是 交流 信息 的 机会 那位 刚 从 国内 回来 的 学生 说 现在 国内 收视率 最高 的 是 电视 连续剧 水浒传 最 流行 的 歌词 是 路 见 不平 一 声 吼 该 出手 时 就 出手 还 听说 一 位 搞 摄影 的 在 台湾 举行 的 作品展 圆满 成功 另 一 位 搞 摄影 的 将 在 维也纳 举办 作品展 这 位 从 使馆 教育处 获悉 去年 从 日本 回国 的 留学人员 总计 人 其中 博士生 人 硕士生 人 另 一 位 说 一些 在 日 就职 的 中国 留学人员 正在 酝酿 成立 社会 团体 制订 为 国 服务 规划 海外 学子 聚会 也 是 抒发 思乡 爱国 情怀 的 时候 他们 唱歌 时 都 是 那么 投入 那么 动情 草原 之 夜 长江 之 歌 在 希望 的 田野 上 让 人 怀念 故乡 达坂城 的 姑娘 拉 骆驼 的 黑 小伙 父老乡亲 令 人 思念 家人 我 和 我 的 祖国 我 爱 你 中国 使 人 爱国 之 情 在 胸中 激荡 到 使馆 就是 到 家 了 看 着 餐桌 上 的 春卷 麻团 水饺 回家 的 感觉 真 好 一 位 留学生 自言自语 地 说道 本报 东京 月 日 电
Process finished with exit code 0



可以看到确实已经进行正确分词。
Tiny框架中的分词算法效率之高是相当杰出的,因为它将健忘过程中的字符的比较次数进行了非常大的优化(不敢说优化到极致呵呵),所以其分词效率非常之高,而且随着词库的大小增加越多,与许多同类产品的差距拉得越大。因为没有与所有的分词算法进行比较,因此不敢说是最快的,但是说是相当快应该没有啥问题。
接下来深入了解一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public interface ChineseParser {

String CHINESE_PARSER_BEAN_NAME = "chineseParser";

/**
* 对内容进行分词,最大优先,此方法由于用了统计,因此效率较低
*
* @param content
* @return 分的词及个数的键值对
*/
void segmentWordMax(String content, Map<Token, Integer> result);

/**
* 对内容进行分词,最小优先,此方法由于用了统计,因此效率较低
*
* @param content
* @param result
* 分的词及个数的键值对
*/
void segmentWordMin(String content, Map<Token, Integer> result);

/**
* 对内容进行分词,最大优先
*
* @param content
* @param result
*/
void segmentWordMax(String content, List<Token> result);

/**
* 对内容进行分词,最小优先
*
* @param content
* @param result
*/
void segmentWordMin(String content, List<Token> result);

/**
* 设置找词时的事件
*
* @param event
*/

void setFoundEvent(FoundEvent event);

/**
* 加载词库
*
* @param inputStream
* @param encode
*/
void loadDict(InputStream inputStream, String encode);
}



接口比较简单,提供了若干种的分词实现,其中最大最小分词算法是指碰到最大词时优先选择最大词;最小分词算法是指碰到一个词就优先选取。
比如词库有下列词组:
中华人民共和国
中华
人民
共和国
如果采用最大分词时,"中华人民共和国"只被分解成“中华人民共和国”一个词,而如果采用最小分词,则会分成“中华”、“人民”、“共和国”三个词,相对来说,最大分词效率要低一点,但是准确性一般更高。
比如:建立“中华人民共和国”和“中国”为同义词,则在最大分词算法时搜索“中国”和“中华人民共和国”的时候是可以命中的,但是分别搜索“中华”、“人民”、“共和国”的时候,则是不可命中的。

比如:建立“中华人民共和国”和“中国”为同义词,则在最小分词算法时搜索“中国”是不可以命中的,但是分别搜索“中华”、“人民”、“共和国”、“中华人民共和国”的时候,则是可以命中的。
通过上述的分析,最大分词的准确性明显是要高一些的。
Tiny的分词算法,还采用了预搜索和词频比较的方式来进行分词,因此分词准确性会更高。
比如,词库中有下面的词组:
帽子
服装
和服
要分词的内容是:帽子和服装
那么一般的分词软件会分成:“帽子”、“和服”、“装”
而Tiny中的分词由于有词频参数,如果服装的词频高于和服的词频,则分解出来就是:“帽子”、“和”、“服装”,如果“和服”的词频>=“服装”的词频,那么出来的结果就是:“帽子”、“和服”、“装”。
也就是说词库的质量决定了分词的准确性。
小结:
Tiny的分词算法是可效的、词库可扩展的、支持中文转化拼音、支持词频调整的分词算法,值得使用。
支持多种场景识别--即不同的场景加载不同的词库,以提升分词准确性。
当然它也不是那么完美,比如:没有人名、地名识别。没有语义相关的优化。
最近准备对这一块进行加强,也欢迎童鞋们提出改进意义和提出新的需求。

你可能感兴趣的:(中文分词)