У меня есть список имен миллионов известных людей (из Викиданных), и мне нужно создать систему, которая эффективно находит всех людей, упомянутых в довольно коротком тексте: это может быть всего одно слово (например, «Эйнштейн») до несколько страниц текста (например, страница Википедии).
Мне нужно, чтобы система была достаточно терпима к орфографическим ошибкам (например, Микаэль Джексон вместо Майкла Джексона) и кратким формам (например, М. Джексон). В случае двусмысленности должны возвращаться все возможные люди (например, «Джордж Буш» должен возвращать и отца, и сына, и, возможно, другие омонимы).
Этот связанный вопрос есть несколько интересных ответов, включая использование алгоритма Ахо-Корасика . Существуют библиотеки на многих языках, включая на Python. Однако, похоже, он не поддерживает нечеткий поиск (т. е. допускает опечатки).
Думаю, я мог бы расширить словарь, включив в него все возможные варианты написания каждого имени, но это сделало бы словарь слишком большим, поэтому я бы предпочел по возможности избегать этого (более того, я, возможно, захочу распространить это решение не только на людей из один пункт).
Я быстро просмотрел Lucene/ElasticSearch, но, похоже, он не поддерживает этот вариант использования (если только я не пропустил Это).
Есть идеи?