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作者的原文介紹已經寫得比較清楚,唯一要注意的是原文章中介紹的依存句法分析器爲早期版本,輸出的依存關係爲英文,現在應該變爲中文,而且從測試結果看,訓練語料應該已經更新了,但是更新爲了那個語料現在還不會是很清楚。

hankcs.jpg

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 徐先生 徐先生 nh nr _ 4 主謂關係 _ _

2 d d _ 4 狀中結構 _ _

3 具體 具體 a ad _ 4 狀中結構 _ _

4 幫助 幫助 v v _ 0 核心關係 _ _

5 r r _ 4 兼語 _ _

6 確定 確定 v v _ 4 動賓關係 _ _

7 u u _ 6 右附加關係 _ _

8 p p _ 15 狀中結構 _ _

9 v v _ 8 介賓關係 _ _

10 雄鷹 雄鷹 n n _ 9 動賓關係 _ _

11 wp w _ 12 標點符號 _ _

12 松鼠 松鼠 n n _ 10 並列關係 _ _

13 c c _ 14 左附加關係 _ _

14 麻雀 麻雀 n n _ 10 並列關係 _ _

15 作爲 作爲 v v _ 6 動賓關係 _ _

16 主攻 主攻 v vn _ 17 定中關係 _ _

17 目標 目標 n n _ 15 動賓關係 _ _

18 wp w _ 4 標點符號 _ _

 

徐先生 --(主謂關係)--> 幫助

--(狀中結構)--> 幫助

具體 --(狀中結構)--> 幫助

幫助 --(核心關係)--> ##核心##

--(兼語)--> 幫助

確定 --(動賓關係)--> 幫助

--(右附加關係)--> 確定

--(狀中結構)--> 作爲

--(介賓關係)--> 把

雄鷹 --(動賓關係)--> 畫

--(標點符號)--> 松鼠

松鼠 --(並列關係)--> 雄鷹

--(左附加關係)--> 麻雀

麻雀 --(並列關係)--> 雄鷹

作爲 --(動賓關係)--> 確定

主攻 --(定中關係)--> 目標

目標 --(動賓關係)--> 作爲

--(標點符號)--> 幫助

 

徐先生 --(主謂關係)--> 幫助

--(狀中結構)--> 幫助

具體 --(狀中結構)--> 幫助

幫助 --(核心關係)--> ##核心##

--(兼語)--> 幫助

確定 --(動賓關係)--> 幫助

--(右附加關係)--> 確定

--(狀中結構)--> 作爲

--(介賓關係)--> 把

雄鷹 --(動賓關係)--> 畫

--(標點符號)--> 松鼠

松鼠 --(並列關係)--> 雄鷹

--(左附加關係)--> 麻雀

麻雀 --(並列關係)--> 雄鷹

作爲 --(動賓關係)--> 確定

主攻 --(定中關係)--> 目標

目標 --(動賓關係)--> 作爲

--(標點符號)--> 幫助

 

麻雀 --(並列關係)-->

雄鷹 --(動賓關係)-->

--(介賓關係)-->

--(狀中結構)-->

作爲 --(動賓關係)-->

確定 --(動賓關係)-->

幫助 --(核心關係)-->

##核心##

最大熵依存句法分析器

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

 

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

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

print("吳彥祖每天都在寫程序")

print(MaxEntDependencyParser.compute("吳彥祖每天都在寫程序"))

hankcs每天都在寫程序

1 hankcs hankcs x x _ 6 限定 _ _

2 每天 每天 r r _ 5 施事 _ _

3 d d _ 5 程度 _ _

4 d d _ 5 程度 _ _

5 v v _ 0 核心成分 _ _

6 程序 程序 n n _ 5 內容 _ _

 

吳彥祖每天都在寫程序

1 吳彥祖 吳彥祖 n nr _ 5 施事 _ _

2 每天 每天 r r _ 5 施事 _ _

3 d d _ 5 程度 _ _

4 d d _ 5 程度 _ _

5 v v _ 0 核心成分 _ _

6 程序 程序 n n _ 5 內容 _ _

 

作者:FontTian



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章