我正在研究搜索引擎,需要帮助对网页进行排名。我创建了一个数据库表,其中存储了单词,链接号和频率。频率将告知该特定链接中出现的单词数量。
现在我想根据提供的查询对每个页面进行排名并在屏幕上显示链接,哪个算法对我有帮助?需要实施。
答案 0 :(得分:0)
一个非常简化的解决方案是使用 tf-idf得分:
tf(t,d) = (1/2 * #occurances(t,d)) / max{ #occurances(w,d) | for all w in collection }
这基本上是文档中术语的出现次数,标准化。
idf(t,D) = log( #documents / #documents_t_appears_in)
然后将tf-idf分数表示为:
tf_idf(t,d) = tf(t,d) * idf(t,D)
这个想法是 - 提升包含该术语很多次的文档,但是 - 如果这个术语很常见 - 使其不太重要 - 因为如果它出现在大多数文档中 - 它并没有说明相关性该文件。 (但如果这个术语很少见 - 提升它,那就非常有用了。)
如果您的查询为q=t1,t2,t3,..,tk
,则查询的总分为:
tf-idf(q,d) = td-idf(t1,d) * tf-idf(t2,d) * ... * tf-idf(tk,d)
您可以将此方法与任何链接分析方法结合使用,例如Page-Rank。
作为旁注,有一个名为lucene的java开源搜索引擎库,它为你做了很多肮脏的工作。