СМИ

Пометить иноагентов, не задев декабристов. Бесплатный плагин правовой маркировки для редакций

На днях по редакционным чатам разошёлся курьёз. На сайте «Ведомостей» к историческому материалу про восстание декабристов 1825 года автоматически подставилась пометка: организация, мол, признана нежелательной на территории РФ. Алгоритм перепутал участников восстания на Сенатской площади с современной иностранной НКО, у которой похожее название.

Скриншот материала «Ведомостей»: во фразе «Восстание декабристов» автоматическая маркировка добавила пометку «(организация признана нежелательной на территории РФ)».

Над «Ведомостями» посмеялись и забыли. А зря, потому что это не глупость конкретной редакции, а портрет того, как работает наивная автоматизация. И это отличный повод рассказать, как та же задача решается аккуратно. Тем более что решение у меня давно готово, и оно бесплатное.

Почему маркировка это больно

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

Хуже того, реестры живут своей жизнью. Организация, о которой вчера можно было писать свободно, сегодня оказывается в перечне. А статья пятилетней давности со ссылкой на её сайт никуда не делась, и риск возникает задним числом, без всякого действия с вашей стороны.

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

Я довольно давно живу с этой задачей на разных своих проектах и в какой-то момент собрал под неё отдельный инструмент (ещё для почившего в бозе "ПроВладимира") и с тех пор его поддерживаю и обновляю для коллег, а не так давно выложил в публичный доступ после серьёзной переработки.

Что это

Плагин для WordPress Legal Entity Marks. Бесплатный, с открытым кодом, лицензия GPL-3: пользоваться и дорабатывать можно без всяких условий. Ставится как обычный плагин, при активации сам создаёт нужные таблицы и подтягивает стартовые данные. Дальше о нём можно почти не вспоминать, он работает в фоне.

Четыре реестра и откуда берутся данные

Плагин работает с четырьмя перечнями:

  • Иностранные агенты (реестр Минюста)
  • Экстремистские организации (перечень Минюста)
  • Террористические организации (перечень ФСБ и НАК)
  • Нежелательные организации (перечень Минюста)

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

Маркировка на лету, без порчи архива

Плагин находит в тексте упоминания лиц и организаций из реестров и добавляет сноску к первому упоминанию, а в конце материала - блок юридических дисклеймеров. Цвета блока настраиваются под оформление сайта.

Ключевая деталь (для меня как для редактора это было важно, коллеги меня поймут): исходный текст в базе не меняется. Маркировка появляется на лету, в момент, когда страница отдаётся читателю. Отключите плагин, и все статьи вернутся к первоначальному виду, без следов правок в базе. Ничего необратимого с вашим архивом не происходит, и это принципиально: инструмент, который переписывает вам тексты, доверия не заслуживает.

За счёт чего он не путает декабристов с НКО

Это самое важное отличие нормального инструмента от наивного поиска по словам. Случай с декабристами произошёл потому, что программа искала совпадение по строке, не разбираясь в контексте. Здесь против этого класса ошибок стоит несколько заслонов.

Грамматика русского языка. Плагин склоняет фамилии и имена по падежам, поэтому находит упоминание «по словам Иванова», «письмо Иванову», «интервью с Ивановым», а не только точную форму из реестра. Работают оба порядка слов. При этом род определяется по отчеству или окончанию фамилии, и женские фамилии на согласную он не склоняет, а значит, не подведёт под них постороннего человека.

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

Обычные слова только в кавычках. Если название организации состоит из общеупотребительных слов, оно помечается лишь в кавычках. Издание «Родник» получит пометку, а фраза «вода из родника» нет. Ровно эта логика не даёт превратить оборот речи в мнимую нежелательную организацию, а именно на таких совпадениях и спотыкается наивный поиск.

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

Одна организация в нескольких реестрах. Бывает, что юрлицо числится сразу в двух перечнях. Плагин хранит все статусы и под одним упоминанием показывает их вместе, а в дисклеймер выводит только то, что вы решили маркировать.

Стопроцентной гарантии не даёт ни один инструмент, и я этого тоже не обещаю. Но именно такие ошибки, как с декабристами, эти правила снимают.

Последнее слово за редакцией

Плагин не действует за спиной редакции. В редакторе статьи есть отдельный блок «Маркировка»: пользователь с ролью «Редактор» или выше видит там всё, что нашёл сканер, и на каждое упоминание выбирает одно из трёх положений - «автоматически» (по общим правилам, с подписью, помечается оно сейчас или нет), «всегда помечать» или «не помечать». Последние два действуют только в этой статье. Так снимается любое ложное срабатывание за пару кликов, без обращения к разработчику.

Под тип сайта есть готовые профили. СМИ маркирует все четыре реестра. Не СМИ маркирует экстремистские и террористические, нежелательные только отслеживает, а иноагентов не трогает вовсе. И режим вручную, где галочки расставляет администратор.

Здесь важная развилка. Маркировка и отслеживание разведены. Сайту, который не является СМИ, многие метки по закону не нужны, но ему важно знать, где на его страницах стоят упоминания и ссылки на такие организации: активную ссылку на нежелательную организацию, например, могут истолковать как участие в её деятельности. Поэтому у каждого реестра две независимые галочки: «маркировать» (сноска в тексте) и «отслеживать» (меток нет, но всё видно в отчёте).

Отдельно для иноагентов есть режим «только в цитатах и ссылках»: обычное упоминание фамилии не помечается, а маркировка ставится там, где человека цитируют или дают ссылку на его материал. Что считать поводом (блок цитаты, абзац с гиперссылкой, прямая речь в кавычках, встроенный пост из соцсети), настраивается.

И ещё мелочь, которая экономит нервы: если редактор по старой привычке уже поставил после имени звёздочку, плагин считает это подтверждением и метит упоминание всегда, а свою сноску подставляет вместо звёздочки, чтобы не было задвоения.

Автоматика: сканирование и обновления

Руками ничего запускать не нужно. При публикации статьи плагин сканирует её сам. Для разового прохода по всему сайту есть сканер в админке с прогресс-баром, а для тех, кто любит консоль, полный набор команд WP-CLI.

Каждое обновление тянет за собой проход автоматического сканера по всему архиву заново, и по текстам, и по ссылкам. Работа идёт частями в фоне, чтобы не ронять сайт. Когда проход закончен, плагин показывает итог: сколько записей пополнило реестры, сколько из них встречается на сайте и в скольких материалах, сколько нашлось новых "нехороших" ссылок.

Это видно в разделе «Упоминания»: все находки по всем материалам, кто упомянут, в какой форме найден, маркируется ли, какие рядом ссылки. Есть отбор «новое с последнего обновления реестров» (то есть именно то, что появилось только что и требует особенного внимания), отдельный фильтр «только со ссылками» и выгрузка всего этого в CSV для анализа во внешних программах или системах ИИ.

Тот самый случай, когда организацию внесли в перечень уже после вашей публикации, закрывается именно этим: плагин сам найдёт старый материал и покажет его в отчёте, чтобы риск не всплыл для вас неожиданно.

В общем списке записей WordPress появляется колонка со счётчиками: сколько меток, сколько упоминаний без меток, сколько запрещённых ссылок. Тут же работает отбор материалов через фильтр.

Не только сноски: ссылки

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

При этом плагин аккуратен и здесь. Ссылки на ресурсы иноагентов он не трогает: ссылаться на них (по крайней мере пока) не запрещено, достаточно маркировки самого упоминания. Что именно считать подлежащим удалению, вы решаете сами. А отслеживание идёт вплоть до конкретного аккаунта: запрещён не весь мессенджер целиком, а конкретный канал, и ссылка на соседний канал остаётся нетронутой. Часть доменов и аккаунтов при этом приезжает автоматически, из самих данных реестров.

Мелочи, на которых всё обычно и ломается

Пара вещей, которые незаметны, пока не столкнёшься:

  • Совместимость с кешем. Плагин дружит с популярными кеш-плагинами и обновляет кеш страницы, когда маркировка изменилась. Иначе читатель видел бы старую версию.
  • Тексты мимо основного поля. Многие темы выводят подзаголовок или лид отдельным блоком, мимо тела статьи, и простой поиск по записям их не видит. В настройках можно отметить такие поля.
  • Осторожность с обычной речью. Реестры сами подбрасывают ловушки: внутри записей встречаются общеупотребительные обороты, и без защиты фраза вроде «служба поддержки для журналистов» легко получила бы пометку. Плагин такие случаи гасит.

Кому это нужно и что с другими платформами

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

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

Забрать

Плагин бесплатный и открытый, лежит на GitHub вместе с полным описанием, ответами на частые вопросы и историей версий: github.com/chekazoid/legal-entity-marks. Там же в разделе релизов можно скачать готовую к установке версию.

Я сделал его бесплатным сознательно. Соблюдение закона не должно быть привилегией тех, у кого есть бюджет на разработку. А если после установки останутся вопросы или захочется чего-то под свою редакцию, напишите мне, разберёмся.

← Все материалы