Универсальный словарь, содержащий морфологическую, синтаксическую и семантическую информацию о словоформах русского языка

Сер. 10. 2009. Вып. 3

ВЕСТНИК САНКТ-ПЕТЕРБУРГСКОГО УНИВЕРСИТЕТА

УДК 81’322.2 Д. В. Меркурьев

УНИВЕРСАЛЬНЫЙ СЛОВАРЬ, СОДЕРЖАЩИЙ

МОРФОЛОГИЧЕСКУЮ, СИНТАКСИЧЕСКУЮ И СЕМАНТИЧЕСКУЮ ИНФОРМАЦИЮ О СЛОВОФОРМАХ РУССКОГО ЯЗЫКА

1. Введение. Рост доступной текстовой информации обусловливает необходимость создания новых и развития существующих средств ее эффективной обработки. Функциональная теория В. А. Тузова [1] является удачным средством формализации естественных языков. На основе теории был разработан синтактико-семантический анализатор текстов на русском языке [2]. Он формирует скобочную структуру, которая отражает синтаксические связи между словами предложения. Кроме того, в результате анализа определяется семантика каждого слова, а также всего предложения в целом.

Синтактико-семантический анализатор в процессе своей работы выполняет следующие шаги:

1) графематический анализ (выделение слов, знаков пунктуации, анализ чисел и т. д.);

2) морфологический анализ;

3) пословная обработка (модификация имеющейся и получение новой информации, необходимой для синтактико-семантического анализа);

4) синтактико-семантический анализ.

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

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

1) «Mystem» компании «Yandex» [3];

2) морфологические модули проекта AOT («Автоматическая обработка текста») [4];

3) «RCO Morphology Professional SDK» компании RCO [5] и др.

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

Меркурьев Дмитрий Васильевич — аспирант математико-механического факультета Санкт-Петербургского государственного университета. Научный руководитель: проф. И. Л. Братчиков. Количество опубликованных работ: 3. Научное направление: автоматическая обработка текстов на естественных языках. E-mail: d.merkuryev@mail.ru.

© Д. В. Меркурьев, 2009

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

2. Основные положения и терминология теории В. А. Тузова. Для пояснения специфики рассматриваемой предметной области сначала необходимо раскрыть основные тезисы и используемый терминологический аппарат теории В. А. Тузова, ознакомиться с которыми более подробно можно в книге [2].

2.1. Некоторые важные тезисы теории.

Тезис 1. Язык является алгебраической системой {/_, ... ,/п,М}, где / - базисные функции, М - структура данных (базисные понятия).

Тезис 2. Каждое слово языка является именем функции, которая описывает его семантику. Предложение является суперпозицией данных функций.

Тезис 3. Грамматика неразрывно связана с семантикой языка и может быть представлена в семантическом словаре.

2.2. Классификатор базисных и производных понятий. Базисное понятие - это слово, значение которого не выражается через более простые понятия. В текущей версии семантического словаря более 20 000 базисных понятий (существительных и прилагательных). Слова, смысл которых выражается посредством суперпозиции базисных понятий и базисных функций, называются производными. Их число на данном этапе составляет более 90 000.

Все понятия организованы в виде иерархического дерева классов по типу род - вид. Основные принципы построения классификатора:

1) наследующий класс имеет семантические свойства родительского класса и собственные специфические характеристики;

2) имя каждого класса кодируется специальным символом $ и числом, которое соответствует месту данного класса в иерархии базисных понятий. Сейчас классификатор содержит более 1500 классов. Приведем примеры в следующей нотации:

Класс $< код класса > < имя класса >

< слова класса >

Класс $1 Нечто НЕЧТО, ...

Класс $140 Знания Понятие ПОНЯТИЕ, КОНЦЕПТ, ...

Класс $14/011 Знания Умозрительность Абстрактный АБСТРАКТНЫЙ, ОБЩИЙ, ОТВЛЕЧЕННЫЙ, ...

Класс $12 Физический объект

МАТЕРИЯ, ПРЕДМЕТ, ПРОСТРАНСТВО, ТЕЛО, ...

Класс $1223 ФО Природа Растения

ВЫСАДОК, ЗЕЛЕНЬ, КУЛЬТУРА, РАСТЕНИЕ, ...

Класс $12231 ФО Природа Растения Деревья

БЕРЕЗА, ВИШНЯ, ГРУША, ДЕРЕВО, ДРЕВО, ДУБ, ЕЛЬ, КЛЕН, СОСНА , ... .

2.3. Базисные функции. Эти функции описывают отношения между аргументами и являются одним из основных средств формализации семантики слов. С помощью суперпозиции базисных функций и базисных понятий можно выразить смысл любого производного слова естественного языка.

Примеры базисных функций:

Апа(х, у) х и у

Саив(х, у) х является причиной у Соп^х) х продолжается Соп1еп1(х, у) х содержит у Соп1го1(х, у) х управляет у Func(x) имеет место быть х НаЬ(х, у) х имеет у 1псер(х) х начинается LaЬ(x, у) х подвергается действию у Loc(x, у) х находится в у М^п(х) х выше нормы Орег(х, у) х совершает у Ие1(х, у) х имеет отношение к у Рег^х) х завершился

Примеры описания семантики слов при помощи базисных функций:

СОСНОВЫЙ А1>Ие1

\\ А1 указывает на то, что слово является прилагательным

КОНСТРУИРОВАТЬ Саиэ^, IncepFunc

2.4. Семантико-грамматические типы. Обнаружение связей между словами, выбор правильных семантических альтернатив и связывание слов в единую конструкцию определяются семантико-грамматическими типами (СГТ), состоящими из описания класса и предложно-падежной формы: $1212^@Род, $12136^@Вин, $12/134^ @наВин, $1^@поДат и т. д. Например, $1212^@Род описывает слова класса МАТЕРИАЛ$1212 в родительном падеже, $153081 ~@наВин - класса ТАНЕЦ$153081 в форме винительного падежа с предлогом на. Во многих типах вместо синтаксической формы указывается обобщенное семантическое значение, которое обозначается словами Куда, КакДолго, Где, Сколько и т. д. Например, $1^@Куда, $1^@КакДолго.

В результате морфологического анализа и пословной обработки каждое слово предложения может быть представлено набором семантических альтернатив вида {СГТ11, СГТ12,..., СГТ1п} (Z1: СГТ21, Z2: СГТ22,..., Zm: СГТ2т), где СГТц - се-мантико-грамматические типы, Zi - обозначения переменных.

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

В

< 196 > {$1-@вПред $1224113-@Где $122412-@Где $12/1200-@Где}

^1: ПОЛЕ$1224113  ПАРК$122412 \ ПЕРСПЕКТИВА$12/1200-@Пред)

< 197 > { $1-@вВин $147-@Куда $12/320/15-@Куда}

< 201 > {$1~@вПред $1/35/О5~@КакВ $1/17/О5~@КакВ}

< 202 > {$1-@вВин $123-@Куда}

< 203 > {$1~@вПред $123-@Где $1/423-@Где $12341О-@Где}

ЛЕСУ

< 001 > {$12123-@ОНЪ$17@Дат$12123~@ОНЪ$17@Род}

S12123

< 002 > {$122412~@ОНЪ$17@Дат$122412~@ОНЪ$17@Пред}

S122412

< 003 > { $122412~@ОНЪ$17@Дат $122412~@ОНЪ$17@Пред} $122412

< 004 > { $1213118~@ОНА$17@Вин}

$1213118(^О^> ЛЕСКА$1213118, Z1: УДОЧКА$1213118~@Ото \ @Род)

\\ @ОНЪ, @ОНА - унификаторы рода и числа

В процессе обработки словосочетания в лесу синтактико-семантический анализатор выберет 196-тую альтернативу предлога в и третью слова лесу. Выбранная альтернатива первого слова через аргумент $122412^@Пред присоединит соответствующую альтернативу второго слова, и для собранной конструкции будет выработан семантикограмматический тип $122412^@Где. Приведем результат обработки данного словосочетания:

в лесу

{$122412~@Где} В <196>

{$122412-@Пред} ЛЕСУ <ОО3>.

2.5. Дополнительные аргументы. Исходный словарь не содержит все аргументы семантических альтернатив слов. В базовой версии анализатора дополнительные аргументы приписываются в процессе предварительной обработки (до этапа синтактико-семантического анализа). Список этих аргументов определяется частью речи данной альтернативы. Например, существительные дополняются аргументами: @ОКакой, @Вместе, $121О/О8^@КакВ, ..., глаголы и предикаты - @Где, @Когда, @Как, @По-чему, @Зачем, $124^@сТв, @Для, @Сколько, @Сравн, @Деепр,. ..и т. д. Значительное число приписываемых аргументов определяется семантическим классом данной части речи. Существительные классов $1211 (Вещества), $1213 (Вещь) приобретают аргумент @1Какой, $1224 (Ландшафт) и $15 (Использование) - @2Какой и т. д. В зависимости от класса и части речи к альтернативам приписываются аргументы, которые обозначаются неактивными: хприГде, хОткуда, хКуда и др. Если предложение собирается не полностью, то эти аргументы становятся доступными для взаимодействия. Следует отметить, что дополнительные аргументы в текстовом виде добавляют значительный объем к размеру исходных словарных статей.

2.6. Семантический словарь. Основной семантический словарь включает более 11О ООО слов русского языка. Приведем структуру и примеры словарных статей:

< основная форма слова >

< альтернатива 1 >

< альтернатива п >

< альтернатива > ::=

< < номер альтернативы> > < синтактико-семантическая информация>

< толкование альтернативы на семантическом языке >

ВЕТВЬ

< 001 > $1223/02(^1: РАСТЕНИЕ$1223 \ НЕЧТО$1-@Ото  @Род}) $1223/02

< 002 > N%~РАЗНОВИДНОСТЬ$14222/4({Z0: 8>

РАЗНОВИДНОСТЬ$14222/4, Z1: ИСКУССТВО$141 \ НАУКА$142-@Род}) N%~РАЗНОВИДНОСТЬ$14222/4

ВЕТВЯЩИЙСЯ

< 001 > N%~ВЕТВЛЕНИЕ$1503({Z0: а> НЕЧТО$1})

N%~ВЕТВЛЕНИЕ$1503(A1>Hab(A1: НЕЧТО$1~@%1, МиН;(ВЕТВЬ$1223/02))) УПОРЯДОЧИТЬ

< 001 > N%~ПОРЯДОК$1/35/05({Z1: @Им, Z2: @Вин}) N%~ПОРЯДОК$1/35/05

В базовой версии анализатора основной словарь разделяется на синтаксический и семантический подсловари [2]. Синтактико-семантическая информация выносится в первый словарь, семантические толкования - во второй.

3. Информация, необходимая для синтактико-семантического анализа.

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

1) морфологическая, семантико-грамматические значения;

2) синтактико-семантическая (аргументы, дополнительные аргументы);

3) семантическая (класс, толкование на семантическом языке).

Приведем один из вариантов представления информации о словоформе:

< Словоформа >

< альтернатива 1 >

< альтернатива 2 >

< альтернатива п >

< альтернатива > ::= < номер альтернативы > < основная форма слова >

{ < морфологическая информация, семантико-грамматические значения > }

< информация о семантическом классе >

<< <дополнительные аргументы> >>

< толкование альтернативы на семантическом языке >.

Информация о словоформе уверенному в данном формате выглядит следующим образом:

УВЕРЕННОМУ

< 001 > УВЕРЕННЫЙ { Прил. МжСр $1-@ОНЪ$17 \ ОНО$17  Я$17 \ ТЫ$17@Дат } N%-УВЕРЕННОСТЬ$1241/41561/06 ^0: а> НЕЧТО$1)

<< @КакВ; @КакС;>>

А1>0рег00

< 002 > УВЕРЕННЫЙ {Прил. МжСр $1241-@ ОНЪ$17 \ ОНО$17  Я$17 \ ТЫ$17@Дат } N%-УВЕРЕННОСТЬSl241/41561/06 (Z0: a> ЧЕЛОВЕК$1241,

Z1: НЕЧТО$1-@Вопр \ @вПред)

<< @КакВ; @КакС;>>

A1>0per00

< 003 > УВЕРИТЬ {Глагол. Причастие. МжСр @ОНЪ$17  ОНО$17 \

Я$17  ТЫ$17@Дат } N%-УВЕРЕННОСТЬSl241/41561/06 (Perf Z1: @Тв,

Z2: a>, Z3: НЕЧТО$1-@Вопр \ @вПред)

<< @Где; @приГде; @приКогда; @приИмея; @черезГде; @черезКогда; @черезКак; @КакА; @КакВ; @КакС; @КакДавно; $1^@отКогда; $1^@доКогда; @ДееКак; @Для; @Почему; @Зачем; $11О2^@Тв; @Сколько; @Сравн; хДо; хДат; хДля; хпоДат; $16^@Когда;>>

PerfCaus

Аргумент под индексом Z0 используется для вычисления грамматических значений альтернативы. Кроме того, в круглых скобках может присутствовать модификатор времени основной семантической формулы (Perf - прошедшее, Fut - будущее, Im-perf - прошедшее неопределенное).

4. Подходы к реализации морфологического анализа и пословной обработки.

4.1. Особенности предварительных этапов анализа в базовой версии анализатора. Морфологический анализ и пословная обработка в базовой версии состоят из следующей последовательности действий [2, 6] :

1. На вход системы поступает текущая словоформа.

2. Запускается алгоритм поиска основной формы слова (именительный падеж, единственное число - для склоняемых частей речи, инфинитив - для глаголов). В искомой словарной статье ей соответствует описатель морфологического класса словоформы. На данном этапе используются следующие словари: окончаний, основной (около 3 Мб), 2 для слов с сильноизменяемой основой (примерно 24 и 49 Кб).

3. Окончание, основная форма слова, описатель используются в процедуре морфологического анализа. В результате определяются морфологические характеристики словоформы.

4. Из синтаксического словаря (около 8.37 Мб) извлекается синтактико-семантическая информация.

5. Информация, полученная на этапах 3 и 4, приводится к стандартной форме.

6. Обрабатываются альтернативные описатели морфологии слова.

7. Синтактико-семантическая информация связывается с морфологической. Получаются независимые описания альтернатив слова.

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

9. Происходит вычисление дополнительных аргументов.

Кроме того, еще один поиск осуществляется после синтактико-семантического анализа. Для выбранных в результате данного анализа альтернатив из семантического словаря (приблизительно 9.82 Мб) извлекаются толкования на формальном языке. Таким образом, в процессе обработки словоформ происходит значительный объем вычислений.

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

5. Построение, обработка и модификация универсального словаря.

5.1. Построение словаря словоформ. Морфологический анализ. Словарная статья морфологического словаря В. А. Тузова [6], который был создан на основе грамматического словаря А. А. Зализняка [7], имеет следующую структуру:

< основная форма слова > < морфологический класс > < набор окончаний пара-

дигмы >.

Разбиение слов на классы необходимо для того, чтобы анализатор мог правильно определить морфологические характеристики словоформы. При получении списка словоформ для каждого слова из морфологического словаря вычисляется его полная парадигма по приведенному ниже алгоритму [6]:

1. Получение основы слова.

Если слово является прилагательным или глаголом {

Если есть частица СЯ (СЬ) {

Оторвать частицу.

}

Оторвать два последних символа.

} Иначе {

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

}

2. Присоединение очередного элемента набора окончаний.

Если элемент начинается с числа N {

Оторвать от основы N символов и присоединить к ней символы, которые следуют за числом. Далее используется полученная новая основа.

}

Присоединить к основе окончание. Твердый знак отбрасывается (если есть).

Например, процесс получения парадигмы слова дерево выглядит так:

ДЕРЕВО с9 а у ом е 0Ь я ев ям ями ях дерева, дереву, деревом, дереве, деревья, деревьев, деревьям, деревьями, деревьях,

где с9 - кодовое обозначение существительных среднего рода 9-го класса.

Далее для каждой словоформы из списка запускается алгоритм морфологического анализа [6], в результате которого вычисляются морфологические характеристики и основная форма. Например,

дерева ДЕРЕВО Сущв. Сред Неодуш Един @Род, дереву ДЕРЕВО Сущв. Сред Неодуш Един @Дат и т. д.

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

Таким образом, в результате описанных выше преобразований получается словарь, который содержит более чем 2 250 000 словоформ, а также их морфологические характеристики.

5.2. Получение синтактико-семантической информации. После морфологического анализа следует этап получения синтактико-семантической информации. Для каждой основной формы слова из семантического словаря извлекается искомая информация в виде набора альтернатив. Приведем пример для слова полярному:

Основная форма: ПОЛЯРНЫЙ

ПОЛЯРНЫЙ $1/21/17 ^%~ЛЕД_$0 ^0: 8> ЛЕД$12214)) //001

ПОЛЯРНЫЙ N%~МНЕНИЕ$1241/4156 ^0: а> МНЕНИЕ$1241/4156, Z1: @Дат) //002

ПОЛЯРНЫЙ N%~ПОЛЮС$1/21/17 ^0: а> НЕЧТО$1) //003,

где //<номер альтернативы>.

5.3. Пословная обработка. Вычисление дополнительных аргументов.

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

1. Обрабатываются альтернативные описания морфологии слова.

2. Морфологическая информация связывается с синтактико-семантической. В результате получаются альтернативы слова, содержащие в одной строке морфологическую и синтактико-семантическую информацию.

3. Вычисляются семантико-грамматические типы значений слова.

4. В зависимости от конкретной словоформы происходит модификация основной семантической формулы.

5. Происходит процесс получения дополнительных аргументов альтернатив (см. п. 2.5).

Алгоритмы, используемые в процессе пословной обработки, подробно рассмотрены в книге [2]. Приведем пример словарной статьи после пословной обработки и вычисления дополнительных аргументов:

УСПЕШНЫЙ

УСПЕШНЫЙ {Прил. Муж $1-@ОНЪ$17@Им $1-@Я$17@Им $1-@ТЫ$17@Им $1-@ОНЪ$17@Вин $1-@Я$17@Вин $1-@ТЫ$17@Вин} N%~УСПЕХ$1241/132/04 (Z0: а> НЕЧТО$1) //001 <<@КакВ; @КакС;>>

УСПЕШНЫЙ {Прил. Муж $123-@ОНЪ$17@Им $1241-@ОНЪ$17@Им $123-@Я$17@Им $1241-@Я$17@Им $123-@ТЫ$17@Им $1241~@ТЫ$17@Им $123-@ОНЪ$17@Вин $1241-@ОНЪ$17@Вин $123-@Я$17@Вин $1241-@Я$17@Вин $123-@ТЫ$17@Вин $1241-@ТЫ$17@Вин} N%-УСПЕХ$1241/132/04 (Z0: а> ПОСЕЛЕНИЕ$123 \ ЧЕЛОВЕК$1241)

//002 << @КакВ; @КакС;>>,

где << <дополнительные аргументы> >>.

5.4. Представление информации о дополнительных аргументах и толковании альтернативы на семантическом языке. Размер полученного словаря - около 952 Мб. Следует напомнить, что дополнительные аргументы составляют значительную часть данного словаря. Однако существует всего 74 различных набора дополнительных аргументов. Они выносятся в отдельный файл. Каждый конкретный набор заменяется в словаре однобайтовым индексом в массиве списков дополнительных аргументов. Например,

ИЗВЕСТИЕ {Сущв. Сред Неодуш $1440-@ОНО$17@Им $1440-@ОНО$17@Вин}

М%-СООБЩЕНИЕ$1440 (Z0: s> СООБЩЕНИЕ$1440, Z1: НЕЧТО$1-@Род,

Z2: @Дат \ @Перед \ @наВин, Z3: @Вопр \ @Про \ @обПред, Z4: НЕЧТО$1-@Откуда,

Z5: НЕЧТО$1-@Куда) <<@ИмС; хГде; хСравн; $1210/08-@КакВ; @ОКакой;

@уГде; @уИмея; хприГде; хприКогда; хприИмея; хсТв; хОткуда; хВключая;

хБез; хДееКак; хКуда; хДля; хПротив; хКогда; хКакДолго;>>

----

{.$1440-@ОНО$17@Им$1440-@ОНО$17@Вин}

М%-СООБЩЕНИЕ$1440 (Z0: s> СООБЩЕНИЕ$1440, Z1: НЕЧТО$1-@Род,

Z2: @Дат \ @Перед \ @наВин, Z3: @Вопр \ @Про \ @обПред, Z4: НЕЧТО$1-@Откуда,

Z5: НЕЧТО$1~@Куда) << < index > >>,

где index - однобайтовый индекс в массиве наборов дополнительных аргументов. В результате размер словаря уменьшается до 397 Мб.

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

< альтернатива > < < index > < address > < length > >

Альтернативы некоторых слов могут не иметь дополнительных аргументов. Следовательно, чтобы анализатор мог корректно обрабатывать словарные статьи, перед индексом набора дополнительных аргументов, а также адресом и длиной толкования альтернативы на семантическом языке добавляется 1 байт, который кодирует тип информации. Таким образом, если анализатор в блоке дополнительной информации считывает значение байта, равное 0, то далее следует индекс набора дополнительных аргументов. Если значение байта равно 1, то далее в словарной статье записаны адрес и длина строки семантической информации. Подобный формат позволяет компактно записывать в основной словарь и другую информацию. Ниже приведен стандартный вид альтернативы на данном этапе обработки словаря:

< альтернатива > < < t0 > < index > <t1> < address > < length > >,

где t0, t1 - байты, кодирующие тип информации.

Таким образом, после описанных выше преобразований получаются следующие файлы:

1) основной словарь (примерно 394 Мб);

2) файл наборов дополнительных аргументов (около 18.2 Кб);

3) файл семантических толкований (приблизительно 6.76 Мб).

5.5. Обработка и модификация словаря. Все алгоритмы создания, обработки и модификации словаря были реализованы на языке программирования Java (версия jdk - 1.6.0) компании «Sun Microsystems» [8]. Для представления индекса словаря используется класс TreeMap из пакета java.util, являющийся реализацией красно-черного дерева. Каждому ключу индекса соответствует значение. Ключ - это конкретная словоформа. Значение содержит адрес и длину словарной статьи в универсальном словаре. Временная сложность получения, добавления и удаления элемента индекса составляет log(n). Если следует обработать все множество словарных статей, то совершается обход дерева, при котором для каждой словоформы из текущего универсального словаря извлекается словарная статья, которая необходимым образом обрабатывается и записывается в новый вариант универсального словаря. Если требуется изменить только одну словарную статью, то сначала копируется содержимое до адреса данной статьи из текущего универсального словаря в новый словарь. Затем обрабатывается и записывается данная статья, после чего происходит копирование оставшейся части текущего словаря в новый, начиная с адреса следующей словарной статьи.

Работа с большими файлами происходит посредством использования классов RandomAccessFile из пакета java.io и MappedByteBuffer, который содержится в пакете java.nio. Совместное применение этих классов позволяет организовать произвольный доступ к файлам и работу с виртуальной памятью. Добиться максимальной скорости работы с большим файлом можно при помощи вызова метода load() класса MappedByteBuffer, который загружает содержимое файла непосредственно в физическую память компьютера. Следует отметить, что MappedByteBuffer позволяет извлекать данные из файла в виде массива байтов. Если словарная статья получена в виде массива байтов, то ее гораздо удобнее обрабатывать как строку на основе класса String из пакета java.lang. Однако преобразование массива байтов в строку занимает существенное время, что особенно актуально при обработке больших текстовых файлов. В процессе разработки программного обеспечения для получения и обработки универсального словаря был создан собственный класс ByteString, который является оболочкой над массивом байтов и дает возможность удобно обрабатывать текстовую информацию. Основные операции класса ByteString имеют производительность, сравнимую с производительностью аналогичных методов класса String, но происходит существенная экономия времени при инициализации содержимого объекта данного класса массивом байтов.

6. Индексация универсального словаря. При индексации универсального словаря ключом является словоформа, значением - адрес словарной статьи. Если использовать хеш-таблицу, то необходимо хранить еще и длину статьи. Кроме того, количество словоформ в словаре превышает 2 250 000, поэтому такая таблица требует значительного объема оперативной памяти, а также существенного времени на инициализацию. Для представления индекса также можно использовать различные виды деревьев. В результате исследований выбор был сделан в пользу упорядоченного массива. При этом в индекс включается только каждая N-ная (значение является настраиваемым) словоформа, что существенно уменьшает его размер.

Индекс имеет следующую структуру:

< адрес i >< словоформа j >

< адрес i + 1 >< словоформа j + N >

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

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

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

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

< хеш-код 1 > ... < хеш-код N > < абсолютный адрес блока в словаре >

< указатель 1 > ... < указатель N > < относительный адрес 1 > ...

< относительный адрес N > < относительный адрес конца блока >,

где N - количество словарных статей в блоке.

При N = 50

1) файл абсолютного индекса - около 715 Кб;

2) 1 относительный индекс - 257 байт;

3) файл относительных индексов - около 11 Мб.

7. Извлечение словарной статьи. Структура универсального словаря и механизм индексации, которые были рассмотрены выше, позволяют решить задачу морфологического анализа и пословной обработки посредством поиска словарных статей. Первоначально система, реализующая данный подход, выдает словарную статью в формате, который был рассмотрен в п. 5.4. На следующем шаге извлекаются дополнительные аргументы и семантические толкования. Далее статья приводится к виду, описанному в п. 3.

8. Оценки производительности.

8.1. Результаты тестирования новой системы. Все виды тестирования, которые рассмотрены ниже, проводились на компьютере ІП;е1 Сеіегоп 2.4 ГГц с 768 Мб оперативной памяти. Так как универсальный словарь, вспомогательные файлы и индексы грузятся в память компьютера (см. п. 5.5), то система требует до 500 Мб ИАМ в режиме максимального быстродействия. В связи с развитием вычислительных устройств данное требование не является существенным. Если словарь не загружать непосредственно в память, то скорость обработки снизится, однако не будет и столь высоких требований к ИАМ. Время первичной инициализации словаря, вспомогательных файлов и индексов в среднем составляет примерно 10 000 мс. Далее загрузка происходит в течение около 470 мс, если не запускать других требовательных к ресурсам приложений. Кроме того, инициализацию можно осуществлять один раз в начале работы системы. В табл. 1 приведены результаты оценок производительности системы на коллекциях словоформ, выбранных из универсального словаря случайным образом.

Таблица 1. Результаты тестирования для задач морфологического анализа

и пословной обработки

Количество словоформ Время обработки, мс Производительность, словоформ / мс

10 ООО ~ 228 ~ 43

100 ООО ~ 1478 ~ 67

1 млн ~ 13 869 ~ 72

10 млн ~ 137 532 ~ 72

8.2. Сравнение с производительностью базовой версии. Это сравнение является условным. При разработке базовой версии анализатора производительность не была главным критерием. Система создавалась для надежной и качественной работы семантического анализатора. Базовая версия подвергает текст входного файла морфологическому анализу и пословной обработке и записывает результаты в выходной файл. При сравнении с данной версией новая система работает в аналогичном режиме. Взаимодействие с входным и выходным файлами приводит к уменьшению скорости обработки словоформ. В табл. 2 приведены результаты оценок производительности для базовой и новой версий.

Таблица 2. Результаты тестирования версий

Количество словоформ Время обработки, мс Производительность, словоформ / мс

Базовая версия

10 000, случайная генерация ~ 8328 ~ 1.2

9028, реальный текст ~ 26 390 ~ 0.34

Новая версия

10 000, случайная генерация ~ 703 ~ 14.2

9028, реальный текст ~ 1068 ~ 8.45

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

9. Заключение. Хранение морфологической, синтаксической и семантической информации о словоформах русского языка в универсальном словаре дает возможность

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

Литература

1. Тузов В. А. Математическая модель языка. Л.: Изд-во Ленингр. ун-та, 1984. 176 с.

2. Тузов В. А. Компьютерная семантика русского языка. СПб.: Изд-во С.-Петерб. ун-та, 2004. 400 с.

3. Интернет-страница проекта Mystem. URL: http://company.yandex.ru/technology/products/mys-tem/mystem.xml.

4. Веб-сайт проекта AOT. URL: http://www.aot.ru/.

5. Веб-сайт компании RCO. URL: http://www.rco.ru/.

6. Тузов В. А. Морфологический анализатор русского языка // Вестн. С.-Петерб. ун-та. Сер. 1: Математика, механика, астрономия. 1996. Вып. 3. С. 41—45.

7. Зализняк А. А. Грамматический словарь русского языка. М.: Русские словари, 2003. 800 с.

8. Веб-сайт компании Sun Microsystems. URL: http://www.sun.com/.

Статья рекомендована к печати член-кор. РАН, проф. Г. А. Леоновым. Статья принята к печати 5 марта 2009 г.