![]() |
|
![]() ![]() ![]() |
|
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Добрый день. Помогите пожалуйста с комбинаторикой. На сайте есть строка запроса, куда пользователь вводит запрос. Запрос этот нужно проанализировать: выкинуть стоп-слова, и проверить данный запрос на соответствие записей в БД. Например, запрос таков: new york city mobile phone, в БД есть записи: phone и mobile phone, т.е. я должна как-то разбить это предложение и посмотреть в БД. Как я понимаю это перестановки или размещения. Дело еще в том, что в БД содержаться записи и из трех, четырех, пяти слов. Т.е. ввели : EXTERNAL OBLIQUE MUSCLE ABDOMINAL , а в БД есть запись ABDOMINAL EXTERNAL OBLIQUE MUSCLE. Т.е. сначала нужно посмотреть каждое слово из запроса в предложении, затем первое вместе со вторым, потом 1-3, потом 2-1, 2-3, 3-1, 3-2. И так до пяти слов ...
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ну так это же неправильно... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Исчерпывающий ответ ... =) БД меняться не будет .. Это сообщение отредактировал(а) Manonia - 17.9.2010, 12:03 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Значит, сервер будет ложиться после каждого более-менее длинного запроса... А вы что ждали? что к вашей кривой структуре вам найдётся гениальный алгоритм - быстрый и эффективный? нормализацию не от хорошей жизни придумали... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Если (совпадение=3 из 5 совпали), то размещения
Если (совпадение=в точности 5 из 5 совпали), то перестановки Ищем программы для вычисления всех перестановок в интернете и проверяем Если фраза из 5 слов - 120 проверок для перестановок (число перестановок из 5 символов) Для размещений проверок больше чем для перестановок ------------------------------------ Если словарь и база маленькие - нормально Если же словарь большой, то можно как-то извернуться с базой. Например, упорядочить по алфавиту все слова во всех фразах словаря. Упорядочить по алфавиту все фразы словаря. Проиндексировать базу по фразам, чтобы долго было вставлять и быстро - искать. |
|||
|
||||
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Akina, смотрите: у меня есть таблица dictionary, в ней содержатся слова, словосочетания, и есть таблица scenarios, где для каждого слова или словосочетания есть свой сценарий. Эти таблицы связаны. Поэтому слова так и хранятся в первой таблице. Есть такой вариант: берём первое слово, подставляем в запрос:
nworm, спасибо, постараюсь разобрать =) Это сообщение отредактировал(а) Manonia - 20.9.2010, 05:13 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
В результате - груда запросов в БД для обработки одного запроса пользователя.
Если задача - найти записи, в которых есть ВСЕ введённые слова - то это проще:
А если задача - найти записи, в которых, скажем, не менее X% от введённых слов - то задача намного сложнее, и, видимо, разумнее использовать нечто вроде мускульного match() against либо внешние поисковые компоненты. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Так вот я и хочу составить наиболее оптимальный запрос =) Вот, например, пользователь ввёл: shopping in new york city, в базе есть и слово city, и словосочетание new york city и просто new york, нужно достать эти записи. А если пользователю стрельнуло и он ввёл: new shopping in york city/ shopping in york city new, результат должен быть таким же как в первом случае. Т.е. слова могут быть в произвольном порядке и у вас в запросе я вижу нужно обязательно подавать 4 слова, когда как мне нужно будет искать и слово и словосочетание из 2-ух, 3-ёх, 4-ёх слов..
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ну так Но это уже не "Алгоритмы", это поиск заточенных под такое инструментов либо средств в рамках имеющегося инструмента (ака СУБД). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Определенного ответа я так и не получила, но всё равно всем спасибо =)
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
А FULLTEXT под такое, случайно не заточен? проиндексировать эти странные "ключевые" поля как FULLTEXT и вроде как и все. При сравнени выдается % совпадения, что-то вроде того, что и нужно... Может помешать разве только если база не mySql и "структуру базы менять не будем".
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Нет. Под это заточен match - о нём я уже говорил выше. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
ksnk, база не MySql и структуру менять не будем =)
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Короче, общего инструмента или способа нет. Так что указывайте конкретную СУБД и просите модератора перенести тему. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Manonia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Спасибо, база - MS SQL Server =)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |