Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Добрый день.

Есть таблица в MsSQL 2008

Структура таблиц представлена на SQLFIDDLE

Подскажите как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний в таблице [dbp.Firm] по полям name и name_original?

P.S.: желательно пример...
29 окт 13, 07:40    [15044157]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
И вообще реально ли это в данной таблице?
29 окт 13, 07:48    [15044164]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Amateur7,

Примечательная особенность - если пользователь делает поиск по фразе ПЕРЕВОЗКА ГРУЗОВ, результат должен содержать помимо строк с ПЕРЕВОЗКА ГРУЗОВ еще и строки с ГРУЗОПЕРЕВОЗКИ.

Как это сделать?

P.S.: желательно пример...
29 окт 13, 08:33    [15044278]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
P.S.: есть мысль конечно разбить поисковую строку на массив, у каждого элемента обрезать последний символ и поиграть со сложением элементов массива, но это очень сильно нагрузит базу при запросе...
29 окт 13, 08:36    [15044295]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
andy st
Member

Откуда:
Сообщений: 838
Amateur7,
http://msdn.microsoft.com/ru-ru/library/ms142571.aspx
А если наваяешь аналог самостоятельно - будешь однозначно конкурировать с гуглом....
29 окт 13, 09:30    [15044532]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
andy st
Amateur7,
http://msdn.microsoft.com/ru-ru/library/ms142571.aspx
А если наваяешь аналог самостоятельно - будешь однозначно конкурировать с гуглом....
FTS автору не поможет, так что только самому ваять.

Можно взять поиск от Дмитрия Костылева
29 окт 13, 09:35    [15044557]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
alexeyvg,

обрезка последнего символа элементов массива справляется с задачей, но все же...

А что подразумевается под "Разобъем текст на слова, слова - на "синонимы" и запишем все это в самые обычные таблицы." Имеется ввиду функция sql или подразумевается ручное наполнение(звучит бредово конечно) ?
29 окт 13, 09:49    [15044645]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Amateur7
А что подразумевается под "Разобъем текст на слова, слова - на "синонимы" и запишем все это в самые обычные таблицы." Имеется ввиду функция sql или подразумевается ручное наполнение(звучит бредово конечно) ?
А вы прочитайте статью по ссылке :-) Конечно, там есть функции заполнения (триггер на изменение данных)
Amateur7
обрезка последнего символа элементов массива справляется с задачей, но все же...
"поиск по фразе ПЕРЕВОЗКА ГРУЗОВ, результат должен содержать строки с ГРУЗОПЕРЕВОЗКИ"

Поясните, как тут поможет какая то "обрезка последнего символа"?

Предлагаемая система поиска вашу задачу решает, найдёт текст по началу двух слов:
ПЕРЕВОЗКА - ГРУЗОПЕРЕВОЗКИ
ГРУЗОВ - ГРУЗОПЕРЕВОЗКИ
29 окт 13, 10:42    [15045091]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
ART-CODE
Member

Откуда:
Сообщений: 1095
Возможно, Вас устроит стеммер с исходниками:
Вероятностный морфологический анализатор
В целом, полезный сайт, рекомендую изучить не только материал, на который дал ссылку, но и другие.

Еще интересность: морфологический анализатор на phyton
Как все это прикрутить к БД - думайте сами. :)

Больше статей и примеров нагуглите сами, когда поймете что именно нужно гуглить ;)

ЗЫ
У меня есть свой алгоритм (для MS SQL) нечеткого поиска - когда и текст и запрос могут быть написаны с ошибками, он
всеравно найдет.
К публикации алгоритм не готов.
Подскажу лишь - собирайте статистику, вычисляйте вес факторов.
Этого достаточно, чтобы понять "куда копать" .
29 окт 13, 10:48    [15045131]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
alexeyvg
Amateur7
А что подразумевается под "Разобъем текст на слова, слова - на "синонимы" и запишем все это в самые обычные таблицы." Имеется ввиду функция sql или подразумевается ручное наполнение(звучит бредово конечно) ?
А вы прочитайте статью по ссылке :-) Конечно, там есть функции заполнения (триггер на изменение данных)
Amateur7
обрезка последнего символа элементов массива справляется с задачей, но все же...
"поиск по фразе ПЕРЕВОЗКА ГРУЗОВ, результат должен содержать строки с ГРУЗОПЕРЕВОЗКИ"

Поясните, как тут поможет какая то "обрезка последнего символа"?

Предлагаемая система поиска вашу задачу решает, найдёт текст по началу двух слов:
ПЕРЕВОЗКА - ГРУЗОПЕРЕВОЗКИ
ГРУЗОВ - ГРУЗОПЕРЕВОЗКИ


Разбиваем фразу на элементы массива,
Затем проверяем каждый элемент.
Проверяем на длину слова - если длина больше двух, двигаемся далее.
Проверяем на окончание, если окончание соответствует формату "гласная+согласная" - обрезаем 2 последних символа,
Если на конце только гласная, обрезаем один последний символ

Дальше делаем LIKE на содержание всех получившихся слов в строке поиска, т.е.,
SELECT * FROM TABLE WHERE name LIKE '%$find1%' AND name LIKE '%$find2%' AND name LIKE '%$find3%' и т.п.

Камней конечно много можно найти если делать поиск с учетом глаголов и т.п., но у меня задача проще, и данный способ справляется.

P.S.: он не ищет ГРУЗОПЕРЕВОЗКИ, он ищет строку с ГРУЗ и ПЕРЕВОЗК, не могу сказать наверняка, но предполагаю что SQL 2008 можно также сделать требуемый порядок слов в поиске при желании(хотя пока такого способа не искал)
29 окт 13, 11:36    [15045440]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Amateur7
Дальше делаем LIKE на содержание всех получившихся слов в строке поиска, т.е.,
SELECT * FROM TABLE WHERE name LIKE '%$find1%' AND name LIKE '%$find2%' AND name LIKE '%$find3%' и т.п.
Так то можно, но вопрос был наверное про индексированный поиск.
Вот как раз статья про индексированный.

А так да, самостоятельно можно дополнить его самодельным алгоритмом для всякой морфологии. Но это уже сильное (бесконечное) усложнение...
29 окт 13, 17:23    [15048088]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
alexeyvg
Amateur7
Дальше делаем LIKE на содержание всех получившихся слов в строке поиска, т.е.,
SELECT * FROM TABLE WHERE name LIKE '%$find1%' AND name LIKE '%$find2%' AND name LIKE '%$find3%' и т.п.
Так то можно, но вопрос был наверное про индексированный поиск.
Вот как раз статья про индексированный.

А так да, самостоятельно можно дополнить его самодельным алгоритмом для всякой морфологии. Но это уже сильное (бесконечное) усложнение...



Надо брать FTS и не морочить голову, прb этом объясняя юзерам, что некоторые фразы одинаковые только у них в голове.
Иначе задолбут
29 окт 13, 17:34    [15048142]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Winnipuh
alexeyvg
пропущено...
Так то можно, но вопрос был наверное про индексированный поиск.
Вот как раз статья про индексированный.

А так да, самостоятельно можно дополнить его самодельным алгоритмом для всякой морфологии. Но это уже сильное (бесконечное) усложнение...



Надо брать FTS и не морочить голову, прb этом объясняя юзерам, что некоторые фразы одинаковые только у них в голове.
Иначе задолбут
Это да, всегда нужно вначале продавливать стандартные технологии, это просто практичнее.
29 окт 13, 17:38    [15048171]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Amateur7
Amateur7,

Примечательная особенность - если пользователь делает поиск по фразе ПЕРЕВОЗКА ГРУЗОВ, результат должен содержать помимо строк с ПЕРЕВОЗКА ГРУЗОВ еще и строки с ГРУЗОПЕРЕВОЗКИ.

Как это сделать?

P.S.: желательно пример...


В FTS вы можете использовать тезаурус для таких случаев, но здесь нужно объяснить юзеру, что есть не нашел "грузоперевозки", то надо поискать "перевозку грузов", т.е. чтобы он понимал, что ищет, а не сервер додумывал.
29 окт 13, 17:44    [15048209]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать полнотекстовый поиск с учетом морфологии и падежных окончаний?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Народ , а не может никто подкинуть пример FTS на основе моей таблицы, а то я инфу по FTS заглянул, и пока не разобрался как заполняется таблица синонимов...
30 окт 13, 18:19    [15054967]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить