69

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

感谢大家的帮助。

我已经看到了 lucene,但是我需要一些更容易搜索类似字符串并且没有索引部分开销的东西。

我标记的答案有两个非常简单的算法,一个也使用LINQ,所以它很完美。

4

8 回答 8

34

Levenshtein 距离实现:

我有一个 .NET 1.1 项目,我在其中使用后者。它很简单,但非常适合我的需要。据我记得它需要一些调整,但没有什么不明显的。

于 2008-09-17T14:38:51.443 回答
30

您还可以查看名为 Sam's String Metrics 的令人印象深刻的库https://github.com/StefH/SimMetrics.Net。这包括许多算法。

  • 汉明距离
  • 莱文斯坦距离
  • Needleman-Wunch 距离或卖方算法
  • 史密斯-沃特曼距离
  • Gotoh 距离或 Smith-Waterman-Gotoh 距离
  • 街区距离或L1距离或城市街区距离
  • 蒙格埃尔坎距离
  • Jaro 距离度量
  • 雅罗·温克勒
  • SoundEx 距离指标
  • 匹配系数
  • 骰子系数
  • Jaccard 相似度或 Jaccard 系数或 Tanimoto 系数
  • 重叠系数
  • 欧几里得距离或 L2 距离
  • 余弦相似度
  • 变分距离
  • 海灵格距离或巴塔查亚距离
  • 信息半径(Jensen-Shannon 散度)
  • 谐波平均值
  • 偏差散度
  • 混淆概率
  • Fellegi 和 Sunters (SFS) 指标
  • TFIDF 或 TF/IDF
  • 快速A
  • 爆破
  • 最大匹配
  • q-gram
  • Ukkonen 算法
于 2009-07-08T02:04:03.210 回答
14

它们不是我自己的发明,但它们是我的最爱,我刚刚在博客上发布了关于它们的博客,并在名为“查找模糊字符串的四个函数”的博客文章中发布了我自己的 Dice Coefficient、Levenshtein Distance、Longest Common Subsequence 和 Double Metaphone 的调整版本C# Extensions 中的匹配项

于 2011-05-28T01:42:25.017 回答
2

你看过Lucene.net吗?它是 Java Lucene 搜索引擎 API 到 .Net 平台的一个端口。该库提供了很多搜索功能。大约一年前我玩过它,所以不要将我的建议视为基于大量经验。我在Windows Developer Power Tools一书中看到了它,并将其用于试驾。您可以查看他们的API 文档,看看它是否提供了您正在寻找的模糊搜索之类的东西。

于 2008-09-17T14:33:15.360 回答
1

代码项目论文具有使用Levenshtein distance的字符串相似度函数。

于 2008-09-17T14:35:14.417 回答
1

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

于 2008-09-17T14:37:04.523 回答
0

Beagle Project for Linux 是用 c# (mono) 编写的,是一个类似于 google-desktop 的搜索工具。它可能有一些用于这些字符串匹配的代码。

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

于 2008-09-17T14:28:09.567 回答
0

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

问候,帕特里西奥

于 2008-09-17T16:26:57.800 回答