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