【发布时间】:2014-08-04 08:08:17
【问题描述】:
我正在研究搜索引擎,需要帮助来对网页进行排名。我制作了一个数据库表,其中存储了单词、链接号和频率。频率将说明该特定链接中出现了多少单词。
现在我想根据提供的查询和屏幕上显示的链接对每个页面进行排名,哪种算法对我有帮助?需要实施。
【问题讨论】:
标签: java algorithm search-engine information-retrieval
我正在研究搜索引擎,需要帮助来对网页进行排名。我制作了一个数据库表,其中存储了单词、链接号和频率。频率将说明该特定链接中出现了多少单词。
现在我想根据提供的查询和屏幕上显示的链接对每个页面进行排名,哪种算法对我有帮助?需要实施。
【问题讨论】:
标签: java algorithm search-engine information-retrieval
一个非常简单的解决方案是使用 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 开源搜索引擎库,它为您做了很多繁琐的工作。
【讨论】: