![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Делаю скрипт поисковой системы у себя на сайте.
Суть такая: Например искомое слово: $search = "хорошие мыкароны"; Предложение: $str = "хорошеникие макарончики и приготовлены хорошо"; Обрубаю последние гласные, для более расширенного поиска, получилось "хорош макарон". Чтобы можно было найти "хорошеникие макарончики" . Каким образом мне найти предложении $str если искомое словосочетание "хорош макарон" ? Можно ли это сделать с помощью регулярных выражений и с помощью $str =~ m/$search/isg ? --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Где производится поиск? В файлах, в базе данных? С индексацией?
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
Я думаю можно. Можно в цикле сделать такую проверку, с каждой итерацией отсекая последнюю букву от слова, например, пока две буквы не останется. И выводить найденное в приоритетном порядке. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| AlexanderI |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Поиск будет проводится сперва в файлах и потом в базе. Но это мне кажется не так уж важно. Файлы я вытягиваю в одну строчку, и базу тоже. И ищу совпадения сразу в строке, потом в другой. база без индекса вроде. Добавлено @ 23:58
А как именно это в программном коде расписать ? Я ниразу поиск не делал, буду рад любой подсказки. про мой поиск: Поиск осуществляется по нескольким ключевым словам Каждое ключевое слово обрабатывается следующим образом: если на конце есть одна или две гласные – то они отбрасываются. Слова в списке ключевых слов могут быть разделены следующими знаками (где _ пробел): “_” “__” “,_” “;_” “._” Это сообщение отредактировал(а) AlexanderI - 19.7.2005, 23:55 --------------------
Магазин детских игрушек | Авто ВАЗ |
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Пробуй по базе искать SQL запросом, а не Perl'ом, рабоать будет намного быстрее.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
AlexanderI ты хочешь реализовать что-то типа поисковой системы как Google и др. (находить введенное слово или словочетание и выводить url-путь к странице, где содержится введенная фраза) или обыкновенный поиск (найти что-то похожее в файлах или БД и вывести что есть в таком-то файле или таблице).
В общем это два разных подхода при реализации, определись. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| AlexanderI |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
это мысль. Добавлено @ 10:47
у меня будет поиск на моём сайте. обыкновенный поиск (найти что-то похожее в файлах или БД и вывести что есть в таком-то файле или таблице). --------------------
Магазин детских игрушек | Авто ВАЗ |
||||
|
|||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
Тогда тебе придется конструировать запросы автоматически, на основе данных, введенных в форму, и структуры твоих таблиц БД.
Это сообщение отредактировал(а) sharq - 20.7.2005, 12:51 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Может тогда подскажите как сформировать запрос $str =~ m/$search/isg таким образом чтобы в строке $str = "хорошеникие макарончики и приготовлены хорошо" нашлась искомая фраза $search = "хорош мыкарон" . С помощью регулярных выражений как-то.
--------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Примерно так:
А что касается регулярных выражений, то примерно так:
Естественно здесь всё упрощено. Хотя это не самое наверное и не самое лучшее решение генерировать шаблон таким образом, я в данно случае имел ввиду вот это: | Хотя оно будет тормозить, если много слов будет в искомой строке. Это сообщение отредактировал(а) korob2001 - 21.7.2005, 12:47 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Этот код хороший. Но он ищет только по одному слову. Если первое слово найдено, то он обязательно скажет "Нашёл". Каким бы образом сделать так чтобы он сказал "Нашёл" когда найдены все слова, и сказал "Неудача" еслибы небыло найдено хотябы одно слово ? --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Я понял, нужно просто вместо $sh = join('|',split(/\s+/, $search)); написать $sh = join('(.+?)',split(/\s+/, $search));
--------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
А зачем это делать? Ведь поисковики именно так и ищат, по одному слову. Хотя там алгоритм сложнее, они сначала показывают строгое соответствие, а потом те в которых найдено хотябы одно из слов.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Anarki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 1 Всего: 11 |
Что я знаю, поисковики используют алгоритм обратного индекса.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |