Пример #1
0
        //[System.Web.Http.HttpGet]
        //[ValidateInput(false)]
        //[System.Web.Http.Route("GetFAQNETData")]
        private async Task <Object> GetFAQNETData(string q, string domain = null)
        {
            try
            {
                CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
                if (string.IsNullOrEmpty(q))
                {
                    return(null);
                }

                QueryContainer <CMFAQ_NET>         faq_net  = null;
                Task <QueryContainer <CMFAQ_NET> > tFaq_net = null;
                var tasks = new List <Task>();
                tFaq_net = TimedTask.CallWithTimeoutAsync(timeout, () => new Faq_net(domain).Get(q, domain), q, null);
                tasks.Add(tFaq_net);
                await Task.WhenAll(tasks.ToArray());

                faq_net = tFaq_net == null ? null : tFaq_net.Result;
                //QueryDataContainer SortData = DataSort.SortKB(null, faq_net, null, null);

                if (faq_net == null || faq_net.MetaList.Count == 0)
                {
                    return(new { result = false, msg = "未找到查询结果!" });
                }
                return(new { result = true, faq_net.MetaList });
            }
            catch (System.Exception ex)
            {
                CBase.Log.Logger.Error(ex);
                return(new { result = false, msg = ex.ToString() });
            }
        }
Пример #2
0
        public async Task <Object> GetRelaData(string q, string domain = null)
        {
            return(await Task.Run <Object>(() =>
            {
                CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
                if (string.IsNullOrEmpty(q))
                {
                    return new { result = false, msg = "参数错误" }
                }
                ;
                Domain.Intent intent = new Answer().GetIntent(q, domain);
                try
                {
                    var result = new KB().GetRela(intent);

                    tlogTotal.Write("GetRelaData");
                    if (result.Total == 0)
                    {
                        return new { result = false, msg = "未找到" }
                    }
                    ;


                    return new { result = true, result.MetaList };
                }
                catch (System.Exception ex)
                {
                    CBase.Log.Logger.Error(ex);
                    return new { result = false, msg = ex.ToString() };
                }
            }));
        }
Пример #3
0
        /// <param name="q"></param>
        /// <param name="cp">第几页</param>
        /// <param name="c">页大小</param>
        /// <param name="navc"></param>
        /// <returns></returns>
        //[System.Web.Http.HttpGet]
        //[ValidateInput(false)]
        //[System.Web.Http.Route("GetSGData")]
        private Object GetSGData(string q, string domain = null, string cp = null, string c = null, string navc = null)
        {
            try
            {
                List <FuncElapsed>     listElaps = new List <FuncElapsed>();
                CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
                CBase.Log.TimeWatchLog tlog_temp = new CBase.Log.TimeWatchLog();

                if (string.IsNullOrEmpty(q))
                {
                    return(null);
                }

                int recStart = 0;
                int recCount = 0;

                InitPageParam(cp, c, out recStart, out recCount);

                //调用句群接口,返回内容
                QueryContainer <CMAnswer> qcAnswer = null;

                ClientInfo cinfo = new ClientInfo()
                {
                    UserName = CommonHelper.GetUserName(),
                    IP       = CommonHelper.GetClientIP()
                };
                tlog_temp.Start();
                cinfo.Type = ContentLogType.句群超时;
                qcAnswer   = TimedTask.CallActionWithTimeoutSync(timeout, () => new Answer(domain).Get(q, recStart, recCount, domain), q, cinfo);
                listElaps.Add(new FuncElapsed("SenGroup", tlog_temp.Debug()));

                tlog_temp.Start();
                cinfo.Type = ContentLogType.问题排序超时;
                QueryDataContainer SortData = DataSort.SortSenGroup(qcAnswer, cinfo);
                listElaps.Add(new FuncElapsed("SortSG", tlog_temp.Debug()));

                AnswerResultSG result = new Models.AnswerResultSG()
                {
                    SortData = SortData
                };
                result.timeSpan = tlogTotal.Debug();
                SortData.ElapsedList.AddRange(listElaps);

                if (SortData.MetaList.Count == 0)
                {
                    return(new { result = false, msg = "未找到查询结果!" });
                }
                return(new { result = true, SortData.MetaList });
            }
            catch (System.Exception ex)
            {
                CBase.Log.Logger.Error(ex);
                return(new { result = false, msg = ex.ToString() });
            }
        }
Пример #4
0
        //[System.Web.Http.HttpGet]
        //[ValidateInput(false)]
        //[System.Web.Http.Route("GetFAQData")]
        private async Task <Object> GetFAQData(string q, string domain = null)
        {
            try
            {
                List <FuncElapsed>     listElaps = new List <FuncElapsed>();
                CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
                CBase.Log.TimeWatchLog tlog_temp = new CBase.Log.TimeWatchLog();
                if (string.IsNullOrEmpty(q))
                {
                    return(null);
                }
                QueryContainer <CMFAQ>                 faq      = null;
                QueryContainer <CMFAQ_NET>             faq_net  = null;
                List <Task <QueryContainer <CMFAQ> > > tFaqList = null;
                Task <QueryContainer <CMFAQ_NET> >     tFaq_net = null;

                //获取意图识别
                tlog_temp.Start();
                var tasks = new List <Task>();
                tFaqList = GetFAQTask(q, timeout, domain);
                tFaq_net = TimedTask.CallWithTimeoutAsync(timeout, () => new Faq_net(domain).Get(q, domain), q, null);
                tasks.AddRange(tFaqList);
                tasks.Add(tFaq_net);
                await Task.WhenAll(tasks.ToArray());

                faq     = GetFAQAll(tFaqList);
                faq_net = tFaq_net == null ? null : tFaq_net.Result;
                tlog_temp.Start();
                QueryDataContainer SortData = DataSort.SortKB(faq, faq_net, null, null);

                SortData.ElapsedList.AddRange(listElaps);
                if (SortData.MetaList.Count == 0)
                {
                    return(new { result = false, msg = "未找到查询结果!" });
                }
                return(new { result = true, SortData.MetaList });
            }
            catch (System.Exception ex)
            {
                CBase.Log.Logger.Error(ex);
                return(new { result = false, msg = ex.ToString() });
            }
        }
Пример #5
0
 //[System.Web.Http.HttpGet]
 //[ValidateInput(false)]
 //[System.Web.Http.Route("GetIntent")]
 private Object GetIntent(string q, string domain = null)
 {
     try
     {
         List <FuncElapsed>     listElaps = new List <FuncElapsed>();
         CBase.Log.TimeWatchLog tlog_temp = new CBase.Log.TimeWatchLog();
         if (string.IsNullOrEmpty(q))
         {
             return(null);
         }
         //获取意图识别
         tlog_temp.Start();
         Domain.Intent intent = new Answer(domain).GetIntent(q, domain);
         listElaps.Add(new FuncElapsed("GetIntent", tlog_temp.Debug()));
         return(new { result = true, data = intent });
     }
     catch (System.Exception ex)
     {
         CBase.Log.Logger.Error(ex);
         return(new { result = false, msg = ex.ToString() });
     }
 }
Пример #6
0
        //搜索问题获取Faq答案的简易接口
        //[System.Web.Http.HttpGet]
        //[ValidateInput(false)]
        //[System.Web.Http.Route("FaqSlim")]
        private async Task <Object> FaqSlim(string q)
        {
            try
            {
                List <FuncElapsed>     listElaps = new List <FuncElapsed>();
                CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
                CBase.Log.TimeWatchLog tlog_temp = new CBase.Log.TimeWatchLog();
                if (string.IsNullOrEmpty(q))
                {
                    return(null);
                }
                QueryContainer <CMFAQ> faq = null;
                List <Task <QueryContainer <CMFAQ> > > tFaqList = null;

                var tasks = new List <Task>();
                tFaqList = GetFAQTask(q, timeout);
                tasks.AddRange(tFaqList);
                await Task.WhenAll(tasks.ToArray());

                faq = GetFAQAll(tFaqList);
                if (faq.MetaList.Count == 0)
                {
                    return(new { result = false, msg = "未找到查询结果!" });
                }
                else
                {
                    List <FaqAnswer> AnswerList = new List <FaqAnswer>();
                    foreach (CMFAQ f in faq.MetaList)
                    {
                        FAQ_ANSWER_CONFIG orm = new FAQ_ANSWER_CONFIG("KB");
                        QueryContainer <CMFAQ_ANSWER_CONFIG> config = orm.Get(f.DOMAIN);
                        if (config.MetaList.Count > 0)
                        {
                            FaqAnswer answer = GetFaqAnswer(config.MetaList[0], f);
                            if (answer == null)
                            {
                                answer = new FaqAnswer()
                                {
                                    Question = f.QUESTION,
                                    Answer   = f.PREPARED_ANSWER,
                                    Domain   = f.DOMAIN,
                                    Extra    = f.ADDITIONAL_INFO
                                };
                            }
                            AnswerList.Add(answer);
                        }
                        else
                        {
                            FaqAnswer answer = new FaqAnswer()
                            {
                                Question = f.QUESTION,
                                Answer   = f.PREPARED_ANSWER,
                                Domain   = f.DOMAIN,
                                Extra    = f.ADDITIONAL_INFO
                            };
                            AnswerList.Add(answer);
                        }
                    }
                    return(new { result = true, AnswerList });
                }
            }
            catch (System.Exception ex)
            {
                CBase.Log.Logger.Error(ex);
                return(new { result = false, msg = ex.ToString() });
            }
        }
Пример #7
0
        //[System.Web.Http.HttpGet]
        //[ValidateInput(false)]
        //[System.Web.Http.Route("GetKBData")]
        private async Task <Object> GetKBData(string q, string domain = null)
        {
            try
            {
                List <FuncElapsed>     listElaps = new List <FuncElapsed>();
                CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
                CBase.Log.TimeWatchLog tlog_temp = new CBase.Log.TimeWatchLog();
                if (string.IsNullOrEmpty(q))
                {
                    return(null);
                }
                //根据意图分析结果,提供准确答案与资源导航、问答对
                Dictionary <string, QueryContainer <CMKArea> >         navContent = null;
                Task <Dictionary <string, QueryContainer <CMKArea> > > tNavi      = null;
                ClientInfo cinfo = new ClientInfo()
                {
                    UserName = CommonHelper.GetUserName(),
                    IP       = CommonHelper.GetClientIP()
                };
                //获取意图识别
                tlog_temp.Start();
                Domain.Intent intent = new Answer(domain).GetIntent(q, domain);
                listElaps.Add(new FuncElapsed("GetIntent", tlog_temp.Debug()));

                //内容收集 意图是否识别收集用于数据分析 1未识别 2已识别
                ContentLogType collectType = ContentLogType.已识别;
                if (intent != null && intent.qt_parsed_rst == null)
                {
                    collectType = ContentLogType.未识别;
                }
                var client = new CollectorInterfaceClient();
                Task.Run <bool>(() =>
                {
                    return(client.SetConfused(new CollectorEntity()
                    {
                        Content = intent.RawInput,
                        Type = (int)collectType,
                        IP = cinfo.IP,
                        UserID = cinfo.UserName
                    }));
                });

                cinfo.Type = ContentLogType.知识库超时;
                tNavi      = TimedTask.CallWithTimeoutAsync(timeout, () => new KB(domain).Get(intent), q, cinfo);
                await Task.WhenAll(tNavi);

                navContent = tNavi == null ? null : tNavi.Result;
                tlog_temp.Start();
                cinfo.Type = ContentLogType.问题排序超时;
                QueryDataContainer SortData = DataSort.SortKB(null, null, navContent, cinfo);
                listElaps.Add(new FuncElapsed("SortKB", tlog_temp.Debug()));
                AnswerResultKB result = new Models.AnswerResultKB()
                {
                    intent   = intent,
                    SortData = SortData
                };
                result.timeSpan = tlogTotal.Debug();
                SortData.ElapsedList.AddRange(listElaps);
                if (SortData.MetaList.Count == 0)
                {
                    return(new { result = false, msg = "未找到查询结果!" });
                }
                for (int i = 0; i < SortData.MetaList.Count; i++)
                {
                    SortData.MetaList[i].QExp = null;
                }
                return(new { result = true, SortData.MetaList });
            }
            catch (System.Exception ex)
            {
                CBase.Log.Logger.Error(ex);
                return(new { result = false, msg = ex.ToString() });
            }
        }
Пример #8
0
        public async Task <ExistAnswer> IsExistAnswer(string q)
        {
            CBase.Log.TimeWatchLog tlogTotal = new CBase.Log.TimeWatchLog();
            ExistAnswer            ea        = new ExistAnswer();

            ea.result     = false;
            ea.AnswerType = new List <string>();
            if (string.IsNullOrWhiteSpace(q))
            {
                ea.error = "问题参数为空,请传入问题参数";
                return(ea);
            }

            List <Task <bool> > tFaqList = null;

            try
            {
                DomainMapUnit confine = GetConfigLimit("Library");

                Domain.Intent intent = new Answer().GetIntent(q);

                Task <bool>         kb       = null;
                List <Task <bool> > taskList = new List <Task <bool> >();
                Task <bool>         tFaq_net = null;
                kb = Task.Run <bool>(() =>
                {
                    var isExistKB = new KB().IsExist(intent);
                    return(isExistKB);
                });
                //kb = TimedTask.CallWithTimeoutAsync(timeout, () => new KB().IsExist(intent), null, null);
                List <string> filterDomain = new List <string>();
                if (confine != null && confine.FAQEX != null && confine.FAQEX.Count > 0)
                {
                    filterDomain = confine.FAQEX;
                }
                tFaqList = GetFAQTaskExist(q, timeout, filterDomain);

                //tFaq_net = TimedTask.CallWithTimeoutAsync(timeout, () => new Faq_net().IsExist(q), null, null);
                tFaq_net = Task.Run <bool>(() =>
                {
                    return(new Faq_net().IsExist(q));
                });

                //Task<bool> sg = Task.Run<bool>(() =>
                //{
                //    int recStart = 0;
                //    int recCount = 0;
                //    InitPageParam(null, null, out recStart, out recCount);

                //    ClientInfo cinfo = new ClientInfo();
                //    if (confine == null || confine.SG == null || confine.SG.Count == 0)
                //    {
                //        QueryContainer<CMAnswer>  qcAnswer = TimedTask.CallActionWithTimeoutSync(timeout, () => new Answer().Get(q, recStart, recCount), q, cinfo);
                //        return qcAnswer != null && qcAnswer.MetaList != null && qcAnswer.MetaList.Count > 0;
                //    }
                //    else
                //    {
                //        foreach (string domain in confine.KB)
                //        {
                //            QueryContainer<CMAnswer> qcAnswer = TimedTask.CallActionWithTimeoutSync(timeout, () => new Answer(domain).Get(q, recStart, recCount,domain), q, cinfo);
                //            if(qcAnswer != null && qcAnswer.MetaList != null && qcAnswer.MetaList.Count > 0)
                //            {
                //                return true;
                //            }
                //        }
                //        return false;
                //    }

                //});

                //await Task.WhenAll(new Task<bool>[]{kb,faq,sg});
                //if (faq != null)
                //    taskList.Add(faq);

                taskList.AddRange(tFaqList);
                taskList.Add(tFaq_net);

                if (kb != null)
                {
                    taskList.Add(kb);
                }

                await Task.WhenAll(taskList);

                ea.TimeSpan = tlogTotal.Debug();
                tlogTotal.Write("IsExistAnswer");

                if (kb != null && kb.Result == true)
                {
                    ea.AnswerType.Add("kb");
                }
                if (GetFAQExist(tFaqList))
                {
                    ea.AnswerType.Add("faq");
                }
                if (tFaq_net != null && tFaq_net.Result == true)
                {
                    ea.AnswerType.Add("faqnet");
                }
                //记录有无答案日志
                try
                {
                    ClientInfo cinfo = new ClientInfo()
                    {
                        UserName = CommonHelper.GetUserName(),
                        IP       = CommonHelper.GetClientIP()
                    };
                    cinfo.Type = ea.AnswerType.Count == 0 ? ContentLogType.无答案 : ContentLogType.答案;
                    CommonFunc.WriteContentLog(cinfo, q);
                }
                catch (Exception ex)
                {
                    CBase.Log.Logger.Error(ex);
                }


                //if(sg.Result==true)
                //{
                //    ea.AnswerType.Add("sg");
                //}

                if (ea.AnswerType.Count > 0)
                {
                    ea.result = true;
                    return(ea);
                }
                else
                {
                    ea.result = false;
                    return(ea);
                }
            }
            catch (Exception e)
            {
                ea.error = "查询时出现错误:" + e.Message;
                return(ea);
            }
        }
Пример #9
0
        public async Task <Object> GetAnswer(string q, string appid, string aid)
        {
            try
            {
                CBase.Log.TimeWatchLog twTotal = new CBase.Log.TimeWatchLog();
                if (string.IsNullOrEmpty(q))
                {
                    return new { result = false, msg = "问题不能为空!" }
                }
                ;

                //根据意图分析结果,提供准确答案与资源导航、问答对
                Dictionary <string, QueryContainer <CMKArea> > navContent = null;
                QueryContainer <CMFAQ>     faq     = null;
                QueryContainer <CMFAQ_NET> faq_net = null;

                Task <Dictionary <string, QueryContainer <CMKArea> > > tNavi = null;
                List <Task <QueryContainer <CMFAQ> > > tFaqList = null;
                Task <QueryContainer <CMFAQ_NET> >     tFaq_net = null;

                ClientInfo cinfo = new ClientInfo()
                {
                    UserName = CommonHelper.GetUserName(),
                    IP       = CommonHelper.GetClientIP()
                };

                //获取意图识别
                Domain.Intent intent = new Answer().GetIntent(q);

                //内容收集 意图是否识别收集用于数据分析 1未识别 2已识别
                ContentLogType collectType = ContentLogType.已识别;
                if (intent != null && intent.qt_parsed_rst == null)
                {
                    collectType = ContentLogType.未识别;
                }
                var client = new CollectorInterfaceClient();
                Task.Run <bool>(() =>
                {
                    return(client.SetConfused(new CollectorEntity()
                    {
                        Content = intent.RawInput,
                        Type = (int)collectType,
                        IP = cinfo.IP,
                        UserID = cinfo.UserName
                    }));
                });
                List <string> filterDomain = new List <string>();
                QueryConfig   qconfig      = new QueryConfig().GetQueryConfig();
                if (qconfig != null && qconfig.DomainMap.ContainsKey("default"))
                {
                    filterDomain = qconfig.DomainMap["default"].FAQ;
                }

                var tasks = new List <Task>();
                cinfo.Type = ContentLogType.知识库超时;
                tNavi      = TimedTask.CallWithTimeoutAsync(timeout, () => new KB().Get(intent), q, cinfo);

                cinfo.Type = ContentLogType.问答集超时;
                tFaqList   = GetFAQTask(q, timeout, filterDomain);

                cinfo.Type = ContentLogType.用户问答集超时;
                tFaq_net   = TimedTask.CallWithTimeoutAsync(timeout, () => new Faq_net().Get(q), q, cinfo);
                tasks.Add(tNavi);

                tasks.AddRange(tFaqList);

                tasks.Add(tFaq_net);
                await Task.WhenAll(tasks.ToArray());

                navContent = tNavi == null ? null : tNavi.Result;

                faq = GetFAQAll(tFaqList);

                //如果faq和faqnet有内容就不返回知识库内容
                faq_net = tFaq_net == null ? null : tFaq_net.Result;
                if ((faq != null && faq.Total > 0) || (faq_net != null && faq_net.Total > 0))
                {
                    navContent = null;
                }

                cinfo.Type = ContentLogType.问题排序超时;
                QueryDataContainer SortData = DataSort.SortKB(faq, faq_net, navContent, cinfo);
                twTotal.Write("GetAnswer");
                if (SortData.MetaList.Count == 0)
                {
                    return(new { result = false, msg = "未找到查询结果!" });
                }
                return(new { result = true, SortData.MetaList });
            }
            catch (System.Exception ex)
            {
                CBase.Log.Logger.Error(ex);
                return(new { result = false, msg = ex.ToString() });
            }
        }