论坛首页 Java企业应用论坛

Totoro中文分词第二版上线啦

浏览 11497 次
精华帖 (5) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-12   最后修改:2012-08-12
经过不懈的努力.耗费了毕生经历.终于把分词写完了.

事后觉得太过复杂的东西真的不是好玩的..可控性太差了.

推翻恢复.重写.优化经历了一晚上.终于得道了一个还算满意的答案.

呵呵废话不多说了..老规矩.我先介绍下这一版分词.

自己想了好多.参考了好多.主要参考了ictclas.在这里特别感谢 @小李飞刀 对我的无私帮助.

首先你必须明白
1.他是用java写的.
2.他可以整合到lucene
3.他是完全开源的.包括字典创建程序和字典.
4.他还在成长.
5.他还不是完美的

他实现了什么
1.分词(废话)
2.词性标注
3.做了数字和英文的简单分词
4.停用词词典的自定义

1.分词的数据结构.依旧是我最喜欢和最悲催的
  1,1双数组tire树.
       这种结构的最大有点就是快.速度接近极限.但是最大的缺点.也是不可忽视的.词典构造复杂.不容易动态增加删除词语.当然可以用用户自定义词典用来解决这些问题.
  1.2tire树结构.(不解释)
  1.3 图论中的最短路径(不解释)


2.分词的算法
   2.1 经典贝叶斯(里面的公式是参考ictclas的.包括所有的概率统计,ict是开源的应该能直接抄吧呵呵.如果谁有大规模标记好的预料如果愿意可以分享.我有想法做一个自己的统计)
   2.2 Viterbi 算法.求最优路径的一个不错算法.一般和Dijkstra 一起是用
   3.2 其他无

3.设计模式
   3.1 去死.(怎么舒服.怎么好读怎么写)

4.准确率
   4.1 呵呵.废话不多说了我把我收集的所有的歧义句
分词结果如下
词典加载完成用时:1044毫秒
加载关联词典完成用时:3545
词典加载完成用时:876毫秒
加载关联词典完成用时:3491
[他/n, 说/vn, 的/ng, 确实/ad, 在理/a]
[长春/ns, 市长/n, 春节/t, 讲话/vn]
[结婚/vn, 的/ng, 和/cc, 尚未/d, 结婚/vn, 的/ng]
[结合/vn, 成/m, 分子/n, 时/nr1]
[旅游/vn, 和/cc, 服务/vn, 是/vshi, 最/ng, 好/ad, 的/d]
[邓/nr1, 颖/nr1, 超生/vn, 前/h, 最/ng, 喜欢/vn, 的/ng, 一个/mq, 东西/n]
[中国/nz, 航天/n, 官员/n, 应邀/vd, 到/vn, 美国/ns, 与/y, 太空/s, 总署/n, 官员/n, 开会/vn]
[上海/nz, 大学/n, 城/n, 书店/n]
[北京/n, 大/a, 学生/n, 前来/vd, 应聘/vn]
[中外/b, 科学/ad, 名著/n]
[为/y, 人民/n, 服务/vn]
[独立自主/vl, 和/cc, 平等互利/vl, 的/ng, 原则/n]
[为/y, 人民/n, 办/vn, 公益/n]
[这/rzv, 事/n, 的/ng, 确定/vn, 不/a, 下来/vf]
[费/vn, 孝/ng, 通向/p, 人大/n, 常委会/n, 提交/v, 书面/n, 报告/n]
[aaa/en, 分/vn, 事/n, 实/ng, 上/ng, 发货/vn, 丨/null, 和/cc, 无/c, 哦/o, 喝/vn, 完/vn, 酒/n]
[不好意思/ad, 清清爽爽/z]
[长春市/ns, 春节/t, 讲话/vn]
[中华人民共和国/nsf, 万岁/n, 万岁/n, 万/nr1, 万岁/n]
[检察院/n, 鲍/nr1, 绍/nr1, 检察长/n]
[长春市/ns, 长春/ns, 药店/n]
[乒乓球拍/n, 卖/vn, 完/vn, 了/vn]
[计算机/n, 网络/n, 管理员/n, 用/vn, 虚拟/vn, 机/ng, 实现/vn, 了/vn, 手机/n, 游戏/vn, 下载/v, 和/cc, 开源/vn, 项目/vn, 的/ng, 管理/vn, 金山/nz, 毒/n, 霸/ng]
[长春市/ns, 长春/ns, 药店/n]
[一/m, 年/qt, 有/vn, 三百六十五/m, 个/ng, 日出/vn,  /null, 我/rr, 送/vn, 你/rr, 三百六十五/m, 个/ng, 祝福/vn,  /null, 时钟/n, 每天/r, 转/vn, 了/vn, 一千四百四十/m, 圈/qv, 我/rr, 的/ng, 心/n, 每天/r, 都/ng, 藏/b, 着/uzhe,  /null, 一千四百四十/m, 多/m, 个/ng, 思念/vn,  /null, 每/d, 一/m, 天/qt, 都/ng, 要/vn, 祝/nr1, 你/rr, 快快乐乐/z,  /null,  /null, 每/d, 一/m, 分钟/qt, 都/ng, 盼望/vn, 你/rr, 平平安安/z,  /null, 吉祥/nz, 的/ng, 光/n, 永远/a, 环绕/vn, 着/uzhe, 你/rr,  /null, 像/nr1, 那/y, 旭日东升/vl, 灿烂/an, 无比/z,  /null]
[学校/n, 学费/n, 要/vn, 一/m, 次/qv, 性交/vn, 一千/m, 元/n]
[发展/vn, 中国/nz, 家庭/n, 养猪/vn, 事业/n]
[安徽省/ns, 是/vshi, 一个/mq, 发展/vn, 中/nr1, 的/ng, 省/vd]
[北京/n, 理/n, 工/ag, 大学/n, 办事处/n]
[北京/n, 理/n, 工/ag, 大学/n, 办事处/n]
4417


可以看出借个还是凑合能交代的.起码比起大多数来较好.


5效率
   5.1现在该说效率了.不怎么想说这个,效率很直白的说我不满意.但是能交代.我分的两m的一本小说.大约8秒(加载词典过程3秒) 我用的是air..分秒钟分词20万字左右.


6.还差哪些
   1.人名识别(虽然在上一版本中做了人名识别).但是效果不是很满意.所以打算推到从左.作为一个以写代码为生的人.推到不是问题.重做不是关键.
   2.地名识别,机构名称识别
   3.用户自定义词典.其实上一版中也做了.继续推到重做.因为万恶的用户词典.毁坏了我分词的准确率.所以打算把过程.改一下.
   4.未来.谁能知道呢.



写在结尾.我不怎么擅长表达.但是希望有时间有兴趣的朋友可以尝试下.给我多提一些意见.理论上我会虚心改进.呵呵.大家有什么好的意见和建议也可以提出来.只是希望这个分词能发展好一些.其他木有了..支持国产开源



   发表时间:2012-08-13  
支持一下~有时间整合到lucene里看看~
0 请登录后投票
   发表时间:2012-08-13  
mybreeze77 写道
支持一下~有时间整合到lucene里看看~

谢谢关注已经整合了哦....有个luceneplug
0 请登录后投票
   发表时间:2012-08-14  
兄弟能说说你的分词的准确度吗? 
只贴出几条语句有什么说服力,准确度差的话,一切都是惘然!
0 请登录后投票
   发表时间:2012-08-14  
[北京/n, 理/n, 工/ag, 大学/n, 办事处/n] 
像这一条就分的有点问题了。。
0 请登录后投票
   发表时间:2012-08-14  
你是不是做这方面的啊,那几条数据能说明什么问题,你至少要测试几百万条数据,查看准确率吧
0 请登录后投票
   发表时间:2012-08-14  
歧义识别做的不错,这是分词最难的部分。支持一下
0 请登录后投票
   发表时间:2012-08-14  
比 ikanalyzer或者 庖丁好再哪些地方
效率倒无所谓,基本上分词都不是瓶颈

就是没时间去比较研究,希望楼主直接告诉大家,今后也好作为一个可行方案
0 请登录后投票
   发表时间:2012-08-14  
holan 写道
比 ikanalyzer或者 庖丁好再哪些地方
效率倒无所谓,基本上分词都不是瓶颈

就是没时间去比较研究,希望楼主直接告诉大家,今后也好作为一个可行方案


无心插柳啊....冷暖自知....iteye的帖子真慢热...呵呵...好在准确..有良好的理论保证...是在ictclas算法上发展起来的...
0 请登录后投票
   发表时间:2012-08-14  
yscyfy 写道
你是不是做这方面的啊,那几条数据能说明什么问题,你至少要测试几百万条数据,查看准确率吧



说实话..因为缺乏训练预料没法做..准确率测试..只能根据常见的歧义句进行排除...或者人工识别下文本..
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics