Задача: написать паттерн для функции preg_match_all, предназначенной для выборки контекста для ключевых слов при полнотекстовом поиске.
$pattern = "/(?![^\.]\s+)(?![^\.]\s+[\(\"`'])([\"`']?[А-Я][^\.\!\?]*\W+(".
$keyword_s.
")\.?[^\.\!\?]+([\.\!\?][^\.\!\?]*){1,3}?)(?=\.[\s\Z])/i";
Логика: предложение начинается с заглавной буквы, но при
этом, ей не может предшествовать последовательность из НЕ-точки и
пробела (например, Имена внутри предложения), так же как и
последовательность из НЕ-точки, пробела и кавычки (разных видов)
(например, "Названия" внутри предложения), концом предложения является
либо точка, либо восклицательный, либо вопросительный знаки. Чтобы
избежать захвата части сокращения, типа "т.д.", "т.п.", после
завершающей точки должен слдоваться либо пробел, либо конец данных.
Паттерн, будучи использован в preg_match_all вылавливает все
предложения (или пару-тройку предложений), где фигурирует кейворд...
Для того, чтобы паттерн возымел действие, поместим его в функцию:
preg_match_all($pattern, $text, $matches);
$context = "«...".
stripslashes(
preg_replace(
"/($keyword_h)/i",
"<b>\\0</b>",
implode("...», «...",$matches[0])
)
).
"...»";
В последнем блоке паттерн применяется к исходному тексту, затем выделенные предложения соединяются, одновременно обрамляясь кавычками. При этом ключевые слова выделяются жирным шрифтом.
Чуть не забыл. переменные $keyword_s и $keyword_h должны быть подготовлены к использованию с несколькими ключевыми словами. Делается это очень просто:
$keyword_s = preg_replace("/([^0-9а-яА-ЯёЁ]+)/", "|", $keyword); $keyword_h = preg_replace("/([0-9а-яА-ЯёЁ]+)/", "\\0\w*", $keyword); $keyword_h = preg_replace("/([^0-9а-яА-ЯёЁ\\\w\*]+)/", "|", $keyword_h);
Для большого паттерна слова достаточно разделить символом "|", а для паттерна подсветки к каждому ключевому слову необходимо добавить "\w*", на случай, если из слова введены лишь первые его буквы.
Разумеется, все это можно усложнить, но для простого поиска по сайту с использованием возможностей Fulltext Search в MySQL, вполне подойдет.
|
Уважаемые посетители, сайт частично находится на реконструкции.
Блог 28
На сегодняшний день ситуация вокруг киноцентра «Рекорд» окончательно прояснилась, и мне, как бывшему директору ГП НО «Облкиновидеообъединение», хотелось бы дать свою оценку произошедшему и вместе с вами подумать как жить дальше.
В первую очередь я хочу поблагодарить всех вас за ту огромную поддержку, что вы оказали мне и всему коллективу предприятия. Я абсолютно уверен, что то, как сейчас развивается ситуация с трудоустройством сотрудников, это во многом ваша заслуга, результат того, что процесс ликвидации ГП НО «Облкиновидеообъединение» стал гласным и открытым.
1 ноября 2011 г. 10 июня 2011 г.Грязный черный пиар, направленный на хостера TimeWeb 31 марта 2011 г.Красное пятно у камеры Wave GT-8500 4 января 2011 г.Плюсы и минусы новой прошивки S8500XEJL2 для Samsung Wave GT-S8500 23 ноября 2010 г.Требуются web-разработчики 16 ноября 2010 г.Неработоспособность пакета Samsung Kies под Windows 7
все записи →
Про фотографию 21
На днях на глаза случайно попалась инструкция «Supporting the camera: holding with your hands», что в вольном переводе означает «Как правильно держать камеру». Все разобранные примеры имели иллюстрации. Большинство примеров, описанных в статье, соответствовали действительности, но внимание приковал случай расположения камеры в вертикальном положении для съемки портретов. Автор статьи называл положение рук «левая поддерживает объектив, правая управляет камерой и нажимает спуск» «самой распространенной ошибкой». При этом «правильным вариантом» называлось положение рук «правая рука поддерживает камеру за ручку, большой палец на кнопке спуск, левая рука свободно управляет кольцами объектива».
19 декабря 2010 г. 5 сентября 2010 г.Фото с Душой 9 августа 2010 г.Итоги международного фотосалона «Berega 2010» 10 июля 2009 г.5-й съезд Союза фотохудожников России
все записи →
Про кино 3
Морена Баккарин (Morena Baccarin) является бразильской и американской актрисой, наиболее известной своими ролями в американских научно-фантастических сериалах. Она сыграла Инару Серру, «компаньонку» (особу, сопровождающую высокопоставленных персон на публичных мероприятиях, ну, и оказывающую кое-какие другие услуги), путешествующую на корабле вместе с главными героями, в научно-фантастическом телесериале «Светлячок». А также Адрию, антагонистку, наполовину человека, наполовину «богиню», из другой галактики в сериале «Звездные врата SG-1».
7 августа 2010 г. 6 февраля 2008 г.Рататуй. Настоящая история 26 ноября 2007 г."Двенадцать" Никиты Михалкова
все заметки →
Поток сознания — twitter.com/shtorkin
Facebook — facebook.com/shtorkin
ВКонтакте — vk.com/shtorkin
Шторкин по Яндексу — «Нашлось 124 тыс. страниц»
Шторкин по Вараксину — «Шторкин сгонял за водкой, нарезал хлеб и открыл банку консервов»
К Пелевину никакого отношения не имею, и не читаю подобное... Псевдоним «Шторкин» возник за долго до выхода книги с одноименным героем, мотив — шторки фотоаппарата (хотел сначала взять псевдоним Затворкин, но оказалось, что фотограф с таким псевдонимом уже существует)
И еще. Друзья, помните, Don't feed The Troll ;-) |