是否有为C#编写的模糊搜索或字符串相似性函数库?

时间:2008-09-17 14:24:49

标签: c# .net string comparison

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

谢谢大家的帮助。

我已经看过lucene,但我需要更容易搜索类似字符串的东西,而且没有索引部分的开销。

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

8 个答案:

答案 0 :(得分:31)

Levenshtein距离实施:

我有一个.NET 1.1项目,我使用后者。它很简单,但完全符合我的需要。从我记得它需要一些调整,但没有什么是不明显的。

答案 1 :(得分:28)

你还可以看一下名为Sam's String Metrics http://sourceforge.net/projects/simmetrics/files/的令人印象深刻的图书馆。这包括许多算法。

  • 汉明距离
  • Levenshtein距离
  • Needleman-Wunch距离或卖家算法
  • Smith-Waterman距离
  • Gotoh Distance或Smith-Waterman-Gotoh距离
  • 区块距离或L1距离或城市街区距离
  • Monge Elkan距离
  • Jaro距离指标
  • Jaro Winkler
  • SoundEx距离指标
  • 匹配系数
  • Dice's Coefficient
  • Jaccard相似度或Jaccard系数或Tanimoto系数
  • 重叠系数
  • 欧几里德距离或L2距离
  • 余弦相似度
  • 变奏距离
  • Hellinger距离或Bhattacharyya距离
  • 信息半径(Jensen-Shannon分歧)
  • Harmonic Mean
  • 歪斜分歧
  • 混乱概率
  • Fellegi and Sunters(SFS)指标
  • TFIDF或TF / IDF
  • 的FastA
  • BLASTP
  • 最大匹配
  • Q-克
  • Ukkonen Algorithms

答案 2 :(得分:12)

它们不是我自己的发明,但它们是我的最爱,我刚刚在博客上发表了关于它们的文章并在一篇名为{{3的博客文章中发表了我自己的调整版Dice Coefficient,Levenshtein Distance,Longest Common Subsequence和Double Metaphone }}

答案 3 :(得分:2)

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

答案 4 :(得分:1)

code project paper使用Levenshtein distance具有字符串相似度函数。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

Linux的Beagle Project是用c#(单声道)编写的,是一款像搜索工具一样的google-desktop。它可能有一些代码用于这种字符串匹配。

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

答案 7 :(得分:0)

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

此致,Patricio