logo

[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-файла:

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