首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按主题抽取关键词

按主题抽取关键词
EN

Stack Overflow用户
提问于 2019-06-27 20:39:58
回答 2查看 329关注 0票数 0

我有一个结构化的数据集,其中包含“text”和“topic”列。有人已经进行了单词嵌入/主题建模,因此“text”中的每一行都被分配了一个主题编号(1-200)。我想用主题编号和代表该主题的前5-10个关键词创建一个新的数据框架。

我以前也这样做过,但我通常从头开始运行LDA模型。然后使用LDA创建的对象查找每个主题的关键字。也就是说,我是从我的主管给我的一个中间点开始的,它把我抛到了一边。

数据结构如下:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'text': ['foo bar baz', 'blah bling', 'foo'], 
               'topic': [1, 2, 1]})

那么,我们的计划是创建一个词袋,按“主题”分组,并对单词进行计数吗?或者,在gensim或nltk中是否有我不知道的关键字函数和按列分组选项?

EN

回答 2

Stack Overflow用户

发布于 2019-06-27 22:39:24

我已经创建了一个字典,其中键是主题,文本是附加在每个主题单词后面的单词字符串。

代码语言:javascript
复制
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 '}

然后,我使用计数器包来获取每个主题的词频。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-06-27 23:40:07

我认为这是可行的:

代码语言:javascript
复制
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()

我只需要弄清楚如何遍历每个主题并将其附加到一个数据帧中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56791240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档