- •1 Обработка естественного языка на фонетическом уровне
- •1.3.1 Нейтрализация звонких и глухих согласных
- •1.3.2 Нейтрализация твердых и мягких согласных
- •1.3.3 Нейтрализация удвоенных фонем и одиночных
- •1.3.4 Нейтрализация и ассимиляция согласных фонем по месту и способу образования
- •1.3.5 Непроизносимые согласные
- •1.3.7 Аккомодация
- •1.3.8 Редукция гласных в безударном положении
- •2 Разработка средств обработки естественного языка на морфологическом уровне
- •2.3.1 Классификация исходных форм
- •2.3.2 Склонение имен
- •Чередования в основе.
- •К этой же группе относятся существительные с пометой "мн.", например, санки, ножны, ср. Санок, ножен. Построение сравнительной степени прилагательных.
- •2.3.3 Спряжение
- •Построение глагольных форм.
- •Настоящее время несовершенного вида и будущеевремя совершенного вида.
- •Неличные формы.
- •3 Инструментальные средства морфологического анализа слов русского языка
- •Задания к лабораторным работам Лабораторная работа №1
- •Задание
- •Лабораторная работа №2
- •Содержание отчёта
- •Литература
- •Лабораторная работа №3
- •Содержание отчёта
- •Контрольные вопросы
- •Срок выполнения – 2 недели.
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