在python NLTK计数n-gram中的频率(counting n-gram frequency

2019-07-18 07:23发布

我有下面的代码。 我知道,我可以使用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)

Answer 1:

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

一旦你获得了双字母组和频率分布,您可以根据自己的需要进行筛选。

希望帮助。



Answer 2:

finder.ngram_fd.viewitems()函数作品



Answer 3:

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


文章来源: counting n-gram frequency in python nltk