У меня есть большой фрейм данных 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, которая рассчитает расстояние Дамерау-Левенштейна И выведет матрицу (вместе со сводкой правок)?