Найти начало предложения в строке - PullRequest
1 голос
/ 10 октября 2008

Я хочу отобразить результаты поискового запроса на веб-сайте с заголовком и кратким описанием. Краткое описание должно быть небольшой частью страницы, которая содержит поисковый запрос. Что я хочу сделать, это: 1 полоска тегов на странице 2 найти первую позицию seachterm 3 из этой позиции, возвращаясь, найдите начало (если оно есть) этого предложения. 4 Начните с найденной позиции в шаге 3 и отобразите, например, 200 символов оттуда

Мне нужна помощь с шагом 3. Думаю, мне нужно регулярное выражение, которое находит первую заглавную букву или точку ...

Ответы [ 4 ]

5 голосов
/ 10 октября 2008

Даже это в конечном итоге потерпит неудачу. Учитывая предложение «Мы пошли в офис доктора Смита», если ваш поисковый термин «офис», практически любой критерий, который вы используете, даст вам «офис Смита» в качестве предложения.

2 голосов
/ 10 октября 2008

Я бы так и сделал, я бы проанализировал страницу ...

  1. Пропустить все, что начинается с '<' </p>

  2. Когда вы встречаете "." или [A-Z], начните помещать его в буфер, пока не найдете другой "."

  3. Если в буферизованной строке есть ключевое слово для поиска, это ваша строка! Else. начать буферизацию с "." Вы столкнулись и повторите.

РЕДАКТИРОВАТЬ: Как отметил Джеймс Керран, в некоторых случаях эта стратегия потерпит неудачу ... Вот решение:

Что вы можете сделать, это начать X количество символов с начала страницы (после тегов)

и затем ищите ключевое слово, буферизуя 2 предыдущих слова. Когда вы найдете это, сделать что-то вроде этого: {X} ... {prev-2} {next-2}

Пример: Эта планета имеет - или, скорее, имела - проблему, которая заключалась в следующем: большинство людей, живущих на ней, были несчастны в течение большей части времени. Для этой проблемы было предложено много решений, но большинство из них были в основном связаны с движением маленьких зеленых кусочков бумаги, что было странно, потому что в целом не маленькие несчастные листочки бумаги были несчастны.

Поиск по ключевому слову: «предложил»

Результат: Эта планета имеет - или, скорее, имела - проблему ... Многие решения были предложены для этой проблемы ...

1 голос
/ 10 октября 2008

Я думаю, что вместо того, чтобы пытаться найти предложения, я бы подумал о том, какое количество контекста вокруг поискового запроса мне понадобится в словах. Затем вернитесь назад к некоторой части этого количества слов (или к началу) и переместите оставшееся количество слов, чтобы выбрать остальную часть контекста. Таким образом, вы просто разбиваете весь корпус на пустое пространство, находите первое вхождение термина (возможно, используя нечеткое совпадение для поиска подтерм и учета пунктуации) и применяете приведенный выше алгоритм. Вы даже можете проявить творческий подход к введению эллипсов, если первый невыбранный термин не заканчивается пунктуацией и т. Д.

1 голос
/ 10 октября 2008

Для шага 3: если вы перевернете подстроку, которая заканчивается там, где вы хотите искать в обратном направлении, получите позицию первого '.' и вычтите это значение из позиции строки поиска.

$offset = stripos( strrev(substr($string, $searchlocation)), '.');
$startloc = $searchlocation - $offset;
$finalstring = substr($string, $startloc, 200);

Это может быть выключено на 1, но я думаю, что это сделает работу. Похоже, должен быть более короткий способ сделать это.

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