我有一个结构化的数据集,其中包含“文本”和“主题”列。有人已经进行了词嵌入/主题建模,因此“文本”中的每一行都分配了一个主题编号(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中不存在关键字功能和按列选项分组?
答案 0 :(得分:1)
我创建了一个词典,其中的键是主题,文本是在每个主题的单词后面附加的单词字符串。
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})
答案 1 :(得分:0)
我认为这可行:
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()
我只需要弄清楚如何遍历每个主题并将其附加到数据框。