Использование встроенного словаря для итеративной замены символов - PullRequest
0 голосов
/ 05 октября 2009

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

outerDic = {}
Dict1 = {'1':'2','2':'q'}
outerDic['1'] = Dict1
Dict1 = {'1':'1','2':'q','3':'w','4':'3'}
outerDic['2'] = Dict1
Dict1 = {'1':'2','2':'w','3':'e','4':'4'}
outerDic['3'] = Dict1
Dict1 = {'1':'3','2':'e','3':'r','4':'5' }
outerDic['4'] = Dict1
Dict1 = {'1':'4','2':'r','3':'t','4':'6' }
outerDic['5'] = Dict1
outerDic

Выходные данные должны возвращать список строк

12345
22345
q2345
11345
1q345
13345
12245
12e45
12445

и так далее ...

Я настроил функцию следующим образом:

def split_line(text):
 words = text.split()
 for current_word in words:
  getWordsIterations()

Я бы хотел понять, как настроить функцию getWordsIterations () для прохождения словаря и систематической замены символов.

1 Ответ

1 голос
/ 05 октября 2009

Я не уверен, что означают внутренние диктовки, все с ключами '1', '2' и т. Д. - они просто заменяют списки, представляющие возможные опечатки? Но тогда некоторые (но не все) также будут включать в себя «правильный» символ ... не опечатка ...?! Извините, но вы действительно запутываетесь в этой презентации - пример не сильно помогает (почему во второй позиции никогда не встречается буква "w", что, как я понимаю, странная опечатка структура данных ...? и т. д.)

Итак, ожидая пояснения, позвольте мне предположить, что все, что вам нужно, это представить для каждого входного символа все возможные односимвольные опечатки для него - списки были бы хорошими, но строки в этом случае более компактны и по существу эквивалентны:

possible_typos = {
  '1': '2q',
  '2': '1qw3',
  '3': '2we4',
  '4': '3er5',
  '5': '4rt6',
}

Теперь, если вы заботитесь только о случаях, в которых есть только 1 неправильное написание:

def one_typo(word):
  L = list(word)
  for i, c in enumerate(L):
    for x in possible_typos[c]:
      L[i] = x
      yield ''.join(L)
    L[i] = c

так, например, for w in one_typo("12345"): print w испускает:

22345
q2345
11345
1q345
1w345
13345
12245
12w45
12e45
12445
12335
123e5
123r5
12355
12344
1234r
1234t
12346

"Любое количество опечаток" приведет к огромному списку - 1014 * - это то, что вы хотите? Или "от 0 до 2 опечаток"? Или что еще конкретно ...?

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