是否有为C#编写的模糊search或string相似函数库?
有类似的问题,但不涉及我可以在我的源代码中使用的C#库。
感谢大家的帮助。
我已经看到了lucene,但是我需要更容易的search类似的string,而不需要索引部分的开销。
我标记的答案有两个非常简单的algorithm,也有一个使用LINQ,所以它是完美的。
Levenshtein距离实现:
- 使用LINQ (不是真的,请参阅评论)
- 不使用LINQ
我有一个.NET 1.1项目,我使用后者。 这是简单的,但完美的为我所需要的。 从我记得它需要一点调整,但没有什么不明显的。
你也可以看看这个非常令人印象深刻的库,名为Sam's String Metrics http://sourceforge.net/projects/simmetrics/files/ 。 这包括一系列algorithm。
- 海明距离
- Levenshtein距离
- Needleman-Wunch距离或卖家algorithm
- 史密斯 – 沃特曼距离
- Gotoh距离或Smith-Waterman-Gotoh距离
- 块距离或L1距离或城市街区距离
- 蒙热埃尔坎距离
- Jaro距离度量
- Jaro Winkler
- SoundEx距离度量
- 匹配系数
- 骰子的系数
- Jaccard相似度或Jaccard系数或Tanimoto系数
- 重叠系数
- 欧几里得距离或L2距离
- 余弦相似
- 变化的距离
- Hellinger距离或Bhattacharyya距离
- 信息半径(Jensen-Shannon发散)
- 谐波平均值
- 偏离分歧
- 混乱的可能性
- 牛头
- Fellegi和Sunters(SFS)指标
- TFIDF或TF / IDF
- 的FastA
- BLASTP
- 最大匹配
- Q-克
- Ukkonenalgorithm
他们不是我自己的发明,但他们是我的最爱,我只是在博客上发表了我自己调整的Dice Coefficient,Levenshtein Distance,Longest Common Subsequence和Double Metaphone的版本。 匹配C#扩展 。
你看过Lucene.net吗? 它是.Net平台的Java Lucenesearch引擎API的一个端口。 该库提供了大量的searchfunction。 我在一年前左右玩过,所以不要以我的经验为基础。 我在“ Windows开发者电动工具 ”一书中看到它,并将其作为试用版。 您可以查看他们的API文档 ,看看它是否提供了您正在寻找的模糊search。
这个代码项目文件有一个使用Levenshtein距离的string相似性函数。
下面的Levenshtein距离algorithm给两个string的相似性(实际上差别)分配一个值,可用于build立: http : //www.merriampark.com/ldcsharp.htm
Beagle Project for Linux是用c#(单声道)编写的,是一个谷歌桌面search工具。 这里可能有一些代码用于这种string匹配。
如果我记得正确的话,它使用Lucene库来search和检索数据。 也许这对你的项目也是有用的。
我用C#中的“三元search树词典”( http://www.codeproject.com/KB/recipes/tst.aspx )来search类似的string。
问候,帕特里西奥
- WPF BooleanToVisibilityConverter转换为隐藏,而不是折叠时为false?
- 无法使用GetManifestResourceStream()加载清单资源
- 如何在.NET MySqlCommand中使用MySql用户定义的variables?
- Jon Skeet澄清了Singleton
- entity framework – 无法将lambdaexpression式转换为“string”types,因为它不是委托types
- 基本的LINQexpression式为一个ItemCollection
- 使用“+”运算符的string连接
- 如何检查结构消耗的字节数?
- 我怎样才能安全地在自定义的WebAPI HttpMessageHandler中设置用户主体?