zoukankan      html  css  js  c++  java
  • 搜索引擎分词与索引库

     

    分词是很多做SEO的人常听到的概念,为了让大家在这个方面不会有疑惑,现在要来讲一下分词以及索引库。这也是更深入的了解搜索引擎的开始。

      搜索引擎每天都是在处理一个基本的需求:用户搜索一个关键词,搜索引擎马上找到相关的网页给用户。这个过程要怎么实现呢? 下面就分步来了解这个过程。

       首先搜索引擎要尽可能多的把互联网上的网页搜集下来,这样能提供大量的网页给用户查询。这一部分由爬虫来解决,顺着互联网上的链接一个个往下抓取。最后 就有了一堆记录着网页各种信息的资料库。目前的现状,最后能使这个资料库里有大概100多亿个网页。资料库里记录了这些网页的URL,整个网页的   HTML代码,网页标题等等信息。

      然后,搜索引擎拿到用户输入的这个关键词后,要从这个资料库里把相关的网页找出来给用户。这里就碰到好几个问题了:

      1,要怎么快速的从上100亿个网页里找出匹配的网页的呢?

      要知道这是从上百亿的网页里找符合这个关键词内容的网页,如果像用word里那种用ctrl + F  轮询的查找方式的话,即使用超级计算机,也不知道要消耗多少时间。但是现在的搜索引擎,在几分之一秒里就实现了。所以一定是做了一些处理才实现的。

       解决办法也倒简单,就是建立一份索引库。就像我们查《新华字典》一样,我们不会翻遍《新华字典》的每一页来查那个字在哪页,而是先去索引表那里找这个 字,拿到页码后,直接翻到那页就可以了。搜索引擎也会为上百亿的网页建立一个索引库,用户查询信息的时候,是先到搜索引库里查一下要找的信息在哪些网页, 然后就引导你去那些网页的。

      如下图:

    索引库

      索引库

      2,索引库里用什么样的分类方式?

      我们知道,《新华字典》的索引表是用字母列表或者偏旁部首的分类方式的。那么搜索引擎的索引库里是怎么分类的?是不是也可以用字母列表的方式?

      搜索引擎如果以字母列表的方式排列索引库,那么平均每个字母下要查询的网页数量是 100亿÷26=3.85亿  ,也还是一个很大的数字。而且搜索引擎上,今天是100亿个网页,过不了多久就是300亿个网页了。

      最后,终于找到一个解决办法:索引库里用词语来分类。

      因为尽管互联网上的网页是不断激增的,但是每一种语言里,词语的数量都是相对固定的。比如英语就是一百多万个单词,100亿 ÷ 1百万 = 1  万;汉语是8万多个词语,100亿÷8万=12万5千。都是计算机很容易处理得过来的。

      用词语来分类还有一个好处,就是可以匹配用户查询的那个词语。本来用户就是要查这个词语的,那我就按这个词语去分类就是。

      所以,搜索引擎的索引库,最后就是这个样子的:

    模拟的索引库

      模拟的索引库

      理论上,当用户输入关键词“mp3 player”搜索时,搜索引擎就从 “mp3”那行 和  “player”那行里拿出同时都有的、交集的url来即可。

       上图也是现在英文版的google.com上的真实排名情况,可以看到 www.winamp.com   这个网站在搜索“mp3”的时候排第4位,在搜索“player”的时候也排第4位。当搜索“mp3   player”的时候,因为没有其他网站比它更匹配这个词语,所以它排在了第一位。

    排第一

      排在第一

      当搜索引擎把一个网站抓取下来后,接着要做的事情就是把网页里的词语分开放到索引库里。分词在这个时候就要应用到了,所谓的分词,其实很简单,就是把词语分开而已。

       英语的分词好处理一点,因为英语的每个单词之间是用空格分开的,基本上就只要处理一些虚词、介词,还有一些词语的单复数,变形词等等。但是中文的分词就 复杂很多了,句子中的每个字都连在一起,有时候即使是人来判断,都还有产生歧义的时候。中文的分词有很多方法,也很容易弄懂的,如正向切分法,逆向切分法 等等,网上有很多相关的资料。

      谷歌的中文分词方法是从国外一家第三方公司买的。百度的分词方法是自己创立的,可能在词库上面比谷歌有点优势。不过其他方面差了一些。

      当爬虫找到一个网页的时候,在搜索引擎看来,这个网页就是一大堆词语的组合。基本流程如下:

    搜索引擎的处理过程

         搜索引擎的处理过程

         看完这个流程图,应该能给大家在做内部优化的时候有所启发的。

  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/timssd/p/5150082.html
Copyright © 2011-2022 走看看