【问题标题】:C# finding percent of matched words between two stringC#查找两个字符串之间匹配单词的百分比
【发布时间】:2015-04-09 16:41:37
【问题描述】:

我有一个字符串,我想将它与字符串列表进行比较以找到最佳匹配。

例如,

string search = "Orange Black Red One Five"

字符串列表可以包含以下内容

l[0] = "Orange Seven Three Black"
l[1] = " Nine Eight Seven Six"
l[2] = " Black Blue Purple Red Five Four Nine Ten"

l[0] contains 2 matches
l[1] contains 0 matches
l[2] contains 3 matches

所以程序会选择 l[2] 作为最佳匹配,匹配率为 60%。
我将如何比较这样的两个字符串?

【问题讨论】:

  • 将您的搜索字符串拆分为一个数组。然后在这里查看Regex.Matches 方法 - msdn.microsoft.com/en-us/library/b9712a7w(v=vs.110).aspx
  • 拆分l[i],对于每个单词,循环search中的每个单词(作为一个数组)并计算匹配,存储最高的索引。

标签: c# .net string list compare


【解决方案1】:
    var s = search.Split(new string[] { " "}, StringSplitOptions.RemoveEmptyEntries);

    var res1 = (from string part in l
        select new
        {
            list = part,
            count = part.Split(new char[] {' '}).Sum(p => s.Contains(p) ? 1 : 0)

        }).OrderByDescending(p=> p.count).First();

    Console.Write(res1.count);

【讨论】:

  • 是否可以比较两个富文本框数据,并可以获得丢失单词和新添加单词和修改单词的计数。请告诉我
【解决方案2】:
  1. 将字符串拆分为数组。
  2. 确定匹配的数量。
  3. 除。
  4. ...
  5. 利润!

代码:

double Compare(string a, string b)
{
    var aWords = a.Split(' ');
    var bWords = b.Split(' ');
    double matches = (double)aWords.Count(x => bWords.Contains(x));
    return matches / (double)aWords.Count();
}

编辑:或者,如果您只想获取匹配计数...

int Matches(string a, string b)
{
    var aWords = a.Split(' ');
    var bWords = b.Split(' ');
    return aWords.Count(x => bWords.Contains(x));
}

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 2019-04-04
    • 2015-04-08
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多