使用Python检查单词

0 投票
6 回答
1496 浏览
提问于 2025-04-15 15:36

我遇到了一个简单的问题。我有一个包含英语单词的字典,还有一段需要检查的示例文本。我需要把示例中的每个单词都和字典里的单词对比一下,但我现在用的代码是错的。

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()在输出上更准确。

撰写回答