2016-09-25 19 views
0

テキストファイルからフレーズカウントを取得しようとしていますが、これまでのところ、単語数(以下を参照)しか取得できません。テキストファイルに2単語のフレーズが現れる回数をカウントするには、このロジックを拡張する必要があります。NLTKを使用しているPythonのフレーズをカウントする

フレーズは、私の理解からNLTKのロジックを使用して定義/グループ化することができます。私は、コレクションの機能は私が望む結果を得るために必要なものだと信じていますが、NLTKのドキュメントを読むことからそれを実装する方法についてはわかりません。すべてのヒント/助けをいただければ幸いです。

+0

あなたは2つの特定の単語をお探しですか?一緒に現れるどんな2つの単語フレーズ? – accraze

+0

一緒に表示される2つの単語 – bkubs557

+1

[nltk.bigrams()](http://www.nltk.org/api/nltk.html#nltk.util.bigrams)をお探しですか? – alexis

答えて

0

collocationsモジュールを使用して、2つの単語フレーズをすべて取得できます。このツールは、コーパス内で連続して頻繁に現れる単語を識別します。

2つの語句を見つけるには、最初に単語の頻度とその出現を他の単語のコンテキストで計算する必要があります。 NLTKにはこれを行うことができるBigramCollocationFinderクラスがあります。ここでは、バイグラムコロケーションを見つけることができる方法は次のとおりです。

import re 
import string 
import nltk 
from nltk.tokenize import word_tokenize, sent_tokenize 
from nltk.collocations import BigramCollocationFinder, BigramAssocMeasures 

frequency = {} 
document_text = open('Words.txt', 'r') 
text_string = document_text.read().lower() 
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string) 

finder = BigramCollocationFinder.from_words(match_pattern) 
bigram_measures = nltk.collocations.BigramAssocMeasures() 
print(finder.nbest(bigram_measures.pmi, 2)) 

NLTKコロケーションドキュメント:http://www.nltk.org/api/nltk.html?highlight=collocation#module-nltk.collocations

+0

ありがとうございました!私はtxtファイルをファインダ関数に渡そうとすると、単に[[( 'W'、 'O')、( 'd'、 's')] "を出力します。ファインダーに渡す前に私のtxtファイルに何かする必要がありますか?その証拠からは明らかではなかった。 – bkubs557

+0

私の答えでコードを更新しました。代わりに 'match_pattern'をファインダに渡す必要があると思います – accraze

0

nltk.brigramsは、特定のテキスト内の単語のペアとその周波数を返します。これを試してみてください:

import nltk 
from nltk import bigrams 

document_text = open('Words.txt', 'r') 
text_string = document_text.read().lower() 
tokens = word_tokenize(text_string) 
result = bigrams(tokens) 

出力:

[(('w1', 'w2'), 6), (('w3', 'w4'), 3), (('w5', 'w6'), 3), (('w7', 'w8'), 3)...] 
関連する問題