关闭

中文分词

标签: 创业算法数据库mysqlrandom.net
546人阅读 评论(0) 收藏 举报
分类:

这两天想了解一下中文分词的一些技术,因此就研究了一把,也就是了解了一些皮毛,记录下来,首先申明我是外行,请勿用专业标准来要去我。

    中文分词,主要是三个流派,一是词典派,一是统计派,一是规则派。比如“我爱北京天安门”,词典派就是去查词典,词典中中有“我”,“爱”,“北京”和“天安门”,就分出来了,简单吧。词典派的算法一般是最大匹配算法,比如“毛泽东北京华烟云”,正向最大匹配就是“毛泽东 北京 华烟云”,逆向最大匹配是“毛泽 东北 京华烟云”。还可以双向“毛泽东 北 京华烟云”。还有其他算法。统计派呢,就复杂点了,中心思想就是“由字组词”,研究字组词的概率,比如“我”,单独出现的概率是“50%”,“我爱”组合出现的概率是“10%”,那么“我爱”就不是一个词。比如“北京”,“北京”在很多文章中老放在一起,那么就应该在一起,是一个地名。一个是规则派,规则派我没怎么看,好像单独出现效果不好,一般大家都不用它。

    说起优劣,词典派算法简单,无非是查查查,性能也好,普通电脑,一秒几百K甚至上M都可能。词典派的一个主要问题是,词典中没有咋办,没有就没法分啊,而且互联网上大家创造力惊人,新词层出不穷。而统计派,在识别新词方面,尤其是人名、地名、机构、日期、数量词方面特别管用,你词典中能把所有人名都放进去么,而且,词典大了,有歧义啊。统计派,和RPG游戏类似,得满满来培养,就是训练,而且分词的时候性能也不大好。

    分词算法,网上也挺多,如果兼顾性能、准确性,还是c++写的比较好。

 

中科院的ICTCLAS分词。

这是官方的源码下载站点

http://ictclas.org/Down_OpenSrc.asp

有C#版本,是吕振宇做做的,分析文章列表如下:

http://www.cnblogs.com/zhenyulu/category/85598.html

做.NET的朋友可以订阅吕老师的博客,在.NET方面很有研究。

JAVA版本的,是张新波做的,下面是分析文章:

http://blog.csdn.net/sinboy/category/207165.aspx

把文章看完,把代码看完,你就是专家了。ICTCLAS的分词,只支持GBK(GB2312)字符集,所以如果是UTF-8的,您还得自己转一下,本来我想改写成支持UTF-8的,没时间搞了。

下面是分完的结果:

---------------------------------------------------

视频/n  :/w  证监会/j  发布/v  创业/vn  板/n  IPO/nx  办法/n   5/m  月/n  1/m  日/q  起/f  实施/v    媒体/n  来源/n  :/w  第一/m  财经/n  《/w  早市/n  导航/vn  》/w  新华/nz  网/n  北京/ns  3/m  月/n  31/m  日/q  电/n  (/w  记者/n  赵/nr  晓辉/nr  、/w  陶/nr  俊洁/nr  )/w  中国证监会/n  31/m  日/d  发布/v  《/w  首/d  次/a  公开/a  发行/v  股票/n  并/c  在/c  创业/nz  板/a  上/f  市/n  管理/v  暂行/b  办法/n  》/w  ,/w  办法/n  自/a  5/m  月/n  1/m  日/d  起/f  实施/u  。/w  这/r  意味着/v  筹备/v  十/m  余/m  年/a  之/a  久/a  的/b  创业/nz  板/a  有望/v  于/d  5/m  月/n  1/m  日/d  起/f  正式/a  开启/v  。/w  办法/n  共/d  分/v  为/p  6/m  章/q  58/m  条/q  ,/w  对/p  拟/v  到/v  创业/v  板/ng  上市/v  企业/n  的/u  发行/vn  条件/n  、/w  发行/v  程序/n  、/w  信息/n  披露/vn  、/w  监督/vn  管理/vn  和/c  法律/n  责任/n  等/u  方面/n  进行/v  了/u  详细/a  规定/n  。/w  根据/p  规定/n  ,/w  到/v  创业/v  板/ng  上/f  市/n  的/u  企业/n  应当/v  是/v  依法/d  设立/v  且/c  持续/vd  经营/v  三/m  年/q  以上/f  的/u  股份/n  有限公司/n  ,/w  最近/t  两/m  年/q  连续/a  盈利/n  ,/w  最近/t  两/m  年/q  净利润/n  累计/v  不/d  少于/v  1000/m  万/m  元/q  ,/w  且/c  持续/vd  增长/v  ;/w  或者/c  最近/t  一/m  年/q  盈利/n  ,/w  且/c  净利润/n  不/d  少于/v  500/m  万/m  元/q  ,/w  最近/t  一/m  年/q  营业/vn  收入/n  不/d  少于/v  5000/m  万/m  元/q  ,/w  最近/t  两/m  年/q  营业/vn  收入/n  增长率/n  均/d  不/d  低于/v  30%/m  。/w  企业/n  发行/v  后/f  的/u  股本/n  总额/n  不/d  少于/v  3000/m  万/m  元/q  。/w

ICTCLAS:235.109000 ms

---------------------------------------------------

 

写完了,又发现一个资料挺全的博客,刀剑笑的:

http://blog.csdn.net/jyz3051/category/356808.aspx?PageNumber=1

 

还有一个分词是,李沫南写的,libmmseg。

李沫南这个家伙,如果我没记错的话,我和他共事过,想不到研究分词,还能遇到故人。

http://www.coreseek.com/

我简单介绍一下:sphinx。sphinx是俄罗斯人写的开源的针对数据库的一款索引产品。如果想做中小规模的站内搜索,用它就没错了。特色是比Mysql的全文索引快(废话),另外纯天然的支持数据库(可以内嵌到Mysql中做为一个引擎)。想研究的朋友可以看这里:http://www.sphinxsearch.com/ 。再插一句话,本来对于sphinx我是写过一篇教程的,但是csdn服务器抽风,所以就没了,我也不写了。

还是回到分词吧,libmmseg分词方法可以看下面的博客文章,此博客也是李沫南的博客。

http://nzinfo.spaces.live.com/Blog/cns!67694E0B61E3E8D2!344.entry

下面是分完的结果

---------------------------------------------------

$ mmseg -d /home/lhb/workspace/mmseg/dict/ /home/lhb/soft/text/01.txt 

/x 视频/x :/x 证监会/x 发布/x 创业/x 板/x IPO/x 办法/x  /x 5/x 月/x 1/x 日/x 起/x 实施/x  /x  /x 媒体/x 来源/x :/x 第一/x 财经/x 《/x 早市/x 导航/x 》/x 
 /x  /x 新华/x 网/x 北京/x 3/x 月/x 31/x 日/x 电/x (/x 记者/x 赵/x 晓/x 辉/x 、/x 陶/x 俊/x 洁/x )/x 中国/x 证监会/x 31/x 日/x 发布/x 《/x 首次/x 公开/x 发行/x 股票/x 并/x 在/x 创业/x 板/x 上市/x 管理/x 暂行/x 办法/x 》/x ,/x 办法/x 自/x 5/x 月/x 1/x 日/x 起/x 实施/x 。/x 这/x 意味着/x 筹备/x 十/x 余年/x 之/x 久/x 的/x 创业/x 板/x 有望/x 于/x 5/x 月/x 1/x 日/x 起/x 正式/x 开启/x 。/x 
 /x  /x 办/x 法共/x 分为/x 6/x 章/x 58/x 条/x ,/x 对/x 拟/x 到/x 创业/x 板/x 上市/x 企业/x 的/x 发行/x 条件/x 、/x 发行/x 程序/x 、/x 信息/x 披露/x 、/x 监督/x 管理/x 和/x 法律/x 责任/x 等/x 方面/x 进行/x 了/x 详细/x 规定/x 。/x 
 /x  /x 根据/x 规定/x ,/x 到/x 创业/x 板/x 上市/x 的/x 企业/x 应当/x 是/x 依法/x 设立/x 且/x 持续/x 经营/x 三/x 年/x 以上/x 的/x 股份/x 有限公司/x ,/x 最近/x 两/x 年/x 连续/x 盈利/x ,/x 最近/x 两/x 年/x 净利润/x 累计/x 不/x 少于/x 1000/x 万元/x ,/x 且/x 持续/x 增长/x ;/x 或者/x 最近/x 一/x 年/x 盈利/x ,/x 且/x 净利润/x 不/x 少于/x 500/x 万元/x ,/x 最近/x 一/x 年/x 营业/x 收入/x 不/x 少于/x 5000/x 万元/x ,/x 最近/x 两/x 年/x 营业/x 收入/x 增长率/x 均/x 不/x 低于/x 30/x %/x 。/x 企业/x 发行/x 后/x 的/x 股本/x 总额/x 不/x 少于/x 3000/x 万元/x 。/x
Word Splite took: 22 ms.
---------------------------------------------------

 

ICTCLAS和libmmseg的优劣,前者效果要好一些,后者速度快一些。前者效果好的原因是对于人名、地名有一些规则在里头。后者呢,这些好像没有。速度方面,后者比前者快一个数量级吧。另,前者的UTF-8支持需要额外处理。

 

对于统计派,也有一些资料可以参考。

赵海的主页:

http://bcmi.sjtu.edu.cn/~zhaohai/index-cn.html

赵海的博客

http://cwseg.spaces.live.com/

现在统计派都比较流行CRF(Conditon Random Field)条件随机场/域的方法,看字都认识,合起来就不知道啥意思了。

据说HMM(Hidden Markov Model 马尔可夫模型),MEMM(最大熵马尔科夫模型)过时了。关于这几个概念,可以参考:http://wshxzt.ycool.com/post.1769559.html

工具包和使用上,下面链接:

CRF 理论、工具包的使用及在NE 上的应用

基于CRF的中文分词

当然还有一些,上google搜CRF就可以了。

一款好的分词,估计需要用到综合的办法,词典是必须的,新词识别也是必须的,歧义消除也是必须的,因此就要博采众长,才能再性能、准确率、召回率上找到平衡。

 

写完这篇文章,发现了一帮哥们基于CRF++做的分词开源项目,bamboo,哈哈

http://groups.google.com/group/nlpbamboo

http://code.google.com/p/nlpbamboo/

有兴趣可以研究一下哦,那里聚了不少人。

1)下载bamboo,编译安装后,

2)下载已经训练过的模型

http://code.google.com/p/nlpbamboo/downloads/list

下载index.tar.bz2,解压到/opt/bamboo/index下

你要是想自己跑,可以下载

people-daily-bamboo-edition.txt.gz 人民日报98年一月语料库(bamboo修改版), 将“姓”和“名”合并为一个切分单位. Dec 02 3.0 MB 470

3)$cd /opt/bamboo/bin/

lhb@lhb-vm-desktop:/opt/bamboo/bin$ ./bamboo -p crf_seg < /home/lhb/soft/text/01.txt 
parsing '-'...


----------------------------------------
视频 : 证监会 发布 创业板 IPO 办法 5月 1日 起 实施 媒体 来源 : 第一 财经 《 早市 导航 》 
新华网 北京 3月 31日 电 ( 记者 赵晓辉 、 陶俊洁 ) 中国 证监会 31日 发布 《 首 次 公开 发行 股票 并 在 创业板 上市 管理 暂行 办法 》 , 办法 自 5月 1日 起 实施 。 这 意味着 筹备 十 余 年 之 久 的 创业板 有望于 5月 1日 起 正式 开启 。 
办法 共 分为 6 章 58 条 , 对 拟 到 创业板 上市 企业 的 发行 条件 、 发行 程序 、 信息 披露 、 监督 管理 和 法律 责任 等 方面 进行 了 详细 规定 。 
根据 规定 , 到 创业板 上市 的 企业 应当 是 依法 设立 且 持续 经营 三 年 以上 的 股份 有限公司 , 最近 两 年 连续 盈利 , 最近 两 年 净利润 累计 不 少于 1000万 元 , 且 持续 增长 ; 或者 最近 一 年 盈利 , 且 净利润 不 少于 500万 元 , 最近 一 年 营业 收入 不 少于 5000万 元 , 最近 两 年 营业 收入 增长率 均 不 低于 30% 。 企业 发行 后 的 股本 总额 不 少于 3000万 元 。 
consumed time: 284 ms

---------------------------------------

 

基于CRF++训练的方法,见我的另外一篇:CRF++分词指南

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:169737次
    • 积分:3450
    • 等级:
    • 排名:第9664名
    • 原创:194篇
    • 转载:21篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论