b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

搜索引擎系统的原理与实践

电脑杂谈  发布时间:2020-06-03 06:19:01  来源:网络整理

soa原理方法实践 pdf_web services原理与研发实践 pdf_搜索引擎原理与实践 pdf

搜索引擎的原理和分析指标

(1)搜索引擎的工作方式

搜索引擎的工作原理可以大致分为:

收集信息: 搜索引擎的一部分可以自动收集信息.

组织信息: 搜索引擎通过创建索引向其抓取的信息添加规则.

接受查询: 用户向搜索引擎输入关键字以提交查询,系统接受用户查询,并在排序后返回查询结果. 搜索引擎根据每个用户的不同关键字检查索引,快速找到用户所需的信息,并将其返回给用户. 当前,搜索查询结果主要作为包含某些摘要信息的网页链接给出. 这样,用户可以使用上面的链接访问包含所需信息的网站和网页. 在正常情况下,搜索引擎会在这些链接下提供一些摘要信息,从而可以帮助用户确定此链接是否包含所需的内容.

(2)搜索引擎评估和分析指标

在传统评估系统中,衡量搜索引擎的基本指标是召回率和精确度. 这两个标准已被广泛认为是主要标准. 准确率是搜索到的文档数与所有文档数之比;召回率是搜索到的相关文档数与实际相关文档数之比.

相关性-专门人员评估每个搜索引擎的前几个结果,评估标准是否为正相关等. 著名的指标包括DCG.

速度-用户输入搜索词并获取搜索结果的时间. 这是李开复先生提出的评估体系. 经验告诉我们搜索引擎原理与实践 pdf,0.2秒的速度会导致用户满意度下降,并减少将来重复使用的机会.

索引比例搜索引擎将了解该引擎自己的比例. 通过了解搜寻器搜寻到的网页(不包括重复项),我们通常不知道其他搜索引擎的规模,因此我们可以比较两方搜寻的结果,知道有多少个唯一网页可以推断出索引搜索引擎的大小.

新鲜度-搜索结果的及时性不仅限于新闻内容. 促销信息等其他信息也与及时性密切相关.

稳定性-称为搜索服务的系统的稳定性也是所有系统的主要标准.

(3)搜索引擎的组成和结构

通常,全文(文本)搜索引擎可分为三个模块,即搜寻器搜索和信息处理部分,索引处理部分和检索服务部分(用户查询部分):

搜寻器搜索部分主要通过Internet上的各种搜索策略来收集信息.

索引处理部分是了解搜寻器搜索部分捕获的信息,从中提取索引内容,生成文档库的索引表,并同时添加摘要.

检索服务部分是根据用户查询在索引中快速检索文档,评估相关性,对输出结果进行排序,并根据用户查询需求提供合理的反馈信息.

(1)Web爬网程序设计

网络爬虫可以理解为简单的浏览器机器人.

爬网程序可以自动爬网网页信息,根据某些策略收集网页,并判断它们是否与关键字相关. 这是整个系统的核心. Web搜寻器的类型很多,具体取决于搜寻策略. 最原始的是传统的爬行动物. 它也是最经典的,为传统的爬虫提供了一个或多个网页链接地址. 在搜寻过程中,搜寻器将不断添加新链接以获得下一个网页上的URL. 从理论上讲,搜寻器甚至可以搜寻整个Internet. 除非我们设置某些边界条件.

(1)基于Java网络编程设计爬虫;

(2)通过IO操作等,删除与要爬网的URL列表相对应的URL的网页代码;

(3)提取网页信息. 此设计使用传统的爬虫. 在这里,我们必须解释聚焦爬虫与传统爬虫之间的主要区别. 有针对性的爬虫可以设计匹配算法来确定网页是否与所需主题相关,并避免不必要的爬虫;

web services原理与研发实践 pdf_soa原理方法实践 pdf_搜索引擎原理与实践 pdf

(4)根据某种搜索策略(例如深度搜索),设计从第一个链接开始,然后依次访问页面上的所有链接. 访问完成后,您可以设置递归算法以访问下一层,直到达到设置搜索策略为止.

(2)从网页中提取有效信息

从HTML页面提取内容时面临的主要问题是,我们必须找到一种方法来准确识别所需内容的一部分.

以下是一种使用正则表达式匹配并从网页中提取特定信息的方法:

正则匹配网页中所有URL链接:
<a[^>]*?>[\s\S]*?</a>
获取图片:
<img[^>]*?/?>
<div[^>]*?id="idname"[^>]*?>[\s\S]*?</div>

(3)收集信息的分词

Lucene带有多个标记器StandardAnalyzer,CJKAnalyzer和MMAnalyzer(非常简单的中文标记器).

MMAnalyzer当前被广泛使用,尤其是早期版本的Lucene. 这次设计的系统中,应用的分词组件是极其容易的中文分词组件.

对分词算法的设计和理解需要对数学和计算机科学有深入的了解. 这里没有做任何研究,只是简单地了解了常见的分词算法.

现有的中文分词算法可以分为三类,这里我们主要研究基于字符串匹配的分词方法.

基于字符串匹配的分词最容易理解. 它的实现非常简单,但是被广泛使用. 我们也可以称其为机械分词. 机械分词算法经过一系列步骤,例如,根据某种策略,通过建立字典,类似于我们搜索字典的行为. 您可以将要分析的字符串与机器词典中足够大的条目进行匹配. 找到某个字符串后,将成功输出匹配项. 我们可以理解它与合适的关键字匹配.

例如,搜索“暨南大学好与坏”,返回的结果将包含很多单词,例如“暨南大学”,“济南”,“大学”等. “大学”作为一个不可分割的词来索引记录并返回最终结果.

(1)实施索引技术和搜索

倒排索引不能通过特定记录来确定属性值. 与通常的理解相反,确定记录的属性值称为倒排索引(inverted index). 反向文件是利用反向索引的文件.

建立反向索引是搜索引擎的关键步骤. 倒排索引通常用关键字表示,其后是频率(出现次数),位置(它出现在哪一页上,包括有关日期,所有者等的信息),相当于几千万个页面. 像字典中的目录一样被索引. 用户希望查看要浏览的单词,并可以根据目录索引找到相关页面.

Lucene应用了反转的思想,并建立了一个反转的文件结构. 下面将解释对反转的理解. 其结构和相应的生成算法如下:

有两个日志A和B,

日志A的内容为“哈哈,今天很晴朗!”

日志B的内容是“哦,今天在下雨!”

(1)分析日志的关键字. Lucene与中的字段查询类似,它基于关键字索引和查询. 我们必须获取数据的关键字. 在这里,本文简要介绍分词:

现在有一个博客文章,可以理解为字符串. 第一步是查找所有单词. 英文单词更易于处理,而中文的描述如下.

日志中的“哈哈”一词没有实际意义. 这些不代表概念的词需要过滤掉.

在Lucene中,上述措施是由Analyzer类完成的. 经过上述处理,

日志1的所有关键字为: [今天] [是] [太阳].

日志2的所有关键字为: [明天] [是] [雨].

soa原理方法实践 pdf_搜索引擎原理与实践 pdf_web services原理与研发实践 pdf

(2)建立倒排索引. 获得关键字后,我们可以建立倒排索引. 上面的对应关系是: “日志ID”对应于“日志中的关键字”. 倒排的索引将变为: “日志中的关键字”,以对应于“具有此关键字的所有日志ID”.

日志A和B在颠倒后变为颠倒:

关键字

明天

仅在日志中找到关键字是不够的. 您还需要了解日志中两个位置,关键字的出现位置和出现次数:

1)字符位置,它出现在日志中;

2)关键字位置,单词是日志中关键字的数量(阶段查询快速,节省了索引空间),这里我们使用第二个位置.

关键字

发生地点

今天

A [1]

明天

Lucene索引实现的核心实现是刚才的操作. Lucene在这里放弃了索引中经常使用的B +树结构,并以字符顺序排列关键字,因此我们使用Binary Search来快速获得关键字的位置.

(3)进一步压缩和实现. Lucene引入了字段的概念来表达信息的位置. 在“淘宝技术十年”一书中,淘宝的原始产品搜索架构Searcher使用了这种类似的存储结构. 在创建索引时,将域的详细信息写入字典文件中,一个字段信息对应一个关键字,可以大大减少存储费用. Lucene还将把以上三列另存为字典文件(术语字典),频率文件(频率)和位置文件(位置). 字典文件是Lucene中重要的数据结构. 该文件具有每个关键字的记录,还可以保存指向其他文件的指针. 这样我们就可以找到关键字的位置频率信息.

(4)建立索引后,很容易使用二进制搜索进行定位,查询速度非常快,

如果您使用普通的序列匹配算法,则将花费大量时间.

(2)中文分词技术

词汇是最小的语言组成部分,它可以独立发挥作用. 与英语不同,中文的英语单词之间没有自然的分隔符. 但是,中文远非如此简单. 中文写作的基本单位是单词,单词与单词之间没有特殊的区别标记. 同时,有大量的多义性. 在中文搜索引擎中,中文分词是信息处理和检索的基础和关键. 例如,英语句子“今天很好”. 中文是: “今天很好. ”对于英语句子,计算机可以轻松地通过空格区分三个单词,但更难于理解“今天”和“天真”. 如何将汉字序列放在中文中,即我们通常所说的读句子,处理一系列有意义的单词,称为中文分词.

中文分词技术是人工智能中的一种自然语言处理技术. 对于一个句子,例如有趣的“前门在这里,请下后门”,我们可以区分生活,但是如何使计算机像人的大脑一样,让计算机理解这一过程,这很重要人工智能的研究方向,它是分词算法.

开源社区中有很多中文分词工具,例如盘古分词,平顶中文分词等. IK得到了广泛的应用.

IK分析器是一个开源的中文分词工具包. 从第一个版本开始,IKAnalyzer已启动了多个主要版本. 首先,IK分析器和Luence作为主要应用,将中文分词词典和分析算法结合在一起. 但是,随着进一步的发展,IK Analyzer成为独立的,并成为所有系统的开放式分词组件. 但是,最好与Lucene结合使用. IK分析器可以实现更好的分词,而无需标记词性. IK Analyzer通过配置字典文件可以进一步增强分词效果.

(3)分词和索引

以下说明了常见的插件工具,即CJKAnalyzer的概念:

如果处理了汉字,CJK会将这两个字符视为条目.

例如,赵千孙李,使用CJKAnalyzer分析器对单词进行分段之后,您将获得以下条目:

搜索引擎原理与实践 pdf_soa原理方法实践 pdf_web services原理与研发实践 pdf

赵谦谦孙孙莉.

此外,程序将根据所选词典库将条目逐一匹配. 这是一项非常耗时的任务. 具体过程可以参考源代码中的实现.

以下是CJKAnalyzer单词分割的简单实验.

我们输入一段文字: “植树节,我们来到山上,每个人都一起努力,每个人都很高兴. ”

public class BingoAnalyzer {
public static void main(String[] args) {
   try {
    File file = new File("E:\\bingo\testbingo1.txt");
    FileReader endWords = new FileReader("E:\\bingo\testbingo2.txt");
    Reader reader = new FileReader(file);   
    Analyzer bal = new CJKAnalyzer();
    TokenStream ts = bal.tokenStream("", reader);
    Token t = null;
    int n = 0;
    while((t = ts.next()) != null ){
     n ++ ;
     System.out.println("词条"+n+"分词结果 :"+t.termText());
    }
    System.out.println("产生词条"+n+" 条");
   
   } catch (Exception e) {
    e.printStackTrace();
   }
}
}

上面的程序仅演示了如何对单词进行分段,其输出如下:

1个单词分割的结果: 植树

2个词分割的结果: 分割我

输入3个单词的结果: 来吧

4个单词分割的结果: 到山上

输入5个字的结果: Shangda

6词分词的结果: 嘉义

7词分词的结果: 齐新

8字分割的结果: 努力工作

9词分词的结果: 每移动一次

条目的10个单词的结果: 个人

11字分割结果: 全部

12字结果: 开心

生成12个条目.

我们可以看到将生成一定数量的垃圾条目,其中一些尚不可用. 如果使用Lucene标准令牌StandardAnalyzer,则成本将降低大约一半. 但是效率很低,而且都必须处理重复的条目.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-232076-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...