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

Т. Д. Судзуки

Шторкин.руМоя работа → Технодром

Технодром!Регулярные выражения. Выборка целых предложений, включающих ключевые слова.  (2 января 2009 г. )

Задача: написать паттерн для функции 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("...&raquo;, &laquo;...",$matches[0])
                )
           ).
           "...&raquo;";

В последнем блоке паттерн применяется к исходному тексту, затем выделенные предложения соединяются, одновременно обрамляясь кавычками. При этом ключевые слова выделяются жирным шрифтом.

Чуть не забыл. переменные $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

 

Про фотографию 21

 

Про кино 3

 

Поток сознания — twitter.com/shtorkin

Facebook — facebook.com/shtorkin

ВКонтакте — vk.com/shtorkin

Шторкин по Яндексу — «Нашлось 124 тыс. страниц»

Шторкин по Вараксину — «Шторкин сгонял за водкой, нарезал хлеб и открыл банку консервов»

 

К Пелевину никакого отношения не имею, и не читаю подобное... Псевдоним «Шторкин» возник за долго до выхода книги с одноименным героем, мотив — шторки фотоаппарата (хотел сначала взять псевдоним Затворкин, но оказалось, что фотограф с таким псевдонимом уже существует)

И еще. Друзья, помните, Don't feed The Troll ;-)



  © 2007 – 2011 Семен Шторкин (Семен Орлов)
Для связи:
Если срочно: (придет на коммуникатор)

Все права на представленные на сайте материалы принадлежат их авторам. Копирование материалов допускается лишь с согласия автора.

Всякое распространение материалов данного сайта без согласия автора преследуется по закону.

Компания dsbw tours group экскурсии и отдых . Входные двери UNION: стальные и деревянные . Натуральная защита от шума STEICO - шуманет. Строительные материалы. . Гибкая кровля и металлочерепица Киев стоимость. . Радиаторы от завода из Турции - запчасти тойота хайландер. Запчасти для Тойота.