Коррекция орфографии для имен людей (Python)

У меня есть большая коллекция имен людей (например, "john smith" ). Я хочу искать людей по имени в нем. Однако некоторые из запросов будут написаны с ошибкой (например, "jon smth", "johnsm ith" ). Существуют ли библиотеки коррекции орфографии с привязками Python, которые могут найти совпадения с исправлениями для меня?

Я знаю Whoosh и Python-aspell. Коррекция орфографии Whoosh не работает для меня, потому что она записывает коллекцию правильных написаний на диск, а не сохраняет их в памяти. Это делает поиск слишком медленным для моего приложения. Кажется, нет ничего странного в изменении этого поведения из-за того, как структурирован код. Кроме того, Whoosh не влияет на разные изменения персонажей по-разному, хотя, скажем, "y" гораздо более смущается с "i" ( "jim kazinsky" → "jim kazinski" ), чем "z",

Aspell не работает с именами людей, так как имена обычно содержат пробелы - Aspell считает это слово фундаментальной единицей исправления. Кроме того, насколько я понимаю, Aspell использует n-граммовую модель коррекции орфографии, а не модель изменения расстояния между символами. Хотя модель n-gram имеет смысл для словарных слов, она не подходит для имен: у людей "bob ruzatoxg" и "joe ruzatoxg" есть много редких триграмм, так как они имеют ту же самую редкую фамилию, Но они явно разные люди.

Следует также упомянуть, что я не могу просто сравнить каждый запрос со всеми записями в коллекции - это было бы слишком медленно. Некоторый индекс нужно заранее создать.

Спасибо!

Ответ 1

Похоже, что (там не каламбур) вам нужна форма алгоритм Metaphone, который был реализован на Python и доступен на Pypi: http://pypi.python.org/pypi/Metaphone/0.4.

Существуют и другие алгоритмы, такие как Levenshtein и Soundex (еще не нашли надежной реализации Python) - вам может понадобиться рассчитать некоторую форму метрики, используя более одного из них (возможно, даже дать разный вес для каждого результата), чтобы придумать список вероятных поправок.