美文网首页
命名实体识别,关系抽取

命名实体识别,关系抽取

作者: 青椒rose炒饭 | 来源:发表于2019-07-11 20:39 被阅读0次

    命名实体(NEs):确切的名词短语,知识特定的个体,组织或者人,日期等。可以分解为两个任务:确定边界和确定类型。有一个问题是需要注意的,能够使用命名实体识别的句子必须his已经标注的,大概是因为命名实体识别是基于块的吧。

    import nltk
    from nltk.corpus import conll2000
    
    sent = nltk.corpus.treebank.tagged_sents()[22]
    print(sent)
    
    use_binary = nltk.ne_chunk(sent,binary=True)
    #使用for循环将没有识别出来的命名实体过滤掉,
    #识别出来的会是树结构,不是命名实体的就是元组
    for subtree in use_binary:
        if isinstance(subtree,type(use_binary)): print(subtree)
    
    print("------------------------")
    
    without_binary = nltk.ne_chunk(sent)
    for subtree in without_binary:
        if isinstance(subtree,type(without_binary)): print(subtree)
    
    使用和不使用binary的区别

    使用了词典binary之后命名实体直接标注为NE,不使用是分别标注的。

    关系抽取

    命名实体识别之后就能提取他们之间存在的关系了,进行这一不是将文中所有的命名实体和关系的三元组(X,a,Y)都提取出来,a是命名实体X和Y之间的字符串,然后使用正则表达式从中抽取我们查找的关系。

    import nltk
    import re
    IN = re.compile(r'.*\bin\b(?!\b.+ing)')
    for doc in nltk.corpus.ieer.parsed_docs('NYT_19980315'):
        for rel in nltk.sem.extract_rels('ORG','LOC',doc,corpus='ieer',pattern=IN):
            print(nltk.sem.rtuple(rel))
    

    其中正则表达式是为了去除in doing对结果的影响。\b匹配单词之间的空格选定单词非ing结尾,前面有 in的结构,
    ?的作用要匹配后面的需要先匹配前面的,!表示取反。

    运行结果

    相关文章

      网友评论

          本文标题:命名实体识别,关系抽取

          本文链接:https://www.haomeiwen.com/subject/gcdjkctx.html