[ELMA3] Пример реализации точки расширения IMorpherFormat и заполнение пользовательского словаря
С версии 3.10 в базовой поставке системы ELMA доступна генерация документов по шаблону (Morpher). Morpher предназначен для склонения слов и словосочетаний на русском языке. Morpher используется при создании шаблонов документа для их дальнейшей генерации. Ознакомиться со списком доступных для Morpher функций можно в статье "Список функций генерации документов по шаблону v3.10".
В данной статье приведены примеры:
Пример реализации точки расширения IMorpherFormat
Иногда возникают случаи, когда форматы чисел могут быть большими, и один из таких форматов может несколько раз встречаться в документе. Для того, чтобы каждый раз полностью не прописывать формат отображения числа, можно передавать его идентификатор. Чтобы вместо формата передавать идентификатор, нужно написать реализацию точки расширения IMorpherFormat, где указывается сам формат и его идентификатор.
В первую очередь необходимо подключить сборку EleWise.ELMA.Morpher.Ru и добавить следующие директивы:
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Morpher.Ru.Extensions;
using EleWise.ELMA.Morpher.Ru.Models;
[Component]
public class DefaultMorpherFormat : IMorpherFormat
{
public IEnumerable Formats { get; set; }
public void Init()
{
var formats = new List
{
new NumberToStringFormat
{
//идентификатор формата отображения
Id = "A",
//формат отображения числа
Format = String.Format("{0} {1} {2} {3}",
MorpherConsts.StringIntegerPart,
MorpherConsts.IntegerPartUnit,
MorpherConsts.StringFractionPart,
MorpherConsts.FractionPartUnit)
},
new NumberToStringFormat
{
Id = "B",
Format = String.Format("{0} {1} {2} {3}",
MorpherConsts.StringIntegerPart,
MorpherConsts.IntegerPartUnit,
MorpherConsts.FractionPart,
MorpherConsts.FractionPartUnit)
}
};
Formats = formats;
}
}
Пользовательский словарь склонений
В случаях, когда Morpher не знает, как правильно просклонять словосочетание, необходимо использовать пользовательский словарь склонений. В ELMA есть два способа заполнить этот словарь:
Пример реализации точки расширения IMorpherUserDictionary
В данном примере для словосочетания "Лежащая книга" будут использоваться те варианты склонений, которые указаны в сценарии.
Для реализации сценария необходимо подключить сборку EleWise.ELMA.Morpher.Ru и добавить следующие директивы:
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Morpher.Ru.Extensions;
using EleWise.ELMA.Morpher.Ru.Models;
[Component]
public class UserDictionary : IMorpherUserDictionary
{
public IEnumerable Init()
{
var list = new List();
var entry = new Entry();
//Задаём род словосочетанию
entry.Gender = Gender.Feminine;
//Задаем варианты склонений для формы единственного числа
var singleForm = new SingleNumberForms();
singleForm.Nominative = "Лежащая книга";
singleForm.Genitive = "Лежащей книги";
singleForm.Dative = "Лежащей книге";
singleForm.Accusative = "Лежащую книгу";
singleForm.Instrumental = "Лежащей книгой";
singleForm.Prepositional = "Лежащей книге";
entry.Singular = singleForm;
//Задаем варианты склонений для формы множественного числа
var pluralForm = new SingleNumberForms();
pluralForm.Nominative = "Лежащие книги";
pluralForm.Genitive = "Лежащих книг";
pluralForm.Dative = "Лежащим книгам";
pluralForm.Accusative = "Лежащие книги";
pluralForm.Instrumental = "Лежащими книгами";
pluralForm.Prepositional = "Лежащих книгах";
entry.Plural = pluralForm;
list.Add(entry);
return list;
}
}
Заполнение файла UserDictionary.xml
Шаблон UserDictionaryTemplate.xml находится в папке шаблонов, которая расположена в ..\<Общая папка с файлами системы ELMA>\UserConfig\Templates. Для подключения данного файла его необходимо переименовать в UserDictionary.xml и положить в папку Web (на одном уровне с connection.config).
Пример xml-файла:
<РодИлиМножественноеЧисло>Женский род
<ФормыЕдинственногоЧисла>
<Именительный>Лежащая книга
<Родительный>Лежащей книги
<Дательный>Лежащей книге
<Винительный>Лежащую книгу
<Творительный>Лежащей книгой
<Предложный>Лежащей книге
<Местный>в Лежащей книге
<ФормыМножественногоЧисла>
<Именительный>Лежащие книги
<Родительный>Лежащих книг
<Дательный>Лежащим книгам
<Винительный>Лежащие книги
<Творительный>Лежащими книгами
<Предложный>Лежащих книгах
<Местный>в Лежащих книгах