有类似的问题,但不是我可以在我的源代码中使用的C#库.
感谢大家的帮助.
我已经看过lucene,但我需要更容易搜索类似字符串的东西,而不需要索引部分的开销.
我标记的答案有两个非常简单的算法,一个也使用LINQ,所以它是完美的.
Levenshtein距离实施:
使用LINQ(不是真的,请参阅注释)
不使用LINQ
我有一个.NET 1.1项目,我使用后者.它很简单,但完全符合我的需要.从我记得它需要一些调整,但没有什么是不明显的.
您还可以查看名为Sam的String Metrics http://sourceforge.net/projects/simmetrics/files/的令人印象深刻的图书馆.这包括许多算法.
汉明距离
Levenshtein距离
Needleman-Wunch距离或卖家算法
史密斯 - 沃特曼距离
Gotoh距离或Smith-Waterman-Gotoh距离
块距离或L1距离或城市街区距离
Monge Elkan距离
Jaro距离度量
Jaro Winkler
SoundEx距离度量
匹配系数
骰子的系数
Jaccard相似度或Jaccard系数或Tanimoto系数
重叠系数
欧氏距离或L2距离
余弦相似度
变化距离
Hellinger距离或Bhattacharyya距离
信息半径(Jensen-Shannon分歧)
谐波均值
歪斜分歧
混乱概率
牛头
Fellegi和Sunters(SFS)指标
TFIDF或TF/IDF
的FastA
BLASTP
最大匹配
Q-克
Ukkonen算法
它们不是我自己的发明,但它们是我的最爱,我刚刚在博客上发表了关于它们的文章,并在一篇名为"寻找模糊字符串的四函数"的博客文章中发布了我自己的Dice系数,Levenshtein距离,最长公共子序列和双重Metaphone的调整版本C#扩展中的匹配项.