Благодаря коду "alvas" отсюда, Распознавание именованных объектов с регулярным выражением: 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))
вывод:
['Республиканская партия', 'Вашингтон', 'Республиканцы Палаты представителей', 'Дональд Трамп']
Я заменил этот текст следующим: txt = df['content'][38]
из моего набора данных, и я получил такой результат:
['Ина', 'Тори К.', 'Мартин Куилла', 'Филлип К.', 'Джон Дж. Лаворато']
Этот набор данных имеет много строк и один столбец с именем «контент». Мой вопрос: как я могу использовать этот код для извлечения имен из этого столбца для каждой строки и сохранения этих имен в другом столбце и соответствующих строках?
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)