Предполагая, что у вас есть словарь слов (все слова, которые появляются в словаре в худшем случае, все фразы, которые появляются в данных в вашей системе в лучшем случае), и что вы знаете относительную частоту различныхсловами, вы должны быть в состоянии разумно угадать, что имел в виду пользователь, используя некоторую комбинацию подобия слова и количества совпадений для подобного слова.Веса, очевидно, требуют немного проб и ошибок, но обычно пользователь будет более заинтересован в популярном результате, который лингвистически немного дальше от введенной строки, чем в правильном слове, которое лингвистически ближе, но имеет только один или двахиты в вашей системе.
Второй случай должен быть немного более простым.Вы найдете все действительные слова, которые начинаются со строки («T» недопустимо, «Tr» недопустимо, «Try» - это слово, «Tryt» не является словом и т. Д.), И для каждого действительного слова вы повторяетеалгоритм для оставшейся строки.Это должно быть довольно быстро, если ваш словарь проиндексирован.Если вы найдете результат, в котором вы сможете разложить длинную строку на набор допустимых слов без оставшихся символов, это то, что вы рекомендуете.Конечно, если вы Google, вы, вероятно, модифицируете алгоритм для поиска подстрок, которые достаточно близки к опечаткам реальных слов, и у вас есть логика для обработки случаев, когда строка может быть прочитана несколькими способами с достаточно свободной проверкой орфографии (возможно, с использованиемколичество результатов, чтобы разорвать связь).