Python 编写一个post搜索算法

Python 编写一个post搜索算法,python,full-text-search,levenshtein-distance,Python,Full Text Search,Levenshtein Distance,我正在尝试编写一个免费文本搜索算法,用于在墙上查找特定帖子(类似于Facebook使用的墙)。假设用户能够在搜索字段中写入一些单词,并在包含这些单词的帖子上获得点击率;最好的比赛在最上面,然后根据比赛分数按降序排列其他帖子 我使用编辑距离(Levenshtein)“e(x,y)=e”来计算每个帖子的分数,与查询词“x”和帖子词“y”进行比较,根据:score(x,y)=2^(2-e)(1-min(e,| x |)/| x |),其中“| x |”是查询词中的字母数 帖子中的每个单词都会对该特定帖

我正在尝试编写一个免费文本搜索算法,用于在墙上查找特定帖子(类似于Facebook使用的墙)。假设用户能够在搜索字段中写入一些单词,并在包含这些单词的帖子上获得点击率;最好的比赛在最上面,然后根据比赛分数按降序排列其他帖子

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

帖子中的每个单词都会对该特定帖子的总分做出贡献。当帖子的大小大致相同时,这种方法似乎效果很好,但有时某些大型帖子只会因为里面有很多单词而获得分数,而实际上与查询无关


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

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

看一看。TDF/IDF可能与您的工作相关。它与您正在使用的方法没有严格的关系,但可以为您提供一些规范化线索

还要注意的是,比较每一篇文章都是O(N),可能会非常慢。与字符串距离相比,使用字符串距离可能会获得更好的结果。然后可以将其放入VSM反向索引中


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

谢谢,tf idf看起来很有希望。我只需要把它应用到我的问题中,因为我使用的搜索查询可以由几个单词组成,如果它们出现在同一篇文章中,那么它们的出现应该更重要。墙上的帖子数量非常有限(最多10000篇),但因为我需要将每个搜索词与所有帖子中的所有词进行比较,所以我得到了O(N^3)。。。也许使用MS SQL 2008数据库中的全文搜索更简单。我开始研究它的原因是因为我想要一个模糊的单词搜索,但也许数据库可以处理这个问题?我不知道MSSQL,但Postgres是非常好的,非常可定制的。我尝试过做一些与您类似的事情(文档上的模糊字符串匹配,而不是文本)。目前的解决方案是将模糊匹配算法分割到中心,并在中间放置向量空间搜索。似乎对我有用!folktunefinder.com