搜索引擎如何找到相关内容?

Google在解析网络时如何找到相关内容? 比如说,谷歌使用PHP原生DOM库来解析内容。他们有什么方法可以在网页上找到最相关的内容? 我的想法是它将搜索所有段落,按每个段落的长度排序,然后从可能的搜索字符串和查询参数中找出每个段落的相关百分比。 假设我们有这个网址:
http://domain.tld/posts/stackoverflow-dominates-the-world-wide-web.html
现在从该URL我会发现HTML文件名具有高度相关性,所以我会看到该字符串与页面中所有段落的比较接近! 当您共享页面时,一个非常好的例子就是Facebook共享。 Facebook快速创建链接并带回图像,内容等。 我认为某种计算方法最好,根据周围元素和元数据计算出相关性的百分比。 是否有关于内容解析的最佳实践的书籍/信息,包括如何从网站获取最佳内容,任何可能被讨论的算法或任何深入的回复? 我想到的一些想法是: 按纯文本长度查找所有段落和顺序 以某种方式找到
div
容器的宽度和高度,并按(W + H) - @Benoit排序 检查元关键字,标题,描述并检查段落中的相关性 查找所有图像标签,并按主要段落的最大节点和节点长度排序 检查对象数据,例如视频,并从最大段落/内容div中计算节点 找出解析过的前几页的相似之处 我之所以需要这些信息: 我正在建立一个网站,网站管理员向我们发送链接,然后我们列出他们的网页,但我希望网站管理员提交一个链接,然后我去抓取该网页查找以下信息。 图像(如果适用) A<最佳切片文本中的255段 将用于我们的搜索引擎的关键字,(Stack Overflow风格) 元数据关键字,描述,所有图像,更改日志(用于审核和管理目的) 希望你们能够理解这不适用于搜索引擎,但搜索引擎处理内容发现的方式与我需要的内容相同。 我不是要求商业机密,我问你的个人方法是什么。     
已邀请:
整蛊,但我会采取刺: 图像(如果适用) 页面上的第一个图像 名称中包含字母“logo”的图像 渲染最接近左上角(或右上角)的图像 最常出现在网站其他页面上的图像 小于某些最大尺寸的图像 A<最佳切片文本中的255段 标题标签的内容 元内容描述标签的内容 第一个h1标签的内容 第一个p标签的内容 将用于我们的搜索引擎的关键字,(堆栈溢出样式) 域名的子字符串 网址的子字符串 标题标记的子字符串 术语与页面上最常见的单词和页面顶部之间的距离 元数据关键字,描述,所有图像,更改日志(用于审核和管理目的) AK!插科打诨!语法错误。     
我不在谷歌工作,但大约一年前,我读到他们有超过200个因素来排名他们的搜索结果。当然排名最高的是相关性,因此从这个意义上说你的问题非常有趣。 什么是相关性,你如何计算它?有几种算法,我敢打赌Google有自己的算法,但我知道的是Pearson Correlation和Euclidean Distance。 我在这个主题(不一定是搜索引擎)上建议的好书是Toby Segaran编程集体智慧(O'Reilly)。本书中的一些示例显示了如何通过API或屏幕抓取从第三方网站获取数据,以及查找类似的条目,这非常好。 无论如何,回到谷歌。其他相关技术当然是全文搜索,你可能想要获得一本关于MySQL或Sphinx的好书。 @Chaoley建议TSEP这也很有意思。 但实际上,我知道来自俄罗斯搜索引擎Yandex的人,他们所做的一切都是在NDA之下,所以我猜你可以接近,但除非你在谷歌工作,否则你无法完美;) 干杯。     
实际上回答你的问题(而不仅仅是关于搜索引擎): 我相信有点像Instapaper会是最好的选择。 instapaper背后的逻辑(我没有创建它,所以我当然不知道内部工作,但很容易预测它是如何工作的): 在类似文本的元素中查找最大的文本(依赖于段落标记,虽然非常优雅,但不适用于那些使用div而不是p的蹩脚网站)。基本上,您需要在块元素(div,ps等)和文本量之间找到良好的平衡。想出一些阈值:如果X个单词保持不被标记分开,那么该文本属于主体文本。然后扩展到兄弟姐妹,保持某种文本/标记阈值。 一旦你做了最困难的部分 - 找到哪些文字属于实际文章 - 它变得非常容易。您可以在该文本周围找到第一个图像,并将其用作缩略图。这样您就可以避免广告,因为它们不会接近正文文本标记。 最后,提出关键字是有趣的部分。你可以做很多事情:按频率订购单词,去除噪音(ands,ors等),你就会有一些不错的东西。将其与“检测到的正文文本区域上方的突出短文本元素”(即您的文章的标题),页面标题,元组合,您可以获得非常美味的东西。 如果实施得当,所有这些想法都将非常具有防弹性,因为它们不依赖于语义标记 - 通过使您的代码变得复杂,您可以确保即使是非常草率编码的网站也能被正确检测到。 当然,它带来了性能不佳的缺点,但我想它不应该那么差。 提示:对于人们经常链接的大型网站,您可以手动设置包含正文(我在第1点上描述)的HTML元素。这将确保正确性并加快速度。 希望这个对你有帮助。     
有很多高度复杂的算法可以从标签汤中提取相关内容。如果您正在构建可用于自己的东西,您可以查看源代码的可读性并将其移植到php。我最近做了类似的事情(不幸的是,不能共享代码)。 可读性的基本逻辑是找到所有块级标记并计算其中的文本长度,而不是计算子项。然后,每个父节点被授予其每个子节点的权重的一半(一半)。这用于资助具有最大纯文本量的最大块级标记。从这里开始,内容将进一步清理。 它无论如何都不是防弹,但在大多数情况下效果都很好。     
大多数搜索引擎在文档的头部查找标题和元描述,然后在正文中标题和文本内容。还考虑了图像alt标签和链接标题。最后我读到雅虎使用的是meta关键字标签,但大部分都没有。 您可能希望从Sourceforge https://sourceforge.net/projects/tsep/上的搜索引擎项目(TSEP)下载开源文件,并了解他们是如何做到的。     
我只是抓住文本的第一段“段落”。大多数人写故事/问题的方式/他们首先陈述最重要的事情,然后详细说明。如果你看任何随机文本,你可以看到它在大多数时候都有意义。 例如,您可以在原始问题中自行完成。如果你采用原始问题的前三个句子,你就可以很好地总结你想要做的事情。 而且,我自己也是这样做的:我的评论的要点总结在第一段。其余的只是例子和阐述。如果您不相信,请查看我最近从谷歌新闻中随机挑选的一些文章。好吧,最后一个不是半随机的,我承认;) 无论如何,我认为这是一种非常简单的方法,大部分时间都可以使用。您可以随时查看元描述,标题和关键字,但如果它们不存在,则可能是一种选择。 希望这可以帮助。     
我会考虑这些构建代码 检查同义词和首字母缩略词 在图像上应用OCR以搜索为文本(Abby Fine Reader和Recostar很好,Tesseract是免费的和精细的(没有精细的读者:) 重量字体(大小,粗体,下划线,颜色) 重量含量取决于它在页面上的位置(如页面上方的内容更相关) 也: 网站管理员要求定义页面的视频文本 您还可以查看是否可以在Google搜索API中找到有用的内容:http://code.google.com/intl/tr/apis/ajaxsearch/     
我现在面临同样的问题,经过一些尝试后,我发现了一些可用于创建网页代码的内容(必须进行微调): 拿掉所有的HTML 删除正文内的脚本和样式标签(重要) 删除不必要的空格,制表符,换行符。 现在浏览DOM以捕获div,p,article,td(其他?)和每个 。获取当前元素的html 。采用元素内容的“仅文本”版本 。为这个元素分配得分:text lenght * text lenght / html lenght 现在排序所有的分数,采取最大的。 这是一种快速(和脏)的方法来识别具有相对较低的标记平衡的最长文本,就像在正常内容中发生的那样。在我的测试中,这似乎非常好。就加水 ;) 除此之外,您还可以搜索“og:”元标记,标题和描述,h1以及许多其他小技巧。     
谷歌的“网络爬虫,机器人,蜘蛛和智能代理”也可以单独尝试,以获得个人结果。 网络爬虫 用户代理 机器人 数据/屏幕刮擦 我认为你正在寻找的是Screen Scraping(带有DOM),Stack有大量的Q& A on。     
谷歌还使用了一个名为Page Rank的系统 它检查了一个站点的链接数量。假设您正在寻找C ++教程,并在Google上搜索一个。你会发现一个是最好的结果,这是一个很棒的教程。谷歌知道这一点,因为它搜索了它的网络缓存,并看到每个人都链接到本教程,同时咆哮它有多好。谷歌认为这是一个很好的教程,并将其作为最佳结果。 它实际上是这样做的,因为它缓存了所有内容,如前所述,根据链接指向每个页面的页面排名。 希望这可以帮助!     
为了回答你的一个问题,我现在正在阅读以下书籍,我推荐它:Google的PageRank和Beyond,由Amy Langville和Carl Meyer撰写。 轻度数学。在图论理论背景,特征分析,马尔可夫模型等中使用一些线性代数。我喜欢谈论用于求解线性方程的迭代方法的部分。我不知道谷歌采用了这些迭代方法。 短篇,只有200页。包含与文本主流不同的“旁白”,以及历史视角。还指出其他最近的排名系统。     
这里有一些很好的答案,但听起来他们没有回答你的问题。也许这个会。 您正在寻找的是信息检索 它通常使用Bag Of Words模型 假设您有两个文件:
DOCUMENT A  
Seize the time, Meribor. Live now; make now always the most precious time. Now will never come again
还有这个
DOCUMENT B  
Worf, it was what it was glorious and wonderful and all that, but it doesn't mean anything
并且您有查询,或者您想要查找其他相关文档的内容
QUERY aka DOCUMENT C
precious wonderful life
无论如何,你如何计算这两个文件中最“相关”的?这是如何做: 标记每个文档(分成单词,删除所有非字母) 小写一切 删除停用词(以及等) 考虑词干(删除后缀,请参阅Porter或Snowball词干算法) 考虑使用n-gram 您可以计算单词频率,以获取“关键字”。 然后,为每个单词创建一列,并计算单词对文档的重要性,以及它在所有文档中的重要性。这称为TF-IDF指标。 现在你有了这个:
Doc precious worf life...
A   0.5      0.0  0.2 
B   0.0      0.9  0.0
C   0.7      0.0  0.9
然后,使用余弦相似度量度计算文档之间的相似度。与DOCUMENT C具有最高相似性的文档是最相关的。 现在,您似乎想要查找最相似的段落,因此只需将每个段落称为文档,或者考虑在文档上使用滑动窗口。 你可以在这里看到我的视频。它使用图形Java工具,但解释了这些概念: http://vancouverdata.blogspot.com/2010/11/text-analytics-with-rapidminer-part-4.html 这是一本体面的IR书: http://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf     

要回复问题请先登录注册