Морфологический анализ незнакомых фамилий в русскоязычном тексте

предобработки правил трансформации и подготовки вспомогательных структур в ресурсе знаний, с которым будет идти работа.

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

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

отождествления сущностей, извлеченных из разных документов. В противном случае ГРЗ будет иметь ограничение по объему входных данных, причем с их ростом в самом ГРЗ это ограничение будет становиться все более жестким.

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

Литература

1. Grishman R. TIPSTER Text Architecture Design. Version 3.1. New York: NYU, 1998.

2. Appelt D.E. The Common Pattern Specification Language: Technical report / SRI International, Artificial Intelligence Center. 1996.

3. Кормалев Д.А. Повышение производительности при распознавании текстовых ситуаций // КИИ-2008: тр. Одиннадцатой нац. конф. по искусствен. интел. с междунар. участием (Дубна 28 сентября-3 октября 2008 г.). М.: ЛЕНАНД, 2008. Т. 2. С. 192-200.

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

Е.А. Сулейманова; К.А. Константинов

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

Ключевые слова: морфологический анализ собственных имен, фильтрация гипотез.

Любая система, работающая с текстом и использующая морфологический анализатор со словарем основ, сталкивается с проблемой обработки незнакомых слов - лексем, по тем или иным причинам отсутствующих в словаре. Классический труд А.А. Зализняка [1], лежащий в основе большинства современных машинных морфологий русского языка, содержит описания около 100 тысяч слов. Размеры морфологических словарей, используемых в различных прикладных системах, варьируются довольно широко: от 90 тысяч [2] до более 161 тысячи лемм [3]. Однако и при увеличении объема словаря проблема анализа незнакомых

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

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

Современные морфологические анализаторы обычно снабжаются специальными механизмами, позволяющими определять морфологию незнакомой словоформы с приемлемым качеством. Эти механизмы основываются либо на некоторой вероятностной модели, либо на правилах [2-4].

В системе интеллектуального анализа текста «Исида-Т», разрабатываемой в ИПС РАН, используется морфологический анализатор «Диалинг» (www.aot.ru). По данным разработчиков [3], предсказание в нем обеспечивает до 87 % правильно распознанных незнакомых словоформ для русского языка, из которых большинство составляют существительные и прилагательные (такой уровень вполне сопоставим с результатами других исследователей, полученными для английского и французского языков). Однако что касается фамилий, то для корректного морфологического предсказания в этой области как минимум требовалось бы, чтобы словарь располагал весьма представительным массивом фамилий всех возможных словоизменительных типов. На практике приходится сталкиваться с тем, что фамилии при распознавании часто подводятся под похожую форму существующего или гипотетического существительного или прилагательного, а при отсутствии таковых воспринимаются как неизменяемые существительные. Так, фамилии на -ов в именительном падеже часто распознаются как форма родительного падежа множественного числа некоторого существительного (для Чемезов выводится каноническая форма Чемез), в то время как с формами косвенных падежей проблем почти не бывает; для фамилий типа Малых, Седых не строится вариант с правильной канонической формой (все они приводятся к прилагательным - малый, седой). Иногда случаются курьезы: финская фамилия Хуови-нен распознается как краткая форма прилагательного хуовинный.

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

Описание подхода

Общий алгоритм морфологического анализа фамилий делится на несколько этапов.

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

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

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

3. Фильтрация результатов путем сравнения данных из одного текста. Этот этап несет основную нагрузку в отсеивании морфологического шума и разрешении регулярных (и часто не разрешимых другими средствами) неоднозначностей.

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

5. Морфологический анализ изолированные фамилий, не охваченных предыдущими этапами.

На вход алгоритму поступают аннотации класса ANE, построенные psl-правилами [5] для встретившихся в тексте цепочек вида: <имя> (возможно, <отчество>) <слово с заглавной буквы>.

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

Каждая такая аннотация представляет собой вариант морфологического разбора фамилии. Остановимся подробнее на каждом этапе.

Первичный анализ

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

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

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

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

Примеры словоформ, которые сопоставятся с первой ячейкой: Лубок, Божок, Черток, Павшок и т.п. Класс «м 3* ок/к муж» описывает фамилии, в основе которых происходит чередование «о» с нулем. Очевидно, что не каждая словоформа, успешно сопоставившаяся с первой ячейкой, на самом деле принадлежит упомянутому классу: она вполне может не иметь беглого «о» в других формах. Причем даже человек не всегда может правильно определить словоизменительное поведение фамилии по одной лишь словоформе (например, Черток - Чертка, Чертку, ... или Чертока, Чертоку, ...?). Словоформы Лубок, Божок, Чер-ток, Павшок сопоставятся также и с ячейкой класса без чередований «м 3 муж» с основой на {к, г, х}.

Общее описание алгоритма первичного анализа

На вход поступают текстовые Ф.И.О. с распознанным именем и, возможно, отчеством (точнее, построенные для них аннотации ANE). О фамилии неизвестно ничего, кроме ее буквенного состава.

На выходе строится текстовый файл, содержащий для каждой цепочки Ф.И.О. набор вариантов морфологического разбора входящей в нее фамилии (набор гипотез).

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

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

более одного имени, - значит, фамилия, предположительно, стоит в единственном числе.

Проиллюстрируем работу алгоритма на примере цепочки Евгения Гришковца. Для нее построены три аннотации ANE, соответствующие трем грамматическим наборам омонимичного имени: «ед. ч., м. р., род. п.», «ед. ч., м. р., вин. п.» и «ед. ч., ж. р., им. п.».

1. Берем грамматический набор из аннотации ANE. Он задает пространство поиска в таблице. В пространстве поиска находим ячейку, цепочка в которой успешно сопоставляется с концом фамилии; маркеры при сопоставлении игнорируются, но при успешном сопоставлении копируются в словоформу; получаем размеченную словоформу.

2. Имя класса содержится в строке на пересечении со столбцом «Имя класса».

3. Строим неизменяемую основу для этого варианта разбора - берем цепочку от начала размеченной словоформы до правой фигурной скобки.

4. Строим каноническую форму. Тут возможны два случая в зависимости от того, какой падеж входит в рассматриваемый грамматический набор. Если падеж именительный, то каноническая форма фамилии совпадает с размеченной словоформой (если убрать из последней все маркеры). Иначе каноническая форма генерируется путем прибавления к неизменяемой основе (построенной на шаге 3) чередования и окончания из ячейки именительного падежа.

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

Если словоформу не удалось сопоставить ни с одной ячейкой в пространстве поиска, то фамилии приписывается класс «неизм муж» или «неизм жен» в зависимости от рода. В качестве неизменяемой основы и канонической формы берется сама словоформа.

Результаты анализа Ф.И.О. Евгения Гришков-ца, полученные на этом этапе:

{Гришковц}, {ГРИШКОВЦА}, «ж 1-5b жен», (17); (Singular-F-I); (2). {Гришковц}, {гришковца}, «ж 5а жен», (17); (Singular-F-I); (2). {Гришковц}, {гришковц}, «м 1-5b муж», (17); (Singular-M-R); (2). {Гришковц}, {ГРИШКОВЦ}, «м 1-5b муж», (17); (Singular-M-V); (2). {Гришков}, {ГРИШКОВЕЦ}, «м 5*a ец/ц муж», (17); (Singular-M-R); (3). {Гришков}, {ГРИШКОВЕЦ}, «м 5*a ец/ц муж», (17); (Singular-M-V); (3). {Гришков}, {ГРИШКОВЕЦ}, «м 5*b ец/ц муж», (17); (Singular-M-R); (3). {Гришков}, {ГРИШКОВЕЦ}, «м 5*b ец/ц муж», (17); (Singular-M-V); (3). {Гришковц}, {ГРИШКОВЦ}, «м 5a муж», (17); (Singular-M-R); (2). {гришковц}, {гришковц}, «м 5a муж», (17); (Singular-M-V); (2). {Гришковц}, {гришковц}, «м 1-5b муж», (17); (Singular-M-V); (2). {Гришковц}, {гришковц}, «м 1-5b муж», (17); (Singular-M-R); (2). {Гришковц}, {гришковц}, «м 5a муж», (17); (Singular-M-V); (2). {Гришковца}, {ГРИШКОВЦА}, «неизм жен», (17); (Singular-F-I); (1). {Гришковца}, {гришковца}, «неизм муж», (17); (Singular-M-R); (1).

Исключение некорректных вариантов с помощью правил

Очевидно, что в общем случае число вариантов разбора, полученных по буквенному составу

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

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

let(i) - i-я буква слова от правого конца; left(i, j) - цепочка длины i букв в слове слева от let(j);

end(j) - правый конец слова длиной j букв; trunc(k) - остаток слова за вычетом k букв справа;

length - число букв в слове. Слово - переменная, которая означивается в каждом конкретном случае. Чаще всего в качестве слова выступает каноническая форма.

Приведем (содержательно) несколько случаев, в которых алгоритму разрешено исключать с помощью правил варианты с классом «ов-ин муж» (к этому классу относятся фамилии типа Иванов и Калинин): Если

(1) каноническая форма фамилии оканчивается на -ин и

(2) длина ее меньше 4 букв или она не содержит ни одной гласной, не считая и в -ин,

то вариант с классом «ов-ин муж» удаляется (Бин, Скин - в отличие от Якин). Если

(1) каноническая форма фамилии оканчивается на -ов и

(2) длина ее меньше 4 букв или она оканчивается на -ьов,

то вариант с классом «ов-ин муж» удаляется (Шольов).

Заметим, что критерий отсутствия гласной, используемый в первом случае, к фамилиям на -ов/-ев мы не применяем, так как такое правило удалило бы правильный вариант разбора фамилий Лбов и Мнев.

Типичные дилеммы, с которыми приходится сталкиваться и которые не разрешимы формально (а часто и не только формально):

-ин - по типу Калинин или Толкин? -ина - по типу Калинина или Скори на? Впрочем, даже для Скорина формально нельзя исключить тип Калинина: это вполне допустимо при ударении на первый слог: Ско рина, у Ско риной, для Ско'риной.

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

му удобнее разрешать подобные неоднозначности с привлечением дополнительных текстовых данных. Что касается упомянутых выше дилемм, то в таких случаях дополнительные текстовые данные - это фактически единственное средство выбрать правильный вариант.

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

Фильтрация результатов путем сравнения данных из одного текста

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

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

Суть алгоритма очень проста: две словоформы побуквенно сравниваются слева направо. Как только находится несовпадение, сравнение прекращается. Пусть M - длина словоформы (наибольшая из двух), N - количество букв, совпавших при сравнении. Тогда две словоформы считаются успешно сопоставленными, если N/M>K, где K -некоторый эвристически подобранный коэффициент (в нашем случае 0,6). Например, рассмотрим фамилии Садовничий и Садовничему. M в данном случае будет равно 11, N - 8. Высчитаем коэффициент: 8 / 11=0,72. Поскольку 0,72 больше, чем 0,6, считаем, что эти фамилии успешно сопоставлены.

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

Приведем фрагмент файла результатов, поступившего на вход третьему этапу.

Файл построен по тексту, в котором упоминаются Валентина Распутина и Валентин Распутин. Следующие текстовые формы были объединены в один кластер методом частичного сопоставления:

Валентина Распутина {шГ}.

т {Распутин}, {Распутин}, «м 1-5Ь муж», (1); (8^и1аг-М-И); (2). ш {Распутин}, {Распутин}, «м 1-5Ь муж», (1); (81^и1аг-М-У); (2). ш {Распутина}, {Распутина}, «неизм муж», (1); (8т§и1аг-М-И); (1). ш {Распутин}, {Распутин}, «ов/ин муж», (1); (8^и1аг-М-И); (3). ш {Распутин}, {Распутин}, «ов/ин муж», (1); (81^и1аг-М-У); (3). { {Распутин}, {Распутина}, «ж 1-5Ь жен»,(1); (81^и1аг-Р-1); (2). Г {Распутина}, {Распутина}, «неизм жен»,(1); (8т§и1аг-Р-1); (1). Г {Распутин}, {Распутина}, «ова/ина жен»,(1); (8т§и1аг-Р-Т); (3).

Валентине Распутиной {Г}.

{ {Распутин}, {Распутиная}, «ж <п 1> жен», (5); (81^и1аг-Р-Б); (3). Г {Распутин}, {Распутина}, «ова/ина жен», (5); (8т§и1аг-Р-Б); (4).

Валентином Распутиным {ш}.

ш {Распутин}, {Распутиный}, «м <п 1а> муж», (13); (8^и1аг-М-Т); (3). ш {Распутин}, {Распутиной}, «м <п 1Ь> муж», (13); (8^и1аг-М-Т); (3). ш {Распутин}, {Распутин}, «ов/ин муж», (13); (Siпgu1ar-M-T); (4).

Элемент кластера, содержащий текстовую цепочку Ф.И.О. и приписанные ей варианты, назовем разделом.

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

Часть строки, включающую основу, каноническую форму и имя класса, назовем «классифицирующей тройкой» (далее - просто тройка).

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

Третий шаг. На этом шаге делается попытка построить пересечение одноименных К-множеств во всем кластере.

Случай А. Если в результате не получено ни одного пустого множества, то каждая строка, содержащая элемент пересечения К-множеств, отмечается знаком «+», как в нашем примере:

Валентина Распутина {шГ}.

ш {Распутин}, {Распутин}, «м 1-5Ь муж», (1); ^^и1аг-М-И); (2). ш {Распутин}, {Распутин}, «м 1-5Ь муж», (1); ^^и1ат-М-У); (2). ш {Распутина}, {Распутина}, «неизм муж», (1); ^^и1аг-М-И); (1). +ш {Распутин}, {Распутин}, «ов/ин муж», (1); ^^и1аг-М-И); (3). +ш {Распутин}, {Распутин}, «ов/ин муж», (1); ^^и1ат-М-У); (3). Г {Распутин}, {Распутина}, «ж 1-5Ь жен»,(1); ^^и1ат-Р-1); (2). Г {Распутина}, {Распутина}, «неизм жен»,(1); ^^и1ат-Р-1); (1).

{Распутин}, {Распутина}, «ова/ина жен»,(1); (Siпgu1ar-F-I); (3). [...]

Случай Б. Если в результате получено хотя бы одно пустое множество и при этом в кластере встречаются как «однобуквенные», так и смешанные (т{-) разделы, алгоритм усложняется. Дело в том, что наличие «разнополых» вариантов в разделе может быть вызвано просто омонимичной формой имени, следовательно, одно из подмножеств раздела может быть фиктивным. Пример -формально возможные варианты с женским родом для Ф.И.О. Евгения Гришковца:

Евгения Гришковца {шГ}.

Г {Гришковц}, {Гришковца}, «ж 1-5Ь жен», (17); ^^и1аг^-1); (2). Г {Гришковц}, {Гришковца}, «ж 5а жен», (17); ^^и1аг^-1); (2). Г {Гришковца}, {Гришковца}, «неизм жен», (17); ^^и1аг^-1); (1). [...]

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

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

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

Четвертый шаг. Определение окончательных вариантов для вывода в аннотацию ИотрНо:

• если в разделе есть отмеченные плюсом строки, то все они, и только они, выводятся в результаты;

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

Приведем в заключение результаты морфологического анализа Ф.И.О. Евгения Гришковца в вымышленном тестовом примере, где содержались также цепочки Евгению Гришковец и Евгений Гришковец (для сравнения - приведенные ранее результаты первого этапа для этого случая содержали 15 вариантов):

Евгения Гришковца.

{Гришков}, {ГРИШКОВЕЦ}, «м 5*а ец/ц муж», (17); (Siпgu1ar-M-R); (3). {Гришков}, {ГРИШКОВЕЦ}, «м 5*а ец/ц муж», (17); ^^и1ат-М-У); (3). {Гришков}, {ГРИШКОВЕЦ}, «м 5*Ь ец/ц муж», (17); (siпgu1ar-M-R); (3). {Гришков}, {ГРИШКОВЕЦ}, «м 5*Ь ец/ц муж», (17); (Siпgu1ar-M-V); (3).

Заметим, что неоднозначность окончательных результатов здесь вполне корректна:

• два возможных варианта словоизменения (с ударным и безударным окончанием), выбрать из которых один можно было бы только при наличии в тексте диагностической формы творительного падежа: Гришковцем или Гришковцом;

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

Описание этапа 4 можно опустить, поскольку он решает чисто техническую задачу построения аннотаций ИотрНо по результатам предыдущего этапа.

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

Литература

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

2. Сегалович И., Маслов М. Русский морфологический анализ и синтез с генерацией моделей словоизменения для не-

знакомых слов // Диалог'98: тр. Междунар. сем. по компьютерной лингвистике и ее приложениям. Казань: ООО «Хэтер», 1998. Т. 2. С. 547-552.

3. Сокирко А.В. Морфологические модули на сайте www.aot.ru // Диалог'2004: тр. Междунар. конф. М.: Наука, 2004. С. 559-564.

4. Ермаков А.Е., Плешко В.В. Компьютерная морфология

в контексте анализа связного текста // Там же. С. 185-190.

5. Куршев Е.П., Кормалев Д.А., Сулейманова Е.А., Трофимов И.В. Исследование методов извлечения информации из текстов с использованием автоматического обучения и реализация исследовательского прототипа системы извлечения информации // Матем. методы распознавания образов: сб. докл. 13-й Всерос. конф. М.: МАКС Пресс, 2007. С. 602-605.

ПРЕОБРАЗОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ПРОГРАММ В ИМПЕРАТИВНЫЕ МЕТОДОМ ЧАСТИЧНЫХ ВЫЧИСЛЕНИЙ

Объектно-ориентированные языки обладают большей выразительностью, чем императивные. Но в некоторых случаях эффективность программ на императивных языках программирования заметно выше, чем на объектно-ориентированных. Как показано в статье, частичный вычислитель С1ЬРБ способен преобразовывать объектно-ориентированные программы в более эффективные императивные.

Ключевые слова: специализация, частичные вычисления, объектно-ориентированное программирование, C#, CILPE.

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

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

В некоторых случаях использование классов может заметно сказаться на производительности программ. Например, в случае численных расчетов затраты на обработку объектов оказываются достаточно большими [1].

Для широкого использования объектно-ориентированных языков в численных расчетах необходимы средства преобразования программ, которые позволяют преобразовывать высокоуровневые объектно-ориентированные программы в низкоуровневые императивные. Для таких преобразований можно использовать метод частичных вычислений [2], адаптированный для объектно-ориентированных программ [3].

На основе метода частичных вычислений создан специализатор CILPE [4], способный выполнять описанные преобразования [5].

Частичные вычисления

Оптимизация программ на основе использования априорной информации о значении части переменных называется специализацией. Рассмотрим программу Дх, у) от двух аргументов х и у и значение одного из ее аргументов х=а. Результатом специализации программы Дх, у) по известному

аргументу x=a является новая программа одного аргумента g(y), обладающая следующим свойством: f(a, y)=g(y) для любого у.

Одним из широко используемых методов специализации является метод частичных вычислений (Partial Evaluation, PE) [2]. Данный метод заключается в получении более эффективного кода на основе использования априорной информации о части аргументов и однократного выполнения той части кода, которая зависит только от известной части аргументов.

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

Метод частичных вычислений основан на разделении операций и других программных конструкций на статические (S) и динамические (D). (При этом понятие «статические операции и конструкции» не следует путать с понятием «статические методы и классы», static, которое используется в объектно-ориентированных языках программирования, например, C# и Java.) Статические операции будут выполнены во время специализации программы, а динамические перейдут в остаточную программу.

Часть метода специализации, отвечающая за разделение операций и данных, называется анализом времен связывания (Binding Time Analysis, BTA, BT-анализ) (см. рис.). Вторая часть метода специализации, отвечающая за вычисление статической части программы и выделение динамической части в отдельную программу, называется