/*
 * SDK Pullenti Lingvo, version 4.33, fabruary 2026. Copyright (c) 2013-2026, Pullenti. All rights reserved. 
 * Non-Commercial Freeware and Commercial Software.
 * This class is generated using the converter Unisharping (www.unisharping.ru) from Pullenti C#.NET project. 
 * The latest version of the code is available on the site www.pullenti.ru
 */


const MoneyAnalyzer = require("./../ner/money/MoneyAnalyzer");
const SemProcessParams = require("./SemProcessParams");
const AlgoParams = require("./internal/AlgoParams");
const DelimToken = require("./internal/DelimToken");
const AdverbToken = require("./internal/AdverbToken");
const MeasureAnalyzer = require("./../ner/measure/MeasureAnalyzer");

/**
 * Сервис семантического анализа. Основная концепция изложена в документе Pullenti.Semantic. 
 * В реальных проектах не использовался, слабо отлажен, но ведется доработка данной функциональности.
 * 
 * Сервис семантики
 */
class SemanticService {
    
    /**
     * Если собираетесь использовать семантику, то необходимо вызывать в самом начале и только один раз 
     * (после инициализации ProcessorService.Initialize). Если вызвали Sdk.Initialize(), то там семантика инициализуется, 
     * и эту функцию вызывать уже не надо. 
     * Отметим, что для NER семантический анализ не используется.
     */
    static initialize() {
        if (SemanticService.m_Inited) 
            return;
        SemanticService.m_Inited = true;
        DelimToken.initialize();
        AdverbToken.initialize();
        MeasureAnalyzer.initialize();
        MoneyAnalyzer.initialize();
    }
    
    /**
     * Сделать семантический анализ поверх результатов морфологического анализа и NER
     * @param ar результат обработки Processor
     * @param pars дополнительные параметры (null по умолчанию)
     * @return результат анализа текста
     * 
     */
    static process(ar, pars = null) {
        const AnalyzeHelper = require("./internal/AnalyzeHelper");
        return AnalyzeHelper.process(ar, (pars != null ? pars : new SemProcessParams()));
    }
    
    static static_constructor() {
        SemanticService.VERSION = "0.3";
        SemanticService.m_Inited = false;
        SemanticService.PARAMS = new AlgoParams();
    }
}


SemanticService.static_constructor();

module.exports = SemanticService