Пример #1
0
        public async Task history(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            var    message = await activity;
            string answer  = await QnaMaker.Qna(message.Text);

            await context.PostAsync(answer);

            context.Wait(MessageReceived);
        }
Пример #2
0
        public async Task SchoolInformation(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            count1 = 0;
            count2 = 0;
            count3 = 3;
            var message = await activity;
            EntityRecommendation schoolrelated; //学校相关
            EntityRecommendation objectname;    //概括对象名

            var query = "西安交通大学";

            if (result.TryFindEntity(Objectname, out objectname))
            {
                query += $"{objectname.Entity}";
            }
            if (message.Text.IndexOf("网站") != -1)
            {
                query += "网站是什么?";
            }
            if (message.Text.IndexOf("校训") != -1)
            {
                query += "校训是什么?";
            }

            if (result.TryFindEntity(Schoolrelated, out schoolrelated))
            {
                message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
            }
            else
            {
                message.Text = "西安交通大学" + message.Text;
            }
            string answer = await QnaMaker.Qna(message.Text);     //Qna问题查询

            if (answer != "No good match found in the KB")
            {
                await context.PostAsync(answer);
            }
            else
            {
                answer = await QnaMaker.Qna(query);

                if (answer != "No good match found in the KB")
                {
                    await context.PostAsync(answer);
                }
                else
                {
                    await context.PostAsync("通过学校官网我查询不到相关信息。");
                }
            }
        }
Пример #3
0
        public async Task None(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            count1 = 0;
            count2 = 0;
            count3 = 3;
            var    message = await activity;
            string answer  = await QnaMaker.Qna(message.Text);

            if (answer != "No good match found in the KB")
            {
                await context.PostAsync(answer);
            }
            else
            {
                await context.PostAsync("你在故意刁难本Orange机器人,请换一个问题!");
            }
            context.Wait(MessageReceived);
        }
Пример #4
0
        public async Task TimeQuery(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            count1 = 0;
            count2 = 0;
            count3 = 3;
            EntityRecommendation verb;          //学校相关
            EntityRecommendation schoolrelated; //学校相关
            var message = await activity;

            if (result.TryFindEntity(Schoolrelated, out schoolrelated))
            {
                message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
            }
            else
            {
                message.Text = "西安交通大学" + message.Text;
            }
            string answer = await QnaMaker.Qna(message.Text);     //Qna问题查询

            var query = "西安交通大学";

            if (result.TryFindEntity(Verb, out verb))
            {
                query += $"{verb.Entity}时间?";
            }

            if (answer != "No good match found in the KB")
            {
                await context.PostAsync(answer);
            }
            else
            {
                answer = await QnaMaker.Qna(query);

                if (answer != "No good match found in the KB")
                {
                    await context.PostAsync(answer);
                }
                else
                {
                    await context.PostAsync("通过学校官网我查询不到相关信息。");
                }
            }
        }
Пример #5
0
        public async override Task OnReceiveActivity(IBotContext context)
        {
            // IMAGE
            var image = context.Get <ImageRecognizeResult>(ImageMiddleware.ImageRecognizerResultKey);

            if (image != null)
            {
                await context.SendActivity("Thaks for sending me a photo!\nLet's see...");

                var keyword = image.PrimaryKeyword();
                var finder  = new Finder();
                var result  = await finder.SearchWithKeywordAsync(keyword);

                if (result != null)
                {
                    SearcherFeedbackState = true;
                    var activity = createReply(context, result);
                    await context.SendActivity(activity);

                    await context.SendActivity("Did you find what you ware looking for?");

                    return;
                }
            }

            if ((context.Request.Type == ActivityTypes.Message) && (context.Request.AsMessageActivity().Text.Length > 0))
            {
                var message  = context.Request.AsMessageActivity();
                var qnamaker = new QnaMaker();
                // If there is an active topic, let it handle this turn until it completes.
                if (HasActiveTopic)
                {
                    await ActiveTopic.OnReceiveActivity(context);

                    return;
                }
                if (!SearcherFeedbackState)
                {
                    await context.SendActivity("Got it!");
                }

                // CHIT
                var chitchater = new ChitChater();
                var answer     = await chitchater.SearchChitChat(message.Text);

                if (answer != null)
                {
                    await context.SendActivity(answer);

                    return;
                }

                // Feedback
                if (SearcherFeedbackState)
                {
                    SearcherFeedbackState = false;
                    var feedbacker = new Feedbacker();
                    var feedback   = await feedbacker.SearchAsync(message.Text);

                    if (feedback == Feedbacker.INTENT.FEEDBACK_NEGATIVE)
                    {
                        await context.SendActivity("Sorry, but could you try agein using another term?");

                        return;
                    }
                    else if (feedback == Feedbacker.INTENT.FEEDBACK_POSITIVE)
                    {
                        await context.SendActivity("No problem!");

                        return;
                    }
                    // Not reterun and continue next line when you get NOEN intent.
                }

                // SelectQuestion
                if (SelectQuestionState)
                {
                    if (int.TryParse(message.Text, out i) && (i < 4))
                    {
                        var selectquestion = questionlist[i];
                        var selectanswer   = await qnamaker.SearchQnaMaker(selectquestion);

                        await context.SendActivity(selectanswer.First().Answer);

                        SelectQuestionState   = false;
                        SearcherFeedbackState = true;
                        return;
                    }
                    else if (turn < maxturn)
                    {
                        await context.SendActivity("Sorry,but please input number(1 - 4)");

                        turn += 1;
                        return;
                    }
                    else
                    {
                        SelectQuestionState = false;
                        await context.SendActivity("too many attempts");

                        await context.SendActivity("OK! You may change your mind.");

                        return;
                    }
                }


                // QnA
                qnamaker = new QnaMaker();
                var queryresults = await qnamaker.SearchQnaMaker(message.Text);

                if (queryresults != null)
                {
                    if (queryresults.First().Questions.Count() == 1)
                    {
                        SearcherFeedbackState = true;
                        await context.SendActivity(queryresults.First().Answer);

                        return;
                    }
                    else
                    {
                        SelectQuestionState   = true;
                        SearcherFeedbackState = true;
                        var messages = "Did you mean? Please input number(1 - 4)";
                        foreach (var q in queryresults.First().Questions.Select((value, index) => new { value, index }))
                        {
                            if (q.index > 2)
                            {
                                messages += "\n\n" + "\n\n" + (q.index + 1) + ".None of adove";
                                questionlist.Add(queryresults.First().Questions[q.index]);
                                break;
                            }
                            messages += "\n\n" + "\n\n" + (q.index + 1) + "." + queryresults.First().Questions[q.index].ToString();
                            questionlist.Add(queryresults.First().Questions[q.index]);
                        }
                        await context.SendActivity(messages);

                        return;
                    }
                }

                // Search
                var finder = new Finder();
                var result = await finder.SearchAsync(message.Text);

                if (result != null)
                {
                    SearcherFeedbackState = true;
                    var activity = createReply(context, result);
                    await context.SendActivity(activity);

                    await context.SendActivity("Did you find what you ware looking for?");

                    return;
                }
                await context.SendActivity("Sorry, but I didn't understand that. Could you try saying that another way?");
            }
        }
Пример #6
0
        public async Task Search(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            var message = await activity;

            if (message.Text.IndexOf("上一任") != -1 || message.Text.IndexOf("前任") != -1 || message.Text.IndexOf("前一任") != -1 ||
                message.Text.IndexOf("上届") != -1 || message.Text.IndexOf("上一届") != -1 || message.Text.IndexOf("前届") != -1)
            {
                count1 += 1;
            }
            else if (message.Text.IndexOf("上两任") != -1 || message.Text.IndexOf("前两任") != -1)
            {
                count1 += 2;
            }
            else if (message.Text.IndexOf("下一任") != -1 || message.Text.IndexOf("后一任") != -1 || message.Text.IndexOf("后一任") != -1 ||
                     message.Text.IndexOf("下届") != -1 || message.Text.IndexOf("下一届") != -1 || message.Text.IndexOf("后届") != -1)
            {
                count1 -= 1;
            }
            else if (message.Text.IndexOf("下两任") != -1 || message.Text.IndexOf("后两任") != -1)
            {
                count1 -= 2;
            }
            else
            {
                count1 = 0;
            }

            if (message.Text.IndexOf("上一任") != -1 || message.Text.IndexOf("前任") != -1 || message.Text.IndexOf("前一任") != -1 ||
                message.Text.IndexOf("上届") != -1 || message.Text.IndexOf("上一届") != -1 || message.Text.IndexOf("前届") != -1)
            {
                count2 += 1;
            }
            else if (message.Text.IndexOf("上两任") != -1 || message.Text.IndexOf("前两任") != -1)
            {
                count2 += 2;
            }
            else if (message.Text.IndexOf("下一任") != -1 || message.Text.IndexOf("后一任") != -1 || message.Text.IndexOf("后一任") != -1 ||
                     message.Text.IndexOf("下届") != -1 || message.Text.IndexOf("下一届") != -1 || message.Text.IndexOf("后届") != -1)
            {
                count2 -= 1;
            }
            else if (message.Text.IndexOf("下两任") != -1 || message.Text.IndexOf("后两任") != -1)
            {
                count2 -= 2;
            }
            else
            {
                count2 = 0;
            }
            count3 = 0;
            EntityRecommendation position;      //职位
            EntityRecommendation college;       //学院
            EntityRecommendation logicalorder;  //次序逻辑
            EntityRecommendation schoolrelated; //学校相关

            var query = "西安交通大学";

            if (result.TryFindEntity(Logicalorder, out logicalorder))
            {
                query += $"{logicalorder.Entity}";
            }
            if (result.TryFindEntity(College, out college))
            {
                query  += $"{college.Entity}";
                record2 = $"{college.Entity}";
            }
            if (result.TryFindEntity(Position, out position))
            {
                query  += $"{position.Entity}";
                record1 = $"{position.Entity}";
            }
            if (message.Text.IndexOf(Phone) != -1)
            {
                query += "电话";
            }
            if (message.Text.IndexOf(Email) != -1)
            {
                query += "电子邮箱";
            }
            query += "是?";

            if (result.TryFindEntity(Schoolrelated, out schoolrelated))
            {
                message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
            }
            else
            {
                message.Text = "西安交通大学" + message.Text;
            }
            if (message.Text.IndexOf("电子邮箱") != -1)
            {
                message.Text = message.Text.Replace("电子邮箱", "电子邮箱");
            }
            else if (message.Text.IndexOf(Email) != -1)
            {
                message.Text = message.Text.Replace(Email, "电子邮箱");
            }
            else if (message.Text.IndexOf("email") != -1)
            {
                message.Text = message.Text.Replace("email", "电子邮箱");
            }
            else if (message.Text.IndexOf("Email") != -1)
            {
                message.Text = message.Text.Replace("Email", "电子邮箱");
            }
            else if (message.Text.IndexOf("联系方式") != -1)
            {
                message.Text = message.Text.Replace("联系方式", "电子邮箱");
            }
            string answer = await QnaMaker.Qna(message.Text);

            if (answer != "No good match found in the KB")
            {
                await context.PostAsync(answer);
            }
            else
            {
                answer = await QnaMaker.Qna(query);

                if (answer != "No good match found in the KB")
                {
                    await context.PostAsync(answer);
                }
                else
                {
                    await context.PostAsync("通过学校官网我查询不到相关信息。");
                }
            }
            context.Wait(MessageReceived);
        }
Пример #7
0
        public async Task QuantityQuery(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            count1 = 0;
            count2 = 0;
            count3 = 1;
            EntityRecommendation title;         //职位
            EntityRecommendation college;
            EntityRecommendation schoolrelated; //学校相关
            var message = await activity;

            if (message.Text.IndexOf("占") != -1)
            {
                if (message.Text.IndexOf("本科生") != -1)
                {
                    await context.PostAsync("17099/33604=50.9%");
                }
                if (message.Text.IndexOf("研究生") != -1)
                {
                    await context.PostAsync("16505/33604=49.1%");
                }
            }
            else
            {
                if (result.TryFindEntity(Schoolrelated, out schoolrelated))
                {
                    message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
                }
                else
                {
                    message.Text = "西安交通大学" + message.Text;
                }
                string answer = await QnaMaker.Qna(message.Text);     //Qna问题查询

                if (result.TryFindEntity(College, out college))
                {
                    record2 = $"{college.Entity}";
                }
                var query = "西安交通大学有多少";

                if (result.TryFindEntity(Title, out title))
                {
                    query  += $"{title.Entity}?";
                    record3 = $"{title.Entity}";
                }

                if (answer != "No good match found in the KB")
                {
                    await context.PostAsync(answer);
                }
                else
                {
                    answer = await QnaMaker.Qna(query);

                    if (answer != "No good match found in the KB")
                    {
                        await context.PostAsync(answer);
                    }
                    else
                    {
                        await context.PostAsync("通过学校官网我查询不到相关信息。");
                    }
                }
            }
        }
Пример #8
0
        public async Task LogicalIdentification(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            EntityRecommendation logicalorder;
            EntityRecommendation schoolrelated;
            EntityRecommendation college;
            EntityRecommendation title;
            var message = await activity;

            if (record1 == "校长")
            {
                if (message.Text.IndexOf("上一任") != -1 || message.Text.IndexOf("前任") != -1 || message.Text.IndexOf("前一任") != -1 ||
                    message.Text.IndexOf("上届") != -1 || message.Text.IndexOf("上一届") != -1 || message.Text.IndexOf("前届") != -1)
                {
                    count1 += 1;
                }
                if (message.Text.IndexOf("上两任") != -1 || message.Text.IndexOf("前两任") != -1)
                {
                    count1 += 2;
                }
                if (message.Text.IndexOf("下一任") != -1 || message.Text.IndexOf("后一任") != -1 || message.Text.IndexOf("后一任") != -1 ||
                    message.Text.IndexOf("下届") != -1 || message.Text.IndexOf("下一届") != -1 || message.Text.IndexOf("后届") != -1)
                {
                    count1 -= 1;
                }
                if (message.Text.IndexOf("下两任") != -1 || message.Text.IndexOf("后两任") != -1)
                {
                    count1 -= 2;
                }
                if (count1 < 0 || message.Text.IndexOf("电话") != -1 || message.Text.IndexOf("邮箱") != -1 || message.Text.IndexOf("办公室") != -1)
                {
                    await context.PostAsync("查不到");
                }
                else
                {
                    await context.PostAsync($"第{15 - count1}任校长是{Principal[count1]}(我校一共有15任校长)");
                }
            }
            else if (record1 == "党委书记")
            {
                if (message.Text.IndexOf("上一任") != -1 || message.Text.IndexOf("前任") != -1 || message.Text.IndexOf("前一任") != -1 ||
                    message.Text.IndexOf("上届") != -1 || message.Text.IndexOf("上一届") != -1 || message.Text.IndexOf("前届") != -1)
                {
                    count2 += 1;
                }
                if (message.Text.IndexOf("上两任") != -1 || message.Text.IndexOf("前两任") != -1)
                {
                    count2 += 2;
                }
                if (message.Text.IndexOf("下一任") != -1 || message.Text.IndexOf("后一任") != -1 || message.Text.IndexOf("后一任") != -1 ||
                    message.Text.IndexOf("下届") != -1 || message.Text.IndexOf("下一届") != -1 || message.Text.IndexOf("后届") != -1)
                {
                    count2 -= 1;
                }
                if (message.Text.IndexOf("下两任") != -1 || message.Text.IndexOf("后两任") != -1)
                {
                    count2 -= 2;
                }
                if (count2 < 0 || message.Text.IndexOf("电话") != -1 || message.Text.IndexOf("邮箱") != -1 || message.Text.IndexOf("办公室") != -1)
                {
                    await context.PostAsync("查不到");
                }
                else
                {
                    await context.PostAsync($"第{9 - count2}任党委书记是{Partysecretary[count2]}(我校一共有9任党委书记)");
                }
            }
            else
            {
                if (count3 == 0)
                {
                    var query = "西安交通大学";
                    if (result.TryFindEntity(Logicalorder, out logicalorder))
                    {
                        query += $"{logicalorder.Entity}";
                    }
                    query += record2;   //加上了学院
                    query += record1;   //加上了职位
                    if (message.Text.IndexOf(Phone) != -1)
                    {
                        query += "电话";
                    }
                    if (message.Text.IndexOf("电子邮箱") != -1)
                    {
                        query += "电子邮箱";
                    }
                    else if (message.Text.IndexOf(Email) != -1)
                    {
                        query += "电子邮箱";
                    }
                    else if (message.Text.IndexOf("email") != -1)
                    {
                        query += "电子邮箱";
                    }
                    else if (message.Text.IndexOf("Email") != -1)
                    {
                        query += "电子邮箱";
                    }
                    else if (message.Text.IndexOf("联系方式") != -1)
                    {
                        query += "电子邮箱";
                    }
                    query += "是?";
                    var answer = await QnaMaker.Qna(query);

                    if (answer != "No good match found in the KB")
                    {
                        await context.PostAsync(answer);
                    }
                    else
                    {
                        await context.PostAsync("通过学校官网我查询不到相关信息。");
                    }
                }
                else if (count3 == 1)
                {
                    if (result.TryFindEntity(College, out college))
                    {
                        message.Text.Replace(record2, college.Entity);
                        var answer = await QnaMaker.Qna(message.Text);

                        if (answer != "No good match found in the KB")
                        {
                            await context.PostAsync(answer);
                        }
                        else
                        {
                            await context.PostAsync("通过学校官网我查询不到相关信息。");
                        }
                    }
                    else if (result.TryFindEntity(Title, out title))
                    {
                        message.Text.Replace(record3, title.Entity);
                        var answer = await QnaMaker.Qna(message.Text);

                        if (answer != "No good match found in the KB")
                        {
                            await context.PostAsync(answer);
                        }
                        else
                        {
                            await context.PostAsync("通过学校官网我查询不到相关信息。");
                        }
                    }
                    else
                    {
                        if (result.TryFindEntity(Schoolrelated, out schoolrelated))
                        {
                            message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
                        }
                        else
                        {
                            message.Text = "西安交通大学" + message.Text;
                        }
                        var answer = await QnaMaker.Qna(message.Text);

                        if (answer != "No good match found in the KB")
                        {
                            await context.PostAsync(answer);
                        }
                        else
                        {
                            await context.PostAsync("通过学校官网我查询不到相关信息。");
                        }
                    }
                }
                else
                {
                    if (result.TryFindEntity(Schoolrelated, out schoolrelated))
                    {
                        message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
                    }
                    else
                    {
                        message.Text = "西安交通大学" + message.Text;
                    }
                    var answer = await QnaMaker.Qna(message.Text);

                    if (answer != "No good match found in the KB")
                    {
                        await context.PostAsync(answer);
                    }
                    else
                    {
                        await context.PostAsync("通过学校官网我查询不到相关信息。");
                    }
                }
            }
        }
Пример #9
0
        public async Task Generalquestion(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result)
        {
            count1 = 0;
            count2 = 0;
            count3 = 3;
            EntityRecommendation generaljudgment;
            EntityRecommendation position;
            EntityRecommendation name;
            EntityRecommendation schoolrelated; //学校相关
            EntityRecommendation college;
            EntityRecommendation logicalorder;
            var message = await activity;

            if (result.TryFindEntity(Position, out position) && result.TryFindEntity(Name, out name))
            {
                var query = "西安交通大学";
                if (result.TryFindEntity(Logicalorder, out logicalorder))
                {
                    query += $"{logicalorder.Entity}";
                }
                if (result.TryFindEntity(College, out college))
                {
                    query += $"{college.Entity}";
                }
                query += $"{position.Entity}是谁?";
                string answer = await QnaMaker.Qna(query);

                if (answer == name.Entity)
                {
                    await context.PostAsync("是");
                }
                else
                {
                    await context.PostAsync("不是");
                }
            }
            else if (result.TryFindEntity(Position, out position))
            {
                var query = "西安交通大学";
                if (result.TryFindEntity(Logicalorder, out logicalorder))
                {
                    query += $"{logicalorder.Entity}";
                }
                if (result.TryFindEntity(College, out college))
                {
                    query += $"{college.Entity}";
                }
                query += $"{position.Entity}是谁?";
                string answer = await QnaMaker.Qna(query);

                if (message.Text.IndexOf(answer) != -1)
                {
                    await context.PostAsync("是");
                }
                else
                {
                    await context.PostAsync("不是");
                }
            }
            else
            {
                if (result.TryFindEntity(Schoolrelated, out schoolrelated))
                {
                    message.Text = message.Text.Replace(schoolrelated.Entity, "西安交通大学");
                }
                else
                {
                    message.Text = "西安交通大学" + message.Text;
                }
                string answer = await QnaMaker.Qna(message.Text);

                if (answer != "No good match found in the KB")
                {
                    await context.PostAsync(answer);
                }
                else
                {
                    await context.PostAsync("通过学校官网我查询不到相关信息。");
                }
            }
            context.Wait(MessageReceived);
        }