C#中是否有任何函数检查两个字符串的相似度百分比?
例如我有:
var string1="Hello how are you doing";
var string2= " hi, how are you";
和
function(string1, string2)
会返回相似度,因为单词" how","","你"存在于该行中。
甚至更好,给我60%的相似度,因为"","","你"是string1的3/5。
C#中是否存在任何功能?
答案 0 :(得分:2)
字符串相似性的常用度量是所谓的Levenshtein distance或编辑距离。在该方法中,定义了一组定义的编辑操作。 Levenshtein距离是从第一个字符串获得第二个字符串所需的最小编辑步骤数。密切相关的是Damerau-Levenshtein distance,它使用一组不同的编辑操作。
在算法上,Levenshtein距离可以使用Dynamic programming来计算,这可以被认为是有效的。但请注意,这种方法实际上并不考虑单个单词,也不能直接表示百分比的相似性。
答案 1 :(得分:2)
现在我要冒一个 -1 来冒险我的建议,但是在你试图得到一些接近但不那么复杂的东西的情况下,那么有很多更简单的解决方案然后是Levenshtein距离,如果你需要exakt结果并有时间编码它是完美的。
如果你对准确性有点宽松,那么我会遵循这个简单的规则:
(strSearch == strReal)
- 如果匹配退出 从字符串[aeiou-"!]
删除元音和其他字符
现在你有两个转换后的字符串。你的搜索字符串:
mths dhlgrn mtbrn
和你要比较的真实字符串
rstrnt mths dhlgrn
比较 已转换的字符串,如果它们匹配退出
\W+
33
66
- 所以66%匹配这种方法简单易用,可以越来越详细,实际上你可以使用步骤1-7,如果步骤7返回50%以上的任何值,那么你认为你有匹配,否则你会使用更复杂的计算。
好的,现在不要 -1 我太快,因为其他答案都很完美,这只是 lazy 开发人员的解决方案并且可能在那里有价值,结果满足期望。
答案 2 :(得分:0)
您可以创建一个函数,将两个字符串拆分为数组,然后迭代其中一个以检查另一个字是否存在。
如果你想要它的百分比,你必须计算单词总数,看看有多少是相似的,并根据它创建一个数字。