Google在解析网络时如何找到相关内容?
比方说,Google使用PHP原生DOM库来解析内容。他们有什么方法可以在网页上找到最相关的内容?
我的想法是它将搜索所有段落,按每个段落的长度排序,然后从可能的搜索字符串和查询参数中找出每个段落的相关百分比。
假设我们有这个网址:
http://domain.tld/posts/stackoverflow-dominates-the-world-wide-web.html
现在从该URL我会发现HTML文件名具有高度相关性,因此我会看到该字符串与页面中所有段落的比较接近!
当你共享一个页面时,一个非常好的例子就是Facebook分享。 Facebook快速设置链接并带回图像,内容等等。
我认为某种计算方法最好,根据周围元素和元数据计算出相关性百分比。
是否有关于内容解析最佳做法的书籍/信息,包括如何从网站获取最佳内容,可以讨论的任何算法或任何深入的回复?
我想到的一些想法是:
div
容器的宽度和高度,并按(W + H)排序 - @Benoit 我之所以需要这些信息:
我正在建立一个网站,网站管理员会向我们发送链接,然后我们会列出他们的网页,但我希望网站管理员提交一个链接,然后我会抓取该网页查找以下信息。
希望你们能够理解这不适用于搜索引擎,但搜索引擎处理内容发现的方式与我需要的内容相同。
我不是要求商业机密,我问你个人的做法是什么。
答案 0 :(得分:29)
答案 1 :(得分:21)
整蛊,但我会刺伤:
图片(如适用)
A<来自最佳文本片段的255段
将用于我们搜索引擎的关键字,(堆栈溢出样式)
元数据关键字,描述,所有图像,更改日志(用于审核和管理)
答案 2 :(得分:11)
我不在谷歌工作,但大约一年前我读过他们有超过200个因素来排名他们的搜索结果。当然,排名最高的是相关性,因此从这个意义上说,你的问题非常有趣。
什么是相关性,你如何计算它?有几种算法,我敢打赌Google有自己的算法,但我知道的是Pearson Correlation和Euclidean Distance。
我在这个主题(不一定是搜索引擎)上建议的好书是Toby Segaran(O'Reilly)的Programming Collective Intelligence。本书中的一些示例显示了如何通过API或屏幕抓取从第三方网站获取数据,以及查找类似的条目,这非常好。
无论如何,回到谷歌。其他相关技术当然是全文搜索,你可能想要获得一本关于MySQL或Sphinx的好书。 @Chaoley建议TSEP也很有意思。
但实际上,我知道来自俄罗斯搜索引擎Yandex的人,他们所做的一切都是在NDA之下,所以我猜你可以接近,但除非你在谷歌工作,否则你无法完美;)
干杯。
答案 3 :(得分:3)
实际上回答你的问题(而不仅仅是关于搜索引擎):
我认为有点像Instapaper会是最好的选择。
instapaper背后的逻辑(我没有创建它所以我当然不知道内部工作,但很容易预测它是如何工作的):
在类似文本的元素中查找最大的文本(依赖于段落标记,虽然非常优雅,但不适用于那些使用div而不是p的糟糕网站)。基本上,您需要在块元素(div,ps等)和文本量之间找到良好的平衡。想出一些阈值:如果X个单词保持不被标记分开,那么该文本属于主体文本。然后扩展到兄弟姐妹,保持某种文本/标记阈值。
一旦你做了最困难的部分 - 找到哪些文字属于实际文章 - 它变得非常容易。您可以在该文本周围找到第一个图像,并将其用作缩略图。这样您就可以避免广告,因为它们不会接近正文标记。
最后,提出关键字是有趣的部分。你可以做很多事情:按频率订购单词,去除噪音(ands,ors等),你就会有一些不错的东西。将其与“检测到的正文文本区域上方的突出短文本元素”(即您的文章标题),页面标题,元组合混合,您就会有一些美味的东西。
如果实施得当,所有这些想法都将非常具有防弹性,因为它们不依赖于语义标记 - 通过使您的代码变得复杂,您可以确保即使是非常草率编码的网站也能被正确检测到。
当然,它伴随着糟糕表现的缺点,但我想它不应该那么差。
提示:对于人们经常链接的大型网站,您可以手动设置包含正文文本(我在第1点上描述)的HTML元素。这将确保正确性并加快速度。
希望这有点帮助。
答案 4 :(得分:2)
有许多高度复杂的算法可用于从标签汤中提取相关内容。如果您正在构建可用于自己的东西,您可以查看readability的源代码并将其移植到php。我最近做了类似的事情(不幸的是,不能共享代码)。
可读性的基本逻辑是找到所有块级标签并计算其中的文本长度,而不是计算子项。然后,每个父节点被授予其每个子节点的权重的一半(一半)。这用于资助具有最大纯文本量的最大块级标记。从这里开始,内容将被进一步清理。
它无论如何都不是防弹,但在大多数情况下效果都很好。
答案 5 :(得分:1)
大多数搜索引擎在文档的头部查找标题和元描述,然后在正文中标题1和文本内容。还考虑了图像alt标签和链接标题。最后我读到雅虎使用的是meta关键字标签,但大多数都没有。
您可能希望从Sourceforge https://sourceforge.net/projects/tsep/上的搜索引擎项目(TSEP)下载开源文件,并了解他们是如何做到的。
答案 6 :(得分:1)
我只是抓住文本的第一段“段落”。大多数人写故事/问题的方式/他们首先陈述最重要的事情,然后详细说明。如果您查看任何随机文本,您可以在大多数情况下看到它是有意义的。
例如,您可以在原始问题中自行完成。如果你采用原始问题的前三个句子,你就可以很好地总结你想要做的事情。
而且,我自己也是这样做的:我的评论的要点总结在第一段。其余的只是例子和阐述。如果您不相信,请查看我从谷歌新闻中随机挑选的a few recent articles。好吧,最后一个不是半随机的,我承认;)
无论如何,我认为这是一种非常简单的方法,大部分时间都可以使用。您可以随时查看元描述,标题和关键字,但如果不存在,则可能是一种选择。
希望这有帮助。
答案 7 :(得分:1)
我会考虑构建代码
此外:
您还可以查看是否可以在Google搜索API中找到有用的内容:http://code.google.com/intl/tr/apis/ajaxsearch/
答案 8 :(得分:1)
我现在面临同样的问题,经过一些尝试,我找到了一些可用于创建网页代码段的内容(必须进行微调):
这是一种快速(且肮脏)的方法来识别具有相对较低的标记平衡的最长文本,就像正常内容中发生的那样。在我的测试中,这似乎非常好。只需加水;)
除此之外,您还可以搜索“og:”元标记,标题和说明,h1以及许多其他小技巧。
答案 9 :(得分:0)
谷歌搜索“网络抓取工具,机器人,蜘蛛程序和智能代理”,也可以单独试用它们以获得单独的结果。
我认为您正在寻找的是Stack has a ton of Q&A上的屏幕抓取(带有DOM)。
答案 10 :(得分:0)
Google还使用了一个名为Page Rank的系统 它检查了一个站点的链接数量。假设您正在寻找C ++教程,并在Google上搜索一个。你会发现一个是最好的结果,这是一个很棒的教程。谷歌知道这一点,因为它搜索了它的网络缓存,并看到每个人都链接到本教程,同时咆哮它有多好。谷歌认为这是一个很好的教程,并将其作为最佳结果。
它实际上是这样做的,因为它会缓存所有内容,如前所述,根据链接指向每个页面的页面排名。
希望这有帮助!
答案 11 :(得分:0)
为了回答你的一个问题,我现在正在阅读以下书籍,我推荐它:Google's PageRank and Beyond,Amy Langville和Carl Meyer。
轻度数学。在图论理论背景,特征分析,马尔可夫模型等中使用一些线性代数。我喜欢谈论用于求解线性方程的迭代方法的部分。我不知道谷歌采用了这些迭代方法。
短篇小说,只有200页。包含与文本主流不同的“旁白”,以及历史视角。还指出其他最近的排名系统。
答案 12 :(得分:0)
这里有一些很好的答案,但听起来他们没有回答你的问题。也许这个会。
您所寻找的信息检索
它通常使用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
无论如何,你如何计算这两份文件中最“相关”的?方法如下:
您可以计算单词频率,以获取“关键字”。
然后,为每个单词创建一列,并计算单词对文档的重要性,以及它在所有文档中的重要性。这称为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书: