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

Posted

技术标签:

【中文标题】搜索引擎如何找到相关内容?【英文标题】:How do search engines find relevant content? 【发布时间】:2011-04-27 09:28:15 【问题描述】:

Google 在解析网络时如何找到相关内容?

假设,例如,Google 使用 php 原生 DOM 库来解析内容。他们会用什么方法在网页上找到最相关的内容?

我的想法是它会搜索所有段落,按每个段落的长度排序,然后从可能的搜索字符串和查询参数中计算出每个段落的相关百分比。

假设我们有这个 URL:

http://domain.tld/posts/***-dominates-the-world-wide-web.html

现在从那个 URL 中我会发现 HTML 文件名将是高度相关的,所以我会看到该字符串与页面中的所有段落相比有多接近!

当您分享页面时,Facebook 分享就是一个很好的例子。 Facebook 迅速对链接进行 bot 处理,并带回图片、内容等。

我认为某种计算方法是最好的,根据周围元素和元数据计算相关性百分比。

是否有任何关于内容解析最佳实​​践的书籍/信息,涵盖如何从网站获取最佳内容、可能讨论的任何算法或任何深入的回复?


我想到的一些想法是:

查找所有段落并按纯文本长度排序 以某种方式找到div 容器的宽度和高度并按 (W+H) 排序 - @Benoit 检查元关键字、标题、描述并检查段落中的相关性 查找所有图像标签并按最大和远离主要段落的节点长度排序 检查对象数据,例如视频,并从最大的段落/内容 div 中计算节点数 找出之前解析的页面的相似之处

我需要这些信息的原因:

我正在建立一个网站,网站管理员向我们发送链接,然后我们列出他们的页面,但我希望网站管理员提交一个链接,然后我去爬取该页面以查找以下信息。

图片(如果适用) 来自最佳文本片段的 将用于我们的搜索引擎的关键字,(Stack Overflow 风格) 元数据关键字、描述、所有图片、更改日志(用于审核和管理目的)

希望你们能理解,这不是针对搜索引擎的,而是搜索引擎处理内容发现的方式与我需要它的环境相同。

我问的不是商业机密,我问的是你个人对此的处理方式。

【问题讨论】:

这是一个非常好的问题。我渴望看到答案。我认为页头中的<meta>标签以及页面标题占了很大一部分,以及最大div区域中的第一段(按宽度×长度排序)。 h1、h2、b、i、em,强标签也应该是相关的。 是的,但元标签是可选的,建议使用 facebook 等应用程序,但有一半时间网站管理员不使用它们,所以总是必须有一个逻辑后备,关于 x/ 的要点y :) 目前还没有回复,发生了什么:O @Robert 这是一个相当复杂的问题! :) 几乎任何能对此给出合理答案的人都将受到 NDA 保护,并且获得了丰厚的报酬。这很可能是当今 CS 中最有价值的问题。 【参考方案1】:

Google 的“网络爬虫、机器人、蜘蛛和智能代理”也可能会单独尝试它们以获得单独的结果。

Web Crawler User-Agents Bots Data/Screen Scraping

我认为您正在寻找的是 Stack has a ton of Q&A on 的 Screen Scraping (with DOM)。

【讨论】:

我真的不明白上面的内容有什么关系?我完全理解搜索引擎的实体是什么,我特别询问在没有特定选择器的情况下查找相关内容所使用的算法。 @Robert 如果您发现 Google 或其他搜索引擎秘密持有的算法,请创建您自己的搜索引擎公司,因为他们不会共享此信息,因为这将被视为“商业秘密”。 我不是在这里寻找谷歌集群机器人源代码,我正在寻找基于社区的方法,通过遵循内容布局的趋势以编程方式查找相关数据,请阅读我的示例,这不是对于搜索引擎,这是一个内容共享网络 我认为您应该将问题重新命名为“搜索引擎如何找到相关内容?”像“用于内容共享网络的算法/逻辑”只是我的 2 美分 嗯,我特别想知道它的搜索引擎方面,因为这正是需要的,内容共享网络基本上是一个搜索引擎,因为它是一个共享内容的网络.【参考方案2】:

大多数搜索引擎在文档的头部查找标题和元描述,然后在正文中查找标题和文本内容。图像替代标签和链接标题也被考虑在内。上次我读到雅虎使用元关键字标签,但大多数人没有。

您可能想从 Sourceforge https://sourceforge.net/projects/tsep/ 上的搜索引擎项目 (TSEP) 下载开源文件,看看他们是如何做到的。

【讨论】:

链接加 1,但可以说在每个页面上都有某些元素,例如 javascript 可见的版权覆盖,显然版权 div 将包含在正文中,这样的方式我正在寻找的是将它们与实际内容分开,有没有办法使用 PHP DOM 来编译 css 代码,这样你就可以看到哪些元素具有高 z-index 并且是可见的? 没有办法将 CSS 转换为我所知道的 DOM 表示,您需要为此使用文件函数。如果您要搜索具有一致代码结构的单个站点,则整个练习很容易,如果您要搜索多个站点,则要困难得多。另一个链接,请查看webmasterworld.com/perl/3460556.htm 了解更多想法。 -1 大型搜索引擎(即 Google,没有其他人 :D)使用元描述和元关键字进行网站排名... 公平地说,他并没有说他们使用元数据对页面进行排名,而是提取几乎正确的内容! 我不认为我们在这里谈论排名,问题是寻找相关内容。【参考方案3】:

我不在 Google 工作,但大约一年前,我了解到他们有超过 200 个因素来对搜索结果进行排名。当然,最高排名是相关的,所以从这个意义上说,你的问题很有趣。

什么是相关性以及如何计算它?有几种算法,我敢打赌 Google 也有自己的算法,但我知道的是 Pearson Correlation 和 Euclidean Distance。

我推荐的一本关于这个主题(不一定是搜索引擎)的好书是 Toby Segaran (O'Reilly) 的 Programming Collective Intelligence。书中的一些示例展示了如何通过 API 或屏幕抓取从第三方网站获取数据,并找到类似的条目,这非常好。

无论如何,回到谷歌。其他相关技术当然是全文搜索,您可能希望获得一本关于 mysql 或 Sphinx 的好书。 @Chaoley 建议的是 TSEP,这也很有趣。

但实际上,我在这里认识一个名为 Yandex 的俄罗斯搜索引擎的人,他们所做的一切都在 NDA 之下,所以我想你可以接近,但你无法做到完美,除非你在 Google 工作;)

干杯。

【讨论】:

通俗地说:我不是在谈论排名,我是在谈论抓取页面并找到最好的位 在那种情况下,我猜是信息提取和数据挖掘,而不是相关性 我想知道 A 段与 B 段的相关性,方法是使用链接中的关键字、元、标题和链接提交给我时提供的标题,为书 +1,很好,标题看起来很有前途 所以第一步是找到最重要的信息并从两个网站中提取,下一步是计算它们的相关性。再一次,Toby 的书有一个很好的示例,从一堆 RSS 提要中获取数据并将相关源分组,这很好,但更简单,因为 RSS 很短并且支持标签和类别。但是您将不得不在其他地方寻找提取技术。我建议从 Matthew Russell 的“挖掘社交网络”开始。 (是的,我对书很着迷) @kovshenin NDA 是什么意思? :O【参考方案4】:

棘手,但我会采取行动:

图片(如果适用)

页面上的第一张图片 名称中包含字母“logo”的图片 呈现最接近左上角(或右上角)的图像 最常出现在网站其他页面上的图片 小于某些最大尺寸的图像

来自最佳文本片段的

标题标签的内容 元内容描述标签的内容 第一个 h1 标签的内容 第一个 p 标签的内容

将用于我们的搜索引擎的关键字,(堆栈溢出样式)

域名子串 url的子字符串 标题标签的子字符串 字词与页面上最常用词和页面顶部的接近度

元数据关键字、描述、所有图片、更改日志(用于审核和管理目的)

啊!插科打诨!语法错误。

【讨论】:

+1 实际给出的答案与我的问题有些相关,第一个 h1 和第一个 p 标签的原因是什么。 谢谢。第一个“h1”应该是页面最大和最重要的标题;如果它包含搜索词,则该页面更有可能是相关的。同样对于'p';页面上的第一段更有可能包含反映页面其余部分的文字,例如介绍或以下内容的摘要;所以如果它提到搜索词一次或两次,那么整个页面可能是相关的。 我认为您应该编辑您的答案并在评论中包含您所写的内容。 :) 很好的答案,祝你好运;)【参考方案5】:

我只是抓取文本的第一个“段落”。大多数人写故事/问题/什么的方式是他们首先陈述最重要的事情,然后再详细说明。如果您查看任何随机文本,您会发现它在大多数情况下都是有意义的。

例如,您在原始问题中自己做。如果您使用原始问题的前三句话,您就可以很好地总结您正在尝试做的事情。

而且,我自己也是这样做的:第一段总结了我评论的要点。其余的只是例子和阐述。如果你不相信,看看afewrecentarticles我是半随机从谷歌新闻中挑选出来的。好吧,我承认最后一个不是半随机的;)

无论如何,我认为这是一种非常简单的方法,并且在大多数情况下都有效。您可以随时查看元描述、标题和关键字,但如果它们不存在,这可能是一种选择。

希望这会有所帮助。

【讨论】:

【参考方案6】:

Google 还使用称为 Page Rank 的系统,其中 它检查有多少指向网站的链接。假设您正在寻找 C++ 教程,并在 Google 上搜索其中一个。您会发现一个作为最佳结果,这是一个很棒的教程。谷歌知道这一点,因为它搜索了它的网络缓存,发现每个人都在链接到这个教程,同时咆哮它有多好。谷歌认为这是一个很好的教程,并将其作为最佳结果。

它实际上是这样做的,因为它会缓存所有内容,如前所述,根据指向它的链接为每个页面提供一个页面排名。

希望这会有所帮助!

【讨论】:

问题不在于排名页面,而在于寻找与搜索词的相关性。 不正确,未找到与搜索词的相关性,但在我们的系统找到的任何网站中找到相关内容,基本上创建和引擎以视觉方式查找内容【参考方案7】:

为了回答你的一个问题,我现在正在阅读以下书籍,我推荐它:Google's PageRank and Beyond,作者是 Amy Langville 和 Carl Meyer。

轻度数学。在图论、特征分析、马尔可夫模型等方面使用了一些线性代数。我喜欢讨论求解线性方程的迭代方法的部分。我不知道 Google 采用了这些迭代方法。

短书,只有 200 页。包含与文本主要流程不同的“旁白”,以及历史观点。还指向其他最近的排名系统。

【讨论】:

这不是我要问的问题! @RobertPitt:对我来说确实是这样。 “谷歌在解析网络时如何找到相关内容?”这就是谷歌的做法。 “有书吗……”这是一本书。 谢谢你,梅林·摩根-格雷厄姆。重新阅读这个问题,我承认我的回答可能没有抓住重点。然而,罗伯特皮特,(1)是否有必要责备那些自愿提供知识来帮助您解决问题的人,以及(2)如果五个回答者以同样的方式误解了您的问题,是否有可能,也许,只是也许,问题本身可以改进吗?【参考方案8】:

这是一个非常笼统的问题,但却是一个非常好的话题!绝对赞成:) 但是我对目前提供的答案并不满意,所以我决定就此写一个相当长的答案。

我不满意的原因是答案基本上都是正确的(我特别喜欢 kovshenin (+1) 的答案,它与图论非常相关......),但要么在某些方面过于具体因素或过于笼统。

这就像问如何烤蛋糕,你会得到以下答案:

你做了一个蛋糕,然后把它放进烤箱。 你肯定需要加糖! 什么是蛋糕? 蛋糕是个谎言!

您不会满意,因为您不知道什么是好蛋糕。 当然还有很多菜谱。

当然,Google 是最重要的参与者,但根据用例的不同,搜索引擎可能包含非常不同的因素或对它们的权重不同。

例如,用于发现新的独立音乐艺术家的搜索引擎可能会添加恶意软件 包含大量外部链接的艺术家网站。

主流搜索引擎可能会采取完全相反的方式为您提供“相关结果”。

(如前所述)Google 发布了 200 多个因子。 所以网站管理员知道如何优化他们的网站。 很可能还有很多公众不知道(以 Google 为例)。

但在非常笼统和抽象的术语 SEO 优化中,您通常可以将重要的部分分成两组:

    答案与问题的匹配程度如何?要么: 页面内容与搜索词的匹配程度如何?

    答案有多受欢迎/好?要么: 页面排名是多少?

在这两种情况下,重要的是我不是在谈论整个网站或域,而是在谈论具有唯一 URL 的单个页面。

同样重要的是,pagerank 并不代表所有因素,仅代表 Google 归类为受欢迎程度的因素。我所说的好是指与受欢迎程度无关的其他因素。

Google 的官方声明是他们希望向用户提供相关结果。 这意味着所有算法都将针对用户的需求进行优化。

所以在这个冗长的介绍之后(很高兴你还在我身边......)我会给你一个我认为非常重要的因素列表(目前):

第 1 类(答案与问题的匹配程度如何?

您会注意到很多都归结为文档的结构!

该页面主要处理确切的问题。

含义:疑问词出现在页面标题文本或标题段落段落中。 这些关键字的位置也是如此。页面越早越好。 也经常重复(如果不是太多的话,就会以关键字填充的名义出现)。

整个网站处理主题(关键字出现在域/子域中)

单词是本页的重要话题(内部链接锚文本跳转到关键词的位置或锚文本/链接文本包含关键词)。

如果外部链接使用链接文本中的关键字链接到该页面也是如此

第 2 类(页面的重要性/受欢迎程度如何?)

您会注意到并非所有因素都指向这个确切的目标。 包括一些(尤其是谷歌)只是为了提升页面, 那……嗯……那是应得/应得的。

内容为王!

在网络的其余部分中找不到或只有很少的独特内容的存在会带来提升。 这主要是通过网站上通常很少使用的单词(重要单词)的无序组合来衡量的。但也有更复杂的方法。

新近 - 越新越好

历史变化(页面过去更新的频率。变化是好的。)

外部链接流行度(有多少链接?)

如果一个页面链接另一个页面,如果该页面本身具有较高的页面排名,则该链接的价值更高。

外部链接多样性

基本上来自不同根域的链接,但其他因素也起作用。 甚至连链接站点的网络服务器在地理上(根据它们的 IP 地址)的分离程度等因素。

信任等级

例如,如果大型的、受信任的、已建立的网站链接到您的编辑内容,您将获得信任等级。 这就是为什么来自The New York Times 的链接比一些奇怪的新网站更有价值,即使它的PageRank 更高!

域信任

如果您的域受到信任,您的整个网站都会提升您的内容。 这里有不同的因素。当然,从受信任的网站链接到您的域,但如果您与重要网站位于同一个数据中心,它甚至会很好。

中的主题特定链接。

如果可以解析到某个主题的网站链接到你,并且查询也可以解析到这个主题,那就太好了。

链接随时间分布。

如果你在短时间内获得了很多链接,这对你现在和不久的将来都有好处。但后期就不那么好了。 如果您缓慢而稳定地获得链接,那么对于“永恒”的内容会有好处。

来自受限制域的链接

来自.gov 域的链接很有价值。

用户点击行为

你的搜索结果的点击率是多少?

在现场花费的时间

谷歌分析跟踪等。如果用户点击返回或打开您的结果后点击另一个结果,也会被跟踪。

收集的用户数据

投票、评分等、Gmail 中的引用等

现在我要介绍第三类,上面的一两点会归入这一类,但我没想到……类是:

** 总体而言,您的网站有多重要/好 **

根据您网站的质量,您的所有网页都会有所排名

因素包括:

良好的网站架构(易于导航、结构化。站点地图等...)

如何建立(长期存在的域更有价值)。

主机信息(您附近还托管了哪些其他网站?

您的确切姓名的搜索频率。

最后但并非最不重要的一点是,我想说很多这些因素可以通过语义技术来丰富,并且可以引入新的因素。

例如,有人可能会搜索泰坦尼克号,而您有一个关于冰山的网站……可以设置相关性,这可能会被反映。

新引入的语义标识符。比如OWL标签在未来可能会产生巨大的影响。

例如,关于电影泰坦尼克号的博客可以在此页面上放置一个标志,表明它与***关于同一部电影的文章中的内容相同。

这种链接目前正在大力开发和建立,没有人知道它会被如何使用。

可能会过滤掉重复的内容,只显示最重要的相同内容?或者也许反过来?您会看到很多与您的查询相匹配的页面。即使它们不包含您的关键字?

Google 甚至会根据您的搜索查询主题应用不同相关性的因素!

【讨论】:

感谢您抽出宝贵的时间来创建如此丰富的答案,但请仔细阅读我的问题,因为我不是在谈论 SEO,这与搜索引擎无关,除了我想采用一些不同用途的技术 @RoberPitt - 这是为了找到相关内容。 Google 实现所有这些以查找 相关 内容(正如您在第一行中询问的那样)。我认为他很好地回答了你的问题。只是比您想要的更详细。除了 SEO,无非是网页设计师向 Google 展示 相关 内容以提高页面排名。漂亮的链接、h1 标记、页面链接等都是 Google 搜索以查找 相关 内容的方法。【参考方案9】:

有许多高度复杂的算法可以从标签汤中提取相关内容。如果您正在寻找自己构建可用的东西,您可以查看readability 的源代码并将其移植到 php。我最近做了类似的事情(不幸的是,无法共享代码)。

可读性的基本逻辑是查找所有块级标签并计算其中的文本长度,而不是计算子级。然后每个父节点被授予其每个子节点权重的片段(一半)。这用于资助拥有最多纯文本的最大块级标签。从这里开始,内容被进一步清理。

无论如何它都不是防弹的,但它在大多数情况下都能正常工作。

【讨论】:

【参考方案10】:

实际回答您的问题(而不仅仅是一般关于搜索引擎的问题):

我相信像 Instapaper 那样做会是最好的选择。

instapaper 背后的逻辑(我没有创建它,所以我当然不知道内部工作原理,但很容易预测它的工作原理):

    在类似文本的元素中找到最大的一堆文本(依赖段落标签,虽然非常优雅,但不适用于那些使用 div 而不是 p 的蹩脚网站)。基本上,您需要在块元素(div、ps 等)和文本量之间找到良好的平衡。提出一些阈值:如果 X 个单词未被标记除,则该文本属于主体文本。然后扩展到保持某种文本/标记阈值的兄弟姐妹。

    一旦你完成了最困难的部分——找到属于实际文章的文本——它就变得非常容易了。您可以在该文本周围找到第一张图像并将其用作缩略图。这样您就可以避免广告,因为它们在标记方面不会那么接近正文。

    最后,想出关键字是有趣的部分。你可以做很多事情:按频率排序单词,消除噪音(ands,ors 等等),你就有了一些不错的东西。将其与“检测到的正文文本区域上方突出的短文本元素”(即您的文章的标题)、页面标题、元数据混合在一起,您就有了非常美味的东西。

如果实施得当,所有这些想法都将是非常安全的,因为它们不依赖于语义标记——通过使您的代码变得复杂,您可以确保即使是非常草率的网站也能被正确检测到。

当然,它有性能差的缺点,但我想它不应该那么差。

提示:对于人们经常链接的大型网站,您可以手动设置包含正文(我在第 1 点中描述的)的 HTML 元素。这将确保正确性并加快处理速度。

希望这会有所帮助。

【讨论】:

【参考方案11】:

我会考虑这些构建代码

检查synonyms 和首字母缩略词 在图像上应用 OCR 以作为文本搜索(Abby Fine Reader 和 Recostar 很不错,Tesseract 是免费且很好的(没有很好的阅读器 :)) 粗细字体(大小、粗细、下划线、颜色) 根据其在页面上的位置加权内容(如页面上方的内容更相关)

还有:

要求网站管理员定义页面的可选文本

您还可以在 Google 搜索 API 中检查是否可以找到任何有用的信息:http://code.google.com/intl/tr/apis/ajaxsearch/

【讨论】:

【参考方案12】:

这里有一些很好的答案,但听起来他们没有回答你的问题。也许这个会。

您要查找的内容称为信息检索

它通常使用词袋模型

假设你有两个文件:

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

然后,您使用余弦相似度度量计算文档之间的相似度。与文档 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

【讨论】:

【参考方案13】:

我现在面临同样的问题,经过一些尝试,我发现了一些适用于创建网页 sn-p 的东西(必须微调):

获取所有的html 删除正文中的脚本和样式标签及其内容(重要) 删除不必要的空格、制表符、换行符。 现在在 DOM 中导航以捕获 div、p、article、td(其他?)以及每一个 .取当前元素的html .获取元素内容的“纯文本”版本 .为该元素分配分数:文本长度 * 文本长度 / html 长度 现在对所有分数进行排序,取最大的。

这是识别标记平衡相对较低的最长文本的一种快速(且肮脏)的方法,就像在正常内容中发生的情况一样。在我的测试中,这似乎非常好。只需加水;)

除此之外,您还可以搜索“og:”元标记、标题和描述、h1 和许多其他次要技术。

【讨论】:

但是更高级的技术需要渲染页面并查看“更大”和“最明显”(例如,不在页脚中)段落

以上是关于搜索引擎如何找到相关内容?的主要内容,如果未能解决你的问题,请参考以下文章

baidu Hacking

内容社区行业搜索最佳实践

超级搜索术,提升解决问题的能力

CSDN搜索小技巧-快速找到最新&高质量内容

如何在 Impala 中获取当前数据库名称?我实际上为此搜索了很多,但我没有找到任何相关的东西

如何从 mysql DB 中搜索与 mojolicious perl 中选定的下拉列表相关的内容