搜索引擎如何找到相关内容?[已结束]

How do search engines find relevant content? [closed]

提问人:RobertPitt 提问时间:10/19/2010 最后编辑:Has QUIT--Anony-MousseRobertPitt 更新时间:7/3/2012 访问量:6376

问:


我们不允许向读者、工具、软件库等寻求推荐的问题。您可以编辑问题,以便用事实和引文来回答。

6个月前关闭。

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

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

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

假设我们有这个 URL:

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

现在,从该 URL 中,我将计算出 HTML 文件名将具有高度相关性,因此我将看到该字符串与页面中所有段落的比较程度!

一个很好的例子是Facebook分享,当你分享一个页面时。Facebook 会迅速机器人化链接并带回图像、内容等。

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

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


我想到的一些想法是:

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

我需要此信息的原因:

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

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

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

我不是在要求商业机密,我是在问你个人对此的态度是什么。

PHP 解析 屏幕抓取 相关性

评论

0赞 Benoit 10/19/2010
这是一个很好的问题。我渴望看到答案。我认为页面标题中的标签以及页面标题占了很大一部分,以及最大 div 区域中的第一段(按宽度×长度排序)。H1、H2、B、I、EM、强标签也应该相关。<meta>
0赞 RobertPitt 10/19/2010
是的,但元标记是可选的,建议使用 facebook 等应用程序,但有一半的时间网站管理员不使用它们,所以总是必须有一个逻辑回退,关于 x/y :) 的好点
0赞 NikiC 10/21/2010
@Benoit:谷歌不使用元关键词或描述来对网站在 serp 中的排名。(但它经常在搜索结果中显示元描述)
2赞 BCS 10/27/2010
几乎任何能给出合理答案的人都将获得保密协议,并且报酬丰厚。这很可能是当今 CS 中最有价值的问题。
0赞 Tegra Detra 10/28/2010
wordnet.princeton.edu一个不为人知但复杂的话题。

答:

0赞 Phill Pafford 10/19/2010 #1

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

我认为您正在寻找的是 Screen Scraping(使用 DOM),Stack 对此有大量的问答

评论

1赞 RobertPitt 10/19/2010
我真的看不出上面的任何内容有什么关系?我完全了解搜索引擎的实体是什么,我特别询问用于在没有特定选择器的情况下查找相关内容的算法。
0赞 Phill Pafford 10/19/2010
@Robert,如果您发现Google或其他搜索引擎的算法是秘密的,请创办自己的搜索引擎公司,因为他们不会共享此信息,因为这将被视为“商业秘密”。
0赞 RobertPitt 10/19/2010
我不是在这里寻找 Google 的集群机器人源代码,而是在寻找基于社区的方法,通过遵循内容布局的趋势来以编程方式查找相关数据,请阅读我的例子,这不是针对搜索引擎,而是针对内容共享网络
1赞 Phill Pafford 10/19/2010
我认为你应该把你的问题重新命名为“搜索引擎如何找到相关内容?”,比如“用于内容共享网络的算法/逻辑”,只是我的 2 美分
0赞 RobertPitt 10/19/2010
好吧,我特别想知道它的搜索引擎方面,因为这正是所需要的,内容共享网络基本上是一个搜索引擎,因为它是一个共享内容的网络
1赞 Chaoley 10/19/2010 #2

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

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

评论

0赞 RobertPitt 10/19/2010
链接加 1,但假设每个页面上都有某些元素,例如 javascript 可见的版权覆盖,显然版权 div 将包含在正文中,我搜索的方法是将它们与实际内容分开,有没有办法使用 PHP DOM 来编译 css 代码,以便您可以看到哪些元素具有高 z 索引并且是可见?
0赞 Chaoley 10/20/2010
没有办法将 CSS 变成我所知道的 DOM 表示,您需要为此使用文件函数。如果你正在搜索一个具有一致代码结构的站点,那么整个练习很容易,如果你想搜索多个站点,那就更难了。另一个链接,请查看 webmasterworld.com/perl/3460556.htm 以获取更多想法。
5赞 NikiC 10/21/2010
-1 大型搜索引擎(即谷歌,没有其他:D)使用元描述和元关键字进行网站排名......
1赞 Mouhannad 10/21/2010
公平地说,他并没有说他们使用元数据来对页面进行排名,而是提取几乎正确的内容!
2赞 kovshenin 10/21/2010
我不认为我们在这里谈论的是排名,问题在于寻找相关内容。
11赞 kovshenin 10/21/2010 #3

我不在谷歌工作,但大约一年前,我读到他们有 200 多个因素来对搜索结果进行排名。当然,排名靠前的是相关性,所以从这个意义上说,你的问题非常有趣。

什么是相关性,你如何计算它?有几种算法,我敢打赌谷歌有自己的算法,但我知道的是皮尔逊相关欧几里得距离

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

无论如何,回到谷歌。其他相关性技术当然是全文搜索,你可能想得到一本关于MySQL或狮身人面像的好书。@Chaoley建议的是TSEP,这也很有趣。

但实际上,我认识来自一家名为Yandex的俄罗斯搜索引擎的人,他们所做的一切都在保密协议下,所以我想你可以接近,但你不可能变得完美,除非你在谷歌工作;)

干杯。

评论

0赞 RobertPitt 10/21/2010
用外行的话来说:我不是在谈论排名,我是在谈论抓取页面并找到最好的部分
0赞 kovshenin 10/21/2010
在这种情况下,我猜是信息提取和数据挖掘,而不是相关性
0赞 RobertPitt 10/21/2010
我想知道段落 A 与段落 B 的相关性如何,通过使用链接、元、标题和链接提交给我时提供的标题,+1 为这本书,非常好,标题看起来很有前途
3赞 kovshenin 10/21/2010
因此,第一步是找到最重要的信息并从两个网站中提取,下一步是计算它们的相关性。再一次,Toby的书有一个很好的样本,从一堆RSS提要中获取数据并对相关来源进行分组,这很好,但更简单,因为RSS很短,并且支持标签和类别。但是您将不得不在其他地方寻找提取技术。我建议从马修·罗素(Matthew Russell)的《挖掘社交网络》(Mining the Social Web)开始。(是的,我对书很着迷)
0赞 Jo Smo 8/20/2014
@kovshenin NDA是什么意思?:O
21赞 John Mee 10/22/2010 #4

很棘手,但我会试一试:

图像(如果适用)

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

来自最佳文本片段的 < 255 段

  • 标题标签的内容
  • 元内容描述标记的内容
  • 第一个 H1 标签的内容
  • 第一个 P 标签的内容

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

  • 域名的子字符串
  • URL 的子字符串
  • title 标签的子字符串
  • 术语与页面上和页面顶部最常用的单词之间的接近度

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

  • AK!插科打诨!语法错误。

评论

3赞 John Mee 10/22/2010
感谢。第一个“h1”应该是页面中最大和最重要的标题;如果它包含搜索词,那么该页面更有可能是相关的。“p”也是如此;页面上的第一段更有可能包含反映页面其余部分的单词,例如引言或对以下内容的总结;因此,如果它提到搜索词一两次,那么整个页面可能是相关的。
0赞 Sasha Chedygov 10/25/2010
我认为你应该编辑你的答案,并在你的评论中包括你写的内容。:)
1赞 Edward 10/25/2010 #5

我只会抓住文本的第一个“段落”。大多数人写故事/问题/任何东西的方式是,他们首先陈述最重要的事情,然后详细说明。如果你看任何随机文本,你会发现它在大多数情况下是有道理的。

例如,您在原始问题中自己做。如果你把原来问题的前三句话拿出来,你就对你想做的事情有一个很好的总结。

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

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

希望这会有所帮助。

0赞 Super_ness 10/25/2010 #6

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

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

希望这有帮助!

评论

0赞 Sasha Chedygov 10/25/2010
问题不在于对页面进行排名,而在于找到与搜索词的相关性。
0赞 RobertPitt 10/28/2010
不正确,没有找到与搜索词的相关性,而是在我们的系统找到的任何网站中找到相关内容,基本上是创建和引擎,以视觉方式查找内容
0赞 Steve Tjoa 10/25/2010 #7

为了回答你的一个问题,我现在正在阅读以下书籍,我推荐它:谷歌的PageRank及其他,作者是艾米·兰维尔(Amy Langville)和卡尔·迈耶(Carl Meyer)。

温和的数学。在图论上下文中使用一些线性代数、特征分析、马尔可夫模型等。我喜欢讨论求解线性方程的迭代方法的部分。我不知道谷歌采用了这些迭代方法。

短书,只有200页。包含偏离文本主流的“旁白”,以及历史视角。还指出了其他最近的排名系统。

评论

0赞 RobertPitt 10/25/2010
这不是我的问题要问的!
0赞 Merlyn Morgan-Graham 10/28/2010
@RobertPitt:在我看来确实是这样。“谷歌在解析网络时如何找到相关内容?”谷歌就是这样做的。“有书吗......”这是一本书。
0赞 Steve Tjoa 10/28/2010
谢谢你,梅林·摩根-格雷厄姆。重新阅读这个问题,我承认我的答案可能没有抓住重点。然而,RobertPitt,(1)是否有必要责备那些自愿提供知识来帮助你解决问题的人,以及(2)如果五个回答者以同样的方式误解了你的问题,那么问题本身是否有可能得到改进?
29赞 The Surrican 10/28/2010 #8

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

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

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

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

你不会满足,因为你不知道什么是好蛋糕。 当然,还有很多或互惠。

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

例如,用于发现新的独立音乐艺术家的搜索引擎可能会放一个malus 艺术家网站有很多外部链接。

主流搜索引擎可能会做完全相反的事情来为您提供“相关结果”。

谷歌发布的(如前所述)有 200 多个因素。 因此,网站管理员知道如何优化他们的网站。 很可能还有更多公众不知道的(在谷歌的案例中)。

但是在非常无聊和抽象的术语SEO优化中,你通常可以将重要的部分分为两组:

  1. 答案与问题的匹配程度如何?艺术 页面内容与搜索词的匹配程度如何?

  2. 答案有多受欢迎/好?艺术 PageRank是多少?

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

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

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

所以经过这么长的介绍(很高兴你还和我在一起......我将为您提供我认为非常重要的因素列表(目前):

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

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

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

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

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

  • 单词是此页面中的一个重要主题(内部链接锚文本跳转到关键字的位置或锚文本/链接文本包含关键字)。

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

类别 2(页面有多重要/受欢迎?

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

  • 内容为王!

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

  • 新近度 - 越新越好

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

  • 外部链接受欢迎程度(有多少个链接?

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

  • 外部链接多样性

基本上是来自不同根域的链接,但其他因素也起作用。 诸如链接站点的 Web 服务器在地理位置上的分离程度(根据其 IP 地址)等因素。

  • 信任等级

例如,如果大型的、受信任的、具有编辑内容的成熟网站链接到您,您将获得信任等级。 这就是为什么《纽约时报》的链接比一些奇怪的新网站更有价值,即使它的PageRank更高!

  • 域信任

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

  • 特定主题的链接。

如果可以解析为主题的网站链接到您,并且查询也可以解析为此主题,那就太好了。

  • 链接随时间推移的分布。

如果你在短时间内获得了很多链接,这将在这个时候和之后的不久的将来对你有好处。但后来就不那么好了。 如果你缓慢而稳定地获得链接,它将对你有好处,因为它是“永恒的”。

  • 来自受限制域的链接

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

  • 用户点击行为

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

  • 在现场花费的时间

谷歌分析跟踪等。如果用户在打开您的结果后单击返回或单击其他结果,也会对其进行跟踪。

  • 收集的用户数据

投票、评级等,Gmail中的参考资料等。

现在我将介绍第三类,上面的一两点将进入这一类,但我没有想到......类别是:

** 您的网站总体上有多重要/好**

根据您网站的质量,您的所有页面都会排名上升一点

因素包括:

  • 良好的网站架构(易于导航,结构化。网站地图等

  • 建立方式(长期存在的域名更有价值)。

  • 寄宿商信息(您附近还有哪些其他网站?

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

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

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

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

例如,一个关于电影《泰坦尼克号》的博客可以在这个页面上放置一个标志,表明它与维基百科上关于同一部电影的文章内容相同。

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

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

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

评论

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

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

可读性的基本逻辑是找到所有块级标签并计算其中文本的长度,而不是计算子级。然后,每个父节点都会获得其每个子节点权重的片段(一半)。这用于为具有最大纯文本量的最大块级标记提供资金。从这里开始,内容被进一步清理。

无论如何,它都不是防弹的,但在大多数情况下效果很好。

3赞 flixic 10/28/2010 #10

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

我相信像 Instapaper 那样做一点将是最好的选择。

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

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

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

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

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

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

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

希望这能有所帮助。

1赞 honibis 10/28/2010 #11

我会考虑这些构建代码

  • 检查同义词和首字母缩略词
  • 在图像上应用 OCR 以搜索文本(Abby Fine Reader 和 Recostar 很好,Tesseract 是免费且精细的(没有 Fine Reader :)那么精细)
  • 粗细字体(大小、粗体、下划线、颜色)
  • 根据内容在页面上的位置对内容进行加权(例如页面上侧的内容更相关)

也:

  • 要求网站站长定义网页的可选文本

您还可以在 Google 搜索 API 上查看是否能找到任何有用的东西:http://code.google.com/intl/tr/apis/ajaxsearch/

0赞 Neil McGuigan 11/26/2010 #12

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

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

它通常使用 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

无论如何,您如何计算两个文档中最“相关”的?方法如下:

  1. 标记每个文档(分解为单词,删除所有非字母)
  2. 所有内容均以小写
  3. 删除停用词(和等)
  4. 考虑词干提取(删除后缀,请参阅 Porter 或 Snowball 词干提取算法)
  5. 考虑使用 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

1赞 Ludovico Grossi 7/2/2012 #13

我现在面临同样的问题,经过一些尝试,我找到了可用于创建网页片段的方法(必须进行微调):

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

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

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

评论

0赞 Ludovico Grossi 7/2/2012
但是,更高级的技术需要呈现页面并查看“更大”和“最明显”(例如不在页脚中)段落