解释搜索结果

时间:2010-04-20 16:47:49

标签: information-retrieval

我的任务是编写一个程序,给出一个搜索词和一个页面的HTML源代表一些未知搜索引擎的搜索结果(它可以真的是任何东西,博客,商店,谷歌,eBay,... 。),需要构建一个结果的数据结构,其中包含“结果中的内容”:earch结果的标题,“详细信息”链接,结果中的位置等。不知道结果页面是否包含任何结果数据,以及是否有任何搜索结果。目标是将数据结构提供给另一个提取意义的程序。

我正在寻找的不是BeautifulSoup或RegExp,而是关于如何解释HTML源的一些聪明的想法或算法。如何确定页面的哪一部分构成单个结果项?如何过滤标记噪声以提取重要位?你会怎么做?对我所尝试的研究领域的指示非常感谢。

谢谢,西蒙

1 个答案:

答案 0 :(得分:0)

我怀疑是否存在一个没有任何训练的银弹算法只会对任意搜索查询输出起作用。

然而,这个任务可以解决,并且在许多应用程序中实际上已经解决,但采用不同的方法。首先,你必须根据你实际要做的事情来定义单个搜索结果项的一般结构(它可能是名称,日期,链接,描述片段等),然后编写将提取必要的html解析器的数量来自特定网站的搜索结果输出的必要字段。

我知道这不是超级性感的解决方案,但它可能是唯一有效的解决方案。这不是火箭科学。编写解析器实际上非常简单,每天可以打十几个。如果您要查看搜索结果的html源代码,您会注意到输出结果通常非常结构化,并标有特定的 div 部分或属性,因此非常容易在文档中找到它。你甚至没有使用任何复杂的HTML解析库,就像grep一样就足够了。

例如,在此特定网页上,您的问题以<div class="post-text">开头,以</div>结尾。介于两者之间的所有内容实际上都是一个带有一些HTML格式的文本文本,您可能希望删除这些格式以及额外的空格和“\ n”。此<div class="post-text">仅在页面上显示一次。

一旦您使用检索应用程序进行大规模扩展,您会发现不同站点上没有各种各样的不同搜索引擎,并且您将能够使用类似搜索重新使用已创建的解析器发动机。

你唯一需要记住的是内置的自我测试。网站倾向于不时升级和更改设计。如果您的应用程序将存在一段时间,您将需要在解析器中包含一些逻辑,该逻辑将检查其结果的有效性,并在每次搜索输出发生更改时通知您,并且与解析器不再兼容。然后,您将不得不修改特定的解析器或编写新的解析器。

希望这有帮助。