使用Python检查单词
我遇到了一个简单的问题。我有一个包含英语单词的字典,还有一段需要检查的示例文本。我需要把示例中的每个单词都和字典里的单词对比一下,但我现在用的代码是错的。
for word in checkList: # iterates through every word in the sample
if word not in refDict: # checks if word is not in the dictionary
print word # just to see if it's recognizing misspelled words
问题是,当代码在循环中运行时,它会把每个单词都打印出来,而不仅仅是那些拼写错误的单词。有人能解释一下这个问题吗?并给我一个解决方案吗?非常感谢!
6 个回答
2
很明显,“word不在refDict中”这个判断总是返回真。这可能是因为refDict或checkList里的内容和你想的不一样。它们都是字符串的元组还是列表呢?
5
考虑把你的文字中的空格去掉,并把两个集合中的所有单词都改成相同的大小写。就像这样:
word.strip().lower()
这样你就能确保你比较的是同样的东西。
6
你手上的这段代码是可以正常工作的。比如说,看看这个例子:
>>> refDict = {'alpha':1, 'bravo':2, 'charlie':3, 'delta':4}
>>> s = 'he said bravo to charlie O\'Brian and jack Alpha'
>>> for word in s.split():
... if word not in refDict:
... print(repr(word)) # by temporarily using repr() we can see exactly
... # what the words are like
...
'he'
'said'
'to'
"O'Brian"
'and'
'jack'
'Alpha' # note how Alpha was not found in refDict (u/l case difference)
所以,字典里的内容可能和你想的不同,或者清单里的单词并不是完全一样的(比如说,可能有空格或者大小写的不同;可以使用repr()这个函数在打印的时候帮助你找出前者的问题)。
调试建议:专注于清单里的第一个单词(或者你怀疑在字典里能找到的第一个单词)。然后只针对这个单词,详细打印出来,包括它的长度,前后加上括号等等,分别对比清单里的单词和字典里的对应键...
(*) repr()是John Machin的建议。其实我通常会用括号或其他字符,比如print('[' + word + ']'),但repr()在输出上更准确。