关于.net:是否有为C#编写的模糊搜索或字符串相似函数库?

关于.net:是否有为C#编写的模糊搜索或字符串相似函数库?

Are there any Fuzzy Search or String Similarity Functions libraries written for C#?

有类似的问题,但与我可以在源代码中使用的C#库无关。

感谢大家的帮助。

我已经看过Lucene了,但是我需要更简单的方法来搜索相似的字符串,并且没有索引部分的开销。

我标记的答案有两种非常简单的算法,一种也使用LINQ,因此非常完美。


Levenshtein距离实现:

  • 使用LINQ(不是真的,请参阅注释)
  • 不使用LINQ

我有一个.NET 1.1项目,在其中使用了后者。这很简单,但是完全可以满足我的需求。据我所知,它需要进行一些调整,但没有什么是显而易见的。


您还可以查看名为Sam的String Metrics的非常出色的库https://github.com/StefH/SimMetrics.Net。其中包括许多算法。

  • 汉明距离
  • 莱文施泰因距离
  • Needleman-Wunch距离或卖方算法
  • 史密斯-沃特曼距离
  • Gotoh距离或Smith-Waterman-Gotoh距离
  • 街区距离或L1距离或城市街区距离
  • Monge Elkan距离
  • Jaro距离度量
  • 杰罗·温克勒
  • SoundEx距离度量
  • 匹配系数
  • 骰子的系数
  • Jaccard相似度或Jaccard系数或Tanimoto系数
  • 重叠系数
  • 欧氏距离或L2距离
  • 余弦相似度
  • 变距
  • Hellinger距离或Bhattacharyya距离
  • 信息半径(詹森-香农散度)
  • 谐波均值
  • 斜散度
  • 混淆概率
  • Fellegi和Sunters(SFS)指标
  • TFIDF或TF / IDF
  • FastA
  • 冲击波
  • 最大匹配
  • 语法
  • Ukkonen算法

它们不是我自己的发明,但它们是我的最爱,我刚刚在博客上发表了他们的文章,并在博客文章《查找模糊字符串的四个函数》中发布了自己调整过的骰子系数,Levenshtein距离,最长公共子序列和Double Metaphone的版本。与C#扩展名匹配。


您看过Lucene.net吗?它是Java Lucene搜索引擎API到.Net平台的端口。该库提供了很多搜索功能。我大约一年前就玩过它,所以不要以大量经验为依据接受我的建议。我在《 Windows Developer Power Tools》一书中看到了它,并进行了测试。您可能会浏览他们的API文档,以查看是否提供了所需的类似模糊搜索的内容。


可以使用以下Levenshtein距离算法为两个字符串的相似度(实际上是差异)分配一个值,该值可以用于以下内容:http://www.merriampark.com/ldcsharp.htm


此代码项目论文使用Levenshtein距离具有字符串相似性函数。


我已经使用" C#中的三元搜索树字典"(http://www.codeproject.com/KB/recipes/tst.aspx)来搜索相似的字符串。

问候,帕特里西奥


适用于Linux的Beagle项目是用c#(单声道)编写的,是类似于Google桌面的搜索工具。那里可能有一些用于此类字符串匹配的代码。

如果我没记错的话,它使用Lucene库搜索和检索数据。也许对您的项目也可能有用。


推荐阅读