Использование Python для проверки слов - PullRequest
0 голосов
/ 02 ноября 2009

Я застрял на простой проблеме. У меня есть словарь слов на английском языке и образец текста, который нужно проверить. Я должен проверить каждое слово в образце по словарю, и код, который я использую, неверен.

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 ]

6 голосов
/ 02 ноября 2009

Ваш фрагмент функционален. См. Например

>>> 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 () было предложено Джоном Мачином. Вместо этого я часто использую скобки или другие символы, как при печати ('[' + word + ']'), но repr () более точен в выводе.

5 голосов
/ 02 ноября 2009

Подумайте о том, чтобы убрать ваши слова из любых пробелов, которые могут там быть, и заменить все слова обоих наборов на один и тот же случай. Как это:

word.strip().lower()

Таким образом, вы можете убедиться, что сравниваете яблоки с яблоками.

2 голосов
/ 02 ноября 2009

Ясно, что «слово не в refDict» всегда имеет значение True. Вероятно, это связано с тем, что содержимое refDict или checkList не соответствует вашим ожиданиям. Они оба - кортежи или списки строк?

1 голос
/ 02 ноября 2009

Код, который вы используете, будет работать, если ключи в refDict - это слова, написанные правильно. Если правильно написанные слова являются значениями в вашем dict, то вам нужно что-то вроде этого:

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

Есть ли причина, по которой ваш словарь хранится как отображение, а не как список или набор? Диктофон Python содержит пары имя-значение, например, я мог бы использовать это отображение: {"dog":23, "cat":45, "pony":67} для хранения индекса слова и номера страницы, найденных в некоторой книге. В вашем случае ваш диктат является отображением того, что к чему?

0 голосов
/ 03 ноября 2009

Ваш 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
0 голосов
/ 03 ноября 2009

Слова в 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, который кажется странным способом хранения списка слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...