Ejemplo n.º 1
0
        /// <summary>
        /// 根据推理类型,选择CLIPS推理入口文件
        /// </summary>
        /// <param name="strRuleLevel"></param>
        /// <param name="oTriggeringEvent"></param>
        /// <returns></returns>
        public static string ObtainRuleEntrance(string strRuleLevel, vMRClsDef.TriggeringEvent oTriggeringEvent)
        {
            if (strRuleLevel == "LEVEL_CLINICIANS")
            {
                switch (oTriggeringEvent.m_emInferenceResultType)
                {
                case vMRClsDef.EnumInferenceResultType.DIAGNOSIS:
                case vMRClsDef.EnumInferenceResultType.THERAPY:
                case vMRClsDef.EnumInferenceResultType.SELFMONITOR:
                case vMRClsDef.EnumInferenceResultType.MSEVALUATION:
                    return("Entrance.clp");

                case vMRClsDef.EnumInferenceResultType.DIETARY:
                    return("MS_DietDataJudge.clp");

                case vMRClsDef.EnumInferenceResultType.PHYSICALACTIVITY:
                    return("MS_SportDataJudge.clp");

                case vMRClsDef.EnumInferenceResultType.RISKEVALUATION:
                    return("MS_MSRiskDegreeEvaluation.clp");

                default:
                    return(string.Empty);
                }
            }
            else
            {
                return(string.Empty);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Clips推理接口调用
        /// </summary>
        /// <param name="strRuleLevel"></param>
        /// <param name="lstDataModelForIE"></param>
        /// <param name="lstNewFact"></param>
        /// <param name="oTriggeringEvent"></param>
        /// <returns></returns>
        public bool DoInference(string strRuleLevel, List <vMRClsDef.DataModel> lstDataModelForIE,
                                ref List <vMRClsDef.DataModel> lstNewFact, vMRClsDef.TriggeringEvent oTriggeringEvent)
        {
            bool   bRet            = true;
            string strRuleEntrance = ObtainRuleEntrance(strRuleLevel, oTriggeringEvent);

            UserDefinedFun();
            m_oRuleEngine.Watch("all");
            //////////////////////////////////////////////////////////////////////////
            string strfilepath = AppDomain.CurrentDomain.BaseDirectory + ClipsConfig.ReadConfig("Filepath");

            //////////////////////////////////////////////////////////////////////////
            m_oRuleEngine.Load(strfilepath + strRuleEntrance); //load rule
            m_oRuleEngine.Load(strfilepath + "function.clp");  //load deffunction
            DataObject d = m_oRuleEngine.CreateDataObject();

            OperateFact("filepath", "\"" + strfilepath.Replace("\\", "\\\\") + "\"");//load fact filepath

            //load fact of data
            foreach (vMRClsDef.DataModel oDataModel in lstDataModelForIE)
            {
                OperateFact(oDataModel.strDataName, oDataModel.strDataValue);
            }

            //bool bDribbleOn = m_oRuleEngine.DribbleOn("..\\Rule\\out.txt");
            string strIEProcessName =
                System.DateTime.Now.ToString("yyyyMMddHHmmss") + "_"
                + oTriggeringEvent.oEvent.strEventName;
            //////////////////////////////////////////////////////////////////////////
            string strLogPath = AppDomain.CurrentDomain.BaseDirectory + ClipsConfig.ReadConfig("LogPath");
            string strLogFlag = AppDomain.CurrentDomain.BaseDirectory + ClipsConfig.ReadConfig("LogFlag");
            //////////////////////////////////////////////////////////////////////////
            string strIELogDirectory = strLogPath + "IELog\\";

            //如果日志文件目录不存在,则创建该目录
            if (Directory.Exists(strIELogDirectory) == false)
            {
                Directory.CreateDirectory(strIELogDirectory);
            }
            strIELogDirectory = strIELogDirectory + strIEProcessName + ".txt";
            if (strLogFlag == "1")
            {
                bool bDribbleOn = m_oRuleEngine.DribbleOn(strIELogDirectory);
            }

            int nRunRet = m_oRuleEngine.Run(-1);

            m_oRuleEngine.DribbleOff();
            GetNewAddFact(ref lstNewFact);

            return(bRet);
        }
Ejemplo n.º 3
0
        public static void MapEvent(string strEventName, ref vMRClsDef.TriggeringEvent oTriggeringEvent)
        {
            switch (strEventName)
            {
            case ClipsEventsDef.CONST_EVENTENNAME_HeadacheDiagnosis:
                oTriggeringEvent.oDisease.strDiseaseCNName = "Headache_Diagnosis_Event";
                oTriggeringEvent.m_emInferenceResultType   = vMRClsDef.EnumInferenceResultType.DIAGNOSIS;
                return;

            default:
                return;
            }
        }
Ejemplo n.º 4
0
        private static void ObtainTriggeringEventList(string strFilePath, string strFileName)
        {
            OpenXmlDoc(strFilePath + strFileName);
            XmlNodeList nl_Disease = FindMulInstance("EventModel");//查找出xml文件中所有的触发事件节点

            foreach (XmlNode n_Disease in nl_Disease)
            {
                vMRClsDef.TriggeringEvent oTriggeringEvent = new vMRClsDef.TriggeringEvent();
                oTriggeringEvent.oEvent.strEventName   = n_Disease.SelectSingleNode("x:ENName", m_xmlManager).InnerText;
                oTriggeringEvent.oEvent.strEventCNName = n_Disease.SelectSingleNode("x:CNName", m_xmlManager).InnerText;
                ClipsEventsDef.MapEvent(oTriggeringEvent.oEvent.strEventName, ref oTriggeringEvent);
                lstTriggeringEvents.Add(oTriggeringEvent);
            }
        }