60

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

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

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

假设我们有这个 URL:

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

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

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

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

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


我想到的一些想法是:

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

我需要这些信息的原因:

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

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

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

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

4

13 回答 13

29

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

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

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

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

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

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

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

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

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

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

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

  2. 答案有多受欢迎/好?或者:pagerank 是什么?

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 内容为王!

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

  • 新近度 - 越新越好

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

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

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

  • 外部链接多样性

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

  • 信任等级

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

  • 域信任

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

  • 中的主题特定链接。

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

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

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

  • 来自受限制域的链接

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

  • 用户点击行为

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

  • 在现场花费的时间

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

  • 收集的用户数据

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

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

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

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

因素包括:

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

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

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

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

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

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

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

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

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

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

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

于 2010-10-27T18:52:43.700 回答
21

棘手,但我会采取刺伤:

图片(如果适用)

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

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

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

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

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

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

  • 啊!插科打诨!语法错误。
于 2010-10-22T11:09:48.783 回答
11

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

什么是相关性以及如何计算它?有几种算法,我打赌谷歌有自己的,但我知道的是Pearson CorrelationEuclidean Distance

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

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

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

干杯。

于 2010-10-21T10:49:40.407 回答
3

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

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

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

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

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

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

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

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

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

希望这个对你有帮助。

于 2010-10-28T00:39:55.440 回答
2

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

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

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

于 2010-10-27T19:49:09.497 回答
1

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

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

于 2010-10-19T14:44:24.673 回答
1

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

例如,您在原始问题中自己做。如果您使用原始问题的前三句话,那么您对您正在尝试做的事情有一个很好的总结。

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

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

希望这可以帮助。

于 2010-10-24T22:07:52.653 回答
1

我会考虑这些构建代码

  • 检查同义词和首字母缩略词
  • 在图像上应用 OCR 以作为文本搜索(Abby Fine Reader 和 Recostar 很好,Tesseract是免费的而且很好(没有很好的阅读器那么好 :))
  • 重量字体以及(大小,粗体,下划线,颜色)
  • 内容权重取决于其在页面上的位置(如页面上方的内容更相关)

还:

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

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

于 2010-10-28T09:19:51.643 回答
1

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

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

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

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

于 2012-07-02T15:13:58.783 回答
0

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

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

于 2010-10-19T13:36:39.267 回答
0

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

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

希望这可以帮助!

于 2010-10-25T03:51:19.453 回答
0

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

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

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

于 2010-10-25T04:32:19.127 回答
0

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

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

它通常使用词袋模型

假设您有两个文件:

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

于 2010-11-26T04:44:28.560 回答