我正在尝试编写一个自由文本搜索算法来查找墙上的特定帖子(类似Facebook使用的那种墙)。用户可以在搜索字段中编写一些单词并对包含单词的帖子进行点击;根据匹配得分,最佳匹配在顶部,然后其他帖子按降序排列。
我正在使用编辑距离(Levenshtein)“e(x,y)= e”来计算每个帖子与查询词“x”相比的得分,并根据以下内容发布单词“y”:得分( x,y)= 2 ^(2 - e)(1 - min(e,| x |)/ | x |),其中“| x |”是查询字中的字母数。
帖子中的每个单词都会影响该特定帖子的总分。当帖子的大小大致相同时,这种方法似乎运作良好,但某些时候某些大型帖子只是在其中包含大量单词而实际上与查询不相关时才能获得分数。
我是以错误的方式处理这个问题,还是有某种方法来规范我没想过的分数?
答案 0 :(得分:1)
是。您可以使用许多规范化方法。这是一个研究得很好的领域!
看看the vector space model。 TDF / IDF可能与您正在做的事情相关。它与您使用的方法并不严格相关,但可以为您提供一些规范化的潜在客户。
另请注意,比较每个帖子将是O(N)并且可能变得非常慢。使用stemmming可以获得更好的结果,而不是字符串距离。然后,您可以将其放入VSM反向索引中。
许多数据库(包括MySQL和Postgres)都有全文搜索。这可能比自己做的更实际。