Распознавание именованных объектов NLTK для столбца в наборе данных

Благодаря коду "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)

person Alex Ramires    schedule 04.01.2017    source источник


Ответы (1)


Попробуйте 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)
person DYZ    schedule 04.01.2017
comment
Не могли бы вы сказать мне, хочу ли я сделать то же самое с этим кодом, что я могу сделать? - person Alex Ramires; 04.01.2017
comment
Я добавил это к моему вопросу. Спасибо. - person Alex Ramires; 04.01.2017
comment
Добавил пример в ответ. - person DYZ; 04.01.2017