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

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

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 有了这些词库后就可以进行有效的地点识别和切分了.只是在切分时仍需要注意一下混淆的问题.有些街道名称可能与省市名称相同,这时需要进行一下识别才行.

中文分词中的新词发现地点切分等问题相关推荐

  1. 中文分词中的战斗机-jieba库

    英文分词的第三方库NLTK不错,中文分词工具也有很多(盘古分词.Yaha分词.Jieba分词等).但是从加载自定义字典.多线程.自动匹配新词等方面来看. 大jieba确实是中文分词中的战斗机. 请随意 ...

  2. 基于python中jieba包的中文分词中详细使用

    基于python中jieba包的中文分词中详细使用(一) 01.前言 之前的文章中也是用过一些jieba分词但是基本上都是处于皮毛,现在就现有的python环境中对其官方文档做一些自己的理解以及具体的 ...

  3. HMM模型及其在中文分词中的应用

    HMM模型及其在中文分词中的应用 马尔可夫模型 有限状态集 s s s 初始时刻的状态概率分布 π \pi π 状态转移概率矩阵 A A A 马尔可夫模型实例 隐马尔可夫模型 观测集 V V V 发射 ...

  4. 基于python中jieba包的中文分词中详细使用(一)

    文章目录 基于python中jieba包的中文分词中详细使用(一) 01.前言 02.jieba的介绍 02.1 What 02.2特点 02.3安装与使用 02.4涉及到的算法 03.主要功能 03 ...

  5. 基于python中jieba包的中文分词中详细使用(二)

    文章目录 基于python中jieba包的中文分词中详细使用(二) 01.前言 02.关键词提取 02.01基于TF-IDF算法的关键词提取 02.02词性标注 02.03并行分词 02.04Toke ...

  6. 深度学习核心技术精讲100篇(二十四)-简单谈下深度学习在中文分词中的应用

    前言 随着深度学习的普及,有越来越多的研究应用新模型到中文分词上,让人直呼"手快有,手慢无".不过这些神经网络方法的真实水平如何?具体数值多少?以Sighan05中的PKU数据集为 ...

  7. Hanlp在java中文分词中的使用介绍

    项目结构 该项目中,.jar和data文件夹和.properties需要从官网/github下载,data文件夹下载 项目配置 修改hanlp.properties: 1 #/Test/src/han ...

  8. 简单实现中文分词中的常用字过滤

    实现背景:         当在搜索引擎文本框中写入源词时,分析器(Analyzer)会将源词拆分成多组词单元(Tokens).之后搜索引擎会在词库中搜索词单元,进行匹配,记录权重等其它操作.     ...

  9. NLP第三周(中文分词,新词发现,tfidf)(1)

    正向最大匹配 其主要是目的是将一句话分成进行词语的划分,相当于看看这句话由哪些词语组成,最完美的解决方案是,我会准备一个词库,然后我输入进去一句话,刚好我用我词库里面的词语把这句话分成一个一个词,一个 ...

最新文章

  1. c# hdf5 写string_聊一聊C#8.0中的 await foreach
  2. prometheus连续查询_Prometheus查询
  3. jittor和pytorch生成网络对比之acgan
  4. HDU1040-As Easy As A+B
  5. js正则表达式匹配字符串与优化过程
  6. Java中12 种 Spring 常用注解,必须记住!
  7. java如何比较两个对象_Java如何比较两个对象
  8. 使用Flink实现索引数据到Elasticsearch
  9. 为socket的recv/send设置超时
  10. 渗透测试工具之——WVSS(绿盟web应用漏洞扫描系统)概述
  11. 计算机一级电子照怎么做,证件照电子版怎么弄-简单5步,教您随心所欲做证件照...
  12. Matlab求四面体体积
  13. Win10创建文件不显示,Windows任务栏idea图标变白
  14. 金蝶云星空html5的网页主界面如何修改,金蝶云星空启用科目管控后,科目相关的值更新事件无法生效原因及解决办法...
  15. [UESTC878]温泉旅店
  16. String转JSONObject,JSONObject转JSONArray,JSONArray数组转换成JSON字符串
  17. 马斯克辞任CEO,产品经理如何用项目协作软件武装自己?
  18. 为金融而生的区块链Injective(INJ)
  19. 二叉树遍历的非递归实现
  20. nginx报错:src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fa

热门文章

  1. 坚持#第115天~不要忘了主要任务(即长期计划)!
  2. 华为手机隐藏的这个功能,简直是办公旅人爱用好物
  3. Java全局变量怎么定义?什么是全局变量?
  4. 【C++基础】删除vector中指定下标元素
  5. 光标切换键Insert
  6. 置顶-常用资源直接跳转
  7. channel java_Java中channel用法总结
  8. Java面试2021,java程序设计基础陈国君第六版
  9. 树莓派4B(ubuntu)设置wifi的方法
  10. 微型计算机使用的三类总线,微型计算机中使用的三类总线,不包括____。