Версия для печати

-   Форум Сообщества Практиков Конкурентной разведки (СПКР) http://forum.razved.info/
--  Приемы работы с программой СайтСпутник (SiteSputnik) http://forum.razved.info//index.php?f=38
--- Регулярные выражения в Рубриках программы SiteSputnik http://forum.razved.info//index.php?t=5258




-- Алексей Мыльников написал 11 сентября 2014 10:42

РВ рекомендуется применять при необходимости. Мощность и универсальность оплачиваются ресурсами: на проверку шаблонов требуется чуть больше времени, чем на обычные правила, но замедление только на этапе Рубрикации и совсем не критическое, также не реализовано расстояние в словах для РВ, но "логическое НЕ" можно применять.

Шаблоны бывают простые и сложные. Совсем не обязательно их писать самому. Обращайтесь на форум, думаю, что здесь есть кому помочь.

Благодарю Дмитрия Владимирова из Владивостока за содействие при реализации регулярных выражений в Рубриках программы SiteSputnik.



-- tungus1973 написал 11 сентября 2014 10:55
Алексей Борисович, супер! :good:
Регулярные выражения хоть и не просты для начинающих, но позволяют очень гибко выполнять поиск в тексте практически любых слов и фраз. При должных навыках работы с регулярками в рубрики будет попадать именно то, что нужно, без мусора.

Дополнительный вопрос.
Иногда может быть очень удобным использовать в одной строке одновременно регулярное выражение и простой запрос СайтСпутника. Например, нам нужно найти дату "24 марта", но в 2009 году или ранее, то есть не в 2010, 2011, 2012, 2013 или 2014 годах. В таком случае можно было бы эффективно сочетать стандартные правила рубрик с регулярным выражением:

'24 марта' /1 {\s201[0-4]\s}

Таким образом затраты ресурсов компьютера на обработку регулярок будут минимальными - точечно и только там, где это действительно необходимо.
Можно ли реализовать это?


-- Алексей Мыльников написал 11 сентября 2014 11:36

tungus1973 написал:
[q]
'24 марта' /1 {\s201[0-4]\s}
[/q]

В первом топике я написал, что "логическое НЕ" есть, использовать в одной строке одновременно регулярное выражение и простой запрос можно, но расстояние в словах пока не реализовано. В Вашем случае можно получить нужный результат, используя возможности самих РВ. Будет это выглядеть так:

{\s24\sмарта\s[1800-2009]\s} - проще, но не учтены даты ранее 1800 года

или так:

'24 марта' ~{\s24\sмарта\s[201[0-4]\s} - посложнее, учтены даты до 1800 года, но если год в контенте не указап, то правило сработает,

тогда:

{/s24\sмарта\s([0-9]} ~{\s24\sмарта\s[201[0-4]\s} - практически учтет всё, вплоть до 24 марта 533 года до н. э. Мусор останется, если, например: "24 марта 1500 самураев перешли границу вдоль реки", - но они не так часто это делали. Но и Ваше Правило здесь принесет мусор.


-- Игорь Нежданов написал 11 сентября 2014 17:05
Очень хороший инструмент. Можно тонко настроится на довольно сложные конструкции.

Спасибо!


-- Игорь Нежданов написал 12 сентября 2014 9:09
Коллеги, вчера спешил, а сегодня готов чуть шире высказаться по поводу регулярных выражений (как мы их используем). Самое очевидное - выявление сущностей. Самых разных. От упоминания людей или организаций, до всевозможных дат, адресов, телефонов, цен и т.п..

Например, вы наблюдаете некоего человека (организацию) и хотите, не просто быть в курсе всего происходящего вокруг наблюдаемого, но и знать КТО появился рядом с ним. Настраиваете регулярные выражения для выявления имен собственных и получаете каждый день перечень упоминаемых. Далее сравниваете его с предыдущими (это легко автоматизируется) и получаете список НОВЫХ. Этот список можно подгружать в БД.

А можно сложнее задачку решить - выявлять новые события вокруг объекта. Например приобретение имущества (в т.ч. акции, доли). В рубрике с упоминанием Объекта настраиваете ряд регулярных выражений, предназначенных для выявления конструкций, описывающих именно приобретение (покупку). Понимаю, что нужно "попотеть". вначале выявляя устойчивые конструкции, а затем их описывая. Зато в результате получаете оповещалку. которая вас информирует об интересующем вас событии.



-- tungus1973 написал 12 сентября 2014 11:16
Для: Игорь Нежданов
А можно привести какой-нибудь несложный пример?


-- Vinni написал 12 сентября 2014 13:10

Алексей Мыльников написал:
[q]
Шаблоны бывают простые и сложные.
[/q]

угу. а еще есть утилиты для контроля - например мне нравится RegexCoach. задаешь строку, РВ и его опции и смотришь - находит ли РВ то, что нужно. при необходимости корректируешь РВ...

кстати. а какой стандарт РВ поддерживается PCRE или классический?. далее буду в PCRE писать.


Игорь Нежданов написал:
[q]
Настраиваете регулярные выражения для выявления имен собственных
[/q]


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

Иванов\s+(\S+\s+){1,5}([А-Я]\S+)




-- Vinni написал 12 сентября 2014 13:14
Другое дело, что я использовал еще одну возможность РВ - не только проверки соответствия строки шаблону, а и выделения нужной подстроки из строки - круглые скобки.
если в СС поддерживается и это (как переменная, которую можно вставить в отчет или как-то так), то можно сразу узнать, о ком речь и как-то автоматизировать сохранение этйо информации, а не смотреть вручную, с кем он там взаимодействовал :preved:


-- Алексей Мыльников написал 12 сентября 2014 19:33

Vinni написал:
[q]
угу. а еще есть утилиты для контроля - например мне нравится RegexCoach. задаешь строку, РВ и его опции и смотришь - находит ли РВ то, что нужно. при необходимости корректируешь РВ...
[/q]

Утилиты просто не искал, мне они в данном случае не нужны: задать строку, отдать её на РВ и посмотреть что оно вернет - это один оператор в программе. Но посмотреть - находит ли РВ то что нужно, это только, грубо говоря, одна десятая часть дела, даже меньшая, надо ещё определить находит ли РВ то, что не нужно. Поэтому если есть нормальный инстумент для отладки РВ, то подскажите Пользователям, если нет, то, со временем, при реальной необходимости сделаю сам и встрою с СайтСпутник. Но думаю, что уже есть готовые решения.

Vinni написал:
[q]
какой стандарт РВ поддерживается PCRE или классический?.
[/q]

PCRE

Vinni написал:
[q]
Другое дело, что я использовал еще одну возможность РВ - не только проверки соответствия строки шаблону, а и выделения нужной подстроки из строки - круглые скобки.
если в СС поддерживается и это (как переменная, которую можно вставить в отчет или как-то так), то можно сразу узнать, о ком речь и как-то автоматизировать сохранение этйо информации, а не смотреть вручную, с кем он там взаимодействова
[/q]

Да, поддерживается, плюс нужные подстроки выделяются цветом.


-- Игорь Нежданов написал 14 сентября 2014 12:00

tungus1973 написал:
[q]
Для: Игорь Нежданов
А можно привести какой-нибудь несложный пример?
[/q]

Можно, но он вряд ли поможет в случае с СайтСпутником - мы используем другой семантический движок. А пример правила вот:

Для выявления указаний на человека (ФИО, ФИ, Ф, И, ИО) с использованием (или без) разного рода обращений
ProperName -> Word<h-reg1>+;
Person -> ProperName | 'человек';
FormOfAddress -> 'товарищ' | 'мистер' | 'господин' | 'сэр' | 'сударь' | 'госпожа' | 'мадам' | 'сударыня'; // тут целый словарь вариантов обращений, в том числе сокращенных, неуважительных и т.п..
AdjCoord -> Adj;
AdjCoord -> AdjCoord<gnc-agr[1]> ',' Adj<gnc-agr[1]>;
AdjCoord -> AdjCoord<gnc-agr[1]> 'и' Adj<gnc-agr[1]>;
S -> Adj+ (FormOfAddress) Person;
S -> AdjCoord (FormOfAddress) Person;


-- Алексей Мыльников написал 14 сентября 2014 21:22
Физическое лицо и только физическое лицо регулярным выражением из текста не выделишь. Как фильтр грубой очисти РВ для этого пригодно, но не более того.


-- Vinni написал 15 сентября 2014 13:32

Алексей Мыльников написал:
[q]
Поэтому если есть нормальный инстумент для отладки РВ, то подскажите Пользователям,
[/q]


Хм. Я как раз рекомендовал инструмент для отладки РВ. Вы его сначала посмотрите, а потом уж делайте выводы :wink:




-- Семёныч написал 16 сентября 2014 9:14
Если честно, то я себя считал знатоком программы СайтСпутник по уровню чуть выше среднего.
Но вот после таких запросов (Украина | {(\s|")(Д|Л)НР(\s|")}) {(\sПутин\s.{1,}){3,}} у меня зубы морщатся и морда чешется.
Знаете, что мне это напоминает? Вот есть спортивный болид, есть на него гонщик и есть группа механиков. Кто-то отвечает за подвеску, кто-то за настройку коробки передач, кто-о за систему впрыска и т.д. Но есть один супер механик - "дядя Вася" (в нашем случае это Алексей мыльников), который может через воздушный фильтр влезть, пробраться через двигатель и топливную систему, а из выхлопной трубы вылезть. И счастье гонщика, что такой д.Вася в его команде и всегда под рукой.
Простите, что так из далека захожу, но в нашем случае разработчик программы не будет каждому помогать составлять эти РВ. Даже, наверняка, не проблема их составить, проблема правильно их составить, а в приведённом мной выше примере пропуск какого-нибудь значка приведёт к хреновому результату или к никакому.
Когда появились пакеты запросов, то в скором времени появились и стандартные пакеты запросов. Может и с РВ они в скорости появятся. Я реально сомневаюсь, что эта тема под силу малоопытному пользователю СайтСпутника. И даже опытному ошибиться в составлении - пара пустяков.


-- Алексей Мыльников написал 16 сентября 2014 9:48

Семёныч написал:
[q]
разработчик программы не будет каждому помогать составлять эти РВ
[/q]

1. Почему не будет помогать, - помогу я или, надеюсь, другие. Не думаю, что в день будет по 5 запросов на новые сложные РВ. У Вас есть хоть один?

2. РВ бывают не только сложные, но и простые.

3. Никто никого не принуждает писать РВ, Вы же как-то жили без этого. Всё что было ранее - работает. Никто ничего не отменял.

4. Кстати, есть и более сложные чем РВ вещи в СайтСпутнике - это Внешние функции (http://sitesputnik.ru/Help/SSNewsEF.htm), и есть Пользователи, которые их применяют.

Мне как сделать одну кнопку на программе, Вы нажмете на неё и получите то, что Вам нужно в данный момент? Такая кнопка есть - это "Золотой ключик", но он позволяет получать простым способом только простые результаты.


-- Vinni написал 16 сентября 2014 11:59

Семёныч написал:
[q]
Простите, что так из далека захожу, но в нашем случае разработчик программы не будет каждому помогать составлять эти РВ. Даже, наверняка, не проблема их составить, проблема правильно их составить, а в приведённом мной выше примере пропуск какого-нибудь значка приведёт к хреновому результату или к никакому.
[/q]


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

На самом деле базовых конструкций РВ не так уж много - после некоторой практики (дорогу осилит идущий :wink: ) Вы освоите их и сможете легко использовать. :yes:

[q]

(Украина |ДНР |ЛНР) {(\sПутин\s.{1,}){3,}} - удовлетворяют контенты ссылок, в которых речь идет об Украине, или ДНР или ЛНР и Путин в именительном падеже упомянут не менее 3-х раз. Здесь одно РВ применено совместно с обычными величинами.
(Украина | {(\s|")(Д|Л)НР(\s|")}) {(\sПутин\s.{1,}){3,}} - тот же самый результат, но задействованы два РВ. Вместо 'ДНР' | 'ЛНР' использовано {(\s|")(Д|Л)НР(\s|")}.
[/q]


Давайте разберем на этом примере некоторые возможности.
Нам нужно найти тексты, в которых говорится об определенной тематике. В таких текстах будут использоваться определенные слова-маркеры (не обязательно все сразу).
Мы выбрали три таких слова - Украина, ЛНР и ДНР. Конструкция (Украина | 'ДНР' | 'ЛНР') означает, что в результате использования этого РВ будут возвращаться тексты, содержащие хотя бы одно из этих слов (символ | -это на самом деле ИЛИ). Круглые скобки - это ограничитель вариантов (надо же указать, где начало первого варианта и конец последнего).

так как слова ДНР и ЛНР похожи (отличаются на одну букву), то можно оптимизировать список вариантов и (ДНР|ЛНР) написать как ((Д|Л)НР). То есть бвудут искаться строки, начинающиеся либо с Л либо с Д, за которыми идет строка НР.

Еще одна возможность РВ - метасимволы и возможность указывать сразу группу символов при поиске в тексте. Обычно используют символ \s для описания символов-разделителей слов (пробел, табуляция и т.д.) и \S для описания букв и цифр (значимые символы).
Поэтому конструкция \sПутин\s означает отдельное слово Путин с пробелами или другими разделителями слов перед ним и после него, а не "Путина" и т.д.






-- Vinni написал 16 сентября 2014 12:03
Еще один популярный метасимвол - точка (.). Он обозначает любой символ. Плюс иногда используют \d - это любая цифра.
Символ + после метасимвола (или того, что заключено в круглые скобки) означает произвольное число повторений. \s+ -это и один пробел и десять пробелов
Конструкция {число,число} - это явное ограничение на число повторений метасимвола или какой-то конструкции. Первое число - минимальное число повторений, а второе максимальное.
\s{1,3} - это одного до трех пробелов .

Собственно вот и все возможности. которые были использованы в примере :wonder1:




-- Семёныч написал 16 сентября 2014 12:46
Благодарю! :hi:
Действительно, не так и много. Но выглядит - аж жуть!!!
Придётся "осиливать дорогу", а шо рабiць?


-- Алексей Мыльников написал 16 сентября 2014 13:15

Алексей Мыльников написал:
[q]
"Золотой ключик" позволяет получать простым способом простые результаты.
[/q]

Ещё несколько слов о простоте и мощности.

"Золотой ключик" можно применить как простое средство в SiteSputnik Pro.
Если же Вы работаете с новостями (в SiteSputnik Pro+News) и Вам нужен просто агрегатор, то окрываете новый новостной Проект и просто впишите в него нужные RSS-адреса. Всё агрегатор готов. Ничего сложного. Результаты агрегации в "Чистом потоке".

Если Вам нужно этот поток проанализировать на несколько тем, одна их которых Василий Шукшин, то создаете для этой темы Рубрику с правилом:

(Василий /2 Шукшин | 'Калина красная' кинофильм | ещё что-нибудь)

Сложнее? Да, но и выдача будет то, что нужно.
Если Вам нужно, чтобы публикация была именно о Шукшине, а не упоминание его вскользь, то можно как вариант добавить через "логическое И" РВ {(Шукшин.{1,}){7,}}. Это выдаст публикации, где Шукшин упомянут не менее 7 раз. Кое-что Vinni пояснил по работе РВ. Добалю от себя на популярном языке о работе этого РВ следующее. Оно ползёт по анализируемому тексту, попадает на Шукшин. Пока всё нормально. Далее видит .{1,} и понимает, что можно ползти далее и найти такую конструкцию нужно не менее 7 раз потому что на ней прописано {7,}. Если это удалось, то анализируемый текст удовлетворяет этому РВ.
Все правило будет выглядеть так: {(Шукшин.{1,}){7,}} (Василий /2 Шукшин | 'Калина красная' кинофильм | ещё что-нибудь)

Если Вам, чтобы сделать нужные выводы, надо что-то посмотреть в базе данных Кронос, или в Excel, или информация лежит на сайте и надо выйти через интернет на этот сайт..., в этом случае РВ Вам не помощник (оно не всемогуще) - то примените Внешние функции. Это ещё сложнее, но позволяет улучшить выдачу.

Если источник информации не RSS-поток, а там где речь идет об "очень интересных вещах", RSS-ок точно нет, то сэмумируйте поток без Мастера (http://sitesputnik.ru/Help/SSMaster.htm) подключения источников. Это чуть сложнее, чем просто вписать адрес RSS, но потоки, попадающие на анализ улучшатся.
Если это не дает нужные ссылки, то примените Мастер. Это сложнее, но позволяет достать те данные, которые не достанешь через RSS и его эмуляцию.

Важно.
1. Всё, что в однокнопочных системах делаеся по одной кнопке в СайтСпутнике тоже делается по одной кнопке.
2. Да, где-то что-то в сложных случаях можно сделать проще, точнее кому-то это будет проще, кому-то нет. Этими вопросами занимаюсь постоянно. У Вас есть эти где-то и что-то? Если да, то пишите на форум или по е-майлу.



-- Алексей Мыльников написал 5 ноября 2014 12:43

Алексей Мыльников написал:
[q]
... со временем, при реальной необходимости, сделаю сам и встрою с СайтСпутник утилиту для проверки регулярных выражений ...
[/q]



Этот форум работает на скрипте Intellect Board
© 2004-2007, 4X_Pro, Объединенный Открытый Проект