hadoop小学生
精灵王
精灵王
  • 注册日期2018-09-13
  • 发帖数160
  • QQ3234520070
  • 火币360枚
  • 粉丝0
  • 关注0
阅读:3031回复:0

pyhanlp 两种依存句法分类器

楼主#
更多 发布于:2018-12-21 11:44

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

图片:DKH发布图.jpg


基于最大熵的依存句法分析器
经过测试这个句法分析器为真的很坑,绝对不建议使用,测试代码见最后,作者原文介绍请点击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

喜欢0 评分0
DKHadoop用着还不错!
游客

返回顶部