package org.algorithm.core.neural;

import org.algorithm.core.neural.dataset.NNDataSet;
import org.algorithm.core.neural.dataset.NNDataSetImpl;
import org.diagbot.pub.utils.PropertiesUtil;

/**
 * Tensorlflow 模型加载工厂
 *
 * @Author: bijl
 * @Date: 2018年7月19日-下午7:28:58
 * @Description:
 */
public class TensorFlowModelLoadFactory {

    /**
     * 加载并创建模型类
     *
     * @param modelVersion 模型版本号
     * @return 模型
     */
    public static TensorflowModel create(String modelVersion) {


        PropertiesUtil prop = new PropertiesUtil("/algorithm.properties");


//        NNDataSet dataSet = new NNDataSetImplNonParallel(modelVersion);  // 新模型
        NNDataSet dataSet = new NNDataSetImpl(modelVersion);  // 老模型

        String modelPath = prop.getProperty("basicPath");  // 模型基本路径
        modelVersion = prop.getProperty(modelVersion);
        modelPath = modelPath.replace("model_version_replacement", modelVersion);  // 生成模型路径

        TensorflowModel tm = new TensorflowModel(modelPath, dataSet);
        return tm;
    }

    /**
     * 加载并创建模型类
     *
     * @param modelVersion 模型版本号
     * @return 模型
     */
    public static TensorflowModel createAndFilterDiagnosis(String modelVersion) {


        PropertiesUtil prop = new PropertiesUtil("/algorithm.properties");

        NNDataSet dataSet = new NNDataSetImpl(modelVersion);  // 老模型

        dataSet.setDoFilterDiagnosis(true);
        dataSet.readFilterDiagnosisDict();
        dataSet.setWithSequenceInputs(true);  // 使用序列输入
        dataSet.readChar2IdDict(modelVersion);  // 读取字符字典

        String modelPath = prop.getProperty("basicPath");  // 模型基本路径
        modelVersion = prop.getProperty(modelVersion);
        modelPath = modelPath.replace("model_version_replacement", modelVersion);  // 生成模型路径

        TensorflowModel tm = new TensorflowModel(modelPath, dataSet);
        return tm;
    }

}
