0

こんにちは私は最近Pythonで遊んでいましたが、簡単そうなので、Pythonのnltkでコーパスを見つけました。試してみたとき

text1.concordance("Moby")

それは私に文の数とMobyという単語を含む文の表示を与えてくれました、かっこいい。

そこで、MobyとAhabという名前のすべての文を見つけることができるかどうかをテストしようとしましたが、残念ながら、エラーが発生します。

私は何か間違ったことをしていますか、それとも両方の名前を含むすべての文を取得できる必要がありますか?nltkから使用すべき別の関数はありますか?Oo

おそらく簡単ですが、私がそれを見るのはそれほど簡単ではありません...誰かが助けてくれることを願っています、ありがとう。

PS:コードを書く必要があるなら、例がいいでしょう。^^

編集:誰かがエラーを求めたので、私も書いたコードを書きます。

import nltk
from nltk.book import *

text1.concordance("Moby","Ahab")

エラーが発生します:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    text1.concordance('Moby','Ahab')
  File "C:\Programmering\Python27\lib\site-packages\nltk\text.py", line 314, in concordance
    self._concordance_index.print_concordance(word, width, lines)
  File "C:\Programmering\Python27\lib\site-packages\nltk\text.py", line 174, in print_concordance
    half_width = (width - len(word) - 2) / 2
TypeError: unsupported operand type(s) for -: 'str' and 'int'

私はちょうど走っているようないくつかの試合を得るだろうと推測していました:

text1.concordance("Moby")

ここで84試合がありました。

4

2 に答える 2

0

でそれを行うことはできませんconcordance。1つの単語のみを受け入れ、結果を出力します。それらをリストとして取得する(合理的な)方法はないため、それらをさらにフィルタリングすることはできません。問題は、Text背後text1にあるオブジェクトが単純なインタラクティブな探索にのみ適していることです。nltkの本がなぜそれで始まるのか理解できませんでした。したがって、忘れてText、章の残りをスキップして、第2章に進んでください。MobyDickはgutenbergコーパスの一部であるため、その文を繰り返して、次のように答えを得ることができます。

from nltk.corpus import gutenberg
for s in gutenberg.sents('melville-moby_dick.txt'):
    if 'Ahab' in s and 'Moby' in s:
        print " ".join(s)
于 2012-04-28T12:44:03.787 に答える
-1

次のように、一致を見つけたいすべての名前のリストを作成できます。

name_list = ['Moby', 'Ahab']

そのためのコードは次のようになります。

import nltk
from nltk.book import *
name_list = ['Moby', 'Ahab']
for name in name_list: 
    text1.concordance(name)
于 2016-09-07T08:32:03.173 に答える