0

このエラーが発生する理由がわかりません。助けてください

>>> mylist = []
>>> file1 = open("medDict.txt", "r")
>>> for line in file1:
    from nltk.corpus import wordnet
    print line
    wordFromList2 = wordnet.synsets(line)[0]
    mylist.append(wordFromList2)


abnormal


Traceback (most recent call last):
  File "<pyshell#10>", line 4, in <module>
    wordFromList2 = wordnet.synsets(line)[0]
IndexError: list index out of range

medDict.txt には以下の単語が含まれています

abnormal
acne
ache
diarrhea
fever
4

2 に答える 2

1

@Blender は、 の空白の感度について正しかったですword.synsets()自然言語で空白synsetsを含むものにアクセスする必要がある場合、Wordnet は の代わりにアンダースコアを使用します。たとえば、NLTK WN インターフェイスから synsets にアクセスするようなものを見つけたい場合は、 _kick the bucketwn.synsets("kick_the_bucket")

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('kick the bucket')
[]
>>> wn.synsets('kick_the_bucket')
[Synset('die.v.01')]

ただし、WordNet がアンダースコアの代わりにダッシュを使用して synset をエンコードしている場合があることに注意してください。たとえば9-11、アクセス可能ですが、9_11そうではありません。

>>> wn.synsets('9-11')
[Synset('9/11.n.01')]
>>> wn.synsets('9_11')
[]

コードの問題を解決します。

1.ファイルを 1 行ずつ読み取ると、その行に存在する見えないファイルも読み取られます\n。したがって、これを変更する必要があります:

>>> mylist = []
>>> file1 = open("medDict.txt", "r")

これに:

>>> words_from_file = [i.strip() for i in open("medDict.txt", "r")]

2.あなたが本当に を望んwordnet.synsets(word)[0]でいるかどうかはよくわかりませんMost Frequent Sense (MFS). したがって、これを行う代わりに:

>>> wordFromList2 = wordnet.synsets(line)[0]
>>> mylist.append(wordFromList2)

setより適切な方法は、代わりにa を使用してからupdatesetを使用することだと思います

>>> list_of_synsets = set()
>>> for i in words_from_file:
>>>  list_of_synsets.update(wordnet.synsets(i))
>>> print list_of_synsets
于 2013-03-31T14:23:46.353 に答える