Я думал об этом и пытался найти решения о том, как нечеткий поиск в базе данных, если, например, пользователь вводит орфографическую ошибку. Есть какие-то явные проблемы с логикой этого? Будет ли это работать и было ли это сделано раньше?
Наш стол мы хотим найти:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Поэтому мы храним необработанное текстовое тело для физического отображения. Другие 2 столбца используются для поиска, который рассчитывается следующим образом:
Саундэкс
Тело разделено на слова и переведено в версию soundex. IE, получающееся тело могло бы быть чем-то вроде:
H252 B54 C23 E33... etc
Таким образом, кто-то может войти в «динозавр», а текст статьи гласит «динозавр», оба они оценивают как B26. Затем мы запускаем LIKE для значения soundex поискового термина.
Кодировка персонажа
Учитывая отображение символов, которое отображает символы в простые числа, IE:
h = 2
e = 3
l = 5
o = 7
p = 11
c = 13
help = 2*3*5*11 = 330
hello = 2*3*5*5*7 = 1050
hell = 2*3*5*5 = 150
hlep = 2*5*3*11 = 330
cello = 13*3*5*5*7 = 6825
Если пользователь хотел напечатать «привет», но он переключил два или более символов, например, «hlelo», он оценил бы одно и то же число. Разделите необработанное тело на слова, просто закодируйте каждое слово и сохраните в базе данных, получив поле, которое выглядит следующим образом:
330 6825 330 1050... etc
Затем мы можем подобрать поиск по этому значению, чтобы он соответствовал опечаткам.
Преимущества
- Опечатки защищены от
- Фонетическое неверное написание защищено от
- Больше не родной английский говорящий дружелюбный
- Будет работать на любом языке (где работает soundex)
Комментарии и мысли? Этакий многослойный поиск. Конечно, вы можете взвесить возвращаемые значения, чтобы сделать его еще лучше (например, буквальное совпадение текста стоит больше), но действительно ли это хорошее решение для орфографических ошибок и поиска не носителями английского языка?