C# 查找最接近的字符串匹配项

C# 查找最接近的字符串匹配项,c#,string,find,C#,String,Find,C#WinApp:假设我搜索dtg,但我搜索的项目是dvg、dz、dxg。。。所以我想让它为我找到dvg,因为它更接近我正在搜索的dtg。 我知道有一些NP难的算法,但我真的不想在这上面花费太多时间。是否有任何字符串方法可以执行类似的操作?或者只需要一些额外的代码就可以了?您想使用Soundex。如果我能找到一些代码的链接,我会给你一些。我用Soundexes做了一个拼写检查,这正是你想要的 与此同时,谷歌搜索应该有助于: 这里有一个很好的C#实现:您需要一个度量来描述两个字符串之间的差异。一

C#WinApp:假设我搜索dtg,但我搜索的项目是dvg、dz、dxg。。。所以我想让它为我找到dvg,因为它更接近我正在搜索的dtg。
我知道有一些NP难的算法,但我真的不想在这上面花费太多时间。是否有任何字符串方法可以执行类似的操作?或者只需要一些额外的代码就可以了?

您想使用Soundex。如果我能找到一些代码的链接,我会给你一些。我用Soundexes做了一个拼写检查,这正是你想要的

与此同时,谷歌搜索应该有助于:


这里有一个很好的C#实现:

您需要一个度量来描述两个字符串之间的差异。一种常见的方法是使用,它可以使用几行C代码快速实现(代码文件可以在线获得)。

公共静态字符串ClosestWord(字符串字,字符串[]术语)
{
字符串项=word.ToLower();
List=terms.ToList();
if(列表包含(术语))
返回list.Find(t=>t.ToLower()==term);
其他的
{
int[]计数器=新的int[terms.Length];
for(int i=0;it==min);
退货条款[索引];
}
}

您对字符串之间的相似性/接近性的确切定义是什么?或者有什么好的东西可以给你一些度量吗?所以对于我上面的例子,字符串列表和我正在寻找的字符串都以“d”开头。。。但我的搜索字符串的下一个字符是“t”。。。在那个列表中,“t”比“z”或“x”更接近“v”,所以我选择“dvg”作为搜索“dtg”的结果谢谢,我会调查它,如果你找到了请告诉我。我找到了它的MSDN博客实现。但整个算法不是我需要的。。。好的,我在搜索“B”,列表中有“AK”和“BOB”,猜猜怎么着?算法正在选择“AK”。。。该死!至少是“鲍勃”,因为他们都是从它开始的。。。。我的意思是实现是正确的,但算法本身不是我要寻找的
public static string ClosestWord(string word, string[] terms)
{
    string term = word.ToLower();
    List<string> list = terms.ToList();
    if (list.Contains(term))
        return list.Find(t => t.ToLower() == term);
    else
    {
        int[] counter = new int[terms.Length];
        for (int i = 0; i < terms.Length; i++)
        {
            for (int x = 0; x < Math.Min(term.Length, terms[i].Length); x++)
            {
                int difference = Math.Abs(term[x] - terms[i][x]);
                counter[i] += difference;
            }
        }

        int min = counter.Min();
        int index = counter.ToList().FindIndex(t => t == min);
        return terms[index];
    }
}