python nltk n-gram

contando la frecuencia de n-gram en Python nltk



(3)

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

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 de n-gram (en mi caso bi-gramo) en un documento, antes de decidir qué frecuencia configurar para el filtrado. Como puedes 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.


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()