【问题标题】:Full Text Search: find similar software names全文搜索:查找相似的软件名称
【发布时间】:2011-01-11 09:56:48
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • Firefox 3.6 已经发布了 :),最好使用 Chrome
  • 您不能尝试将 Levenshtein 改编为 单词 而不是字符吗?它可能有效:-)

标签: .net search full-text-search


【解决方案1】:

模式比较

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

我们的想法是查看小模式,例如 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

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多