Возвращать слова до и после первого появления строки - PullRequest
2 голосов
/ 14 января 2009

У меня есть текст, возвращенный из поискового запроса, назовем его $ body. Теперь я хочу, чтобы скрипт нашел первое вхождение поискового запроса, $ query. Я знаю, что могу найти это первое появление с помощью strripos.

После того, как найден, я хочу, чтобы скрипт возвращал пару слов перед первым появлением строки, а также несколько слов после окончания первого появления.

По сути, я пытаюсь сделать то, что Google делает с результатами поиска.

Есть идеи, с чего мне начать? Моя проблема в том, что я продолжаю возвращать частичные слова.

Ответы [ 4 ]

3 голосов
/ 14 января 2009

Вы могли бы:

$words = explode(" ", $body);

Создание массива всех слов в $ body.

$index  = array_search($query, $words);  
$string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1];

Но у вас могут возникнуть проблемы, если запрос состоит из более чем одного слова.

взорваться - array_search

2 голосов
/ 17 декабря 2009

Мне кажется, что вы можете использовать strpos, чтобы найти начало поискового запроса, и strlen, чтобы получить его длину, которая позволит вам ...

  • Создать один массив с начала текста к поисковому запросу и затем отобразить последнее слово в этом массив и,
  • Создать второй массив из слов после strpos + strlen и отображения первое слово в этом массиве.

Или, если вы уже освоили некоторое количество символов до и после поискового запроса, если вы разберете их в массив, вы можете вытащить одно или два слова.

1 голос
/ 14 января 2009

Я не знаю PHP, но если вы можете использовать регулярные выражения, вы можете использовать следующее:

string query = "search";
int numberOfWords = 2;
Regex(
       "([^ \t]+\s+){"
     + numberOfWords
     + "}\w*"
     + query
     + "\w*(\s+[^ \t]+){"
     + numberOfWords
     + "}"
);
0 голосов
/ 14 января 2009

как насчет нескольких слов с каждой стороны:

<?php

$subject= "Four score and seven years ago, our forefathers brought forth upon this continent a new nation";
$pattern= "/(\w+\s){3}forth(\s\w+){3}/";

preg_match($pattern, $subject, $matches);

echo("... $matches[0] ...");

дает:

... our forefathers brought forth upon this continent ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...