поиск в MySQL с учетом опечаток

Vodnik

нужен поиск учитывающий опечатки, в одной или двух буквах...
с помошью полнотекстового поиска можно это сделать?

stm7884696

нет

Vodnik

а как это интересно делается?

stm7884696

так же как и яндекс исправляет опечатки... или пунто свитчер..
За много много денег это делается... и по времени тож небыстро...

Vodnik

э, да ты как будто хочешь мнэ написать да? вах?

voronetskaya

ну в общих чертах считается там расстояние по хеммингу

sergei1969

глянь ещё php-шные soundex levenshtein и similar_text

Fragaria

они тока под буржуйские языки есть
а всё что под наш родной - то как алексус и сказал "ручками за много денех"

mysha

ты ведь ищешь в уже известном тексте?
а почему следующее решение не подходит?
n(n-1)/2 запросов (n- длина искомого слова) для каждого генеришь регулярное выражение подставляя
оследовательно вместо каждых из букв '?' а дальше проверяешь текст на каждом из этих
выражений.
Ну или для каждого слова генерируешь все слова, получающиеся изменением 2х букв (не обязательно,
чтобы все они были русскими, но русскость сильно уменьшает сложность, для этого надо сделать
нижеследующий алгоритм) и делаешь по каждому полнотекстовый поиск. Таких слов всего то будет
33*33*n*(n-1)/2= 39204 - для n=9
Более эффективные алгоритмы можно предложить если ты уточнишь задачу
Если тебе надо просто исправлять слова на общеизвестные
то генеришь достаточно большой словарь (или качаешь из инета - например словарь Зализняка)
и делашь предыдущий алгоритм в нем.
Конечно не оптимизированно, но для начала сойдет.

Vodnik

да, в известном тексте, в словарных статьях
я так и собираюсь сделать, больше ничего умного не приходит в голову

eduard615

прогнать запрос через ispell/aspell

mysha

в словарных статья я бы так не делал - слишком много слов различаются только одной
буквой (порох, горох не говоря уж о двух.
Лучше отдельно предлагать исправленные варианты, которые брать из словаря русских слов.
и я бы использовал автоматически сгенеренные шаблоны для LIKE
Опять же надо смотреть еще и переставленные буквы. Есть утилитки, которые
на словаре Зализняка быстро проверяют правильность слова - маза прогнать на них сначала все варианты.
Например - mystem

Vodnik

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

ну когда есть точное совпадение, то понятно, что искать похожее не надо, а если нет точного, то нужно предложить все похожие
словарь не такой большой (пока 2000 слов вряд ли там будет больше 10 тыс. слов.
Есть утилитки, которые
на словаре Зализняка быстро проверяют правильность слова - маза прогнать на них сначала все варианты.
Например - mystem

а что эта утилита делает то? на сайте написан changelog и использование опций, а такого простого как для чего не написано...
Оставить комментарий
Имя или ник:
Комментарий: