31

次のコードがあります。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)
4

4 に答える 4

47

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 と度数分布にアクセスしたら、必要に応じてフィルター処理できます。

それが役立つことを願っています。

于 2013-01-19T10:05:38.807 に答える
12

機能finder.ngram_fd.viewitems()が働く

于 2013-01-21T01:22:09.850 に答える