zoukankan      html  css  js  c++  java
  • 集体智慧编程-第四章 搜索与查询

     学习目标:
     1.检索网页
     2.建立索引
     3.对网页进行搜索
     4.以多种不同方式对搜索的结果进行排名

    搜索引擎的组成

    建立搜索引擎的首要步骤是找到一种搜集文档的方法,之后需要为这些文档建立索引。

    通常要建立一张大表,表中包含了文档及所有不同的单词的位置信息。文档本身不需要保存在数据库中,索引信息只需简单的保存一个指向文档所在的位置的引用即可,最后一步是通过查询返回一个经过排序的文档列表。

     此处的奥妙是对结果的排列方式

    下面将介绍几种基于网页内容的度量方法,比如单词频度,然后再介绍几种基于网页外部信息的度量方法,如PageRank算法,PageRank方法会考察其他网页对当前网页的引用情况

    在最后,将建立一个神经网络,用以对查询结果进行排名。通过了解人们在得到搜索结果以后都点击了哪些链接,神经网络会将搜索结果和过程关联起来。它会利用这一信息来改变搜索结果的排列顺序,以更好地反映人们过去的点击情况。

     

         

    接下来会创建两个类,一个用于检索网页和创建数据库,另一个通过查询数据库进行全文
    搜索。

    import urllib.request as url
    from bs4 import BeautifulSoup
    #    from urlparse import urljoin  
    # thon3中将urlparse并入urllib             
    
    #构造一个单词列表,这些单词将被忽略
    ignorewords=['the','of','to','and','a','in','is','it']
    import urllib.request as url
    
    
    class crawler:
        #初始化crawler类并传入数据库名称
        def __init__(self,dbname):
            pass
        
        def __del__(self):
            pass
        def dbcommit(self):
            pass
        #辅助函数,用于获取条目的id,并且如果条目不存在,就将其加入数据库中
        def getentryid(self,table,field,value,createnew=True):
            return None
        
        #为每个网页建立索引
        def addtoindex(self,url,soup):
            print('Indexing %s' % url)
            
        #从一个HTML网页中提取文字(不带标签的)
        def getnextonly(self,soup):
            return None
        #根据任何非空白字符进行分词处理
        def seperatewords(self,text):
            return None
        #r如果url已经建过索引,则返回true
        def isindexed(self,url):
            return False
        
        #添加一个关联两个王爷的链接
        def addlinkref(self,urlFrom,urlTo,linkText):
            pass
        
        #从一小组网页开始进行广度优先搜索,直至某一给定深度
        #期间为网页建立索引
        def crawl(self,pages,depth=2):
            for i in range(depth):
                newpages=set()
                for page in pages:
                    try:
                        c=url.urlopen(page)
                        print(c)
                    except:
                        print("Cloud not open %s" % page)
                        continue
                    soup=BeautifulSoup(c.read())
                    self.addtoindex(page,soup)
                    
                    links=soup('a')
                    for link in links:
                        if('href' in dict(link,attrs)):
                            url=urljoin(page,link['href'])
                            if url.find("'") !=-1:continue
                            url=url.split('#')[0] #去掉位置部分
                            if url[0:4]=='http' and not self.isindexed(url):
                                newpages.add(url)
                            linkText=self.gettextonly(link)
                            self.addlinkref(page,url,linkText)
                    
                    self.dbcommit()
                pages=newpages
            
        
        #创建数据库表
        def createindextables(self):
            pass
  • 相关阅读:
    NumPy笔记:运算符(exp,sqrt,square)
    NumPy笔记:常用操作
    php字符操作
    laravel如何实现批量插入
    php中@符号的作用
    laravel如何实现数据的批量插入
    如何在laravel框架中使用阿里云的oss
    laravle如何设置mysql数据表前缀
    thinkphp视图中如何调用并且向控制器传参数
    thinkphp如何隐藏入口文件index.php
  • 原文地址:https://www.cnblogs.com/sannyhome/p/13584197.html
Copyright © 2011-2022 走看看