zoukankan      html  css  js  c++  java
  • pyhanlp 两种依存句法分类器

    依存句法分析器

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

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

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

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

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

    经过测试这个句法分析器为真的很坑,绝对不建议使用,测试代码见最后,作者原文介绍请点击:http://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	内容	_	_
    
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/fonttian/p/9819774.html
Copyright © 2011-2022 走看看