在 C# 中计算两个字符串之间的相似度
|
admin
2023年3月22日 17:15
本文热度 1207
|
本文说明了在 C# 中计算两个字符串之间相似度的不同技术。
我们可以使用 编辑距离算法 确定 C# 中两个字符串之间的相似性。编辑距离算法通过找到将一个字符串转换为另一个字符串所需的最少移动次数(添加、删除、插入)来告诉我们两个字符串之间的差异程度。我们甚至可以使用 Jaro-Winkler 距离算法来代替编辑距离。
以下代码提供了编辑距离算法的 C# 实现,并使用它来查找两个给定字符串之间的相似性:
using System;
public class Example
{
public static int getEditDistance(string X, string Y)
{
int m = X.Length;
int n = Y.Length;
int[][] T = new int[m + 1][];
for (int i = 0; i < m + 1; ++i) {
T[i] = new int[n + 1];
}
for (int i = 1; i <= m; i++) {
T[i][0] = i;
}
for (int j = 1; j <= n; j++) {
T[0][j] = j;
}
int cost;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cost = X[i - 1] == Y[j - 1] ? 0: 1;
T[i][j] = Math.Min(Math.Min(T[i - 1][j] + 1, T[i][j - 1] + 1),
T[i - 1][j - 1] + cost);
}
}
return T[m][n];
}
public static double findSimilarity(string x, string y) {
if (x == null || y == null) {
throw new ArgumentException("Strings must not be null");
}
double maxLength = Math.Max(x.Length, y.Length);
if (maxLength > 0) {
return (maxLength - getEditDistance(x, y)) / maxLength;
}
return 1.0;
}
public static void Main()
{
string s1 = "Techie Delight";
string s2 = "Tech Delight";
double similarity = findSimilarity(s1, s2);
Console.WriteLine(similarity);
}
}
上面的代码计算两个字符串在封闭范围内的相似度 [0, 1]
,我们可以很容易地修改返回值 findSimilarity()
例程以百分比计算相似度(返回值 x 100)。
这就是计算 C# 中两个字符串之间的相似度。
该文章在 2025/2/24 14:41:34 编辑过