0

我有一个 SQL CLR 表值函数,它接受两个字符串参数,用于比较公司名称并返回匹配分数结果。

这是我用来确定两个字符串匹配的可能性的 c# 函数:

这很好用,但是由于代码的简单性,与HN FELT 09 AS给出HN FELT 01 AS正确的高百分比相比,但如果字符串之间的差异是一个或多个数字,我想将结果减少 50%。如何使用以下功能实现这一点?

public static decimal CompareText(string String1, string String2)
{
    // some more string cleaning
    String1 = String1.Replace(",", " ").Replace(".", " ").Replace("/", " ").Trim();
    String1 = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(String1));
    String1 = String1.Replace("  ", " |").Replace("| ", "").Replace("|", "");
    String1 = WordFunctions.RemoveDuplicateWords(String1);

    String2 = String2.Replace(",", " ").Replace(".", " ").Replace("/", " ").Trim();
    String2 = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(String2));
    String2 = String2.Replace("  ", " |").Replace("| ", "").Replace("|", "");
    String2 = WordFunctions.RemoveDuplicateWords(String2);

    string[] String1SeparateWords = String1.Split(' ');
    string[] String2SeparateWords = String2.Split(' ');

    int String1WordCount = 0;
    int String2WordCount = 0;
    decimal theResult = 0;

    String1WordCount = String1SeparateWords.Length;
    String2WordCount = String2SeparateWords.Length;

    int SameWordCount = 0;

    foreach (string String1Word in String1SeparateWords)
    {
        if (String2SeparateWords.Contains(String1Word)) { SameWordCount++; }
    }

    if (String1WordCount > String2WordCount) { theResult = (decimal)SameWordCount / String1WordCount; }
    else if (String2WordCount > String1WordCount) { theResult = (decimal)SameWordCount / String2WordCount; }
    else if (String1WordCount == String2WordCount) { theResult = (decimal)SameWordCount / String1WordCount; }
    else { theResult = 0; }

    return (theResult * 100);
}

这是比较单词的部分(简单但有效):

int SameWordCount = 0;

    foreach (string String1Word in String1SeparateWords)
    {
        if (String2SeparateWords.Contains(String1Word)) { SameWordCount++; }
    }

我无法弄清楚如何检查数字不匹配

4

0 回答 0