Извлечь ключевые слова по теме - PullRequest
0 голосов
/ 27 июня 2019

У меня есть структурированный набор данных со столбцами «текст» и «тема». Кто-то уже провел встраивание слов / моделирование тем, поэтому каждой строке в тексте присваивается номер темы (1-200). Я хотел бы создать новый фрейм данных с номером темы и 5–10 ключевыми словами, представляющими эту тему.

Я делал это раньше, но обычно начинаю с нуля и запускаю модель LDA. Затем используйте объекты, созданные LDA, чтобы найти ключевые слова по теме. Тем не менее, я начинаю с середины, которую дал мне мой начальник, и это сбивает меня с толку.

Структура данных выглядит следующим образом:

import pandas as pd
df = pd.DataFrame({'text': ['foo bar baz', 'blah bling', 'foo'], 
               'topic': [1, 2, 1]})

Итак, планируется ли создать пакет слов, сгруппировать «по темам» и сосчитать слова? Или есть функция и группировка ключевых слов по столбцу, о которых я не знаю в gensim или nltk?

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Я создал словарь, в котором ключи - это тема, а текст - строка слов, добавляющая слова каждой темы.

d = dict()
for index, ser in df.iterrows():
    print(index, df.loc[index]['text'])
    topic  = df.loc[index]['topic']
    if topic not in d.keys():
        d[df.loc[index]['topic']] = ""
    d[df.loc[index]['topic']] += ( df.loc[index]['text']) + " "

print(d)
#Output
{1: 'foo bar baz foo ', 2: 'blah bling '}

Тогда я использовал пакет Counter, чтобы получить частоту слов для каждой темы.

from collections import Counter
for key in d.keys():
    print(Counter(d[key].split()))

#Output
Counter({'foo': 2, 'baz': 1, 'bar': 1})
Counter({'blah': 1, 'bling': 1})
0 голосов
/ 27 июня 2019

Я думаю, что это работает:

test = pd.DataFrame(df.groupby("topic")['document'].apply(lambda documents: ''.join(str(documents))))

from nltk import Metric, Rake

r = Rake(ranking_metric= Metric.DEGREE_TO_FREQUENCY_RATIO, language= 'english', min_length=1, max_length=4)

r.extract_keywords_from_text(test.document[180])
r.get_ranked_phrases()

Мне просто нужно выяснить, как пройтись по каждой теме и добавить ее в фрейм данных.

...