[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-файла:
<РодИлиМножественноеЧисло>Женский род <ФормыЕдинственногоЧисла> <Именительный>Лежащая книга <Родительный>Лежащей книги <Дательный>Лежащей книге <Винительный>Лежащую книгу <Творительный>Лежащей книгой <Предложный>Лежащей книге <Местный>в Лежащей книге <ФормыМножественногоЧисла> <Именительный>Лежащие книги <Родительный>Лежащих книг <Дательный>Лежащим книгам <Винительный>Лежащие книги <Творительный>Лежащими книгами <Предложный>Лежащих книгах <Местный>в Лежащих книгах