2017-01-04 9 views
1

Благодаря "ALVAS" код отсюда, Named Entity Recognition with Regular Expression: NLTK и в качестве примера:NLTK Названный Распознавание объектов для столбца в наборе данных

from nltk import ne_chunk, pos_tag 
from nltk.tokenize import word_tokenize 
from nltk.tree import Tree 

def get_continuous_chunks(text): 
    chunked = ne_chunk(pos_tag(word_tokenize(text))) 
    prev = None 
    continuous_chunk = [] 
    current_chunk = [] 

    for i in chunked: 
     if type(i) == Tree: 
      current_chunk.append(" ".join([token for token, pos in i.leaves()])) 
     elif current_chunk: 
      named_entity = " ".join(current_chunk) 
      if named_entity not in continuous_chunk: 
       continuous_chunk.append(named_entity) 
       current_chunk = [] 
     else: 
      continue 

    return continuous_chunk 

txt = 'The new GOP era in Washington got off to a messy start Tuesday as House Republicans,under pressure from President-elect Donald Trump.' 
print (get_continuous_chunks(txt)) 

выход равен:

[ 'GOP' «Вашингтон», «Дом республиканцы», «Дональд Трамп»]

Я заменил этот текст с этим: txt = df['content'][38] из моего набора данных, и я получаю этот результат:

[ 'Ина', 'Тори К.', 'Мартин Cuilla', 'Филипп К', 'John J Lavorato']

Этот набор данных имеет множество строк и один столбец с именем «содержание '. Мой вопрос: как я могу использовать этот код для извлечения имен из этого столбца для каждой строки и хранения этих имен в другом столбце и соответствующих строках?

import os 
from nltk.tag import StanfordNERTagger 
from nltk.tokenize import word_tokenize 
from nltk.tree import Tree 
st = StanfordNERTagger(stanford_classifier, stanford_ner_path, encoding='utf-8') 
text = df['content'] 
tokenized_text = word_tokenize(text) 
classified_text = st.tag(tokenized_text) 
print (classified_text) 

ответ

2

apply Попробуйте:

df['ne'] = df['content'].apply(get_continuous_chunks) 

Для кода в вашем втором примере создать функцию и применять его таким же образом:

def my_st(text): 
    tokenized_text = word_tokenize(text) 
    return st.tag(tokenized_text) 

df['st'] = df['content'].apply(my_st) 
+0

Спасибо так много. –

+0

Не могли бы вы рассказать мне, хочу ли я сделать то же самое с этим кодом, что я могу сделать? –

+0

Я добавил его на свой вопрос. Спасибо –

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

  • Нет связанных вопросов^_^