2014-11-30 2 views
3

Привет, я пытаюсь использовать этот код в NLTK3: - Как-то мне удалось исправить строку-6 для работы с версией NLTK версии 3. Но stil цикл for ничего не возвращает.проблемы с пересечением ne chunks в NLTK3

import nltk 
sample = """ some random text content with names and countries etc"""  
sentences = nltk.sent_tokenize(sample) 
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences] 
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences] 
chunked_sentences=nltk.chunk.ne_chunk_sents(tagged_sentences) #Managed to fix this to work with version_3 

for i in chunked_sentences: 
    if hasattr(i,'label'): 
     if i.label()=='NE': 
      print i 

Кроме того, если я пытаюсь отлаживать, я вижу этот вывод:

for i in chunked_sentences: 
    if hasattr(i,'label') and i.label: 
     print i.label 
S 
S 
S 
S 
S 
S 
S 
S 

Тогда как я могу проверить его на «СВ». Theres что-то не так с NLTK-3, что Im действительно не в состоянии вычислить. Помогает

ответ

3

Кажется, вы повторяете предложения. Я предполагаю, что вы хотите перебирать отдельные узлы, содержащиеся в предложениях.

Он должен работать так:

for sentence in chunked_sentences: 
    for token in sentence: 
     if hasattr(token,'label') and token.label() == 'NE': 
      print token 

Edit: На будущее, то, что прочат меня к тому, что вы итерацию над предложениями просто, что корневой узел для предложения обычно помечены «S ».

+0

Спасибо, странно, мне пришлось заменить «NE» на «ЧЕЛОВЕК» для его вывода (в то время как многие многие упоминали «NE»). Любые причины? : if hasattr (токен, 'label') и token.label() == 'PERSON': – rzach

+1

@rzach 'PERSON', как вы, наверное, знаете, является особым случаем «NE». Я просмотрел код для [ne_chunk_sents] (http://www.nltk.org/_modules/nltk/chunk.html#ne_chunk_sents). Если вы установите '' binary = True'', он скорее всего вернет 'NE'. По умолчанию используется '' binary = False'', и в этом случае используется более мелкозернистая модель. Эти модели обычно различают PERSON, LOCATION и т. Д. Однако я не уверен в конкретных классах в реализации NLTK. –

+0

@rzach Также не стесняйтесь принимать мой ответ. –