//计算相似度 public static double LevenshteinDistanceSimilarty(string str1, string str2) { if (string.IsNullOrEmpty(str1) || string.IsNullOrEmpty(str2)) return 0; int str1Length = str1.Length; int str2Length = str2.Length; int[,] index = new int[str1Length, str2Length]; if (str1Length == 0 || str2Length == 0) return 0; for (int i = 0; i < str1Length; i++) { for (int j = 0; j < str2Length; j++) { int k = str1[i] == str2[j] ? 0 : 1; if (i == 0 && j == 0) continue; else if (i == 0) { index[i, j] = k + index[i, j - 1]; continue; } else if (j == 0) { index[i, j] = k + index[i - 1, j]; continue; } int temp = Min(index[i, j - 1], index[i - 1, j], index[i - 1, j - 1]); index[i, j] = temp + k; } } double distance = index[str1Length - 1, str2Length - 1]; double maxLength = str1Length > str2Length ? str1Length : str2Length; double similarty = 1 - (double)distance / maxLength; return similarty; } //交换比 private static int Min(int a, int b, int c) { int temp = a < b ? a : b; temp = temp < c ? temp : c; return temp; }