Esempio n. 1
0
        public IActionResult SearchProblems([FromForm] ProblemSearch search)
        {
            var li   = _Repository.GetAllProblems();
            var tags = search.Tags.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries);

            if (!string.IsNullOrEmpty(search.ProblemDescription))
            {
                // 先筛有题目描述的题
                li = li.Where(p => !string.IsNullOrEmpty(p.ProblemDescription));
                li = li.OrderByDescending(p =>
                {
                    var tagW = SimilarityTool.TagSim(p.Tags, tags);
                    var desW = SimilarityTool.LDistanceSim(search.ProblemDescription, p.ProblemDescription);
                    return(SimilarityTool.CalculateWeight(tagW, desW));
                });
            }
            else
            {
                // 没有题目描述
                li = li.OrderByDescending(p => SimilarityTool.TagSim(p.Tags, tags));
            }

            _Logger.LogInformation("Successfully search!");
            return(Ok(li));
        }
Esempio n. 2
0
        public DataTable StringComparisonResult(DataTable ColumnList1, DataTable ColumnList2, string Type, string Cloumn1 = "", string Cloumn2 = "", int index = 0)
        {
            try
            {
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add(Cloumn1);
                dataTable.Columns.Add(Cloumn2);
                if (index == 0)
                {
                    dataTable.Columns.Add(Cloumn1 + "%" + Cloumn2);
                }
                else
                {
                    dataTable.Columns.Add("Similarity " + index);
                }


                for (int listi = 0; listi < ColumnList1.Rows.Count; listi++)
                {
                    SimilarityTool similarityTool = new SimilarityTool();

                    if (ColumnList1.Rows[listi][0] == null)
                    {
                        ColumnList1.Rows[listi][0] = "";
                    }
                    if (ColumnList2.Rows[listi][0] == null)
                    {
                        ColumnList2.Rows[listi][0] = "";
                    }

                    string kevin = Regex.Replace(ColumnList1.Rows[listi][0].ToString(), @"\s+", "").ToUpper();
                    string kevyn = Regex.Replace(ColumnList2.Rows[listi][0].ToString(), @"\s+", "").ToUpper();

                    if (kevin.Length == 0 || kevyn.Length == 0)
                    {
                        dataTable.Rows.Add(kevin, kevyn.ToString(), "0");
                    }
                    else
                    {
                        var lMatched1 = new bool[kevin.Length];
                        var lMatched2 = new bool[kevyn.Length];

                        var lNumCommon = 0;
                        for (var i = 0; i < kevin.Length; ++i)
                        {
                            var lStart = Math.Max(0, i - kevyn.Length);
                            var lEnd   = kevyn.Length;
                            for (var j = lStart; j < lEnd; ++j)
                            {
                                if (lMatched2[j])
                                {
                                    continue;
                                }
                                if (!Comparer.Equals(kevin[i], kevyn[j]))
                                {
                                    continue;
                                }
                                lMatched1[i] = true;
                                lMatched2[j] = true;
                                ++lNumCommon;
                                break;
                            }
                        }
                        double intersectPercentage = (lNumCommon * 2 * 100) / (kevin.Length + kevyn.Length);
                        double Percentage;
                        //Console.WriteLine(intersectPercentage);
                        if (intersectPercentage >= 60)
                        {
                            Percentage = JWD_With_Damerau_LevenshteinAlgo.JWD_With_Damerau_Levenshtein(kevin, kevyn) * 100;
                            //Percentage = JaroWinklerDistance.Proximity(kevin, kevyn)*100;
                            //Console.WriteLine(sdsd);
                        }
                        else
                        {
                            Percentage = similarityTool.CompareStrings(kevin, kevyn) * 100;
                            //Console.WriteLine(Number);
                        }
                        dataTable.Rows.Add(ColumnList1.Rows[listi][0].ToString(), ColumnList2.Rows[listi][0].ToString(), Math.Round(Percentage, 2));
                    }
                }
                return(dataTable);
            }
            catch (Exception e)
            {
                throw;
            }
        }