Использование Python для извлечения определенного редактирования, когда расстояние Дамерау-Левенштейна равно 1

У меня есть большой фрейм данных Pandas, содержащий данные, введенные с клавиатуры. Один из столбцов в кадре данных представляет данные почтового индекса Великобритании. Неизбежно, что с большими наборами данных возникает ряд опечаток. Я использую библиотеку pyxDamerauLevenshtein для вычисления расстояния редактирования между нераспознанными почтовыми индексами и массивом, содержащим все возможные почтовые индексы, а затем представляю пользователю в качестве возможных альтернатив почтовые индексы, которые находятся всего в одном редактировании от введенных данных (расстояние DL = 1). Это работает довольно хорошо, и я достаточно доволен скоростью. Однако одно изменение с точки зрения почтового индекса означает, что может быть 50-60 альтернатив. Я хотел бы иметь возможность упорядочивать альтернативы на основе определенного типа редактирования. Так, например, G, заменяющий F (соседняя на клавиатуре QWERTY), вероятно, будет более вероятным, чем L, заменяющий F. Кроме того, вставка одной и той же буквы дважды будет более вероятной, чем вставка соседней буквы, которая, в свою очередь, было бы более вероятно, чем вставка совсем другой буквы с противоположного конца клавиатуры. Порядок представления альтернативных почтовых индексов должен отражать эти вероятности.

Ответ marmeladze на Редактировать расстояние, такое как Левенштейн с учетом близости на клавиатуре предлагается использовать евклидово расстояние между клавишами клавиатуры; это кажется разумной идеей. Однако мой вопрос заключается в том, как я могу эффективно извлечь конкретное редактирование между двумя строками, когда расстояние Дамерау-Левенштейна равно единице?

Например, если у меня есть почтовый индекс ZE2 9YM (которого не существует), код должен идентифицировать все остальные почтовые индексы, которые находятся всего в одном редактировании, но также должен указывать характер редактирования, например:

Entered code    Possible alternative    DL dist       Edit type    Edit
     ZE2 9YM                 ZE2 9YA          1    Substitution     A-M
     ZE2 9YM                 ZE2 9YN          1    Substitution     N-M
         ...

И в приведенном выше случае было бы более вероятно, что M была заменена на N (соседние клавиши), а не на M вместо A.

Кто-нибудь знает о библиотеке Python, которая рассчитает расстояние Дамерау-Левенштейна И выведет матрицу (вместе со сводкой правок)?


person user1718097    schedule 18.07.2017    source источник
comment
у вас достаточно высокий балл, и я предполагаю, что вы знаете, что должны включить код, который у вас есть, а также ожидаемый ввод и вывод   -  person Joran Beasley    schedule 19.07.2017
comment
На данный момент у меня нет кода для извлечения типов редактирования.   -  person user1718097    schedule 19.07.2017