【问题标题】:Need help regarding information retrieval需要有关信息检索的帮助
【发布时间】:2014-08-04 08:08:17
【问题描述】:

我正在研究搜索引擎,需要帮助来对网页进行排名。我制作了一个数据库表,其中存储了单词、链接号和频率。频率将说明该特定链接中出现了多少单词。

现在我想根据提供的查询和屏幕上显示的链接对每个页面进行排名,哪种算法对我有帮助?需要实施。

【问题讨论】:

    标签: java algorithm search-engine information-retrieval


    【解决方案1】:

    一个非常简单的解决方案是使用 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 开源搜索引擎库,它为您做了很多繁琐的工作。

    【讨论】:

    • 这很有帮助!你是说对于每个查询和每个单词的 qyery 我应该计算 tf-idf 对吗?我有点困惑,如果某个查询的 tf-idf 给我一个结果,那么我将如何比较该结果以对页面进行排名?假设一个查询有三个不同的单词,我将计算三个不同的 tf-idf,现在我将根据 tf-idf 的最大值将该页面排在最前面,是这样吗?当用户输入查询时,tf-idf 是在运行时计算的?谢谢!
    • @user3738548 tf-idf 给出一个页面(文档)对于查询的相似程度的排名。 td-idf 分数越高,你应该对这个文档进行更好的排名。是的,tf-idf 是在运行时计算的。
    • 也就是说多词查询不需要计算文档ID(文档编号)的交集(AND运算)吧?我可以直接计算查询中每个单词的 Tf-idf 并对该文档进行排名是这样吗?
    • @user3738548 通常,布尔模型首先用于查找所有候选者,然后您只对在交叉点中找到的文档进行排名,因为它更有效。 inverted index(也用于交集计算)可以为每个术语和文档保存#occurances(t,d),您需要一个简单的哈希图来从每个术语映射到该术语出现在整个系列。
    • 需要一点帮助,现在我想用 tomcat 服务器运行我的应用程序,但是遇到了这个错误“FAIL-Application at context path /my_app could not be started”...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2014-12-26
    • 2013-08-12
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多