/// <summary> /// 搜索问题 /// </summary> /// <param name="kingQuestion">问题</param> /// <returns></returns> public virtual BestOption Search(KingQuestion kingQuestion) { // 从badidu找出原始结论 var quiz = this.ClearNot(kingQuestion.data.quiz, out bool clearNot); var sourceAnswer = this.SearchSourceAnswers(quiz, trys: 1); if (sourceAnswer == null || sourceAnswer.Length == 0) { return(this.Next.Search(kingQuestion)); } // 各个选项和结论的匹配次数 var opts = kingQuestion.data.options; var options = opts.Select((opt, i) => new { Index = i, Option = opt, Score = this.GetMatchScore(sourceAnswer, opt) }).ToArray(); var best = clearNot ? options.OrderBy(item => item.Score).FirstOrDefault() : options.OrderByDescending(item => item.Score).FirstOrDefault(); // 两个相同的结果,表示没有答案 const int digits = 5; if (options.Any(item => item != best && Math.Round(item.Score, digits) == Math.Round(best.Score, digits))) { return(this.Next.Search(kingQuestion)); } return(new BestOption { Index = best.Index, Option = best.Option }); }
public override BestOption Search(KingQuestion kingQuestion) { return(null); }