我正在寻找一种全文搜索算法,可以找到类似的程序名称,例如“Mozilla Firefox”和“Firefox 3.5”,或“Adobe Reader”和“Adobe Acrobat Reader v10”。Levenshtein 距离效率太低在这种情况下,因为拼写不会改变。
它必须使用串行扫描(不是索引)。
我需要最大的精度和最小的错误。你会推荐什么?
谢谢!
最佳答案
模式比较
我使用以下内容来自动更正一些域名。
这个想法是查看小模式,例如 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.
使用 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
关于.net - 全文搜索 : find similar software names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171647/