用Python来检查单词

时间:2009-11-02 19:21:10

标签: 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 个答案:

答案 0 :(得分: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()的使用( *)在print语句中帮助识别前者的案例。

调试建议:关注清单中的第一个单词(或者您怀疑在字典中找到的第一个单词)。然后对于这个单词和这个单词,打印出详细信息,其长度,两边都有括号等,用于清单中的单词和字典中的相应键...

(*)repr()是John Machin的建议。相反,我经常使用括号或其他字符,如print('['+ word +']'),但repr()在输出中更严格。

答案 1 :(得分:5)

考虑剥离可能存在的任何空格的单词,并将两个集合中的所有单词更改为相同的单词。像这样:

word.strip().lower()

通过这种方式,您可以确保将苹果与苹果进行比较。

答案 2 :(得分:2)

显然,“不在refDict中的单词”总是评估为True。这可能是因为refDict或checkList的内容不是你认为的那样。它们是元组还是字符串列表?

答案 3 :(得分:1)

如果refDict中的键是拼写正确的单词,那么您所拥有的代码就可以使用。如果拼写正确的单词是你的dict中的值,那么你需要这样的东西:

for word in checkList:
    if word not in refDict.values():
        print word

是否有理由将字典存储为映射而不是列表或集合? python dict包含名称 - 值对,例如我可以使用此映射:{"dog":23, "cat":45, "pony":67}来存储在某本书中找到的单词和页码的索引。在你的情况下,你的dict是什么的映射?

答案 4 :(得分:0)

refdict中的单词是键还是值?

您的代码只能看到密钥:例如:

refDict = { 'w':'x', 'y':'z' }
for word in [ 'w','x','y','z' ]:
  if word not in refDict:
  print word

打印:

x
z

你想要的;

如果单词不在refDict.values()

当然,这假设您的词典是一个实际的python词典,这似乎是存储单词列表的奇怪方式。

答案 5 :(得分:0)

您的refDict可能不对。 in关键字检查值是否在字典的键中。我相信你已经把你的话放在了价值观中。

我建议使用set而不是字典。

knownwords = set("dog", "cat")
knownwords.add("apple")

text = "The dog eats an apple."
for word in text.split(" "):
    # to ignore case word is converted to lowercase
    if word.lower() not in knownwords:
        print word
# The
# eats
# an
# apple.       <- doesn't work because of the dot