Использование регулярных выражений в разработке контента правовых баз данных большого объема

УДК 004.912

ИСПОЛЬЗОВАНИЕ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ В РАЗРАБОТКЕ КОНТЕНТА ПРАВОВЫХ БАЗ ДАННЫХ БОЛЬШОГО ОБЪЕМА

© 2009 г. ДА. Сеник

Кубанский государственный университет, Kuban State University,

г. Краснодар Krasnodar

Обсуждаются некоторые способы увеличения быстродействия регулярных выражений: с использованием программируемых логических интегральных схем, с помощью конвертирования регулярных выражений НКА в ДКА, с помощью предварительных оптимизаций на уровне механизма Perl НКА. Показывается, как с помощью записи шаблона можно задействовать предварительные оптимизации и тем самым ускорить работу регулярных выражений.

Ключевые слова: НКА; Перл; регулярные выражения; оптимизация.

In this paper we discuss some existing techniques of regular expression's speedup. They are: using programmable logic devices, simplifying NFA by converting to several DFA, using preliminary string optimizations on Perl NFA level. We discuss how the way of constructing patterns could involve preliminary optimizations and speedup regular expressions.

Keywords: NFA; Perl; regular expressions; optimizations.

Введение

Правовые базы данных (справочно-правовые системы, СПС) представляют собой особый класс компьютерных баз данных, содержащих акты органов власти, нормативно-техническую документацию и различные справочные материалы в оцифрованном, электронном виде. Наиболее известными российскими правовыми базами данных являются ГАРАНТ, КонсультантПлюс, Кодекс и Референт. Количество документов, содержащихся в этих системах, измеряется миллионами экземпляров.

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

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

работка которых невозможна без определенной автоматизации работы с текстом.

Об увеличении количества информации в электронном виде

В 1965 г. Гордон Мур сформулировал эмпирический постулат, согласно которому число транзисторов на кристалле будет удваиваться каждые 24 месяца. С момента формулировки этого постулата прошло почти 45 лет, и, несмотря на некоторые колебания, так называемый закон Мура продолжает работать [1]. Аналогичный прогресс можно наблюдать в области накопления информации в электронном виде.

Так, информационный архив LexisNexis был основан в 1970 г. на базе экспериментального журналистского проекта. В 1980 г. архив содержал большую часть законодательных актов США. В 2008 г. в Lex-isNexis содержалось более шести миллиардов документов, что составляло свыше 40 терабайт текстовой информации: законодательных актов, научных журналов, патентов. Каждую неделю в систему подключалось более двадцати миллионов новых документов [2].

В качестве российского аналога LexisNexis можно привести в пример СПС ГАРАНТ. Первая версия, разработанная в 1990 г. студентами МГУ Першеевым и Новиковым, содержала только основные кодексы РСФСР. В 2003 г. в системе насчитывалось более полутора миллионов документов. В 2009 г. система ГАРАНТ содержала около трех миллионов документов: законодательных актов, форм, справочной литературы. Каждую неделю подключалось около десяти тысяч новых документов.

Увеличение количества информации в сети Интернет происходит еще быстрее. Так, в первый год своей работы в 1998 г. поисковая система Google проиндексировала 26 млн страниц. В 2000 г. это число увеличилось до миллиарда, в 2008 г. число проиндексированных страниц превысило один триллион. Как сообщается в официальном блоге Google, реальное проиндексированное количество страниц значительно больше за счет дублированных страниц, которые не учитывались [3]. Причины быстрого роста Интернет -в низкой стоимости размещения информации, а также в том, что сами пользователи активно участвуют в формировании контента.

Так, открытая энциклопедия Википедия была запущена Уэйлсом и Сэнгером в 2001 г. Значительный период наблюдался экспоненциальный рост количества статей. Авторы проекта отмечали, что им приходилось сдерживать рост энциклопедии, так как они не могли обеспечить соответствующего технического обеспечения проекта. В 2007 г. количество документов в английской версии Википедии превысило отметку в 2 млн статей, и она стала крупнейшей энциклопедией, опередив даже китайскую Юнлэ - самую большую бумажную энциклопедию в мире, которая держала рекорд ровно 600 лет.

Массовое проникновение информационных технологий можно наблюдать и на государственном уровне. Как отмечается в федеральной целевой программе «Электронная Россия (2002 - 2010 годы)», уже созданы все предпосылки для широкого внедрения информационных технологий в органах власти. Успешно реализуются проекты по обмену данными в электронном виде между ведомствами, а также между государственными органами, населением и организациями. Многими органами власти созданы сайты в сети Интернет, на которых размещается нормативно-правовая информация [4].

Основными целями программы «Электронная Россия (2002 - 2010 годы)» названы: повышение качества и эффективности государственного управления; расширение возможности доступа граждан к правовой информации; придание электронной информации официального, легального статуса. В Краснодарском крае эти задачи подробно отражены в целевой программе «Электронная Кубань» (на 2004 - 2010 годы) [5].

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

Регулярные выражения Perl

Регулярные выражения представляют собой систему поиска текстовых фрагментов, основанную на

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

Впервые регулярные выражения появились в программах Unix: grep, lex, awk, и наибольшее развитие получили в языке программирования Perl (Practical Extraction and Report Language - язык извлечения и составления отчетов). Perl представляет собой высокоуровневый интерпретируемый динамический язык общего назначения. Perl работает под большинством операционных систем и распространяется бесплатно по лицензии GNU GPL.

Фактически, Perl-совместимые регулярные выражения стали стандартом, по аналогии с которым ведется их разработка в других языках: c#, java, python. Важное отличие регулярных выражений Perl от других реализаций состоит в том, что они встроены непосредственно в язык на низком уровне и используют тот же синтаксис, в то время как другие языки используют процедурный или объектно-ориентированный подходы. Регулярные выражения спроектированы таким образом, чтобы позволить текстовую обработку высокой сложности.

В Perl регулярные выражения представлены операторами поиска m/.../ и замены s/.../.../. Оператор поиска анализирует входную строку и ищет в ней подстроку, совпадающую с шаблоном, записанным на языке регулярных выражений. Оператор замены модифицирует исходную строку, меняя найденный текстовый фрагмент на другой - определенный заранее или найденный в ходе работы оператора. Кроме того, регулярные выражения используются функцией split, которая разбивает строку на массив подстрок. Подробное описание регулярных выражений Perl можно найти в [6].

Автоматизация распознавания документов

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

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

щих» полей документа. И при этом не соблюдается требование к стопроцентной аутентичности.

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

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

Поиск ошибок распознавания

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

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

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

m/\w\d\w?/g - определяет цифру в середине или конце слова;

m/\w?\d\w/g - определяет цифру в середине или начале слова.

Здесь регулярное выражение заключено в рамках оператора поиска m/.../. Метасимвол «\w» обозначает «любой символ, входящий в рамки слов». Метасимвол «\d» обозначает любую арабскую цифру. Квантификатор «?» говорит о необязательности метасимвола «\w». Модификатор «g» включает режим глобального поиска и позволяет найти несколько совпадений в одной строке. Как правило, фильтры для поиска ошибок распознавания представляют собой набор последовательно применяемых регулярных выражений.

Приведение документов к унифицированному виду

Несмотря на то что форма написания правовых актов регламентирована инструкциями по делопроизводству, в различных органах власти, как правило, придерживаются различных форм написания аналогичных документов. Это касается оформления заголовка документов, номеров, дат, приложений, названий разделов, статей и пунктов, а также подписи документа. Например, подпись в различных органах власти может выглядеть по-разному: Первый заместитель руководителя А. А. Исмелов Исмелов А.А. первый заместитель руководителя

Название документа может быть набрано прописными или маленькими буквами. Дата может быть оформлена как «03/01/2008 г.», так и «3.01.2008г». Номер документа может быть оформлен как «N 123», так и «№ 123» или «N°123». Диапазон дат может быть оформлен как «2006 - 2009 г.», так и «2006-2009г.». Сокращение населенных пунктов может быть оформлено как «г. Краснодар», так и «г.Краснодар». Вместо дефиса может использоваться тире (и наоборот). Часто в тексте используются разные формы кавычек. В некоторых словах используется разделение букв пробелами.

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

/(N|№)°?(\s*)?/N /g - замена в номерах документов;

/(\W)(г|ул|п)\.($bigCyr)/$1$2. $3/g - замена в сокращениях для населенных пунктов и названий улиц;

/($bigCyr).($bigCyr)\.($bigCyr)($smallCyr)/$1.$2. $3$4/g - замена в ФИО;

/\s+/ /g - замена большого количества пробелов одним;

/A\s+// - удаление пробелов в начале строки;

/\S\s*$// - удаление пробелов в конце строки;

Выводы

Можно говорить о том, что регулярные выражения могут быть эффективно использованы при разработке контента правовых баз данных большого объема. Описанные методики были реализованы автором в программных средствах, внедренных в компании «Гарант-Сервис-Кубань», занимающейся разработкой региональных информационных блоков системы ГАРАНТ в Краснодарском крае. На момент внедрения в данных информационных блоках содержалось 27000 правовых документов более чем 130 типов. Общий объем текстовых данных составлял около одного гигабайта.

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

Поступила в редакцию

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

Литература

1. Michael Kanellos. New Life for Moore's Law". 19 april 2005. URL: http://news.cnet.com/New-life-for-Moores-Law/2009-1006_3-5672485.html.

2. URL: http://www.lexisnexis.com/about-us/history.aspx

3. URL: http://googleblog.blogspot.com/2008/07/we-knew-web-was- big. html

4. Собрание законодательства РФ от 4 февраля 2002 г. № 5 С. 531

5. Информационный бюллетень ЗС Краснодарского края. № 1 (131) от 30 декабря 2007 г., ч. I. С. 447.

6. Jeffrey Friedl. Mastering Regular Expressions, Second Edition. O'Reilly media. July 2002. С. 102 - 163.

27 мая 2009 г.

Сеник Дмитрий Александрович - аспирант, кафедра теоретической физики и компьютерных технологий, Кубанский государственного университета, г. Краснодар. Тел.: (861)2559832. E-mail: dsenik@inbox.ru

Senik Dmitriy Aleksandrovich - post-graduate student, department of theoretical physics and computer technologies, Kuban State University, Krasnodar. Ph. (861)2559832 E-mail: dsenik@inbox.ru