2010-05-27 41 views
3

我想写一个免费的文本搜索算法,以找到墙上的特定帖子(与Facebook使用类似类型的墙壁)。用户假设能够在搜索字段中写入一些单词并获得包含该单词的帖子的命中;根据比赛得分,最佳匹配在最上面,然后其他帖子按降序排列。写一个后期搜索算法

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

帖子中的每个单词都会贡献该特定帖子的总分。当帖子尺寸大致相同时,这种方法似乎运作良好,但某些时候,某些大型帖子设法将得分仅仅归因于他们中有很多词,而实际上与查询无关。

我是以错误的方式接近这个问题,还是有一些方法来规范我没有想到的分数?

回答

1

是的。有许多可以使用的标准化方法。这是一个经过深入研究的领域!

看看the vector space model。 TDF/IDF可能与你正在做的事情有关。它与你使用的方法没有严格的关系,但可以给你一些标准化的线索。

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

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

+0

谢谢,tf-idf看起来很有前途。我只需要将它应用于我的问题,因为我使用的搜索查询可以由几个单词组成,如果它们存在于同一个帖子中,它们的出现应该更加重要。在墙上的帖子数量是非常适度的(最多10000个帖子),但由于我需要比较每个搜索词与所有帖子中的所有单词,我得到O(N^3)...也许它只是简单地使用全文搜索并入MS SQL 2008数据库中。我开始研究它的原因是因为我想要一个模糊词搜索,但也许数据库可以处理这个问题? – MdaG 2010-05-27 14:56:42

+0

我不知道MSSQL,但Postgres一个非常好,非常可定制。我试图做类似于你的事情(模糊字符串匹配文档,但不是文本)。目前的解决方案是将模糊匹配算法分解到中心,并在中间放置向量空间搜索。似乎为我工作! folktunefinder.com – Joe 2010-05-27 15:07:24