IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Выделение искомых слов (http://www.imho.ws/showthread.php?t=105483)

Псих 29.06.2006 18:37

Выделение искомых слов
 
Привет.
Ситуация такая:
Есть таблица типа:
id int prim..
meta \\ некоторые слова для упрощения поиска
text text not null \\text страницы
FULLTEXT(meta, text)
....

Юзер делает поиск
select * from tb_pages where match(meta, text) against("keyword")
и получает в итоге массив инфы от поиска

Результат поиска надо вывести например как в гугле.
Название страницы
ниже например предложение из текста в котором встречается искомое слово и это слово выделенно болдом
а ниже ссылка.

Вопрос:
Как вырезать предложение с искомым словом и выделить это слово..

Есть какие-то мысли.. но пока объеденить все в кучу не выходит...
чтобы выделить надо получить координаты номер символа начала слова и координаты конца слова...
А вот как предложение вырезать....

Заранее благодарен.
Надеюсь поиск меня не обманул!

RaZEr 29.06.2006 18:44

Пройди str_replace'ом и выдели слова. А вот как вырезать предложения, - это совсем другая история. Минимально - выхвати из документа кусок в радиусе 200 знаков, например. Далее убери куски слов по краям.

Псих 29.06.2006 18:58

Цитата:

RaZEr:
Пройди str_replace'ом и выдели слова
Это да.. согласен. Сам об этом думал
Цитата:

RaZEr:
. Далее убери куски слов по краям.
Это да.. А вот как по краям убрать..

Naked 30.06.2006 11:04

Цитата:

Псих:
Это да.. А вот как по краям убрать..
а я бы наверное сделал explode по слову, а потом на каждый кусочек explode по знаку препинания - в итоге получится все предложение без нужного слова - но его мы знаем, поэтому просто можно вставить, и кстати выделение тогда будет не str_replace а просто так, при вставлении:)

Псих 30.06.2006 11:08

Цитата:

Naked:
а я бы наверное сделал explode по слову, а потом на каждый кусочек explode по знаку препинания
Стой. Тут немного не понял.
Сначала по слову.. а потом еще раз по знаку припинания? Так как он его по знаку припинания разобьет если он по слову разбит?

Naked 30.06.2006 11:26

PHP код:

  $text $_GET['text']; //переменная в которой нужно найти слово
  
$word 'lalala'// слово которое ищем
  
$parts exlode($word$text);
  
$sentense1 explode ("."$parts[0]);
  
$sentense2 explode ("."$parts[1]);
  
  
$res $sentense1[count($sentense1)-1].$word.$sentense2[0]; 

В итоге в $res - хранится нужное предложение. Вроде не ошибся:)

Hubbitus 11.07.2006 10:20

Слушайте, а почему надо так извращаться, почему регулярным выражением не обрезать скажем сразу "30 слов", или "200 символов, но по границе слова"?

Например:
PHP код:

/* 6 СЛОВ отрезается от текста */
$text 'Хочешь доказать, что ты заводная девчонка? Тогда бешеная гонка по лабиринту - это то, что тебе нужно. На пути попадутся монстры, но врзывные девчонки не боятся опасностей, ведь у них в кармане динамит! Помни, при взрыве монстры могут задеть и тебя. Будь осторожна!';
setlocale(LC_ALL,'ru_RU.cp1251');
preg_match ('#(?:\b.+?(?>\s)){0,6}#'$text$matches);
//$matches[0]; - это какраз 6 слов.

/* 25 символов от текста, НО ПО ГРАНИЦЕ СЛОВА */
preg_match ('#.{0,25}.*?\b#'$text$matches);
//$matches[0]; - снова результат 25 символов + длина не влезшей части слова 



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

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