【问题标题】:NLTK Entity Extraction Difference from NLTK 2.0.4 to NLTK 3.0从 NLTK 2.0.4 到 NLTK 3.0 的 NLTK 实体提取差异
【发布时间】:2014-10-14 03:13:25
【问题描述】:

我在尝试运行实体提取功能时遇到了问题。我相信这是版本差异。以下工作示例在 2.0.4 中运行,但不在 3.0 中运行。我确实将一个函数调用:batch_ne_chunk 更改为:nltk.ne_chunk_sents 以防止在 3.0 中引发错误。

def package_get_entities(self,text):
    #text = text[0:300]
    entity_names = []
    chunked = self.get_chunked_sentences(text)
    for tree in chunked:
        entity_names.extend(self.extract_entity_names(tree))
    entity_names = list(set(entity_names))
    return entity_names

def get_chunked_sentences(self,text):
    sentences = nltk.sent_tokenize(text)
    tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
    tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
    chunked_sentences = nltk.ne_chunk_sents(tagged_sentences, binary=True)
    return chunked_sentences

def extract_entity_names(self,t):
    entity_names = []
    if hasattr(t, 'node') and t.node:
        if t.node == 'NE':
            entity_names.append(' '.join([child[0] for child in t]))
        else:
            for child in t:
                entity_names.extend(self.extract_entity_names(child))
    return entity_names

运行函数:

str = 'this is some text about a man named Abraham Lincoln'
entArray = package_get_entities(str)

在 2.0.4 输出中 [Abraham Lincoln] 在 3.0 输出 []

【问题讨论】:

    标签: python versioning nltk


    【解决方案1】:

    我不得不重写:

    if hasattr(t, 'node') and t.node:
    

    收件人:

    if hasattr(t, 'label'):
    

    【讨论】:

    • 但是运行你的代码时出错 :::::: str = 'this is some text about a man named Abraham Lincoln' entArray = package_get_entities(str) TypeError: package_get_entities() 需要 2 个参数(1 个)
    • @rzach,我的例子是在一个类的上下文中。如果你从函数参数列表中删除“self”,你应该没问题。
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多