|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
Сложный поиск по БД16.07.2010, 17:43. Показов 6359. Ответов 47
Метки нет (Все метки)
PHP + MySQL. Разрабатываю виртуального собеседника по мотивам темы Алгоритм работы чат-бота
На входе поиску по базе данных - массив слов (сокращенных) на выходе N результатов которые содержат больше всего эти слова. На первом месте соответственно полное совпадение, а допустим максимальный предел - совпали лишь половина слов. В базе тоже хранятся такие массивы слов в каждой строке. Как реализовать наиболее оптимально?
0
|
|
| 16.07.2010, 17:43 | |
|
Ответы с готовыми решениями:
47
Сложный поиск
Сложный поиск |
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||||||||||||
| 16.07.2010, 18:41 | ||||||||||||||||
|
А эти наборы слов ("фразы") уже как-то хранятся и таблице(-ах), или в этом, от части, вопрос и заключается?
Думается, слова хранить в таблице слов (по одному слову в записи), фразы в своей таблице (id фразы), связь фразы с каждым словом в отдельной таблице (id_фразы <=> id_слова). Тогда, думается, можно будет построить необходимый запрос.Структура
Слова
Фраза 2: foo lol
1
|
||||||||||||||||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
||
| 16.07.2010, 18:54 [ТС] | ||
|
Идея разделить все по нескольким таблицам кажется мне интересной. Сейчас обдумаю, спасибо
0
|
||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||||||||||||
| 16.07.2010, 19:01 | ||||||||||||||||
|
Дамп
Вот такой запрос для начала
Но тогда в моем случае для оптимизации получается, что одно и то же слово не может быть в одной фразе несколько раз.
1
|
||||||||||||||||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
||
| 16.07.2010, 19:10 [ТС] | ||
|
Тээкс,
1. Юзер вводит фразу 2. Разбивается обрабатывается -> массив слов 3. Запрос найти все ID по этим словам -> массив ID слов (используем первую таблицу "Слова") 4. Найти все ключи которые содержат N слов, вернуть массив ['ключ'] => N (используем третью таблицу "Их связь") 5. Обработать PHP этот массив и запросить по выбраному ключу (используем вторую таблицу "Фразы") п.3 думаю прост, а вот п4 надо бы подумать. п5. банален. но в PHP придется обрабатывать. т.к. не обязательно выдывать результат с наибольшей релятивностью и можно внести элемент случайности (хотя я думаю можно и в базе выбрать RAND'омом но на PHP была бы более интересная логика где шанс более релевантной фразы выше) Добавлено через 2 минуты
0
|
||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||
| 16.07.2010, 19:14 | ||
|
0
|
||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
||
| 16.07.2010, 19:33 [ТС] | ||
|
ps. Тяжело пока с пониманием таких сцепленных запросов, пожалуй если оно то реализует буду пытаться внедрить подобный запрос, что получиться сообщу ![]() Добавлено через 9 минут Вот что тут ещё пока не хватает. Мы выбираем фразу, но на каждую фразу-ключ должны быть фразы-ответы (то что ответит бот). Ну всмысле на "привет" бот может отвечать не одной фразой а несколькими ("привет", "здравствуй", "hello %username%").
0
|
||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|||||||||||||||||
| 16.07.2010, 19:40 | |||||||||||||||||
|
Тогда вот такой запрос забодяжил
1
|
|||||||||||||||||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||||||
| 16.07.2010, 19:48 [ТС] | |||||||
|
Наверное добавляется ещё таблица вроде:
0
|
|||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 16.07.2010, 19:51 | |
|
Т.е. всем тем, что было выше, мы потаемся понять, чтО нам написал юзер?
0
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||||||
| 16.07.2010, 19:59 [ТС] | |||||||
). Он ищет по базе вопросов наиболее подходящий их тех который он знает. И он знает как на выбранный вопрос ответить. А далее случайно выбирается фраза ответ, несколько фраз-ответов в принципе чисто для реалистичности ответов (т.к. очень заметно если бот ответит на повторный вопрос слово в слово).
0
|
|||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||
| 16.07.2010, 20:05 | ||||||
|
Понял. Тогда дело осталось за малым: добавить таблицу ответов, как Вы и говорите.
Единственное, что не понятно: что если получилось несколько более-менее равнозначных догадок, о чем написал юзер? Какую выбрать и на какую отвечать? Рандомно любую при прочих равных условиях? Добавлено через 2 минуты В общем к тому страшному запросу надо после HAVING дописать
0
|
||||||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||||||
| 16.07.2010, 21:55 [ТС] | |||||||
Главное чтобы верные ответы тоже были иначе очень быстро наскучивает...Добавлено через 1 час 47 минут А почему phrase_id и ключ и поле? Меня запутывает
0
|
|||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 16.07.2010, 22:01 | |
|
Поля `phrase_id`,`word_id` - вместе уникальный ключ (с каким-то именем, пофиг каким). Не будет двух одинаковых пар.
0
|
|
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
| 16.07.2010, 22:34 [ТС] | |
|
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||
| 17.07.2010, 09:14 | ||
|
В SELECT'ах в FROM есть возможность использовать имена индексов и ключей чтобы "помочь" оптимизатору соптимизировать запрос.
1
|
||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
||||||
| 18.07.2010, 17:58 [ТС] | ||||||
|
Вставка данных тоже нужна. Вот пытаюсь вставить новый ключ так
0
|
||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|||
| 18.07.2010, 18:06 | |||
|
0
|
|||
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|||||||||
| 18.07.2010, 23:07 [ТС] | |||||||||
Добавлено через 1 минуту С mysql_fetch_array разобрался... глупая ошибка была
0
|
|||||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||
| 19.07.2010, 15:33 | ||
|
Фразу аналогично добавляешь в таблицу фраз - получаешь новое ID фразы. Затем уже в таблицу связи эти ID добавляешь.
0
|
||
| 19.07.2010, 15:33 | |
|
Помогаю со студенческими работами здесь
20
Сложный поиск в строке Сложный поиск. MySQL
одновимерни массивы и сложный поиск
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|