自然语言分析工具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) [ ...
随机推荐
- UML-FURPS+与补充性规格说明
1.FURPS+ 在统一过程(UP)中,需求按照“FURPS+”模型进行分类. 功能性(Functional):特性.功能.安全性: 可用性(Usability):人性化因素.帮助.文档: 可靠性(R ...
- kubectl 常用命令一
1.kubectl logs <options> <PodName> -f -p, --previous --since= No. --since-time= --tail ...
- 数据分析-Numpy-Pandas
补充上一篇未完待续的Numpy知识点 索引和切片 数组和标量(数字)之间运算 li1 = [ [1,2,3], [4,5,6] ] a = np.array(li1) a * 2 运行结果: arra ...
- Idea创建Spring项目
环境 win7 + Idea2018 Classpath commons-logging-1.2 + spring-framework-4.1.6.RELEASE Step1 创建工程 File -& ...
- Ubuntu下安装Docker,及Docker的一些常用命令操作
1.什么是 Docker Docker 是一个开源项目,Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第九天】(商品详情页面实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- C++ lock_guard 互斥锁
概述根据对象的析构函数自动调用的原理,c++11推出了std::lock_guard自动释放锁,其原理是:声明一个局部的lock_guard对象,在其构造函数中进行加锁,在其析构函数中进行解锁.最终的 ...
- Codeforces 1295E Permutation Separation
题目链接 link Solution 暴力一眼就可以看出来,枚举分界点,然后左右两边统计答案即可,但复杂度是我们无法接受的 然后我们看我们可以优化哪一部分 \(1^0\) 枚举:这部分没有办法优化 \ ...
- Django路由层与视图层
表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...
- windows10系统激活方法
我使用的是第一种方法,很好用,企业版 https://blog.csdn.net/qq_39146974/article/details/82967054