pyhanlp 两种依存句法分类器

阅读更多

 

 依存句法分析器

HanLP中一共有两种句法分析器

·依存句法分析

1基于神经网络的高性能依存句法分析器

2MaxEnt依存句法分析

基于神经网络的高性能依存句法分析器

HanLP中的基于神经网络的高性能依存句法分析器参考的是14年Chen&Manning的论文(A Fast and Accurate Dependency Parser using Neural Networks),这里还有一个发在了Github的实现程序,其实现语言为Python。除此之外,你还可以参考ljj123zz 的CSDN 一篇博客:blog.csdn.net/ljj123zz/article/details/78834838

HanLP作者的原文介绍已经写得比较清楚,唯一要注意的是原文章中介绍的依存句法分析器为早期版本,输出的依存关系为英文,现在应该变为中文,而且从测试结果看,训练语料应该已经更新了,但是更新为了那个语料现在还不会是很清楚。

 

hanlp开源项目负责人hankcs

基于最大熵的依存句法分析器

经过测试这个句法分析器为真的很坑,绝对不建议使用,测试代码见最后,作者原文介绍请点击www.hankcs.com/nlp/parsing/to-achieve-the-maximum-entropy-of-the-dependency-parser.html

下面是使用的例子

基于神经网络的高性能依存句法分析器

from pyhanlp import *

# 依存句法分析

sentence = HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。")

 

print(sentence)

 

for word in sentence.iterator():  # 通过dir()可以查看sentence的方法

    print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA))

print()

 

# 也可以直接拿到数组,任意顺序或逆序遍历

word_array = sentence.getWordArray()

for word in word_array:

    print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA))

print()

 

# 还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根

CoNLLWord = JClass("com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord")

head = word_array[12]

while head.HEAD:

    head = head.HEAD

    if (head == CoNLLWord.ROOT):

        print(head.LEMMA)

    else:

        print("%s --(%s)--> " % (head.LEMMA, head.DEPREL))

1徐先生徐先生nhnr_4主谓关系__

2dd_4状中结构__

3具体具体aad_4状中结构__

4帮助帮助vv_0核心关系__

5rr_4兼语__

6确定确定vv_4动宾关系__

7uu_6右附加关系__

8pp_15状中结构__

9vv_8介宾关系__

10雄鹰雄鹰nn_9动宾关系__

11wpw_12标点符号__

12松鼠松鼠nn_10并列关系__

13cc_14左附加关系__

14麻雀麻雀nn_10并列关系__

15作为作为vv_6动宾关系__

16主攻主攻vvn_17定中关系__

17目标目标nn_15动宾关系__

18wpw_4标点符号__

 

徐先生 --(主谓关系)--> 帮助

--(状中结构)--> 帮助

具体 --(状中结构)--> 帮助

帮助 --(核心关系)--> ##核心##

--(兼语)--> 帮助

确定 --(动宾关系)--> 帮助

--(右附加关系)--> 确定

--(状中结构)--> 作为

--(介宾关系)--> 把

雄鹰 --(动宾关系)--> 画

--(标点符号)--> 松鼠

松鼠 --(并列关系)--> 雄鹰

--(左附加关系)--> 麻雀

麻雀 --(并列关系)--> 雄鹰

作为 --(动宾关系)--> 确定

主攻 --(定中关系)--> 目标

目标 --(动宾关系)--> 作为

--(标点符号)--> 帮助

 

徐先生 --(主谓关系)--> 帮助

--(状中结构)--> 帮助

具体 --(状中结构)--> 帮助

帮助 --(核心关系)--> ##核心##

--(兼语)--> 帮助

确定 --(动宾关系)--> 帮助

--(右附加关系)--> 确定

--(状中结构)--> 作为

--(介宾关系)--> 把

雄鹰 --(动宾关系)--> 画

--(标点符号)--> 松鼠

松鼠 --(并列关系)--> 雄鹰

--(左附加关系)--> 麻雀

麻雀 --(并列关系)--> 雄鹰

作为 --(动宾关系)--> 确定

主攻 --(定中关系)--> 目标

目标 --(动宾关系)--> 作为

--(标点符号)--> 帮助

 

麻雀 --(并列关系)-->

雄鹰 --(动宾关系)-->

--(介宾关系)-->

--(状中结构)-->

作为 --(动宾关系)-->

确定 --(动宾关系)-->

帮助 --(核心关系)-->

##核心##

最大熵依存句法分析器

MaxEntDependencyParser = JClass("com.hankcs.hanlp.dependency.MaxEntDependencyParser")

 

print("hankcs每天都在写程序")

print(MaxEntDependencyParser.compute("hankcs每天都在写程序"))

print("吴彦祖每天都在写程序")

print(MaxEntDependencyParser.compute("吴彦祖每天都在写程序"))

hankcs每天都在写程序

1hankcshankcsxx_6限定__

2每天每天rr_5施事__

3dd_5程度__

4dd_5程度__

5vv_0核心成分__

6程序程序nn_5内容__

 

吴彦祖每天都在写程序

1吴彦祖吴彦祖nnr_5施事__

2每天每天rr_5施事__

3dd_5程度__

4dd_5程度__

5vv_0核心成分__

6程序程序nn_5内容__

 

作者:FontTian

 

你可能感兴趣的:(python,依存句法)