如何使用正则表达式或熊猫过滤 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 计数器的主要内容,如果未能解决你的问题,请参考以下文章