3

我正在尝试编写一个自由文本搜索算法来查找墙上的特定帖子(类似于 Facebook 使用的墙)。假设用户能够在搜索字段中写一些单词并在包含这些单词的帖子上获得点击;最佳匹配在顶部,然后根据匹配分数以降序排列其他帖子。

我使用编辑距离 (Levenshtein) "e(x, y) = e" 来计算每个帖子与查询词 "x" 和帖子词 "y" 相比的分数: score(x, y ) = 2^(2 - e)(1 - min(e, |x|) / |x|),其中“|x|” 是查询词中的字母数。

帖子中的每个单词都会影响该特定帖子的总分。当帖子大小大致相同时,这种方法似乎效果很好,但有时某些大型帖子仅靠其中包含很多单词而在实践中与查询无关时设法获得分数。

我是在以错误的方式处理这个问题,还是有一些方法可以使我没有想到的分数正常化?

4

1 回答 1

1

是的。您可以使用许多标准化方法。这是一个研究得很好的领域!

看看向量空间模型。TDF/IDF 可能与您正在做的事情有关。它与您使用的方法并不严格相关,但可以为您提供一些规范化线索。

另请注意,比较每个帖子将是 O(N) 并且可能会变得非常慢。使用stemmming可能会获得更好的结果,而不是字符串距离。然后,您可以将其放入 VSM 倒排索引中。

许多数据库(包括 MySQL 和 Postgres)都有全文搜索。这可能比自己做更实际。

于 2010-05-27T08:34:56.700 回答