【问题标题】:Extract key words by topic按主题提取关键词
【发布时间】:2019-11-09 11:42:12
【问题描述】:

我有一个包含“文本”和“主题”列的结构化数据集。有人已经进行了词嵌入/主题建模,因此“文本”中的每一行都分配了一个主题编号 (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 中是否有我不知道的关键字函数和按列选项分组?

【问题讨论】:

  • 您可以使用 gensim 包中的 print_topic() 或 print_topics() 方法。举个例子here
  • @Vishal 这些都假设我已经在我的计算机上运行了 LDA。我没有,我只有给我的主题。
  • 好的。然后您需要按主题组合单词并创建单词计数器字典。
  • @Vishal 好的。你有类似的链接/教程吗?感谢您的帮助。
  • 检查我的答案。我不确定这是否是您的要求。

标签: python nlp nltk gensim


【解决方案1】:

我认为这可行:

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()

我只需要弄清楚如何循环访问每个主题并将其附加到数据框。

【讨论】:

    【解决方案2】:

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

    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})
    

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      相关资源
      最近更新 更多