我不明白为什么我会收到此错误。请帮忙
>>> 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
答案 0 :(得分:1)
@Blender关于word.synsets()
的空白敏感度是正确的。如果您需要使用自然语言访问空格的任何synsets
,Wordnet将使用下划线 _
而不是。例如。如果您想查找
kick the bucket
之类的内容,可以使用wn.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。当您逐行读取文件时,您还会读取该行中不可见但存在的\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
代替update
集合
>>> list_of_synsets = set()
>>> for i in words_from_file:
>>> list_of_synsets.update(wordnet.synsets(i))
>>> print list_of_synsets
答案 1 :(得分:0)
word.synsets()
是空格敏感的:
>>> wordnet.synsets('abnormal')
[Synset('abnormal.a.01'), Synset('abnormal.a.02'), Synset('abnormal.s.03')]
>>> wordnet.synsets(' abnormal')
[]
.strip()
在你传入之前的行中的空格:
wordFromList2 = wordnet.synsets(line.strip())[0]