代码之家  ›  专栏  ›  技术社区  ›  RobertPitt

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

  •  60
  • RobertPitt  · 技术社区  · 14 年前

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

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

    假设我们有这个网址:

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

    现在从这个URL我可以得出HTML文件名的相关性很高,所以我可以看到这个字符串与页面中的所有段落相比有多接近!

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

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


    我的一些想法是:

    • 按纯文本长度查找所有段落和顺序
    • 不知何故找到 div 集装箱和订单(W+H)—@Benoit
    • 检查元关键字、标题、描述和段落内的相关性
    • 检查对象数据,例如视频,并从最大的段落/内容div中计算节点数
    • 从分析的前几页中找出相似之处

    我需要这些信息的原因是:

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

    • 图像(如适用)
    • 将用于搜索引擎的关键字(堆栈溢出样式)

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

    我不是在问商业机密,我是在问你的个人方法。

    13 回复  |  直到 12 年前
        1
  •  29
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    这是一个很一般的问题,但也是一个很好的话题!肯定是投了赞成票:) 不过,我对目前提供的答案并不满意,所以我决定就此写一个相当长的答案。

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

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

    当然也有很多回报。

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

    例如,一个搜索引擎发现新的独立音乐艺术家可能会把一个马吕斯

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

    谷歌已经发布了200多个因素。 所以网站管理员知道如何优化他们的网站。

    但从抽象的角度来说 SEO

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

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

    在这两种情况下,重要的是我不是在谈论整个网站或域名,我是在谈论一个唯一的网址的单一网页。

    同样重要的是,pagerank并不能代表所有的因素,只有那些被谷歌归类为受欢迎的因素。好吧,我指的是其他与受欢迎程度无关的因素。

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

    因此,在经过长时间的介绍(很高兴你仍然和我在一起……)之后,我将给你一份我认为非常重要的因素清单(目前):

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

    • 这一页主要讨论确切的问题。

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

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

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

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

    你会注意到并不是所有的因素都指向这个确切的目标。 其中一些被收录(特别是被谷歌收录)只是为了给页面一个提振,

    • 内容为王!

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

    • 近期-更新更好

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

    如果一个页面链接到另一个页面,那么如果该页面本身具有较高的pagerank,那么该链接的价值会更大。

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

    • 信任等级

    例如,如果大的,可信的,已建立的网站与编辑内容链接到你,你得到一个信任排名。 这就是为什么 The New York Times 比一些奇怪的新网站更值钱,即使它的PageRank更高!

    如果你的域名是可信的,你的整个网站都会提升你的内容。 不同的因素在这里起作用。当然,从受信任的stie到你的域的链接,但如果你和重要网站在同一个数据中心,它甚至会做得很好。

    • 中特定于主题的链接。

    如果网站可以解析为一个主题链接到你和查询也可以解析为这个主题,这是很好的。

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

    如果你缓慢和稳定的赚取链接,这将有利于你的内容是“永恒的”。

    来自 .gov 域名很值钱。

    • 用户点击行为

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

    • 现场时间

    • 收集的用户数据

    投票、评级等,Gmail中的推荐信等。

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

    你所有的网页都会根据你网站的质量进行排名

    因素包括:

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

    • 寄宿信息(你附近还有哪些网站?

    最后,但并非最不重要的是,我想说的是,语义技术可以丰富许多这些因素,并可以引入新的因素。

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

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

    这种联系目前正在大力发展和建立中,没有人知道它将如何使用。

    可能重复的内容会被过滤掉,而只显示同一内容中最重要的内容?或者反过来?你得到了很多与你的查询匹配的页面。即使他们不包含你的关键字?

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

        2
  •  21
  •   John Mee    14 年前

    很棘手,但我要试试:

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

    距最佳文本片段255段

    • 元内容描述标记的内容
    • 第一个h1标记的内容

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

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

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

    • ak!废话!语法错误。
        3
  •  11
  •   kovshenin    14 年前

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

    我建议一本关于这个主题的好书(不一定是搜索引擎)是 Programming Collective Intelligence 托比·塞加拉(奥雷利)。本书中的一些示例展示了如何通过api或屏幕抓取从第三方网站获取数据,并找到类似的条目,这非常好。

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

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

    干杯。

        4
  •  3
  •   flixic    14 年前

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

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

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

    1. 在类似文本的元素中找到最大的一堆文本(依赖段落标记,虽然非常优雅,但对于那些使用div而不是p的糟糕站点来说是行不通的)。基本上,您需要在块元素(div、ps等)和文本量之间找到良好的平衡。提出一些阈值:如果X个单词数不被标记分割,则该文本属于主体文本。然后展开到保持某种文本/标记阈值的同级。

    2. 一旦你做了最困难的部分,找到什么文本属于实际的文章,它变得相当容易。你可以在文本周围找到第一个图像并将其用作缩略图。这样你就可以避免广告,因为广告不会太接近正文文本标记。

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

    当然,这也会带来糟糕表现的负面影响,但我想不应该那么糟糕。

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

    希望这有帮助。

        5
  •  2
  •   troelskn    14 年前

    从标签汤中提取相关内容有很多非常复杂的算法。如果你想建立一些有用的自我,你可以看看源代码 readability

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

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

        6
  •  1
  •   Chaoley    14 年前

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

    https://sourceforge.net/projects/tsep/ 看看他们是怎么做到的。

        7
  •  1
  •   Edward    14 年前

    例如,你在你最初的问题中自己做。如果你把你最初问题的前三句话,你对你要做的事情有一个很好的总结。

    a few recent articles 我半随机地从谷歌新闻中挑选。好吧,我承认,最后一个不是半随机的;)

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

        8
  •  1
  •   honibis    14 年前

    我认为这些建筑

    • 检查 synonyms
    • 在图像上应用OCR作为文本进行搜索(Abby Fine Reader和Recostar很不错, Tesseract 是免费的和好的(没有好的读者:)
    • 根据内容在页面上的位置确定内容的权重(就像页面上方的内容更相关)

    也:

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

    http://code.google.com/intl/tr/apis/ajaxsearch/

        9
  •  1
  •   Ludovico Grossi    12 年前

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

    • 获取所有html
    • 删除正文中的脚本和样式标记及其内容(重要)
    • 删除不必要的空格、制表符、换行符。
    • . 获取当前元素的html . 获取元素内容的“纯文本”版本
    • 现在把所有的分数分类,取最大的。

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

        10
  •  0
  •   Community rohancragg    7 年前

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

    我想你要找的是屏幕抓取 Stack has a ton of Q&A 打开。

        11
  •  0
  •   Super_ness    14 年前

    谷歌还使用了一个名为PageRank的系统,其中 它检查有多少链接到一个网站。假设你正在寻找一个C++教程,你可以搜索谷歌。你会发现一个是最好的结果,这是一个很棒的教程。谷歌之所以知道这一点,是因为它搜索了自己的网络缓存,发现每个人都在链接到本教程,同时大声疾呼本教程有多好。谷歌欺骗说这是一个很好的教程,并把它作为最高的结果。

    它实际上做到了这一点,因为它缓存所有内容,给每个页面一个页面排名,如前所述,基于链接到它。

        12
  •  0
  •   Steve Tjoa    14 年前

    为了回答你的一个问题,我现在正在读下面这本书,我推荐它: Google's PageRank and Beyond ,作者:艾米·兰维尔和卡尔·迈耶。

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

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

        13
  •  0
  •   Neil McGuigan    14 年前

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

    你要找的是信息检索

    假设你有两份文件:

    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. 考虑词干(删除后缀,请参阅波特或雪球词干算法)

    你可以计算单词的频率,得到“关键字”。

    然后,为每个单词创建一列,并计算该单词在所有文档中的重要性。这称为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

    这是一本像样的红外图书:

    http://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf