Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Комбинаторика: перестановка слов в предложении, Алгоритм перестановки слов 
:(
    Опции темы
Manonia
Дата 17.9.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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. И так до пяти слов ...
PM MAIL   Вверх
Akina
Дата 17.9.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Manonia @  17.9.2010,  12:17 Найти цитируемый пост)
Дело еще в том, что в БД содержаться записи и из трех, четырех, пяти слов. 

Ну так это же неправильно...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Manonia
Дата 17.9.2010, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Цитата
Ну так это же неправильно...

Исчерпывающий ответ ... =) БД меняться не будет ..

Это сообщение отредактировал(а) Manonia - 17.9.2010, 12:03
PM MAIL   Вверх
Akina
Дата 17.9.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Manonia @  17.9.2010,  13:02 Найти цитируемый пост)
БД меняться не будет ..

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

Цитата(Manonia @  17.9.2010,  13:02 Найти цитируемый пост)
Исчерпывающий ответ

А вы что ждали? что к вашей кривой структуре вам найдётся гениальный алгоритм - быстрый и эффективный? нормализацию не от хорошей жизни придумали...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
nworm
Дата 18.9.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Если (совпадение=3 из 5 совпали), то размещения
Если (совпадение=в точности 5 из 5 совпали), то перестановки
Ищем программы для вычисления всех перестановок в интернете и проверяем

Если фраза из 5 слов - 120 проверок для перестановок (число перестановок из 5 символов)
Для размещений проверок больше чем для перестановок
------------------------------------
Если словарь и база маленькие - нормально

Если же словарь большой, то можно как-то извернуться с базой.
Например, упорядочить по алфавиту все слова во всех фразах словаря.
Упорядочить по алфавиту все фразы словаря.
Проиндексировать базу по фразам, чтобы долго было вставлять и быстро  - искать.
PM MAIL WWW   Вверх
Manonia
Дата 20.9.2010, 05:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Akina, смотрите: у меня есть таблица dictionary, в ней содержатся слова, словосочетания, и есть таблица scenarios, где для каждого слова или словосочетания есть свой сценарий. Эти таблицы связаны. Поэтому слова так и хранятся в первой таблице. Есть такой вариант: берём первое слово, подставляем в запрос:
Код
where upper(keyword) like upper(:p0)
, потом добавляем второе, потом третье и т.д. Затем также делаем со вторым словом.

nworm, спасибо, постараюсь разобрать =)

Это сообщение отредактировал(а) Manonia - 20.9.2010, 05:13
PM MAIL   Вверх
Akina
Дата 20.9.2010, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



В результате - груда запросов в БД для обработки одного запроса пользователя.
Если задача - найти записи, в которых есть ВСЕ введённые слова - то это проще:
Код

select *
from table
where phrase like '%word1%'
  and phrase like '%word2%'
  and phrase like '%word3%'
  and phrase like '%word4%'
...

А если задача - найти записи, в которых, скажем, не менее X% от введённых слов - то задача намного сложнее, и, видимо, разумнее использовать нечто вроде мускульного match() against либо внешние поисковые компоненты.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Manonia
Дата 21.9.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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-ёх слов..
PM MAIL   Вверх
Akina
Дата 21.9.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Manonia @  21.9.2010,  10:55 Найти цитируемый пост)
мне нужно будет искать и слово и словосочетание из 2-ух, 3-ёх, 4-ёх слов.. 

Ну так

Цитата(Akina @  20.9.2010,  09:11 Найти цитируемый пост)
если задача - найти записи, в которых, скажем, не менее X% от введённых слов - то задача намного сложнее, и, видимо, разумнее использовать нечто вроде мускульного match() against либо внешние поисковые компоненты

Но это уже не "Алгоритмы", это поиск заточенных под такое инструментов либо средств в рамках имеющегося инструмента (ака СУБД).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Manonia
Дата 22.9.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Определенного ответа я так и не получила, но всё равно всем спасибо =)
PM MAIL   Вверх
ksnk
Дата 22.9.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



А FULLTEXT под такое, случайно не заточен? проиндексировать эти странные "ключевые" поля как FULLTEXT и вроде как и все. При сравнени выдается % совпадения, что-то вроде того, что и нужно... Может помешать разве только если база не mySql и "структуру базы менять не будем".


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 22.9.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(ksnk @  22.9.2010,  13:29 Найти цитируемый пост)
А FULLTEXT под такое, случайно не заточен?

Нет. Под это заточен match - о нём я уже говорил выше.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Manonia
Дата 24.9.2010, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



ksnk, база не MySql и структуру менять не будем =)
PM MAIL   Вверх
Akina
Дата 24.9.2010, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Manonia @  24.9.2010,  04:09 Найти цитируемый пост)
база не MySql 

Короче, общего инструмента или способа нет.
Так что указывайте конкретную СУБД и просите модератора перенести тему.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Manonia
Дата 27.9.2010, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Спасибо, база - MS SQL Server =)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.