Подсчет n-граммовой частоты в python nltk

У меня есть следующий код. Я знаю, что я могу использовать функцию apply_freq_filter для фильтрации совпадений, которые меньше частоты. Тем не менее, я не знаю, как получить частоты всех n-граммовых кортежей (в моем случае bi-gram) в документе, прежде чем я решит, какую частоту устанавливать для фильтрации. Как вы можете видеть, я использую класс nltk collocations.

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)

Ответы

Ответ 1

Функция finder.ngram_fd.viewitems() работает

Ответ 2

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

Как только у вас есть доступ к BiGrams и частотным распределениям, вы можете фильтровать в соответствии с вашими потребностями.

Надеюсь, что это поможет.