搜索

作者: 袁一帆 | 来源:发表于2016-03-23 00:47 被阅读257次
def get_page(url):
    try:
        import urllib2
        req = urllib2.Request(url) 
        return urllib2.urlopen(req).read()
    except:
        return ""

def get_next_target(page):
    start_link = page.find('<a href=')
    if start_link == -1:
        return None, 0
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote + 1)
    url = page[start_quote + 1:end_quote]
    return url, end_quote

def get_all_links(page):
    links = []
    while True:
        url, endpos = get_next_target(page)
        if url:
            links.append(url)
            page = page[endpos:]
        else:
            break
    return links


def union(a, b):
    for e in b:
        if e not in a:
            a.append(e)

def crawl_web(seed): # returns index, graph of inlinks
    tocrawl = [seed]
    crawled = []
    graph = {}  # <url>, [list of pages it links to]
    index = {}
    while tocrawl:
        page = tocrawl.pop()
        if page not in crawled:
            content = get_page(page)
            add_page_to_index(index, page, content)
            outlinks = get_all_links(content)
            graph[page] = outlinks
            union(tocrawl, outlinks)
            crawled.append(page)
    return index, graph

def add_page_to_index(index, url, content):
    words = content.split()
    for word in words:
        add_to_index(index, word, url)

def add_to_index(index, keyword, url):
    if keyword in index:
        index[keyword].append(url)
    else:
        index[keyword] = [url]

def lookup(index, keyword):
    if keyword in index:
        return index[keyword]
    else:
        return None
    
def compute_ranks(graph):
    d = 0.8 # damping factor
    numloops = 10

    ranks = {}
    npages = len(graph)
    for page in graph:
        ranks[page] = 1.0 / npages

    for i in range(0, numloops):
        newranks = {}
        for page in graph:
            newrank = (1 - d) / npages
            for node in graph:
                if page in graph[node]:
                    newrank = newrank + d * (ranks[node] / len(graph[node]))
                    print page,newrank
            newranks[page] = newrank
        ranks = newranks
    return ranks

def quick_sort(url_lst,ranks):
    url_sorted_worse=[]
    url_sorted_better=[]
    if len(url_lst)<=1:
        return url_lst
    pivot=url_lst[0]
    for url in url_lst[1:]:
        if ranks[url]<=ranks[pivot]:
            url_sorted_worse.append(url)
        else:
            url_sorted_better.append(url)
    return quick_sort(url_sorted_better,ranks)+[pivot]+quick_sort(url_sorted_worse,ranks)


def ordered_search(index, ranks, keyword):
    if keyword in index:
        all_urls=index[keyword]
    else:
        return None
    return quick_sort(all_urls,ranks)
index, graph = crawl_web('http://udacity.com/cs101x/urank/index.html')
ranks = compute_ranks(graph)
print ranks
print ordered_search(index, ranks, 'Chef</h1>')
# Chef</h1>

相关文章

  • 搜索+搜索+搜索

    鲜活的一天,从起床那刻开始! <感谢小能熊@陈华伟老师的知识管理课程,仅用于个人笔记学习> 引子 经典的东西值得反...

  • 搜索条搜索

    AppDelegate.m ViewController *theVc = [[ViewController al...

  • GridSearch

    不同搜索空间的比较图: 空间搜索 螺旋搜索 线性搜索 网格搜索 可以看到,在超参的搜索过程汇总,网格搜索和螺旋搜索...

  • 搜索功能 分类搜索

    ``` defindexifparams[:category].blank? @products = Prod...

  • 说“搜索”就搜索

    某天逛网易严选,想买条毛巾,直接在搜索区搜索毛巾 在结果中,下翻了许久,太多种类了,只想买纯棉毛巾,这时想搜索“纯...

  • 搜索最近搜索建议

    前言 本章内容为 Android开发者指南的 Framework Topics/Search/Adding Rec...

  • 排序与搜索:搜索

    搜索 搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几...

  • 【电商运营01】做不好淘宝SEO?怪不得没人买你的好货!

    一、淘宝搜索 1、按买家的搜索行为: (1)关键词搜索(2)类目搜索 2、按搜索框的搜索形式: (1)宝贝搜索(默...

  • 浙江省多媒体设计竞赛——网站类作品

    常用功能介绍 搜索:全文搜索、拼音搜索、各种搜索关键词检错、搜索自动补全(搜索提示)、详细的高级搜索等等【评委两年...

  • 搜索

    搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见...

网友评论

      本文标题:搜索

      本文链接:https://www.haomeiwen.com/subject/dfsklttx.html