自然语言分析工具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) [ ...
随机推荐
- PAT Advanced 1145 Hashing – Average Search Time (25) [哈希映射,哈希表,平⽅探测法]
题目 The task of this problem is simple: insert a sequence of distinct positive integers into a hash t ...
- ubuntu19.10 相关软件安装
1.Typora Typora是一款Markdown撰写软件,Linux版本也相当好用. Typora的安装方式如下: # or run: # sudo apt-key adv --keyserver ...
- osi七层模型专题
OSI模型,即开放式通信系统互联参考模型,是国际标准化组织提出的一个试图是各种计算机或者通信系统在世界范围内互联为网络的标准框架.整个模型分为七层,物理层,数据链路层,网络层,传输层,会话层,表示层, ...
- linux 中的.so和.a文件
Linux下的.so是基于Linux下的动态链接,其功能和作用类似与windows下.dll文件. 下面是关于.so的介绍: 一.引言 通常情况下,对函数库的链接是放在编译时期(compile tim ...
- Java创建文件夹、创建文件、上传文件,下载文件
1.创建文件夹 /** * 判断文件夹是否存在 * @param myPath */ public static void judeDirExists(File myPath) { if (!myPa ...
- Spring Test+JUnit4整合使用测试ZZJ_淘淘商城项目:day01(RESTful Web Service)
针对整合的Dao层与Service层,在做spring与通用Mapper和分页插件相关测试时比较麻烦.如果只用JUnit测试,需要每次Test方法里初始化一下applicationContext,效率 ...
- 如何查看iOS系统版本在iPhone设备上的占有率
我们平时开发的时候有时要考虑到系统的兼容版本,但是怎么知道各个版本的系统占有率,其实这个苹果官方是有提供的.进入如下链接到的页面就可以知道各大系统版本的占有率了,不过说实在的iPhone用户的系统更新 ...
- python将当前时间加上7天
datetime.datetime.now() + datetime.timedelta(days = 7)).strftime("%Y-%m-%d"
- 吴裕雄--天生自然python学习笔记:python 用pygame模块制作 MP3 音乐播放器
利用 music 对象来制作一个 MP3 音乐播放器 . 应用程序总览 从歌曲清单中选择指定的歌曲,单击“播放”按钮可开始播放, 在播放 xxx 歌曲”的信息. 歌曲播放的过程中,可以暂停.停止,也可 ...
- AJAX数据传输(原生js)
原生ajax写法 <!DOCTYPE html> <html lang=""> <head> <meta charset="UT ...