Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все_ЛР.doc
Скачиваний:
13
Добавлен:
21.11.2019
Размер:
487.94 Кб
Скачать

3 Инструментальные средства морфологического анализа слов русского языка

3.1 Описание библиотеки морфологического анализа слов русского языка РДМА_ИПИИ

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

  • GlobalFunc.h – заголовочный файл с описанием экспортируемых функций и используемых типов;

  • DeclareLemma.dll, DeclareLemma.lib – файлы библиотеки;

  • tab.dat, tree.dat, connect.dat – файлы, содержащие данные словарной базы.

3.2 Интерфейс библиотеки

Интерфейс библиотеки позволяет выполнять действия по следующим направлениям:

  • очистка, загрузка и сохранение словарной базы;

  • модификация словарной базы;

  • получение информации о словоформах;

  • получение информации о словарной базе.

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

void Release() – функция очищает словарную базу.

UINT LoadMem(char * Path) – функция загружает в память дерево строк, сокращенную таблицу парадигм, таблицу связи дерева и сокращенной таблицы парадигм, а также индексы к ним.

UINT LoadDisk(char * Path) – функция загружает таблицу связи дерева и сокращенной таблицы парадигм, а также индексы в память и устанавливает флажок, указывающий на то, что остальные данные читаются с диска.

При этом переменная Path указывает путь к папке, хранящей файлы словарной базы: tab.dat, tree.dat, connect.dat.

UINT SaveMem(char * Path) – функция сохраняет в папку по указан­ному пути Path данные словарной базы, хранимые в памяти.

UINT SaveDisk(char * Path) – функция сохраняет в папку по указан­ному пути Path данные словарной базы, частично хранимые в памяти, а час­тично на диске.

Указанные функции в случае успешного завершения возвращают нулевое значение.

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

UINT InsertRows (MyChar*wrdBud,MyChar*wrdUd,UINT LemmaNum, UINT MI) – функция добавления словоформы в словарную базу. Параметры: wrdBud – строка написания словоформы без ударения, wrdUd – строка напи­са­ния словоформы с учётом ударения, LemmaNum – номер в словарной базе леммы данной словоформы, MI число, в котором с помощью набора битовых полей закодирована морфологическая информация о словоформе.

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

UINT DeleteRows (CUIntArray& Indexes, BOOL f) – функция удаляет словоформы из словарной базы. Параметры Indexes – номера словоформ в базе; значение флага f указывает нужно ли удалять из дерева текст слов: TRUE – из дерева текст слов удаляется, FALSE – из дерева текст слов не удаляется.

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

UINT GetWordNum(MyChar* word) – функция возвращает идентифи­ка­тор слова word в дереве строк или нулевое значение в случае отсутствия данной строки.

UINT GetWord(MyStrNum treeNum, MyChar* str, int buff_Size) – функ­ция записывает в буфер str размера buff_Size строку, идентификатор которой в дереве строк равен treeNum.

void TranslateMI(UINT Mi, char*str)записывает в строку str тек­стовую расшифровку числового значения морфологической информации.

UINT FindLemma(MyChar *word, CStringArray& Lemma, CUIntArray &ResLemm, CUIntArray &MI) – функция находит леммы для строки word. Результаты выполнения функции: Lemma – массив написаний леммы для словоформ, чьё написание совпадает со строкой word, ResLemm – массив но­меров лемм в словарной базе (необходим для установления принадлежности словоформы конкретной парадигме), MI – массив значений морфологической информации словоформ с указанным написанием.

UINT FindPrichLemma (MyChar *word, CStringArray& Lemma, CUIntArray &ResLemm,CUIntArray &MI) – функция аналогична функции FindLemma, но для причастий в качестве леммы возвращает не инфинитив, а именительный падеж мужского рода единственного числа для этого причастия.

UINT FindParadigm (MyChar *word, CStringArray& ParadigmBud, CStringArray& ParadigmUd, CUIntArray &MI, CUIntArray &TabNums, CUIntArray &LemmNums) – функция находит парадигмы, содержащие словоформы с написанием word. Результаты выполнения функции: ParadigmBud (ParadigmUd) – массив написаний словоформ найденных пара­дигм без учёта ударения (с учётом ударения), MI – массив значений морфоло­гической информации этих словоформ, TabNums, CUIntArray &LemmNums Lemma – массив написаний леммы для словоформ, чьё напи­са­ние совпадает со строкой word, ResLemm – массив номеров лемм в словарной базе (необходим для установления принадлежности словоформы конкретной парадигме), MI – массив значекний морфологической информации слово­форм с указанным написанием.

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

UINT GetTreeSize() – позволяет определить количество строковых ве­ли­чин, хранимых в дереве строк.

UINT GetRowsCount() – возвращает количество словоформ в словар­ной базе.

void Evaluate(char *FilePath) – функция сохраняет в файл по указан­ному пути информацию о затратах памяти на хранение различных структур данных словарной базы.

3.3 Представление морфологической информации в библиотеке РДМА_ИПИИ

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

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

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

Третий способ – хранение морфологической информации в виде бито­вых полей. Он сочетает в себе простоту обработки и экономное хранение морфологической информации. Поэтому он более предпочтителен. Этот способ применяется в модуле морфологического анализа LINGUIST, а в модуле лемматизации РРО, библиотеке декларативного морфологического анализа слов русского языка РДМА_ИПИИ.

Способ представления морфологической информации в модуле лемматизации РРО и библиотеке РДМА_ИПИИ позволяет экономить 2 байта на каждой записи, по сравнению с модулем LINGUIST. Кроме того, опре­де­ление значений отдельных категорий морфологической информации в моду­ле лемматизации не уступает в простоте и скорости модулю LINGUIST. Ещё одно преимущество – извлечение отдельных морфологических характерис­тик слова производится единообразно, невозможна неверная интерпретация морфологической информации.

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

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

Таблица 1. – Представление МИ в библиотеке РДМА_ИПИИ

Значение

Категория

Значение

Числовое

Макроопределения

0x00000001

_Nominative

Падеж

Именительный

0x00000002

_Genitive

Родительный

0x00000003

_Dative

Дательный

0x00000004

_Accusative

Винительный

0x00000005

_Ablative

Творительный

0x00000006

_Locative

Предложный

0x00000008

_Masculine

Род

Мужской

0x00000010

_Feminine

Женский

0x00000018

_Neuter

Средний

0x00000020

_Singular

Число

Единственное

0x00000040

_Plural

Множественное

0x00000080

_Past

Время

Прошедшее

0x00000100

_Future

Будущее

0x00000180

_Continius

Настоящее

0x00000200

_FaceFir

Лицо

1-е

0x00000400

_FaceSec

2-е

0x00000600

_FaceThi

3-е

0x00000800

_Active

Залог

Действительный

0x00001000

_Passive

Страдательный

0x00002000

_ComparativeFormOfAdj

Степень сравнения,

краткость

Сравнительная

0x00004000

_ExellentFormOfAdj

Превосходная

0x00006000

_ShortFormOfAdj

Краткая форма

0x00008000

_Verb

Часть речи

Глагол

0x00010000

_Participle

Причастие

0x00018000

_Gerund

Деепричастие

0x00020000

_Adjective

Прилагательное

0x00028000

_Noun

Существительное

0x00030000

_Pronoun

Местоимение

0x00038000

_Numeral

Числительное

0x00040000

_AdVerb

Наречие

0x00048000

_Preposition

Предлог

0x00050000

_Conjunction

Союз

0x00058000

_Particle

Частица

0x00060000

_Interjection

Междометие

0x00068000

_Predicate

Предикатив

0x00070000

_Poslelog

Послелог

0x00078000

_ComparativeWord

Сравнительное слово

0x00080000

_Animate

Одушевлен­ность

Одушевленное

0x00100000

_NotAnimate

Неодушевленное

0x00200000

_Imperative

Повелительное наклонение

0x00400000

_Accomplished

Вид глагола

Совершенный

0x00800000

_Incomplete

Несовершенный

0x00С00000

_Accompl_Incompl

Совершенный-несовершенный

0x01000000

_Count

Вид числитель­ного

Количественное

0x02000000

_Ordinal

Порядковое

0x03000000

_PlurLive

Количественное одушевленное

0x04000000

_PronNoun

Вид местоимения

Местоимение-существительное

0x08000000

_PronAdject

Местоимение-прилагательное

0x0С000000

_PronPersonal

Личное местоимение

0x10000000

_PronImpersonal

Безличное местоимение

0x20000000

_VerbIntransitive

Непереходный глагол

0x40000000

_VerbReflexive

Возвратная форма глагола

0x80000000

_Introductory

Вводное слово

Таблица 2. – Маски категорий морфологической информации

Числовое значение

Макроопределение

Маска категории

0x00000007

case_mask

Падеж

0x00000018

rod_mask

Род

0x00000060

count_mask

Число

0x00000180

time_mask

Время

0x00000600

face_mask

Лицо

0x00001800

active_passive_mask

Залог

0x00006000

adjfrm_mask

Степень сравнения, краткость

0x00078000

part_of_speech_mask

Часть речи

0x00180000

animate_mask

Одушевлённость

0x00C00000

aspect_of_verb_mask

Вид глагола

0x03000000

number_type_mask

Тип числительного

0x1C000000

pron_type_mask

Тип местоимения

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

Пример определения значения категории «род» словоформы:

MI & rod_mask

Результат: _Masculine, _Feminine, _Neuter или 0.

Пример определения падежа слова, с морфологической информацией MI:

MI & case_mask

Результат – 0, если слово не склоняется по падежам (глагол, наречие и т.д), или одно из численных значений категории «падеж», приведенных в таблице 1.

Приложение 1