自然语言分析工具Hanlp依存文法分析python使用总结(附带依存关系英文简写的中文解释)
最近在做一个应用依存文法分析来提取文本中各种关系的词语的任务。例如:text=‘新中国在马克思的思想和恩格斯的理论阔步向前’:
我需要提取这个text中的并列的两个关系,从文中分析可知,“马克思的思想”和“恩格斯的理论”是两个并列关系的短语,所以想要将其提取出来;
首先大致了解一下依存文法分析的前提条件,将句子分词并进行词性标注,这一步非常关键,直接决定分析结果的好坏。
看一下不修改分词字典情况下直接进行并列关系提取的结果:
text= "新中国在马克思的思想和恩格斯的理论指导下阔步向前"
java = JClass('com.hankcs.hanlp.dependency.nnparser.NeuralNetworkDependencyParser') # 调用原始类接口进行句法分析
dp_result = java.compute(seg_result1)
print('java提取结果:'+'\n',dp_result)
word_array = dp_result.getWordArray()
final= []
for word in word_array:
result = [word.LEMMA, word.DEPREL, word.HEAD.LEMMA]
print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA)) # 输出依存关系
if result[1]=='COO': # 提取并列关系COO
final.append(word.LEMMA)
final.append(word.HEAD.LEMMA) final_set = set(final)
print(final_set)
结果:{'思想','理论'}
虽然提取出来的结果也算合理,但是还是不够准确,我希望的结果是{'马克思的思想','恩格斯的理论'}
接下来我将需要目标词动态添加到分词字典中,然后再来进行依存文法分析
text= "新中国在马克思的思想和恩格斯的理论指导下阔步向前"
segment =HanLP.newSegment('viterbi')
CustomDictionary.insert('马克思的思想', 'n 1024') # insert会覆盖字典中已经存在的词,add会跳过已经存在的词
CustomDictionary.insert('恩格斯的理论', 'n 1024')
segment.enableCustomDictionaryForcing(True) # 强制执行
seg_result1 = segment.seg(text) # 分词结果
print('分词结果:',seg_result1) java = JClass('com.hankcs.hanlp.dependency.nnparser.NeuralNetworkDependencyParser') # 调用原始类接口进行句法分析
dp_result = java.compute(seg_result1)
print('java提取结果:'+'\n',dp_result)
word_array = dp_result.getWordArray()
final= []
for word in word_array:
result = [word.LEMMA, word.DEPREL, word.HEAD.LEMMA]
print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA)) # 输出依存关系
if result[1]=='COO':
final.append(word.LEMMA)
final.append(word.HEAD.LEMMA) final_set = set(final)
print(final_set)
结果:{'马克思的思想','恩格斯的理论'}
以上实现了正确的并列关系提取。
为什么我要用上面这种提取方法,这里我们在进一步看看依存分析的java的源码:
/**
* 分析句子的依存句法
*
* @param termList 句子,可以是任何具有词性标注功能的分词器的分词结果
* @return CoNLL格式的依存句法树
*/
public static CoNLLSentence compute(List<Term> termList)
{
return new NeuralNetworkDependencyParser().parse(termList);
} /**
* 分析句子的依存句法
*
* @param sentence 句子
* @return CoNLL格式的依存句法树
*/
public static CoNLLSentence compute(String sentence)
{
return new NeuralNetworkDependencyParser().parse(sentence);
}
}
从上述源码可以看到类NeuralNetworkDependencyParser的comoute方法下有两种输入模式,一种是支持直接输入text来进行分析,一种是支持词性标注结果list来进行分析。
这里如果想要用自己定义的词来进行分词并按照分词结果分析,则需要在compute方法中输入词性标注的list来进行依存文法分析。
需要注意的地方,在hannlp官方作者给出的python调用代码中是如下方法:
sentence = HanLP.parseDependency(text)
但是这个方法只能够输入的text,而不是一个词性标注结果list,这样就会导致最后生成的依存文法提取结果并不是动态添加到分词字典中的词。(尽管作者说动态添加到分词字典中的词是默认到所有分词器中的。)
另外需要说明的是sentence = HanLP.parseDependency(text)这个方法提取的并列关系都是用中文来表示,而上文中用词性标注结果成功提取的并列关系都是英文大写缩写标注的,
这里最后附上大写缩写的中文解释:
定中关系ATT
数量关系QUN(quantity)
并列关系COO(coordinate)
同位关系APP(appositive)
附加关系ADJ(adjunct)
动宾关系VOB(verb-object)
介宾关系POB(preposition-object)
主谓关系SBV(subject-verb)
比拟关系SIM(similarity)
时间关系TMP(temporal)
处所关系LOC(locative)
“的”字结构DE
“地”字结构DI
“得”字结构DEI
“所”字结构SUO
“把”字结构BA
“被”字结构BEI
状中结构ADV(adverbial)
动补结构CMP(complement)
兼语结构DBL(double)
关联词CNJ(conjunction)
关联结构 CS(conjunctive structure)
语态结构MT(mood-tense)
连谓结构VV(verb-verb)
核心HED(head)
前置宾语FOB(fronting object)
双宾语DOB(double object)
主题TOP(topic)
独立结构IS(independent structure)
独立分句IC(independent clause)
依存分句DC(dependent clause)
叠词关系VNV (verb-no-verb or verb-one-verb)
一个词YGC
标点 WP
自然语言分析工具Hanlp依存文法分析python使用总结(附带依存关系英文简写的中文解释)的更多相关文章
- Python中调用自然语言处理工具HanLP手记
手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...
- 中文自然语言处理工具HanLP源码包的下载使用记录
中文自然语言处理工具HanLP源码包的下载使用记录 这篇文章主要分享的是hanlp自然语言处理源码的下载,数据集的下载,以及将让源代码中的demo能够跑通.Hanlp安装包的下载以及安装其实之前就已经 ...
- 自然语言处理工具HanLP被收录中国大数据产业发展的创新技术新书《数据之翼》
在12月20日由中国电子信息产业发展研究院主办的2018中国软件大会上,大快搜索获评“2018中国大数据基础软件领域领军企业”,并成功入选中国数字化转型TOP100服务商. 图:大快搜索获评“2018 ...
- 自然语言处理工具hanlp关键词提取图解TextRank算法
看一个博主(亚当-adam)的关于hanlp关键词提取算法TextRank的文章,还是非常好的一篇实操经验分享,分享一下给各位需要的朋友一起学习一下! TextRank是在Google的PageRan ...
- 自然语言处理工具hanlp 1.7.3版本更新内容一览
HanLP 1.7.3 发布了.HanLP 是由一系列模型与算法组成的 Java 工具包,目标是普及自然语言处理在生产环境中的应用.HanLP 具备功能完善.性能高效.架构清晰.语料时新.可自定义的特 ...
- 中文自然语言处理工具hanlp隐马角色标注详解
本文旨在介绍如何利用HanLP训练分词模型,包括语料格式.语料预处理.训练接口.输出格式等. 目前HanLP内置的训练接口是针对一阶HMM-NGram设计的,另外附带了通用的语料加载工具,可以通过少量 ...
- 自然语言处理工具hanlp自定义词汇添加图解
过程分析 1.添加新词需要确定无缓存文件,否则无法使用成功,因为词典会优先加载缓存文件 2.再确认缓存文件不在时,打开本地词典按照格式添加自定义词汇. 3.调用分词函数重新生成缓存文件,这时会报一个找 ...
- 自然语言处理工具hanlp定制用户词条
作者:baiziyu 关于hanlp的文章已经分享过很多,似乎好像大部分以理论性的居多.最近有在整理一些hanlp应用项目中的文章,待整理完成后会陆续分享出来.本篇分享的依然是由baiziyu 分享的 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
随机推荐
- Git上传代码命令
对于Git在这不做说明:只介绍Git使用过程中的常用命令: 一.创建仓库,提交文件 1.初始化一个Git仓库,使用git init命令. 2.添加文件到Git仓库,分两步: 第一步,使用命令git a ...
- Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency
Error : Execution failed for task ’ :app: preDebugAndroidTestBuild’.Conflict with dependency ‘com.an ...
- jQuery ajax中的dataType——JSON和JSONP
引用:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html [原创]说说JSON和JSONP,也许你会豁 ...
- gcc -E xx.c
C语言代码在交给编译器之前,会先由预处理器进行一些文本替换方面的操作,例如宏展开.文件包含.删除部分代码等. 在正常的情况下,GCC 不会保留预处理阶段的输出文件,也即.i文件.然而,可以利用-E选项 ...
- docker安装文档
Docker离线安装以及本地yum源构建http://blog.csdn.net/joniers/article/details/64122820http://blog.csdn.net/wsscy2 ...
- PCB绘制——培训内容
1.创建PCB_Project 创建下面并保存 2.画原理图库 需要了解,画框,加引脚(该标注),改网格间距,引脚对齐对格,框选问题(从左至右还是从右至左,shift加选),给库加PCB封装 示例:画 ...
- C#Web网站的创建
一.CS与BS的区别 CS软件:需要在客户端安装软件. BS软件:只需要浏览器就能运行,Web网站就是BS软件. 创建过程: 1.文件新建---新建网站----空白网站 2.右击网站项目---添加网页 ...
- Oscar的数理统计笔记本
目录 Random Variable discrete distribution: continuous distribution: 统计量 现代统计学时期: Survey sampling Rand ...
- 05 - Tomcat 线程池的配置与优化
添加 Executor 在server.xml中的Service节点里面,增加executor节点,然后配置connector的executor属性,如下: <Executor name=&qu ...
- P - Atlantis (线段树+扫描线)
There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Som ...