开发者社区> 问答> 正文

来自Pandas 专栏的 Ngrams

我有一个Pandas的dataframe,其中包含以下各列:

第1栏

['if', 'you', 'think', 'she', "'s", 'cute', 'now', ',', 'you', 'should', 'have', 'see', 'her', 'a', 'couple', 'of', 'year', 'ago', '.']
['uh', ',', 'yeah', '.', 'just', 'a', 'fax', '.']

第2栏

if you think she 's cute now , you should have see her a couple of year ago .
uh , yeah . just a fax .

等等

我的目标是分析计算dataframe(特别是已经被定格的第2列)的二元组,三元组,四元组。

我尝试了以下方法:

import nltk
from nltk import bigrams
from nltk import trigrams

trig = trigrams(df ["Column2"])
print (trig)

但是,我有以下错误

<generator object trigrams at 0x0000013C757F1C48>

我的最终目标是要能够打印出最上面的X字母,三字母组等。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:36:46 582 0
1 条回答
写回答
取消 提交回答
  • 将列表理解与split一起使用,并首先对所有三字母组合进行展平:

    df = pd.DataFrame({'Column2':["if you think she cute now you if uh yeah just",
                                  'you think she uh yeah just a fax']}) 
    
    from nltk import trigrams
    
    L = [x for x in df['Column2'] for x in trigrams(x.split())]
    print (L)
    [('if', 'you', 'think'), ('you', 'think', 'she'), ('think', 'she', 'cute'), 
     ('she', 'cute', 'now'), ('cute', 'now', 'you'), ('now', 'you', 'if'), 
     ('you', 'if', 'uh'), ('if', 'uh', 'yeah'), ('uh', 'yeah', 'just'), 
     ('you', 'think', 'she'), ('think', 'she', 'uh'), ('she', 'uh', 'yeah'),
     ('uh', 'yeah', 'just'), ('yeah', 'just', 'a'), ('just', 'a', 'fax')]
    

    然后通过collections.Counter计算元组:

    from collections import Counter
    c = Counter(L)
    print (c)
    Counter({('you', 'think', 'she'): 2, ('uh', 'yeah', 'just'): 2, ('if', 'you', 'think'): 1,
             ('think', 'she', 'cute'): 1, ('she', 'cute', 'now'): 1, ('cute', 'now', 'you'): 1,
             ('now', 'you', 'if'): 1, ('you', 'if', 'uh'): 1, ('if', 'uh', 'yeah'): 1, 
             ('think', 'she', 'uh'): 1, ('she', 'uh', 'yeah'): 1, 
             ('yeah', 'just', 'a'): 1, ('just', 'a', 'fax'): 1})
    

    对于最高值,请使用collections.Counter.most_common

    top = c.most_common(5)
    print (top)
    [(('you', 'think', 'she'), 2), (('uh', 'yeah', 'just'), 2), 
     (('if', 'you', 'think'), 1), (('think', 'she', 'cute'), 1),
     (('she', 'cute', 'now'), 1)]
    

    回答来源:stackoverflow

    2020-03-24 23:36:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
即学即用的Pandas入门与时间序列分析 立即下载
中文:即学即用的Pandas入门与时间序列分析 立即下载
低代码开发师(初级)实战教程 立即下载