全文搜索:查找类似的软件名称

时间:2010-01-31 12:31:03

标签: .net search full-text-search

我正在寻找一种全文搜索算法,可以找到类似的程序名称,例如“Mozilla Firefox”和“Firefox 3.5,或”Adobe Reader“和”Adobe Acrobat Reader v10“.Levenshtein距离是在这种情况下效率太低,因为拼写不会改变。

必须使用串行扫描(不是索引)。

我需要最大的精度和最小的错误。你会推荐什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

模式比较

我使用以下内容自动更正某些域名。

我们的想法是研究小模式,例如2个字符序列。每次找到这样的序列时,对于比较的序列,“得分”递增。 最高分可能看起来相似。

例: 火狐浏览器  => ['mo','oz','zi','il','ll','la','a','f','fi','ir','re','fo','牛']

结果:

  • 'Firefox 3.5'=> 5,
  • 'Adobe Reader'=> 0,
  • 'Adobe Acrobat Reader v10'=> 1

使用压缩自动分类

这个不是基于全文的。

这里的想法,用this document表示,是将两个项目的串联压缩与压缩项目的串联进行比较。

设c是返回压缩项大小的函数:

d = c(A)+ c(B)-c(A + B)

d越小,A和B越接近。
一个有趣的特性是该原则与类型无关,可以与音乐,图片,视频等二进制文件一起使用。

Another link, easier to read but in French.

使用SGDB全文功能

我在SQL Server上有点生疏,但SQLite或MySQL提供全文搜索 结果包括“等级”值,可以将其视为相似性得分。

在MySQL中:

SELECT
  t.*,
  MATCH(my_field) AGAINST 'Mozilla Firefox' as relevance
FROM
  table t
WHERE
  MATCH(my_field) AGAINST 'Mozilla Firefox'
ORDER BY relevance DESC
LIMIT 100