有类似的问题,但不涉及我可以在源代码中使用的 C# 库。

感谢大家的帮助。

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

我标记的答案有两种非常简单的算法,其中一种也使用了 LINQ,所以它是完美的。

有帮助吗?

解决方案

编辑距离实现:

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

其他提示

您还可以查看名为 Sam's String Metrics 的非常令人印象深刻的库 http://sourceforge.net/projects/simmetrics/files/. 。这包括许多算法。

  • 汉明距离
  • 编辑距离
  • Needleman-Wunch 距离或 Sellers 算法
  • 史密斯-沃特曼距离
  • Gotoh 距离或 Smith-Waterman-Gotoh 距离
  • 街区距离或 L1 距离或城市街区距离
  • 蒙日·埃尔坎距离
  • Jaro 距离度量
  • 贾罗·温克勒
  • SoundEx 距离度量
  • 匹配系数
  • 骰子系数
  • 杰卡德相似度或杰卡德系数或谷本系数
  • 重叠系数
  • 欧氏距离或 L2 距离
  • 余弦相似度
  • 变化距离
  • Hellinger 距离或 Bhattacharyya 距离
  • 信息半径(詹森-香农散度)
  • 调和平均值
  • 偏斜散度
  • 混淆概率
  • 牛头蛋白
  • 费莱吉和桑特斯 (SFS) 指标
  • TFIDF 或 TF/IDF
  • 快A
  • 爆炸P
  • 最大匹配数
  • q-gram
  • 乌科宁算法

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

你看过吗 Lucene.net?它是 Java Lucene 搜索引擎 API 到 .Net 平台的端口。该库提供了很多搜索功能。我大约一年前就尝试过它,所以不要将我的建议视为基于大量经验。我在书上看到过 Windows 开发者电动工具 并试驾了它。你可能会浏览他们的 API文档 看看它是否提供类似您正在寻找的模糊搜索之类的功能。

代码项目文件 有一个字符串相似度函数,使用 编辑距离.

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

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

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

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

问候, 帕特里西奥

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top