C# 字符串“相似度”比较测试

5
有没有一些库能够在C#中轻松比较两个字符串的“相似度”?我的想法是,如果你有这两个字符串,
"This is a test" // 100%
"THIS IS A TEST" // 95%
"    This is a test" // 98%
"This is" // 60%
"Foobar" // 0%
"this test is a" // 70%

等等。每个字符串都将与基础字符串进行比较,并给出一个分数。


1
定义相似性...更具体地说,一般的方法是http://en.wikipedia.org/wiki/Longest_common_subsequence_problem - Sam Saffron
7
http://en.wikipedia.org/wiki/Levenshtein_distance - Mitch Wheat
那个Levenshtein距离听起来很有趣。我用引号括起来的“相似度”因为我不确定如何定义它!测试每种方法,看哪种在我的情况下具有最佳的命中率,这将是一个问题。 - mike
@mrnye,我不确定寻找“相似性”的目的是什么,但如果是用于“发音类似”的用途,则可以在code project上找到一些实现:http://www.codeproject.com/csharp/soundex.asp - VinayC
@VinayC 它主要用于匹配从不同来源以稍微不同的格式检索到的名称。例如,“Joe Smoe”可能会以“J.SMOE”、“JOE.S”、“J SMOE”的形式出现。当阅读这些字符串时,很明显它们都指的是同一个人。我希望通过编程方式执行相同的测试来匹配条目。 - mike
@mrnye,我认为最好的方法是根据已知的命名模式将字符串分成子部分(名字,姓氏),然后尝试“相似度”测试。顺便说一句,这里有一个商业库:http://www.shuffletext.com/Highlight/ - VinayC
1个回答

4

看一下Levenstein。

Levenshtein距离是两个字符串之间的差异。我在网络爬虫应用程序中使用它来比较网页的新旧版本。如果差异足够大,我就会在我的数据库中更新它。

CodeProject有一个实现,位于http://www.codeproject.com/KB/recipes/Levenshtein.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接