public void printScore(String queryLaTeX, String resultLaTeX) { //这个函数用来打印每个指标的分数 AAZhiBiao aazhibiao = new AAZhiBiao(); //首先是包含的话是,是最匹配的,并且树的层次越接近根的话,以最接近根的那个为标准,就越相似,这是第一点 Console.WriteLine("第一个:树的高度层次分数:" + aazhibiao.BTLevelScore(queryLaTeX, resultLaTeX)); //第二个指标:查询表达式在结果表达式中的个数*0.8 + 与查询表达式节点相同的个数*0.2 这个指标 Console.WriteLine("第二个:查询表达式在结果表达式个数以及与查询表达式节点相同的个数:" + aazhibiao.childrenCountScore(queryLaTeX, resultLaTeX)); //第三个指标:查询表达式的子式个数在结果表达式里面占的比重 Console.WriteLine("第三个:公式覆盖度" + aazhibiao.formulaCoverage(queryLaTeX, resultLaTeX)); //第四个指标:树根路径求交集, Console.WriteLine("第四个:树根路径用Jaccard系数求交集:" + aazhibiao.RootPath(queryLaTeX, resultLaTeX)); //第五个指标:运算符所在层次和类型 Console.WriteLine("第五个:运算符所在层次和类型:" + aazhibiao.OperateBTLevelAndType(queryLaTeX, resultLaTeX)); ////第六个指标:tfIdf //Console.WriteLine("第六个:TF-IDF:"+aazhibiao.TFIDF(queryLaTeX,resultLaTeX)); }
//传入查询表达式,和含有检索出来的结果表达式的集合,开始对每一个表达式进行排序 public /*List<AAAData>*/ void FinalScore(String queryLaTeX, List <String> resultLaTeXList, double baoHan /*,double jieGou*/) { List <AAAData> finalList = new List <AAAData>(); AAAData tempdata = new AAAData(); AAZhiBiao aazhibiao = new AAZhiBiao(); //现在开始遍历检索到的每一个结果表达式,我开始计算他们之间的分数 foreach (var resultLaTeX in resultLaTeXList) { //Console.WriteLine("AAFinalScore.cs:"+resultLaTeX); double a, b; double d; //a = ( (1 - aazhibiao.BTLevelScore(queryLaTeX, resultLaTeX) ) * (1 - aazhibiao.BTLevelScore(queryLaTeX, resultLaTeX)) + (1 - aazhibiao.childrenCountScore(queryLaTeX, resultLaTeX)) * (1 - aazhibiao.childrenCountScore(queryLaTeX, resultLaTeX)) + (1 - aazhibiao.formulaCoverage(queryLaTeX,resultLaTeX)) * (1 - aazhibiao.formulaCoverage(queryLaTeX,resultLaTeX))) / 3; //b = ((1 - aazhibiao.RootPath(queryLaTeX, resultLaTeX)) * (1 - aazhibiao.RootPath(queryLaTeX, resultLaTeX)) + (1 - aazhibiao.OperateBTLevelAndType(queryLaTeX, resultLaTeX)) * (1 - aazhibiao.OperateBTLevelAndType(queryLaTeX, resultLaTeX))) / 2; ; a = aazhibiao.formulaCoverage(queryLaTeX, resultLaTeX); /*b = aazhibiao.RootPath(queryLaTeX, resultLaTeX);*/ d = a * baoHan /*+ b*jieGou*/; AAAData data = new AAAData(); data.LaTeX = resultLaTeX; data.Score = d; finalList.Add(data); } //开始对相似度进行排序 /*Console.WriteLine("排序前:"); * for (int i = 0; i < finalList.Count; i++) * { * Console.WriteLine("LaTeX为:" + finalList[i].LaTeX + "分数为:" + finalList[i].Score); * }*/ //开始排序 for (int i = 0; i < finalList.Count - 1; i++) { for (int j = i + 1; j < finalList.Count; j++) { if (finalList[j].Score > finalList[i].Score) { tempdata = finalList[j]; finalList[j] = finalList[i]; finalList[i] = tempdata; } } } //List<AAAData> finalLists = new List<AAAData>(); //for (int k = 0; k < 5; k++) //{ // if (finalList.Count > 5) // { // finalLists.Add(finalList[k]); // } //} //return finalLists; Console.WriteLine("排序后最终结果为:"); for (int i = 0; i < finalList.Count; i++) { if (finalList[i].Score > 0.1) { Console.WriteLine("LaTeX:" + finalList[i].LaTeX + "分数为:" + finalList[i].Score); } } }