contando la frecuencia de n-gram en Python nltk

tengo el siguiente código. Sé que puedo usar la función apply_freq_filter para filtrar colocaciones que son menores que un conteo de frecuencia. Sin embargo, no sé cómo obtener las frecuencias de todas las tuplas n-gram (en mi caso bi-gramo) en un documento, antes de decidir qué frecuencia configurar para el filtrado. Como puede ver, estoy usando la clase de colocaciones nltk.

 import nltk from nltk.collocations import * line = "" open_file = open('a_text_file','r') for val in open_file: line += val tokens = line.split() bigram_measures = nltk.collocations.BigramAssocMeasures() finder = BigramCollocationFinder.from_words(tokens) finder.apply_freq_filter(3) print finder.nbest(bigram_measures.pmi, 100) 

NLTK viene con su propio bigrams generator , así como una conveniente función FreqDist() .

 f = open('a_text_file') raw = f.read() tokens = nltk.word_tokenize(raw) #Create your bigrams bgs = nltk.bigrams(tokens) #compute frequency distribution for all the bigrams in the text fdist = nltk.FreqDist(bgs) for k,v in fdist.items(): print k,v 

Una vez que tenga acceso a los BiGrams y las distribuciones de frecuencia, puede filtrar según sus necesidades.

Espero que ayude.

La función finder.ngram_fd.viewitems() funciona

 from nltk import FreqDist from nltk.util import ngrams def compute_freq(): textfile = open('corpus.txt','r') bigramfdist = FreqDist() threeramfdist = FreqDist() for line in textfile: if len(line) > 1: tokens = line.strip().split(' ') bigrams = ngrams(tokens, 2) bigramfdist.update(bigrams) compute_freq()