我有下面的代码。 我知道,我可以使用apply_freq_filter
功能,以筛选出小于频率计数搭配。 不过,我不知道如何让所有的n元元组的频率(在我的情况下双字母)的文件中,在我决定什么频率进行过滤设置。 正如你可以看到我使用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带有自己的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
一旦你获得了双字母组和频率分布,您可以根据自己的需要进行筛选。
希望帮助。
该finder.ngram_fd.viewitems()
函数作品
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()