imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 29.06.2006, 18:37     # 1
Псих
::VIP::
Guinness Liker
Понаехало тут
 
Аватар для Псих
 
Регистрация: 26.01.2003
Адрес: В нейроне
Пол: Male
Сообщения: 2 848

Псих СуперБогПсих СуперБог
Псих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБог
Выделение искомых слов

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

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

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

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

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

Заранее благодарен.
Надеюсь поиск меня не обманул!
__________________
меня не вылечат
Псих вне форума  
Старый 29.06.2006, 18:44     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Пройди str_replace'ом и выдели слова. А вот как вырезать предложения, - это совсем другая история. Минимально - выхвати из документа кусок в радиусе 200 знаков, например. Далее убери куски слов по краям.
RaZEr вне форума  
Старый 29.06.2006, 18:58     # 3
Псих
::VIP::
Guinness Liker
Понаехало тут
 
Аватар для Псих
 
Регистрация: 26.01.2003
Адрес: В нейроне
Пол: Male
Сообщения: 2 848

Псих СуперБогПсих СуперБог
Псих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБог
Цитата:
RaZEr:
Пройди str_replace'ом и выдели слова
Это да.. согласен. Сам об этом думал
Цитата:
RaZEr:
. Далее убери куски слов по краям.
Это да.. А вот как по краям убрать..
__________________
меня не вылечат
Псих вне форума  
Старый 30.06.2006, 11:04     # 4
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
Цитата:
Псих:
Это да.. А вот как по краям убрать..
а я бы наверное сделал explode по слову, а потом на каждый кусочек explode по знаку препинания - в итоге получится все предложение без нужного слова - но его мы знаем, поэтому просто можно вставить, и кстати выделение тогда будет не str_replace а просто так, при вставлении
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 30.06.2006, 11:08     # 5
Псих
::VIP::
Guinness Liker
Понаехало тут
 
Аватар для Псих
 
Регистрация: 26.01.2003
Адрес: В нейроне
Пол: Male
Сообщения: 2 848

Псих СуперБогПсих СуперБог
Псих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБогПсих СуперБог
Цитата:
Naked:
а я бы наверное сделал explode по слову, а потом на каждый кусочек explode по знаку препинания
Стой. Тут немного не понял.
Сначала по слову.. а потом еще раз по знаку припинания? Так как он его по знаку припинания разобьет если он по слову разбит?
__________________
меня не вылечат
Псих вне форума  
Старый 30.06.2006, 11:26     # 6
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
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 - хранится нужное предложение. Вроде не ошибся
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 11.07.2006, 10:20     # 7
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Слушайте, а почему надо так извращаться, почему регулярным выражением не обрезать скажем сразу "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 символов + длина не влезшей части слова 
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  


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

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

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


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




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