Esempio n. 1
0
        /// <summary>
        /// 根据出现次数计算一个权值
        /// </summary>
        /// <param name="pmiRank">pmi权值的数组,用于参考</param>
        /// <param name="problemData">问题的数据,用于重复利用节省时间</param>
        /// <returns>权重数组</returns>
        public static double[] CalculateCountRank(string problem, string[] answer, double[] pmiRank, string problemData = "")
        {
            if (problemData == "")
            {
                SearchEngine.StatisticsKeyword(problem, out problemData);
            }

            double pmiSum = 0;//pmi权值和

            foreach (double val in pmiRank)
            {
                pmiSum += val;
            }

            int[] answerCnt = new int[answer.Length]; //每个答案出现次数
            int   sum       = 0;                      //总次数

            for (int i = 0; i < answer.Length; i++)
            {
                if (Regex.IsMatch(answer[i], "^[0-9]*$")) //若为数字则不启用此权重算法
                {
                    for (int i2 = 0; i2 < answer.Length; i2++)
                    {
                        answerCnt[i2] = 1;
                    }
                    sum = answer.Length;
                    break;
                }

                int p   = problemData.IndexOf(answer[i]);
                int cnt = 0;
                while (p != -1)
                {
                    sum++;
                    cnt++;
                    p = problemData.IndexOf(answer[i], p + answer[i].Length);
                }
                if (cnt == 0)
                {
                    cnt++;
                    sum++;
                }
                answerCnt[i] = cnt;
            }

            double[] countRank = new double[answer.Length];
            for (int i = 0; i < answer.Length; i++)
            {
                countRank[i] = pmiSum * ((double)answerCnt[i] / sum);
                System.Diagnostics.Debug.Write("debug:" + answer[i] + ":" + answerCnt[i].ToString() + "  ");
            }
            System.Diagnostics.Debug.WriteLine("");
            return(countRank);
        }
Esempio n. 2
0
        private static void WorkThread(object arg)
        {
            WorkArgs args = (WorkArgs)arg;

            if (args.Type == TaskType.GetProblemData)
            {
                problemCnt = SearchEngine.StatisticsKeyword(args.Text, out problemData);
            }
            else
            {
                int[] arr = (args.Type == TaskType.AnswerCnt) ? answerCnt : problemAndAnswerCnt;
                arr[args.Index] = SearchEngine.StatisticsKeyword(args.Text);
            }
        }
Esempio n. 3
0
        private static void WorkThread(object arg)//获取数据的工作线程
        {
            WorkArgs args = (WorkArgs)arg;

            if (args.Type == TaskType.GetProblemData)//获取题目在文本库中出现概率
            {
                problemCnt = SearchEngine.StatisticsKeyword(args.Text, out problemData);
                BrowserForm.browserForm.HighlightAndShowPage(problemData, answers);//显示高亮搜索页面
            }
            else//获取选项在文本库中出现概率
            {
                int[] arr = (args.Type == TaskType.AnswerCnt) ? answerCnt : problemAndAnswerCnt;
                arr[args.Index] = SearchEngine.StatisticsKeyword(args.Text);
            }
        }
Esempio n. 4
0
        private static void WorkThread(object arg)//获取数据的工作线程
        {
            WorkArgs args = (WorkArgs)arg;

            if (args.Type == TaskType.GetProblemData)//获取题目在文本库中出现概率
            {
                problemCnt = SearchEngine.StatisticsKeyword(args.Text, out problemData);
            }
            else//获取选项在文本库中出现概率
            {
                int[] arr = (args.Type == TaskType.AnswerCnt) ? answerCnt : problemAndAnswerCnt;
                arr[args.Index] = SearchEngine.StatisticsKeyword(args.Text);
            }
            Debug.WriteLine(args.Index);
        }
Esempio n. 5
0
 public void JumpAndHighlighting(string problem, string[] answer)
 {
     SearchEngine.StatisticsKeyword(problem, out string data);
     ;           webBrowser_Main.DocumentText = Highlighting(data, answer);
 }