我有一个文件"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