我如何在Python中使用n-gram分析得到短语的排序频率



我有一个文件"filename.txt"。我需要得到所有的n-gram,比如三元组,以及它们的频率,以一种有序的方式。我的目标基本上是得到最常用的短语。

我如何使用nltk/scikit-learn做到这一点?

这是一个没有nltk的解决方案:

from collections import deque
def window(seq, n=3):
    it = iter(seq)
    win = deque((next(it, None) for _ in xrange(n-1)), maxlen=n)
    for e in it: 
        win.append(e)
        yield tuple(win)
def sorted_grams(doc, n=3):
    counts = {}
    for ngram in window(doc, n): 
        counts[ngram] = counts.get(ngram, 0) + 1 
    return sorted(((v,k) for k,v in counts.items()), reverse=True)

example_doc = 'it is a small world after all it is a small world after all'
for s in sorted_grams(example_doc.split(), 3): 
    print s

最新更新