Любой обходной путь для манипулирования NER (распознавание именованных сущностей) как новых столбцов в панде dataframe? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть праздничный набор новостей, и я могу извлечь из них распознавание имен.Сначала я выяснил, как получить непрерывный NER (распознавание именованных сущностей) из списка предложений с помощью инструмента nltk.Теперь я хочу разделить NER по теме, местоположению и основной теме и добавить их в качестве нового столбца.Вот то, что я попробовал:

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

import nltk
nltk.download('maxent_ne_chunker')
nltk.download('words')

def get_continuous_chunks(text):
    chunked = ne_chunk(pos_tag(word_tokenize(text)))
    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

вот вывод вышеуказанной вспомогательной функции:

res=[]
for x in df.sentences:
    ner=get_continuous_chunks(x)
    res.append(ner)

[['Дженнифер Энистон', 'ITV', 'NBC', «Энистон»], [«Бранджелина»,
«Брэд Питт», «Анджелина Джоли», «Брэд», «Друзья», «Дженнифер Энистон», «Брэд Джен», «Анж», «Джен»,«Бранджелина Брэд», «Джен Брэд», «Анджелина»], [«Дженнифер Энистон», «США», «Энистон», «Нью-Йорк Пост», «InTouch»], [«Дженнифер Энистон», «Мексика»], ['Дженнифер Энистон', 'Друзья', 'Мэтт Лебланк', 'Звезда', 'Пол', 'Дженнифер'], ['Дженнифер Энистон', 'Джастин Теру', 'Мари Клэр',
'Энистон',' Huffington Post '], [' Дженнифер Энистон ',' Джастин Теру ',' Star Magazine ',' Дженнифер Энистон Дженнифер Энистон ',
' Брэд Питт ',' Брэд Питт Дженнифер Энистон ',' Анджелина Джоли ',
'Дженнифер']]

обновление: фрагмент текущего вывода :

вот фрагмент текущего вывода, я хочу извлечь person,location и другие event и добавьте их в качестве нового столбца в исходный кадр данных.Вот что я получил:

enter image description here

Теперь я хочу дополнительно извлечь имя человека с помощью TFIDF и news_source, например New York Post, Star Magazine или аналогичный новый тип столбца.Я не знаю, как это сделать.Любые мысли, чтобы это произошло?

желаемый вывод :

в основном, я хочу изменить вывод непрерывного NER человеком, местоположением, источником в виде новых столбцов вdataframe.Вот мой пример вывода:

df=pd.DataFrame({'sentence':['longtextlongtextlongtextlongtextlongtext', 'longtextlongtextlongtextlongtextlongtext', 'longtextlongtextlongtextlongtextlongtext' ],'celebretity_name': ['Jennifer Aniston','Brad Pitt','Jennifer Aniston'], 'source':['NBC','Friends','New York Post']})

Может кто-нибудь указать мне, как это сделать?Можно ли разделить извлеченный NER на celebrity name, news_source как новый столбец в кадре данных?Какие-нибудь мысли?Спасибо

1 Ответ

0 голосов
/ 26 февраля 2019

TL; DR

Это будет медленно, но это должно работать:

df['celebretity_name'] = df.sentences.apply(get_continuous_chunks)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...