我正在寻找一种全文搜索算法,可以找到类似的程序名称,例如“Mozilla Firefox”和“Firefox 3.5,或”Adobe Reader“和”Adobe Acrobat Reader v10“.Levenshtein距离是在这种情况下效率太低,因为拼写不会改变。
必须使用串行扫描(不是索引)。
我需要最大的精度和最小的错误。你会推荐什么?
谢谢!
答案 0 :(得分:3)
我使用以下内容自动更正某些域名。
我们的想法是研究小模式,例如2个字符序列。每次找到这样的序列时,对于比较的序列,“得分”递增。 最高分可能看起来相似。
例: 火狐浏览器 => ['mo','oz','zi','il','ll','la','a','f','fi','ir','re','fo','牛']
结果:
这个不是基于全文的。
这里的想法,用this document表示,是将两个项目的串联压缩与压缩项目的串联进行比较。
设c是返回压缩项大小的函数:
d = c(A)+ c(B)-c(A + B)
d越小,A和B越接近。
一个有趣的特性是该原则与类型无关,可以与音乐,图片,视频等二进制文件一起使用。
Another link, easier to read but in French.
我在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