Набла:Парсинг файлов «Гаранта»

Материал из Справочника наблюдателя
Перейти к:навигация, поиск

Файл правил[]

Файл с правилами рассчитан на то, что он может быть единым для большого числа документов.

Общая структура файла правил[]

Файл обрабатывается построчно, пустые строки игнорируются. Игнорируются также строки комментариев и комментарии в конце строк (см. #Комментарии).

Файл рассматривается как последовательность разделов, каждый из которых начинается с заголовка — строки вида

=КлючРаздела

Строки раздела имеют вид:

КлючПараметра ЗначениеПараметра

или, в некоторых случаях:

Спецификатор>КлючПараметра ЗначениеПараметра
СпецификаторФормата:КлючПараметра ЗначениеПараметра
СпецификаторФормата:Спецификатор>КлючПараметра ЗначениеПараметра

Регистр символов в ключах обычно неважен. Ключи распознаются по первым буквам (обычно по двум).

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

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

Спецификатор формата[]

Спецификатор формата определяет, что правило применимо лишь для определенных форматов выходного файла. Он имеет вид последовательности символов «s» (справочник), «е» (энциклопедия), «h» (сайт справочника), «c» (сайт клерка), «f» (fb2).

Комментарии[]

Символы в строке, расположенные после символов «#», «;», «//», игнорируются.

Раздел «=НАСТРОЙКИ»[]

Раздел предназначен для задания самых общих параметров парсера. Как правило, эти параметры задаются раз и навсегда.

команда назначение значение по умолчанию пример
префикс имя пространства имен вики, в котором будут размещаться документы. Двоеточие после имени пространства можно не указывать. НПА префикс Документ
участник имя участника, который указывается в качестве автора текста. WikiSysop участник Dza
название название сайта, указываемое в заголовке файла импорта в вики. Назначение названия в этом файле неизвестно. бессмысленное название "Русская Википедия"
адрес адрес (URL) сайта, указываемый в заголовке файла импорта. Назначение URL в этом файле неизвестно. бессмысленное адрес "http://ru.wikipedia.org"
журнал определяет, открывать ли окно с журналом после завершения обработки. Возможные значения — «да» и «нет». По умолчанию журнал открывается. Для открытия используется программа, ассоциированная с расширением «.log» в MS Windows (обычно это «Блокнот»). да журнал нет
отладка задает номер строки исходного файла, с обработки которой включается режим подробного протоколирования. Действует только при установке соответствующего флага в диалоге. 1 -
отладка таблиц включает выдачу информации о таблицах при включенном режиме подробного протоколирования нет -
формат формат выходного файла (допустимые значения «справочник», «энциклопедия», «html», «klerk», «fb2». справочник формат энц


Раздел «=ДОКУМЕНТ»[]

Для каждого обрабатываемого документа в общем файле правил должен иметься раздел «=Документ». Ключевым параметром, по которому устанавливается связь между файлом «Гаранта» и относящимися к нему описаниями в общем файле правил, является уникальный номер документа, который задается в файле «Гарант» в реквизите <p:Handle v="номер"> блока <c:Document>. (Парсер сообщает этот номер при попытке обработки документа, для которого раздела «=Документ» не существует.)

Альтернативным методом, не требующим выяснения уникального номера документа, является создание частного файла правил, который устанавливает связь между документом и применимыми к нему правилами по имени файла с документом (заменой расширения на «.rules»).

команда назначение пример
номер уникальный номер документа в системе «Гарант» (см. выше). Допускается многократное использование команды (так как «Гарант» использует разные номера для разных редакций документа). номер 10155678
обозначение уникальное обозначение документа, которое может использоваться вместо номера для ссылки на документ в правилах обозначение ГК
группа обозначение, которое может применяться в правилах для ссылки на несколько документов с одинаковыми свойствами (то есть одно и то же обозначение группы может использоваться у нескольких документов). Документ может относиться к нескольким группам (в этом случае команда «группа» должна быть указана несколько раз), либо не относиться ни к одной. группа законы
название название документа, которое используется при именовании страниц. Использование названия для вики-страниц накладывает ограничения на максимальную длину строки (254 байта, что с учетом Юникода означает 127 русских букв); при необходимости здесь указывается «урезанное» название, а в команде «полное» — официальное название документа название "О трудовых книжках (постановление Правительства РФ от 16.04.2003 № 225)"
полное полное официальное название документа (если оно по техническим причинам не могла быть указано в команде «название»). По умолчанию совпадает с указанным в команде «название». полное "Об утверждении форм и требований к оформлению документов, используемых при государственной регистрации юридических лиц, а также физических лиц в качестве индивидуальных предпринимателей (постановление Правительства РФ от 19.06.2002 № 439)"

Раздел «=КОРРЕКТИРОВКИ»[]

спецификаторы применения
заголовок id
текст id
id альтернативный текст заголовка
что на-что
блок id — превращает блок из промежуточного в структурный
id требуют индивидуального спецификатора применения (для)

Раздел «=СТРУКТУРА»[]

команда назначение пример
обозначение идентификатор раздела, используемый при ссылках на него. Параметр необязательный, используется лишь в связи со ссылками из других разделов «=СТРУКТУРА» (в команде «подсчет») обозначение Статьи
для номер документа (обозначение документа, обозначение группы), к которому применим раздел; команда может использоваться многократно для ГК
кроме номер документа (обозначение документа, обозначение группы), к которому неприменим раздел; команда может использоваться многократно кроме КоАП
уровень[1] уровни заголовков, к которым применим документ (в формате набора цифр от1 до 9, не разделенных никакими знаками, включая пробелы) уровень 23456789
раздел[1] наименование раздела документа, внутри которого применимо данное правило раздел "Порядок применения плана счетов бюджетного учета"
шаблон регулярное выражение, которое сопоставляется с текстом заголовка в документе. Заголовки перед сопоставлением с шаблоном нормализуются (HTML-entity преобразуются в символы, неразрывные пробелы и переводы строки заменяются на обычные пробелы) шаблон "Статья ([\d]+(\.[\d]+)*(-\d)?)(\.\s*|\s+)([^\d].+)" # в КоАП есть статья 19.7.5-1 :-)
номер заготовка нумерационной части заголовка, использующая результаты сопоставления заголовка с регулярным выражением из команды «шаблон» (в качестве символов подстановки используются $1..$9) номер "Статья $1"
название заготовка именной части заголовка, использующая результаты сопоставления заголовка с регулярным выражением из команды «шаблон» (в качестве символов подстановки используются $1..$9) название "$5"
счетчик заготовка получаемого из заголовка собственно номера (отличается от «нумерационной части» отсутствием родового слова вроде «глава» или «статья»), использующая результаты сопоставления заголовка с регулярным выражением из команды «шаблон» (в качестве символов подстановки используются $1..$9) счетчик "$1"
страница[1] признак того, что данный заголовок приводит формирует новую вики-страницу. Возможные значения — «да» или «нет». По умолчанию «нет» страница да
заголовок[1] заготовка заголовка страницы, использующая следующие метасимволы:

$N2..$N9 — Х
$T1..$T9 — Х
$S2..$S9 — Х
$H0      — Х

оглавление[1]
один или одна
много
подсчет[1]
текст
  1. ↑ а б в г д е Допускается спецификатор
  1. — «для УказаниеНаДокумент» — задает номер документа (обозначение документа, обозначение группы), к которому применим раздел; команда может использоваться многократно;
  2. — «кроме НомерДокумента» — задает номер документа (обозначение документа, обозначение группы), к которому неприменим раздел; команда может использоваться многократно;
  3. — «обозначение ОбозначениеПравила» — идентификатор правила, используемый при ссылках на него
  4. — «уровень НомераУровней» — задает уровни заголовков, к которым применим документ (в формате набора цифр от1 до 9, не разделенных никакими знаками, включая пробелы)
  5. — «раздел НазваниеРаздела» — применять правило только к разделу с указанным именем (??? номером???) или его детям.
  6. — «шаблон ШаблонРазбора» — регулярное выражение, которое сопоставляется с текстом заголовка в документе. Используются нормализованные заголовки (без HTML-entity и с заменой неразрывных пробелов и переводов строки на обычные пробелы)
  7. — «номер ШаблонРезультата» — нумерационная часть по результатам разбора заголовка регулярным выражением (подстановки — $x)
  8. — «название ШаблонРезультата» — именная часть по результатам разбора заголовка регулярным выражением (подстановки — $x)
  9. — «страница Параметр» — допускаются значения параметра «да» или «нет» — создавать ли при появлении такого заголовка новую страницу вики
  10. — «заголовок ШаблонЗаголовка» — специальный образец для формирования заголовка страницы; обязателен при «страница новая»
  11. — «оглавление Параметр» — Параметр означает самый высокий уровень оглавления, куда включается данный заголовок; по умолчанию 1 (то есть присутствует во всех оглавлениях)

В ШаблонеЗаголовка могут использоваться подстановочные переменные $Nx, $Ty и $Sх (x=2..9, y=1..9), обозначающие соответственно нумерационную часть заголовка соответствующего уровня, именную часть и последовательность нумерационных частей уровней (с указанного до текущего; разделяются двоеточиями). «9» всегда означает текущий уровень. Дополнительно есть переменная $H0 — заголовок вышестоящей страницы.

У параметров «уровень», «заголовок», «страница», «оглавление» допускаются спецификаторы

Для сопоставления с шаблоном текст заголовка документа нормализуется (переводы строки и неразрывные пробелы заменяются пробелами)

ДОБАВЛЯЕМ

  • подсчет ОбозначениеПравила — указанное правило будет использоваться для отбора показываемого диапазона номеров во всех нижестоящих разделах (типично «подсчет СТАТЬИ»). Подсчет должен допускать спецификатор
  • счетчик ШаблонРезультата — отличается от параметра «номер» отсутствием родового слова (то есть это действительно только номер). Параметр обязателен, если на это правило ссылаются из параметра «подсчет»
  • одно ЕДЧисло — «ст.» — для построения диапазонов
  • много МнЧисло — «ст.ст.» — для построения диапазонов



Раздел «=»[]

команда назначение пример

Раздел «=»[]

команда назначение пример



Раздел «=СТРУКТУРА»[]


# Раздел "=НАСТРОЙКИ"
# предназначен для задания общих параметров
# Параметры
# — "префикс ИмяПространства" — задает имя пространства для документов (без двоеточия)
# — "участник ИмяУчастника" — имя, которое указывается в качестве автора текста
# — "название НазваниеСайта" — текстовая строка - имя сайта (для заголовка импорта)
# — "адрес АдресСайта" — текстовая строка - URL  сайта (для заголовка импорта)
# — "отладка да" - принудительный режим подробного вывода 
# — "журнал ДаНет" — открытие файла журнала при завершении обработки

# Раздел "=ДОКУМЕНТ"
# Описывает параметры конкретного документа
# Параметры
# — "номер НомерДокумента" — задает номер документа, к которому относится раздел
# — "обозначение ОбозначениеДокумента" — обозначение, которое может использоваться вместо номера в последующих разделах
# - "название НазваниеДокумента"
# — "полное ПолноеНазвание"
# — "группа ОбозначениеГруппы" - обозначение, которое может применяться вместо номера для нескольких документов; команда может использоваться многократно.



# Раздел "=СТРУКТУРА"
# предназначен для описания правил разбора заголовков в документе
# Параметры
# — "для УказаниеНаДокумент" — задает номер документа (обозначение документа, обозначение группы), к которому применим раздел; команда может использоваться многократно; 
# — "кроме НомерДокумента" — задает номер документа (обозначение документа, обозначение группы), к которому неприменим раздел; команда может использоваться многократно;
# — "уровень НомераУровней" — задает уровни заголовков, к которым применим документ (в формате набора цифр от1 до 9, не разделенных никакими знаками, включая пробелы)
# — "образец ШаблонРазбора" — регулярное выражение, которое сопоставляется с текстом заголовка в документе. Используются нормализованные заголовки (без HTML-entity и с заменой неразрывных пробелов и переводов строки на обычные пробелы)
# — "номер ШаблонРезультата" — нумерационная часть по результатам разбора заголовка регулярным выражением (подстановки - $x)
# — "название ШаблонРезультата" — именная часть по результатам разбора заголовка регулярным выражением (подстановки - $x)
# — "извлечь ШаблонИзвлечения" — регулярное выражение, с которым сопоставляется название блока "p:ShortName", проставляемое редакторами Гаранта. Первый результат сопоставления ($1)
#   будет толковаться как созданный редакторами диапазон номеров входящих в раздел статей/пунктов.
# — "страница Параметр" — допускаются значения параметра "да" или "нет" — создавать ли при появлении такого заголовка новую страницу вики
# — "заголовок ШаблонЗаголовка" — специальный образец для формирования заголовка страницы; обязателен при "страница новая"
# - "оглавление Параметр" - Параметр означает самый высокий уровень оглавления, куда включается данный заголовок; по умолчанию 1 (т.е. присутствует во всех оглавлениях)
#   В ШаблонеЗаголовка могут использоваться подстановочные переменные $Nx, $Ty и $Sх (x=2..9, y=1..9), обозначающие соответственно нумерационную часть заголовка соответствующего уровня,  
#   именную часть и последовательность нумерационных частей уровней (с указанного до текущего; разделяются двоеточиями). "9" всегда означает текущий уровень. Дополнительно есть переменная 
#   $H0 — заголовок вышестоящей страницы.
# У параметров "уровень", "заголовок", "страница", "оглавление" допускаются спецификаторы 
# Для сопоставления с шаблоном текст заголовка документа нормализуется (переводы строки и неразрывные пробелы заменяются пробелами)

# Раздел "=КОРРЕКТИРОВКИ"
# предназначен для корректировки стилей текстовых абзацев 
# Параметры
# — "для НомерДокумента" — задает номер документа, к которому применим раздел 
# — "заголовок ИдентификаторАбзаца" — указывает идентификатор абзаца, который должен рассматриваться как заголовок; команда может использоваться многократно
# — "текст ИдентификаторАбзаца" — указывает идентификатор абзаца, который должен рассматриваться как текст, а не как заголовок (сохраняется форматирование, но не учитывается в иерархии); 
#   команда может использоваться многократно
# — "ЗаменяемыйТекст ЗаменяющийТекст" — используется для подстановки объектов (формул). Команда может использоваться многократно

# Раздел "=СОКРАЩЕНИЯ"
# предназначен для корректировки избыточно длинных названий страниц 
# Параметры
# — "для НомерДокумента" — задает номер документа, к которому применим раздел 
# — "НастоящееНазвание СокращенноеНазвание". Команда может использоваться многократно. Замечание: "Настоящее" название проверяется после замены HTML-entity и применения правил раздела "Оформление", сокращенное название также должно быть оформлено уже правильно. Попытки замен делаются поочередно по отношению к нумерационной и именной части названия.

# Раздел "=ОФОРМЛЕНИЕ"
# предназначен для корректировки пунктуации 
# Параметры:
# — "ЗаменяемыйТекст ЗаменяющийТекст" — регулярное выражение и замена для исправления пунктуации (подстановки - \x)
# возможно использование спецификатора 

Проблемы парсера[]

При работе с HTML OpenOffice при двух последовательных pre (/pre — pre) автоматически добавляется отступ 0.5 см после абзаца. Если делать pre на весь текст, то такого нет, но формировать такое неудобно. Пока оставил as is

Рисунки[]

Применяем декодер base64, получается файл формата png.