【问题标题】:String likeness algorithms字符串相似度算法
【发布时间】:2013-02-24 12:50:43
【问题描述】:

我有两个字符串(它们最终将成为简单数据库中的描述),假设它们是

  1. 字符串 A:“苹果橙椰子酸橙吉米自助餐”
  2. 字符串 B:“汽车 自行车滑板”

我正在寻找的是这个。我想要一个函数,输入为“cocnut”,输出为“String A”

我们可能在大小写上有所不同,而且拼写并不总是正确的。如果您愿意,目标是“快速而肮脏”的搜索。

是否有任何 .net(或第三方),或推荐字符串的“相似算法”,以便我可以检查输入是否有“非常接近的片段”并返回它?我的数据库将有超过 50 个条目。

【问题讨论】:

  • 汉明距离?声音?
  • Levenshtein 距离?
  • 我现在正在尝试 levenshtein 算法。我想我正在寻找建议,因为我的目标是只使用整个字符串的片段。尝试所有这些并选择最好的可能是我应该追求的。
  • @Marc 显然两者都没有。
  • stackoverflow.com/a/1095806/3043 ... 该答案中的链接已失效,请在此处获取产品:sourceforge.net/projects/simmetrics/files

标签: c# .net string algorithm sql-like


【解决方案1】:

您要搜索的内容称为两个字符串之间的edit distance。有很多实现——here’s one from Stack Overflow itself

由于您只搜索字符串的 部分,因此您想要的是 局部最优 匹配,而不是通过此方法计算的全局匹配。

这被称为local alignment problem 并且再次通过几乎相同的算法很容易解决 - 唯一改变的是初始化(我们不会惩罚任何出现在搜索字符串之前的 ) 和最佳值的选择(我们不会惩罚搜索字符串 之后的任何内容)。

【讨论】:

  • 我想我找到了解决方案,我将使用 levenshtien 算法。由于我的大部分数据都很简单且以空格分隔,因此我只需将我的字符串与数据库条目的空格分隔版本进行比较,并取最高的单词作为结果。
猜你喜欢
  • 2011-04-04
  • 2011-12-10
  • 2011-10-03
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多