• 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	内容	_	_
    
  • 相关阅读:
    Threading in C# Learining
    win7 设置IIS
    Aforge视频采集
    C# 删除文件夹下的所有文件
    C# Timer实现实时监听
    Java中堆内存和栈内存详解
    彻底掌握 AQS
    四种线程同步/互斥方式小结
    CyclicBarrier可重用的循环栅栏
    答疑解惑之ExecutorService——shutdown方法和awaitTermination方法使用
  • 原文地址:https://www.cnblogs.com/fonttian/p/9819774.html
Copyright © 2020-2023  润新知