【问题标题】:Use gensim phraser on pandas column using apply method使用 apply 方法在 pandas 列上使用 gensim 短语
【发布时间】:2020-06-12 11:22:16
【问题描述】:

我正在尝试在 df 的列上使用 gensim 短语。下面给出了示例df

col1   col2
1      "this is test1 and is used for test1"
2      "this is content of row which is second row"
3      "this is the third row"

我写了一个二元组的方法

def bigrams(text):
    bigram = Phrases(text, min_count=1)
    bigram_mod = Phraser(bigram)
    return [bigram_mod[doc] for doc in text]

我试过了

df['col2'].apply(bigrams)
df['col2'].apply(lambda x: bigrams([x])) - so that the text is enclosed in list

但我将字符作为输出而不是二元组。我在这里错过了什么。

【问题讨论】:

    标签: python pandas gensim n-gram phrase


    【解决方案1】:

    Phrases 需要一个已经被标记化的语料库。

    您的问题目前没有显示您提供给 bigrams() 函数的 text 的值,但不能将这些行值作为纯字符串:您必须将它们分解为您想要的单词,不知何故,首先。

    另外:不要期望从一个玩具大小的示例中获得任何有意义的结果,因为Phrases 需要大量数据才能使其基于统计的单词配对有用。请注意,即使有用,配对通常也不符合人类水平关于有意义的分组/实体是什么的想法——无论是缺少我们想要的配对,还是进行我们不想要的配对,甚至仔细的参数调整都会离开这种“不自然”的选择。但是,这种经过Phrases 处理的文本仍然通常用于后端分类/信息检索目的。

    【讨论】:

    • 我尝试在列表中有标记的列上使用应用。在这种情况下,每个单词在输出中被拆分为字符。问题中的文本是示例文本。我不能把实际的文字放在这里。
    【解决方案2】:

    所以 gensim phraser 需要一个令牌列表 所以我的解决方案是 将文本转换为标记 将标记转换为列表列表

    df['tokens']=df['text'].apply(tokenization_function)
    df['tokens']=df['tokens'].apply(lambda x:[x])
    df['bigrams']=df['tokens'].apply(bigrams)
    

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2022-06-11
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2016-06-13
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多