首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NLTK2.0.4到NLTK3.0的NLTK实体提取差异

从NLTK2.0.4到NLTK3.0的NLTK实体提取差异
EN

Stack Overflow用户
提问于 2014-10-14 03:13:25
回答 1查看 864关注 0票数 1

我遇到了一个问题,试图运行一个实体提取函数。我相信这是版本的不同。下面的工作示例在2.0.4中运行,但在3.0中不运行。我确实更改了一个函数调用: batch_ne_chunk到: nltk.ne_chunk_sents,以防止在3.0中抛出错误。

代码语言:javascript
复制
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

运行功能:

代码语言:javascript
复制
str = 'this is some text about a man named Abraham Lincoln'
entArray = package_get_entities(str)

在2.0.4中,亚伯拉罕·林肯在3.0中产出[]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-14 18:38:40

我不得不重写:

代码语言:javascript
复制
if hasattr(t, 'node') and t.node:

至:

代码语言:javascript
复制
if hasattr(t, 'label'):
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26352041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档