Эта тема на forum.dklab.ru


Vas: Правильный вывод результатов поиска
Яndex и в принципе все посковые системы выводят результаты поиска примерно следующим образом:
<ol class=results><li value=1>
<div class="title">

<A onClick="r(this,'web')" href="http://php.spb.ru/index.html" target=_blank>
<b>PHP</b> по-русски: <b>PHP</b>.SPB.RU</A>
</div>
<div class="text">
PHPClub.Net | <b>PHP</b> форумы | <b>PHP</b> в деталях | FAQ | <b>PHP</b>.SPB.RU<br>Чтобы узнать о ценах, программе и других подробностях курсов по <b>PHP</b>, напишите на dima@<b>php</b>.spb.ru о своих планах изучения <b>PHP</b>/MySQL и координаты.
</div>

<div class="info">
<span style="color: #006600;"> php.spb.ru/index.html (22&nbsp;КБ) 30.04.2003 </span> &#151; строгое соответствие
</div>

PHP по-русски: PHP.SPB.RU
PHPClub.Net | PHP форумы | [/B]PHP[/B] в деталях | FAQ | PHP.SPB.RU
Чтобы узнать о ценах, программе и других подробностях курсов по PHP, напишите на dima@php.spb.ru о своих планах изучения PHP/MySQL и координаты.

php.spb.ru/index.html (22 КБ) 30.04.2003 — строгое соответствие

Т.е. робот находит совпадения в тексте... И выводит предложение в котором встречается данное слово.
Как с помощью PHP можно сделать тоже самое. Именно вот так или хотя бы чтобы от совпавшего лова отступить в право в лево заданное кол-во символов:
...рамме и других подробностях курсов по PHP, напишите на dima@php.spb.ru о своих пл...
Ant:
Надо запоминать позицию совпадения и отсчитывать от неё влево и вправо определённое количество символов. Как это делается в PHP — понятия не имею. Но только недавно делал эту фичу в поисковике DNSearch (на Perl).
Vas:
Так... примерно помогли....

<?php
$mystring="В некоторых шаблонах может открываться новое окно браузера с уведомлением о приходе нового личного сообщения";
$findme="бра";
$pos = strpos($mystring, $findme);
$pos_v=$pos+15;
$pos_n=$pos-15;
if ($pos_n<0) {$pos_n=0;}
$rest = substr($mystring, $pos_n, $pos_v);
echo ".... $rest ....";
?>

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

Кстати регулярные то как и у Перла!
Ant:
А как нибудь предложение выдрать нельзя? ...Ну от точки до точки. Регулярными выражениями?
А вы представьте, что некий грамотей поставил одну точку вначале абзаца и в конце. А сам абзац из пару сотен слов. Что тогда получится? Правильно, ничего хорошего. Тут либо надо делать очень геморрный алгоритм проверки, что мне не кажется здравой идеей, либо одно из двух. (-:

Кстати, в Вашем примере надо проверять, не является ли начало и конец конечного вывода, началом и концом фразы, по которой ищем. Это для того, чтобы не всегда ставить троеточие — а только тогда, когда поисковая фраза действительно обрезается.
Ant:
Кстати регулярные то как и у Перла!
Это у PHP как у Perl'a. (-;
Vas:
Спасибо!

Я имел ввиду что PHP позаимстворали регулярные выражения у Perl. Поэтому они и одинаковы :)
Ant:
Не за что. Тему можно закрыть?
after:
Vas
Начиная с версии PHP 4.3.0, Вы можете указать функции preg_match, что возвращать - найденную подстроку или её позицию. Может быть, Вам это поможет.
Vas:
В принципе сейчас вопрос в следующем:

Могу ли я с помощью PHP нечто симпатичнее чем найти позицию совпадения и грубо отсчитать от нее заданное кол-во символов:


<?php
$mystring="В некоторых шаблонах может открываться новое окно браузера с уведомлением о приходе нового личного сообщения";
$findme="бра";
$pos = strpos($mystring, $findme);
$pos_v=$pos+15;
$pos_n=$pos-15;
if ($pos_n<0) {$pos_n=0;}
$rest = substr($mystring, $pos_n, $pos_v);
echo "$rest";
?>
[/PHP:1:0615356835]

Начиная с версии PHP 4.3.0, Вы можете указать функции preg_match, что возвращать - найденную подстроку или её позицию. Может быть, Вам это поможет.

Т.е. получить тоже самое, но с применением регулярных выражений?

А вы представьте, что некий грамотей поставил одну точку вначале абзаца и в конце. А сам абзац из пару сотен слов.
Вообще этот грамотей практически только я ... А за себя я не боюсь :)


Ну как то же Яndex делает аккуратный вывод? Правда конечно не на PHP :(

Ну а можно хотя бы отсчитать заданное кол-во символов ... и еще как-нибудь до окончания слова чтобы не было такого типа:

... енной системы голосования очевидны. Но что делать, к...

,а хотя бы так:

собственной системы голосования очевидны. Но что делать, когда

Кстати вывод осуществляется и MySQL таблицы... может там можно за что нибудь зацепится...
Ant:
Ну как то же Яndex делает аккуратный вывод? Правда конечно не на PH
Вы бы ещё Гугл вспомнили... (-:

Ну а можно хотя бы отсчитать заданное кол-во символов
Ну, как-как, использовать реги для поиска. Знаете такой метасимвол «граница слова»?
Vas:
Знаете такой метасимвол «граница слова»?

Можно поподробнее?

Но только недавно делал эту фичу в поисковике DNSearch (на Perl).

А как там реализовано? В принципе. (К сожалению в Perl коде практически ничего не понимаю...)
Ant:
Можно поподробнее?
RTFM!

А как там реализовано?
Точно также, как я уже сказал — отсекание по определенному количеству символов + проверка надо ли ставить «...». ИМХО, вполне достаточно.
Vas:
Еще раз спасибо! Похоже тему можно закрыть...

Вопрос решен, тему можно закрыть.
Ant:
Тема закрыта.

Эта тема на forum.dklab.ru