подсчет частоты n-грамм в python nltk
У меня есть следующий код. Я знаю, что могу использовать функцию apply_freq_filter
для фильтрации словосочетаний, которые меньше, чем число частот. Однако я не знаю, как получить частоты всех N-граммовых кортежей (в моем случае bi-gram) в документе, прежде чем я решу, какую частоту установить для фильтрации. Как вы можете видеть, я использую класс коллокаций 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)
3 ответа:
NLTK поставляется со своей собственной
bigrams generator
, а также удобной функцией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
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()