在nltk.FreqDist中执行阈值处理

时间:2013-11-01 08:03:03

标签: python nltk

我想在我的FreqDist中使用我的常用词汇。或者有freq>的单词第

我该怎么做?

查看doc后,我找不到thresholdcut之类的内容。此外,只能为每个单独的bin调用freq()函数。

当然我可以编写像

这样的特殊代码
[(x,f) for x in FreqDist.samples if FreqDist.freq(x) > p]

但它看起来并不优雅。

1 个答案:

答案 0 :(得分:0)

根据您提到的docsFreqDist类似dict的方法(keys()items()等)返回样本和/或其频率排序降低频率顺序。因此,您可以使用下面的代码仅过滤掉频率足够高的样本:

above_p = []
for (x, f) in FreqDist.iteritems():
    if not f > p:
        break
    above_p.append((x, f))

或者单行:

from itertools import takewhile
above_p = [(x, f) for (x, f) in takewhile(lambda x, f: f > p, FreqDist.iteritems())]

至于前k:

top_k = FreqDist.items()[:k]

或者:

from itertools import islice
top_k = list(islice(FreqDist.iteritems(), k))