2014-10-14 2 views
1

У меня возникла проблема с попыткой запуска функции извлечения сущности. Я считаю, что это разница в версиях. Следующий рабочий пример работает в версии 2.0.4, но не работает в версии 3.0. Я сделал один вызов функции: batch_ne_chunk: nltk.ne_chunk_sents, чтобы предотвратить ошибку, возникающую в 3.0.NLTK Отвлечение сущности от NLTK 2.0.4 до NLTK 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 

Запуск FUNC:

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

В 2.0.4 выходов [Abraham Lincoln] В 3.0 выходы []

ответ

1

пришлось переписывать:

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

К :

if hasattr(t, 'label'): 
+0

Но Im получаю ошибку запуска кода :::::: ул = «это какой-то текст о человеке по имени Авраам Линкольн» entArray = package_get_entities (ул) TypeError: package_get_entities() занимает ровно 2 аргумента (1 данный) – rzach

+0

@rzach, мой пример находится в контексте класса. если вы удалите «self» из списка параметров функции, вы должны быть в порядке. –

Смежные вопросы