中文分词中的新词发现地点切分等问题

阅读更多
在网上看了别人写的,感觉挺好,收录下。
http://blog.sina.com.cn/s/blog_64d0b03c0101bcxk.html

中文分词做为自然语言处理的第一工序.有着十分重要的意义,在一定程度上可以说,没有分词,所谓的分类,句法树,聚类,特征词提取,文本摘要...都是空谈.分词用简单直白的方法处理就是建立一个自己的词库,然后用正向或逆向方式遍历句子,发现有在词库中的就进行切词,这样就能完成一个简单的分词程序.当然效率方面就有很多改进方式了.如词库的存储结构,程序是否建立单例模式,查询算法之类都会直接影响速率.这方面不再做过多讲解了.下面对今天的几个知识点做下补充讲解.






1.新词发现

由于我们是自已建立的词库,所以在词库的维护是很重要的,互联网每天都会产生一些新词,这时如果全由人工进行维护,则成本是相对较高且准确及时性上有待考量.这时可以考虑用程序的方式进行事先筛选和提取,然后以人工做较正.在程序方面有几种作法

a.信息熵:采用信息熵的方式来度量两个词之间的紧密程度.对于紧密程度高,而又不在我们词库中的词标识出来.如一篇文章里有"新长城办公室"六个字,而我们词库里只有"新","长城","办公室".则按照普适的这个将会被切成:新/长城/办公室 而这样的分词明显是不符合实际的.采用信息熵后可以解决这个问题.信息熵的一般公式为:
[img][/img]


解释起来其实也挺简单,就是如果x和y的出现相互独立,则P(x,y)的值和P(x)P(y)的值相等,因此I(x,y)为0.如果x和y密切相关,P(x,y)将比P(x)P(y)大很多,I(x,y)的值也就远大于0.如果x和y几乎不会相邻出现,而它们各自出现的概率又比较大,那么I(x,y)将取负值,这时候x和y负相关.于是大家就明白了.只要算出两个词的相关程度远大于0,我们设置一个阈值,当大于某个值时就将这两个词做为一个新词标注出来,为提高准确性,人工去较正即可.

b.从搜索日志里发现新词:这个应该很好理解,就是人们经常搜索什么什么,把搜索时的词入库检索,然后按查询的频次倒序一排也能有助于我们发现新词.如果我们的系统不提供,当然也可以直接借助现成的搜索引擎的相关搜索去发现了.

c.利用输入法来收集新词:搜狗输入法的新词维护还是不错的.所以余下的大家应该懂了:)



关于新词发现目前我所想到的是这么几种,欢迎大家补充.



2.有限状态机

中文分词时,有些词并不是通过词库匹配出来的,而是根据一定的规则自动识别的.常见的如数字,日期,邮箱,电话号码...当然可能有人说这直接用正则表达式就可以.确实是这样的.正则表达式完全可以实现,也是一种简单的处理方法.只是相比扩展性之类而言,可能还是有限状态机更好些.



有限状态机简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.是由状态(State)、变换(Transition)和行动(Action)组成的行为模型。有限状态机首先在初始状态(Start State),接收输入事件(Input Event)后转移到下一个状态.有限状态机通过条件(Guard)判断是否符合转移条件.具体的代码实现时间关系这里不做过多讲解



3.地点的识别

在做分词时经常需要对一些地点做切词.如北京市朝阳区幸福村中路,这时如果没有一个准确的切分方式,则分词结果是很糟糕的.我们一般的作法是这样的:以省市区县街道建筑标识来切分.如上面的词最后切为北京市(直辖市)/朝阳区(区)/幸福村中路(街道).而如何做到这样准确的切分呢,就需要以上面的标注级别来建立不同的词库.如省市区县网上有现成的数据库可以下,这里不多说,而对于一些街道名称也是可以有的,如北京的就直接上http://bj.cityhouse.cn/information/newstreet.html 抓取然后入库即可.这个网站也能抓取别的省市区县的街道名称.如安庆即为http://aq.cityhouse.cn/information/newstreet.html 有了这些词库后就可以进行有效的地点识别和切分了.只是在切分时仍需要注意一下混淆的问题.有些街道名称可能与省市名称相同,这时需要进行一下识别才行.

你可能感兴趣的:(自然语言,新词发现)