2013-01-16 58 views
15

私は次のコードを持っています。私はapply_freq_filter機能を使用して、頻度カウントよりも小さいコロケーションを除外できることを知っています。しかし、フィルタリングのためにどの周波数を設定するかを決める前に、ドキュメント内のすべてのn-gramタプル(私の場合はバイグラム)の頻度を取得する方法はわかりません。ご覧のとおり、nltkコロケーションクラスを使用しています。Python nltkのn-gram頻度を数えて

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

あなたは ')(' finder.ngram_fd.viewitemsを試してみました動作しますか? –

+0

ありがとうございますfinder.ngram_fd.viewitems()作品! – Rkz

答えて

10

finder.ngram_fd.viewitems()機能は

24

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 

BiGramと頻度分布にアクセスしたら、必要に応じてフィルタリングできます。

希望に役立ちます。

+0

これは、n> 1: の間に 'ファイル '/usr/local/lib/python3.6/site-packages/nltk/util.py"の行467をngrams で残しています。TypeError:'> 'は'str'と 'int'のインスタンス – m02ph3u5

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

'if'の後にインデントを挿入するだけです。コードはPython 3.5の場合に動作します – Vahab

関連する問題