gpt4 book ai didi

c# - 为反向字符串组合实现 Levenshtein 距离?

转载 作者:太空狗 更新时间:2023-10-29 21:42:36 25 4
gpt4 key购买 nike

我的应用程序中有一个员工列表。每个员工都有名字和姓氏,所以我有一个元素列表,例如:

["Jim Carry", "Uma Turman", "Bill Gates", "John Skeet"]

我希望我的客户能够使用模糊搜索算法按姓名搜索员工。例如,如果用户输入“Yuma Turmon”,最接近的元素 - “Uma Turman”将返回。我使用 Levenshtein 距离算法,我找到了 here .

static class LevenshteinDistance
{
/// <summary>
/// Compute the distance between two strings.
/// </summary>
public static int Compute(string s, string t)
{
int n = s.Length;
int m = t.Length;
int[,] d = new int[n + 1, m + 1];

// Step 1
if (n == 0)
{
return m;
}

if (m == 0)
{
return n;
}

// Step 2
for (int i = 0; i <= n; d[i, 0] = i++)
{
}

for (int j = 0; j <= m; d[0, j] = j++)
{
}

// Step 3
for (int i = 1; i <= n; i++)
{
//Step 4
for (int j = 1; j <= m; j++)
{
// Step 5
int cost = (t[j - 1] == s[i - 1]) ? 0 : 1;

// Step 6
d[i, j] = Math.Min(
Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
d[i - 1, j - 1] + cost);
}
}
// Step 7
return d[n, m];
}
}

我在员工姓名列表上迭代用户的输入(全名)并比较距离。例如,如果低于 3,我将返回 found employee。

现在我希望允许用户通过颠倒的名字进行搜索 - 例如,如果用户输入“Turmon Uma”,它将返回“Uma Turman”,因为实际距离为 1,因为名字和姓氏与姓氏相同名字和名字。我的算法现在将它算作不同的字符串,距离很远。我该如何修改它,以便无论顺序如何都能找到名称?

最佳答案

您可以使用 LINQ 创建员工姓名的反转版本。例如,如果您有一个类似

的员工列表
x = ["Jim Carry", "Uma Turman", "Bill Gates", "John Skeet"]

可以编写如下代码:

var reversedNames = x.Select(p=> $"{p.Split(' ')[1] p.Split(' ')[0]}");

它将返回相反的版本,例如:

xReversed = ["Carry Jim", "Turman Uma", "Gates Bill", "Skeet John"]

然后用这些数据重复你的算法。

关于c# - 为反向字符串组合实现 Levenshtein 距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com