2012-03-19 5 views
1

これで、nltkの作業を開始しました。条件変数を使用するために一致モジュールを取得するのに問題があります。私はラテン語のテキストで任意の単語に一致を返したいと思いますが、言語が変わるので、私は、幹を指定し、幹を含むコーパス内の単語を特定し、それに対する一致を返すことができるようにしたい。私が使用しているコードは次のとおりです。エラーが返されますnltkの一致モジュールで条件変数を使用

book1 = open('Book1.txt', 'rU').read() 
token1 = nltk.word_tokenize(book1) 
text1 = nltk.Text(token1) 

word = raw_input("What stem do you want to search?\n > ") 

text1.concordance([w for w in text1 if w.startswith(word)]) 

Traceback (most recent call last): 
    File "C:\Users\admin\Desktop\start_nltk_horace.py", line 68, in <module> 
    concordance() 
    File "C:\Users\admin\Desktop\start_nltk_horace.py", line 49, in concordance 
    text1.concordance([w for w in text1 if w.startswith(word)]) 
    File "C:\Python27\lib\site-packages\nltk\text.py", line 314, in concordance 
    self._concordance_index.print_concordance(word, width, lines) 
    File "C:\Python27\lib\site-packages\nltk\text.py", line 177, in print_concordance 
    offsets = self.offsets(word) 
    File "C:\Python27\lib\site-packages\nltk\text.py", line 156, in offsets 
    word = self._key(word) 
    File "C:\Python27\lib\site-packages\nltk\text.py", line 312, in <lambda> 
    key=lambda s:s.lower()) 
AttributeError: 'list' object has no attribute 'lower' 

ちょうど私が何の問題もなく探しています何text1.concordance(word)リターンを指定する(提供I入力、完全に辞退ワード)しかし、私は単語の異なる宣言のすべてのための一致を得るために関数を6回回繰り返す必要があります。

答えて

1

私はこの問題は、あなたはそれが唯一の文字列を受け付けたときに、単語のリストをNLTKのconcordance()機能を提供しようとしているということだと思います。代わりに以下のことを試してみてください。

my_concordances = [] 
my_inputs = [elem for elem in text1 if elem.startswith(word)] 
for input in my_inputs: 
    my_concordances.append(text1.concordance(input)) 

その後、my_concordancesは、各エントリは、生の入力文字列で始まっ異なる単語の一致であるリストとして終わる必要があります。また、あなたはちょうどmy_inputsの長さを確認することができるので、concordance()関数によって返される特定のどのようなデータ型に応じてmy_concordancesのためのスペースを事前に割り当てることを検討することができます。それが問題であればスピードが向上するかもしれません。

this questionもあなたにとって興味深いことに注意してください。 concordance()の詳細については、こちらを参照してください。

+0

これは完璧に働いて、ありがとうございました! – Faulconbridge

関連する問題