Поисковые системы, основанные на файлах (Lucene, Sphinx и т. Д.) Или базе данных (Oracle Text, MSSQL Fulltext), решают эту проблему с помощью тезауруса. То есть они собирают слова вместе на основании того, что они являются синонимами. Квалификация быть синонимом более жесткая, чем в книге Роже, но принцип тот же. Синонимы связывают сокращения, сокращения и общие орфографические ошибки. Так, например, поисковый тезаурус может идентифицировать street и st как одно и то же. Хотя контекст - это все: в строке «St Pancras Road» st является синонимом saint .
.
Так это тебе вообще помогает? К точке. Он предлагает то, что вы хотите реализовать:
string | canonical
------------+----------
street |
st | street
strete | street
Chile |
chilly | Chile
chili | Chile
К сожалению, создание и поддержание тезауруса требует человеческой изобретательности и усилий. Построение таксономии требует экспертизы; Отслеживание новых дополнений требует времени. Другое дело, что даже с тезаурусом совпадения остаются вероятностными: MoMA может быть таким же, как Музей современного искусства , но совпадает ли это с SFMOMA или NYMOMA ? Не совсем, но, возможно, на 90% то же самое?
Альтернативным подходом было бы сделать то, что SO делает с тегами. Когда вы отметили свой вопрос, появилось выпадающее окно с предложением доступных тегов. Когда вы набрали больше букв, список сузился. Это не глупо, засвидетельствуйте наличие таких тегов, как tsql
и t-sql
, но это довольно хорошо. У SO также есть резервная копия, которая должна предоставить опытным пользователям список свежеиспеченных тегов, чтобы они могли исследовать эти чеканки и, возможно, отменить их. Но это все еще напоминает ручной процесс.
Увы, нет алгоритма, который мог бы сказать, что MoMA такой же, как Музей современного искусства , не говоря уже о том, ссылается ли он на учреждение в Новом Йорк или Сан-Франциско.