HanLP-最短路径分词
2019独角兽企业重金招聘Python工程师标准>>>
今天介绍的内容是最短路径分词。最近换回了thinkpad x1,原因是mac的13.3寸的屏幕看代码实在是不方便,也可能是人老了吧,^_^。等把HanLP词法分析介绍结束后,还是会换回macbook pro的。个人有强迫症,只要看或写Java或C/C++代码或者用开发机的化,还是喜欢在windows下工作。看论文特别是理论的研究还是习惯用mac了。感觉开发还是windows比较顺手,理论研究还是mac比较顺手。
基本思想:首先根据词典,找出字串中所有可能的词(也称全切分),然后构造词语切分有向无环图(也称作粗分词图或粗分词网)。每个词对应图中的一条有向边。若赋给相应的边长一个权值(该权值可以是常数,也可以是所构成的词的属性值),然后根据该切分图,在起点到终点的所有路径中,求出长度值(包括权值)为最短的一条路径,这条路径上包含的词就是该句子的切分结果。若每个结点处记录N个最短路径值,则该方法也称N-最短路径算法。
为进一步提高切分精度,在词典中增加词的属性值,即给每个词也给权重。这样每个词在汉字串中的权重不同(即构成的有向图的边不为等长)。最简单的词的权重可以用词频表示,高频词的权重大,低频词的权重小。具体的权重值可以通过大规模语料库获得。
虽然HanLP中提供了dijkstra算法的实现,但是当前HanLP中最短路径分词使用的是viterbi算法。
例子:他说的确实在理
遍历计算过程和回溯分词过程
(1) node列与to列
node列的词语为粗分词网中所有的词,to列为在node列为词word_node的情况下,后边接的所有可能的词word_to。第1个词语前边有一个“始”词,最后一个词语后边有一个“末”词。
(2) begin2node_w的计算
表示从“始”到node词的最短路径权值。可以从待计算值所在行的node列读取出word词,在to列中以待计算值所在行开始向上查找word,找到word所在行后(以首次遇到的词为准),begin2to_w列所对应的值就是待计算值。见图中下划线。第一个词对“始-他”的begin2node_w的值为0。
(3) node2to_w的计算
由node+w构成的2gram串的概率,也就是转移概率,计算公式为
计算的HanLP代码为https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/utility/MathUtility.java calculateWeight(Vertex from, Vertex to)。“始”的频次取为MAX_FREQUENCY,“始-他”的共现频次值为“他”作为句首的频次,“理-末”的共现频次值为“理”作为句末的频次。
(4) begin2to_w_n的计算
表示从“始”到to词的最短路径权值。begin2to_w_n = begin2node_w + node2to_w。
(5) begin2to_w_o
表示记录在to词下的,到to词的最短路径权值,它的初始值为0,之后由begin2to_w来更新。
(6) from
表示词语to的前驱词。
可以看表中(7,9),(8,10),(11,13),(12,14),(15,16),(17,18)成对行来验证该公式,其中只有(17.18)行满足了第3个式子。
(6)和(7)的HanLP实现代码https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/seg/common/Vertex.java updateFrom(Vertex from)
(8) 回溯确定分词路径
从“末”开始向前回溯,末->理->在->确实->的->说->他,可以看表中黄色单元格进行验证。
经过(6)、(7)两步,可以确保粗分词网中任意词的前驱都是最短路径的。
遍历计算过程和回溯过程的HanLP代码https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/seg/Viterbi/ViterbiSegment.java viterbi(WordNet wordNet)
转载于:https://my.oschina.net/u/3793864/blog/3058639
HanLP-最短路径分词相关推荐
- python 分词nlp,学习NLP的第四天——hanlp字典分词的Python实现,4,HanLP,词典
通过<自然语言处理入门>(何晗)的第2章来学习HanLP词典分词的Python实现.这里主要记录我在学习过程中整理的知识.调试的代码和心得理解,以供其他学习的朋友参考. 首先,我们导入Ha ...
- solr mysql 全文搜索_全文检索Solr集成HanLP中文分词
以前发布过 HanLP 的 Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),于是就抽空做了个Solr插件出来, ...
- Elasticsearch:hanlp 中文分词器
HanLP 中文分词器是一个开源的分词器,是专为Elasticsearch而设计的.它是基于HanLP,并提供了HanLP中大部分的分词方式.它的源码位于: https://github.com/Ke ...
- hanlp中的N最短路径分词
N-最短路径 是中科院分词工具NLPIR进行分词用到的一个重要算法,张华平.刘群老师在论文<基于N-最短路径方法的中文词语粗分模型>中做了比较详细的介绍.该算法算法基本思想很简单,就是给定 ...
- hanLP的分词的使用
HanLP: Han Language Processing 汉语言处理包 HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用.HanL ...
- hanlp中文分词、提取摘要关键字、语句分析、智能推荐
hanlp资源: hanlp介绍:http://hanlp.linrunsoft.com/ hanlp下载:https://github.com/hankcs/HanLP hanlp(分词)使用:ht ...
- Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置
目录 hanlp分词插件 插件安装 在线安装 离线安装 安装数据包 同义词配置 hanlp分词插件 HanLP是一款免费开源(Apache License 2.0协议)中文语义分词工具,它提供中文分词 ...
- python 分词工具训练_中文分词入门和分词工具汇总攻略
[注意]如果寻找分词和文本分析软件,为了完成内容分析和其他文本研究任务,直接使用集搜客分词和文本分析软件就可以了.本文是为了讲解集搜客分词和文本分析的实现原理,是给产品设计者和开发者看的. 最近在整理 ...
- HanLPTokenizer HanLP分词器
anlp在功能上的扩展主要体现在以下几个方面: •关键词提取 •自动摘要 •短语提取 •拼音转换 •简繁转换 •文本推荐 下面是 hanLP分词器的代码 注:使用maven依赖 <depen ...
- spark集群使用hanlp进行分布式分词操作说明
本篇分享一个使用hanlp分词的操作小案例,即在spark集群中使用hanlp完成分布式分词的操作,文章整理自[qq_33872191]的博客,感谢分享!以下为全文: 分两步: 第一步:实现han ...
最新文章
- 修改或隐藏Nginx的版本号
- 低压差降压稳压电路设计
- Android——四大组件、六大布局、五大存储
- /hbase/WALs/desktop,xxxxxxxx-splitting is non empty: Directory is not empty
- 表达式的计算结果必须为节点集 调试
- HDU 5787 wolf Number 数位dp
- 干货 | 搞定用户画像只需5个步骤
- python笛卡尔_用Python 3来模拟笛卡尔积
- 内置函数——hasattr() 函数
- linux服务网卡速率查看,linux下查看网卡速率
- 百度翻译反向js——破解反爬虫
- 电路实验---全桥整流电路
- vue 实现定位到当前位置
- 为什么手机里的小爱音响app里搜不到家里的小爱音箱_水哥岁末诚意奉献:基于米家App的家庭智能安全方案详解...
- 计算机usb接口失灵,电脑usb接口全部失灵
- 货币战争悲壮的英雄:帕潘德里欧
- SSL协议与数字证书原理
- Android动画之帧动画
- Storm示例剖析-fastWordCount
- JAVA复习:8进制与16进制