如何确定数组中哪个字符串与给定字符串最相似?

时间:2011-01-26 18:19:47

标签: c# algorithm

给定一个字符串,

string name = "Michael";

我希望能够评估数组中哪个字符串最相似:

string[] names = new[] { "John", "Adam", "Paul", "Mike", "John-Michael" };

我想为用户创建一条消息:“我们找不到'Michael',但'John-Michael'很接近。这就是你的意思吗?”我该如何做出这个决定?

2 个答案:

答案 0 :(得分:5)

通常使用编辑距离/ Levenshtein distance进行比较,方法是根据将一个单词转换为另一个单词所需的删除,添加或更改次数,比较哪个单词最接近。

有一篇文章为您提供了C#here的通用实现。

答案 1 :(得分:3)

在这里,您可以使用Levenshtein距离获得示例的结果:

EditDistance["Michael",#]&/@{"John","Adam","Paul","Mike","John-Michael"}
{6,6,5,4,5}  

您可以使用Smith-Waterman相似性检验获得结果

SmithWatermanSimilarity["Michael",#]&/@{"John","Adam","Paul","Mike","John-Michael"}
{0.,0.,0.,2.,7.} 

HTH!