Есть задумка, сделать полнотекстовый, морфологический поиск по запросу в БД.
В принцепе решение я уже придумал, вот только нужно словари подходящие найти и залить их в таблицу базы данных.
Но хотелось бы спросить может кто уже сталкивался с такой задачей?
Этот топик читают: Гость
Ответов: 409
Рейтинг: 17
|
|||
карма: 0 |
|
Ответов: 409
Рейтинг: 17
|
|||
Видимо никто не делал такого
Расскажу как я решил этот вопрос, может кому пригодится. Со словарем решил не заморачиваться, а сделал псевдо-морфологический поиск. Логика такая - есть запрос: подошва резиновая нужно найти в базе данных все синонимы, например: подошва из резины или обувь на резиновой подошве и т.д. Вот схема решения: code_13376.txt Незнаю есть ли в SQLite полнотекстовый поиск, формулу я от MySQL написал. Конечно при таком поиске много мусора сыпится, но зато существенно расширяется граница поиска. |
|||
карма: 0 |
| ||
файлы: 1 | code_13376.txt [19.7KB] [857] |
Ответов: 8926
Рейтинг: 823
|
|||
Pirr, конечно, запрос с выкинутыми окончаниями не совсем корректен, но на безрыбье и рак рыба
По подготовке слов: наверное надо привести все слова к нижнему регистру; удалять лишние пробелы желательно в цикле, чтобы не пропустить и тройные и сколько может поставить нечаянно пользователь code_13378.txt |
|||
карма: 19 |
| ||
файлы: 1 | code_13378.txt [1.3KB] [172] | ||
Голосовали: | Konst |
Ответов: 409
Рейтинг: 17
|
|||
Леонид писал(а): наверное надо привести все слова к нижнему регистру; удалять лишние пробелы желательно в цикле, чтобы не пропустить и тройные и сколько может поставить нечаянно пользовательдумал над этим, но решил пока не усложнять схемы. Регистр вроде не влияет на запрос. А в цикле я хотел бы вообще удалять из текста все знаки припинания, тире, слэши и т.д. но пока не знаю как это сделать красиво. И еще хотелосьбы чтобы количество слов было неограниченным, и схема былабы динамической - в зависимости от количества слов, а то у меня пять раз повторяется одна и таже вложенная схема - это не красиво. |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
карма: 19 |
| ||
файлы: 1 | code_13384.txt [5.5KB] [167] |
Ответов: 409
Рейтинг: 17
|
|||
Леонид у тебя интересный подход к схемам, у меня както по другому получается... например до такого оригинального цикла с удалением пробелов я бы не додумался.
А вторая схема вообще - супер , я немного по другому пути пошол. Стал отделять от строки по одному слову, и если еще остается строка то от нее в цикле снова отделяется слово, затем оставил одну вложеную схему обрезающую слова куда по очереди направляю слова, вот только неполучается снова складывать эти слова в строку. В общем спасибо за схему, сейчас буду разбираться в ней. ------------ Дoбавленo в 09.32: Вот сделал гибрид из двух схем:
Только не понял в каком месте у тебя убираются знаки? Просто думаю надо знаки менять на пробелы а затем уже удалять лишние пробелы. И еще хотелось бы чтобы от цифр не отрезались бы знаки а просто добавлялась звездочка. |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
Pirr, в Вывеске написано: "Удаление всего, кроме 32 русских букв и 10 цифр", в том числе и пробелы. Чтобы включить знак "-", (код 45) надо чуть изменить схему: code_13402.txt, но в этом случае придётся на выходе ставить маску "-#*", чтобы пропускать минус перед цифрами и удалять его в остальных случаях.
Непонятно зачем в FormatStr вместо % 1 появилось " Pirr " |
|||
карма: 19 |
| ||
файлы: 1 | code_13402.txt [549B] [189] |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Леонид писал(а): вместо % 1 появилось " Pirr "Хи, хи. Уже второй попался, Tad был первым. |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Хи, хи. Уже второй попался, Tad был первым.Первым был tsdima. |
|||
карма: 25 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): Не надо мне первентстваНа сегодня ты был первым. |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Но выход есть.
На нужном сообщении нажимаешь "Правка" и копируешь с окна Редактора сообщений все что тебе нужно и без ошибок. Вот тебе и Хи-хи. |
|||
карма: 25 |
|
Ответов: 409
Рейтинг: 17
|
|||
Леонид писал(а): в Вывеске написано: "Удаление всего, кроме 32 русских букв и 10 цифр", в том числе и пробелы. Чтобы включить знак "-", (код 45) надо чуть изменить схему: code_13402.txt, но в этом случае придётся на выходе ставить маску "-#*", чтобы пропускать минус перед цифрами и удалять его в остальных случаях.Я понял, что ты буквы переводиш в цифры и затем удаляешь все кроме русских букв и цифр. А переводить знаки в пробел нужно для того, чтобы если слова написаны вот так: подошва-резиновая, подошва_резиновая, подошва/резиновая то после удаления знаков слова сливаются подошварезиновая. И наверно надо включить англиЦкий шрифт. Леонид писал(а): Непонятно зачем в FormatStr вместо % 1 появилось " Pirr "Непонятно. |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
Pirr, теперь понятно - это глюк форума: заменяет сочетания % 1 - % 4 на данные пользователя
Для замены знаков препинания надо десяток элементов Replace, а английские буквы добавить (коды 97-122) тоже просто, так же как и цифры двумя If-Else |
|||
карма: 19 |
|
Ответов: 409
Рейтинг: 17
|
|||
Леонид писал(а): Для замены знаков препинания надо десяток элементов Replace, а английские буквы добавить (коды 97-122) тоже просто, так же как и цифры двумя If-ElseСмотрю я на схему, и думаю... мы перемудрили слегка. Надо наверно сделать как в начале было, плюс занести в некий масив знаки (не так их и много будет), а затем перебором масива подставлять эти знаки в элемент замены символов и менять их на пробел, а уже потом избавлятся от лишних пробелов. В принцыпе знаки не сильно мешают в запросе, т.к. в BOLEAN MODE - знаки не учитываются. Тут главное вычленить слова из запроса и обрезать их по алгоритму. |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
Pirr, 1000 и ещё один способ, и все имеют право на жизнь
|
|||
карма: 19 |
|
15