imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 15.02.2004, 01:49     # 1
Kirill Mezintsev
Junior Member
 
Регистрация: 30.03.2003
Адрес: В избушке на окраине Москвы
Сообщения: 109

Kirill Mezintsev Известность не заставит себя ждать
Маленький Google на своём сайте

Из формы search в файл search.php приходит переменная $query, содержащая в себе слово или фразу для поиска в MySQL-базе в одном из выбранных полей.

В поле query формы могут быть введены слова в нижнем, верхнем или смешанном регистре.

Из поля title или text или из обоих берём содержимое этих полей и ищем в них вхождения $query. Результатом поиска является построение странички на подобие Google, Yandex и других поисковых систем: найденное в заголовке или тексте странички слово выделяется другим цветом (красным, например).

Требуется на страничку выводить не весь текст, имеющийся в поле text, а только само слово (или идущие вместе слова, если ищется вся фраза), а также 25 знаков до него и 25 знаков после него.

Например:

$query = "тест";

Из базы берём содержимое поля text.

Затем нам нужно найти вхождение $query, вырезать из основного текста искомое слово (фразу), добавить с двух сторон по 25 символов текста ($num_chars) и выделить $query цветом (<font color="red"><b>$query</b></font> ).

PHP код:
$num_chars 25
$find_text $find['text'];
$find_text substr($find_text,0,$num_chars); 
if (
strlen($find_text) >= $num_chars) {
$find_text substr($find_text,0,strrpos($find_text," "));
$find_text $find_text "..."; } 
$find_text preg_replace("'$query'i""<font color="red"><b>$query</b></font>""$find_text");

echo 
$find_text
Должно выводиться:
<font color="red"><b>Тест</b></font>овая страничка с текстом для <font color="red"><b>тест</b></font>а, который нужен для проверки...

Отточия "..." должны добавляться только в конце вырезанной фразы.

В приведённом выше примере происходит обрезание текста от нулевой позиции до 25-го символа, после чего добавляются "...".

Также при замене слова (фразы) в тексте на значение $query происходит изменение регистра этого слова (фразы) в соответствии с тем, как это слово (фраза) были написаны в поле query формы search.

Нужно решить задачу:
1) не менять регистр выделенных слов в выводимом как результат поиска тексте;
2) сделать добавление 25 символов до и после найденного слова (фразы), учитывая, что в обрабатываемом тексте $find_text может быть много вхождений $query; все вхождения должны быть выведены на страничку как результат поиска (выводить единой строкой);
3) нужно посчитать количество вхождений $query для обрабатываемого текста $find_text - результат подсчёта в переменной $find_text_stat.

В таблице содержится более 500 строк с полями id, title, text, filename (это путь от корня сайта и имя файла).

Сайт на статических html-страничках, перевод его целиком на php пока не планируется.

И ещё вопрос: есть ли у кого декодированный файл LEMMSERV.DLL (входит в состав YandexSite Lite 2.5), в котором содержится около 90000 слов для реализации морфологического поиска в русском тексте.
__________________
Kirill
Kirill Mezintsev вне форума  
Старый 16.02.2004, 01:18     # 2
esergey
Junior Member
 
Регистрация: 13.02.2004
Сообщения: 61

esergey Путь к славе только начался
Цитата:
И ещё вопрос: есть ли у кого декодированный файл LEMMSERV.DLL (входит в состав YandexSite Lite 2.5), в котором содержится около 90000 слов для реализации морфологического поиска в русском тексте.
Я тоже хочу такую фичу, если есть выложите
__________________
- здесь была реклама. увижу еще раз - заменю на 6ть баллов. Plague -
esergey вне форума  
Старый 20.02.2004, 11:40     # 3
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
чтобы не изменять регистр заменяемого слова нужно всесто
PHP код:
$find_text preg_replace("'$query'i""<font color="red"><b>$query</b></font>""$find_text"); 
пиасть
PHP код:
$find_text preg_replace("'($query)'i""<font color="red"><b>\\1</b></font>""$find_text"); 
по 25 символов в разные стороны -- это регулярное выражение (?<=.{25}) и (?>=.{25}) соответственно.

чтобы найти все вхождения, нужно использовать preg_match_all :-)

будут вопросы -- письмом или в аську.
__________________
Nunc est bibendum

Последний раз редактировалось is_absent; 20.02.2004 в 11:43.
is_absent вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:36.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.