如何使用正则表达式或熊猫过滤 NLTK 的 FreqDist 计数器

Posted

技术标签:

【中文标题】如何使用正则表达式或熊猫过滤 NLTK 的 FreqDist 计数器【英文标题】:How to Filter NLTK's FreqDist counter using regex or pandas 【发布时间】:2018-07-25 05:17:10 【问题描述】:

我有一个 FreqDist 计数器对象,用于计算具有设定长度的元组。长度可以是两个或更多,但在 counter 对象中是相同的。

例如:

('a','b','c')   5
('a','b','d')   8
('c','d','a')   2
('a','a','e')   3
('a','b','e')   3

我的目标是过滤 FreqDist 计数器,在这种情况下使用前两个元素,并识别计数最高的元组。如果元组包含两个元素,那么我将只过滤第一个元素,始终将最后一个元素保留为小丑。

step#1 过滤 ('a','b', *)

('a','b','c')   5
('a','b','d')   8
('a','b','e')   3

步骤#2将 ('a','b','d') 识别为计数最高的元组。

肯定有一种方法可以帮助做到这一点,但我的研究到目前为止还没有发现任何东西。非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

我将你的数据放入数据框

df=pd.DataFrame('count':[5,8,2,3,3],index=[('a','b','c'),('a','b','d') ,('c','d','a'),('a','a','e') ,('a','b','e')])

s=df.loc[list(filter(lambda x: (x[0] == 'a')&(x[1] == 'b'), df.index))]
s
Out[39]: 
           count
(a, b, c)      5
(a, b, d)      8
(a, b, e)      3

s.sort_values('count').tail(1)
Out[44]: 
           count
(a, b, d)      8

【讨论】:

计数器的长度 > 几十万

以上是关于如何使用正则表达式或熊猫过滤 NLTK 的 FreqDist 计数器的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫过滤器函数中反转正则表达式

使用正则表达式过滤熊猫

带有熊猫的日期正则表达式过滤器不起作用

如何使用 nltk 正则表达式模式来提取特定的短语块?

如何使用 NLTK 正则表达式模式用 UP/DOWN 指标注释财经新闻?

NLTK 正则表达式标记器在正则表达式中不能很好地处理小数点