ооо!

БЛОГ разработчика

Работа с парадигмой слова на C#


Интерфейс IParadigm представляет собой полную парадигму одного слова. Полная парадигма слова содержит все возможные формы данного слова, а также его нормальную форму. Помимо этого в парадигме слова содержатся данные о его статистической частоте встречаемости слова в массиве обучающих текстов, номер парадигмы и более специфические характеристики.
Нормальная форма слова – это родительская форма словоформы, от которой выведены все остальные. Для существительных это именительный падеж, единственное число (или множественное, для ряда слов: «туфли», «очки»). Для глаголов – инфинитив («делать», «видеть»). Приведение к нормальной форме используется для нормализации текста при его обработке, при организации поиска.
Полный список свойств интерфейса IParadigm можно найти на сайте АОТ вместе с описанием,а здесь рассмотрим как работать с ним в C# и его основные свойства на примерах.

Мы подключили лемматизер и словари, как было описано ранее, а теперь попробуем создать объект IParadigm, позволяющий работать с парадигмой слова. Это можно сделать с помощью интерфейса IParadigmCollection, который позволяет создавать коллекцию объектов IParadigm. Это очень полезное свойство! Оно не только записывает полностью парадигму в коллекцию, но и позволяет легко импортировать данные в новую коллекцию типа List, и работать в дальнейшем с коллекцией. А преимущество работы с List - это скорость, удобство и отсутствие сбоев, как при работе с Array.
Итак:

//подключаем, как было описано выше
// Русский словарь
LemmatizerNET.MorphLanguage lang = LemmatizerNET.MorphLanguage.Russian;
// объект лемматизера
LemmatizerNET.ILemmatizer lem = LemmatizerNET.LemmatizerFactory.Create(lang);
// путь к словарям
LemmatizerNET.FileManager manager = LemmatizerNET.FileManager.GetFileManager(@"...\Release\");
// инициализация словарей
lem.LoadDictionariesRegistry(manager);
//подключила модуль статистики
lem.LoadStatisticRegistry(LemmatizerNET.Subject.Literature,manager);

Теперь создаем объект IParadigmCollection и получаем доступ к свойствам IParadigm. Для примера возьмем слово «блина», и получим его нормальную форму («блин») с помощью свойства Norm - нормальная форма слова:

//создаем объект IParadigmCollection
LemmatizerNET.IParadigmCollection paradigma = lem.CreateParadigmCollectionFromForm("блина", false, false);
//помним, что объект paradigm это коллекция и проходим ее в цикле
for (int i = 0; i < paradigma.Count;i++ )
{
var paradigmaW = paradigma[i];
Console.WriteLine(paradigmaW.Norm);

//нормальная форма слова
}


Помним, что объект paradigma - это коллекция и проходим ее в цикле. Результат –нормальная форма слова.



Теперь получим полную парадигму заданного слова c помощью свойства GetForm. Это свойство получает каждую конкретную форму по номеру, поэтому, чтобы получить ее полностью, нужно вновь пройтись по циклу.

for (int i = 0; i < paradigma.Count;i++ )
{
var paradigmaW = paradigma[i];
for (var j = 0; j < paradigmaW.Count; j++)
{
Console.WriteLine(paradigmaW.GetForm(j));
}
}

Результат:


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

Console.WriteLine(paradigmaW.GetForm(j)+" "+paradigmaW.GetAncode(j));
Результат:


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




Если вы считаете, что данные материалы как-либо нарушают ваши права, напишите нам