自然语言分析工具Hanlp依存文法分析python使用总结(附带依存关系英文简写的中文解释)

最近在做一个应用依存文法分析来提取文本中各种关系的词语的任务。例如:text=‘新中国在马克思的思想和恩格斯的理论阔步向前’:

ps:这里马克思和恩格斯原来我是用的毛zd和邓xp,但是系统说这两个名字违规了。。。。。。。。我很爱国的好不好!!!!!!

我需要提取这个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

原文地址:https://www.cnblogs.com/zxyza/p/10234595.html

时间: 2024-08-27 17:54:17

自然语言分析工具Hanlp依存文法分析python使用总结(附带依存关系英文简写的中文解释)的相关文章

NPL:语义分析之依存文法分析

依存文法是由法国语言学家L.Tesniere在其著作<结构句法基础>(1959年)中提出,对语言学的发展产生了深远的影响,特别是在计算语言学界备受推崇. 依存语法通过分析语言单位内成分之间的依存关系揭示其句法结构,主张句子中核心动词是支配其它成分的中心成分,而它本身却不受其它任何成分的支配,所有受支配成分都以某种依存关系从属于支配者. 在20世纪70年代,Robinson提出依存语法中关于依存关系的四条公理,在处理中文信息的研究中,中国学者提出了依存关系的第五条公理,如下: 1.一个句子中只有

大数据产业发展创新技术新书《数据之翼》收录自然语言处理工具HanLP

在12月20日由中国电子信息产业发展研究院主办的2018中国软件大会上,大快搜索获评"2018中国大数据基础软件领域领军企业",并成功入选中国数字化转型TOP100服务商.图:大快搜索获评"2018中国大数据基础软件领域领军企业"在本届2018中国软件大会上,不仅宣传并成立了数字转型促进会,还发布了由中国大数据产业生态联盟副秘书长.<软件和集成电路>杂志社总编辑郭嘉凯编辑的新书--<数据之翼-引领中国大数据产业发展的创新技术>.在本书的第一章

Python自然语言处理工具小结

Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 1 Python 的几个自然语言处理工具 NLTK:NLTK 在用 Python 处理自然语言的工具中处于领先的地位.它提供了 WordNet 这种方便处理词汇资源的借口,还有分类.分词.除茎.标注.语法分析.语义推理等类库. Pattern:Pattern 的自然语言处理工具有词性标注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(sentiment a

[高级]性能分析工具TraceView

TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method.详细内容参考:Profiling with Traceview and dmtracedump TraceView 简介 TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot.TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 Android S

Visual Studio代码性能分析工具

AMD CodeXL 2011年发布的AMD CodeAnalyst Performance Analyzer 现在已经被AMD CodeXL所替代.AMD CodeXL的主要目的是帮助开发者更好利用CPU, GPU和APU的计算性能,具有强大的GPU调试.CPU和GPU代码分析.及静态的OpenCL内核性能分析等能力. AMD提供了支持Windows 7.Windows 8和Linux系统的单机版CodeXL分析工具.在Visual Studio 2010,2012和2013上也有AMD Co

11个Visual Studio代码性能分析工具

软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和性能测试,从而大大简化程序员进行代码性能优化的过程.MSDN杂志2011年7月份曾发布主题为“.NET代码分析工具和技术”的那一期,让广大程序员收获颇丰.四年过去之后,这些工具又进一步做出了很多改进,同时也出现了更多的选择.本文对当前主流的一些Visual Studio代码性能分析工具进行简单的梳理

11 个 Visual Studio 代码性能分析工具

软件开发中的性能优化对程序猿来说是一个很重要的问题. 一个小问题可能成为一个大的系统的瓶颈. 可是对于程序猿来说.通过自身去优化代码是十分困难的.幸运的是.有一些很棒的工具能够帮助程序猿进行代码分析和性能測试,从而大大简化程序猿进行代码性能优化的过程.MSDN 杂志 2011 年 7 月份曾公布主题为".NET 代码分析工具和技术"的那一期.让广大程序猿收获颇丰.四年过去之后,这些工具又进一步做出了非常多改进,同一时候也出现了很多其它的选择.很多其它应用代码安全工具请点击:http:/

通过站点的訪问统计优化站点-10个免费的站点统计和分析工具

站点訪问统计能为你带来什么? 第一,查看訪问者的国家和地区: 第二,查看訪问者来源,如用是从搜索引擎,还是从其它网站的友情链接链接引入 第三,查看訪问者使用的操作系统,显示分辨率等 第四,查看站点哪些文章或页面訪问率较高,受用户欢迎 以下是10个免费的站点统计和分析工具: Google Analytics评分: 8/10 最好最著名的免费站点统计和解析工具.它尽可能提供一切你求之不得的数据.主要长处是没有不论什么限制. Google Analytics 不解析的东西: a. 你无法查看訪客的 I

Schlumberger.AquaChem.2011.1.0.40.v7地下水分析工具

Schlumberger.AquaChem.2011.1.0.40.v7地下水分析工具主要用于报告生成.水化学数据管理.地下水采样和数据分析等.它拥有一个可自定义并含有各种化学参数和物理的数据库 ,可自由模拟.绘图.计算和分析等.针对一组水质数据,可选择多种图形从不同角度来表征地下水的水文地球化学特性, 这一功能增强了软件的实用性. AquaChem拥有功能强大的计算和分析工具,可用于分析.解释和比较水质数据.这些工具不仅能进行简单的单位转换.电荷 平衡.数据统计和样本混合,还能实现许多更加复杂