宁波seo优化专栏

个性化推荐体系的搜索引擎研究

发布时间:2018-12-08 22:02:40
  摘要:在根据社会核算的个性化推荐体系开发中,查找引擎的开发是其间一个重要的环节,查找引擎的质量直接关系体系查找成果的性能。该文对该内容进行了专题的研讨,为该模块的设计供给了杰出的理论基础,也为体系相关主题的开发奠定了必定的基础。
  关键词:查找引擎;推荐;体系
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2014)22-5370-03
  根据社会核算的个性化推荐体系的查找引擎是体系开发的一个重要环节,该查找成果质量直接关系到体系的性能,从而直接影响到体系的整体性能。本体系中解析的文档类型以html文档为主,选用Lucene查找引擎,独立于运行渠道的方式,完成了文档的解析和索引的创建。
  1Lucene查找引擎简介
  1)Lucene
  Lucene是一个超卓并且是开源的全文查找引擎。他并不是一个完整的全文检索运用,可是它供给了很多的API,能够便利能够高效快捷地地对全文创建索引,最主要的是,他能够对现有的在各种各种的体系增加全文检索的功用,官方也一直维护、更新版本,运用越来越便利,深受广阔编程者和用户的青睐。
  Lucene是一个高效的、可扩展的全文检索库,仅支撑纯文本文件的索引(Index)和检索(Search),并不处理从其他格局的文件中抽取纯文本文件,或从网络中抓取文件。简略地说,Lucene完成两个功用,分别是索引和检索。索引所做的作业是为各式各样的文档构建Lucene所能够识别的索引文件。
  Lucene作为一个十分优秀并且开源的全文查找引擎,不只性能高,架构清晰,扩展性强,并且其树立索引后的文件格局也独立于运用渠道,从而使索引文件能够跨渠道共享,对恣意可转换为文本格局的数据都能够进行索引和查找。例如html网页、本地中的ppt,txt,pdf等等都能够对其树立索引。
  首要,Lucene集成了多种文档解析器,能够对大部分干流文本文件如:html,pdf,MSWord,TextFile等等进行解析,宁波seo优化抽取纯文本内容。由于Lucene只能索引纯文本,所以有必要借助于上述各种不同功用的解析器对各种不同类型的文档进行解析。
  然后,运用Lucene的分词器(Analyzer),对提取出的纯文本内容进行索引,并生成索引项,以供做查找之用。
  最后,Analyzer把生成的信息写入索引文件之后。查找所做的作业是运用反向索引找出与用户请求相匹配的文本内容并返还给用户。由于,Lucene默许情况下不对用户输入的查找关键词进行分词处理。所以,这部分不要点讨论查找的内容,相关内容鄙人面的章节中讲解。
  2)引擎结构
  Lucene查找引擎对体系的要求不高,既能够运行在Windows体系上,也能够运行在Linux体系上。查找引擎运用的一般是集中式。把多个服务器的网络资源统统下载到本地,意图是为树立索引和文本查找做准备,这就是集中式的处理方法。如果按照按结构分,Lucene引擎结构可由查找器、索引器和检索器等组成。
  查找器就是网络机器人(网络蜘蛛)。利用这种爬虫程序,在遵从机器人扫除协议的前提下,从某个网页开端,提取URL网址,如此循环,不断地提取到新的URL网址,一起取出相应URL的资源。
  索引器的则是利用下载的到的各种网络资源,提取各种资源的索引项,为生成文档库的索引表做准备。
  检索器主要任务是通过辨识用户的查询需求,在文档库中进行快速匹配查找并且检索出相应的文档,之后就是对文档进行相关性排序,并供给一个网页链接供用户操作。所以,,一个超卓的查找引擎如果把这三个部分都做得好,用户的运用需求就必定能够得到满足。
  3)解析网页和索引入库
  把网页中的元素符号(Token)及其符号之后的内容提取出来,意图的是利于入库,这就是网页的解析。一个字段都要有一个Token与之相对应。能够理解为此字段的内容就是Token的内容。
  运用的完成方法:自界说一个Parser解析类,接着完成网页文件流的读入,然后把这个流解析成以字符串格局输出,为下一步处理做准备,最后循环提取Token及其相关内容。提取每一个Token的意图是给不同的Token加上不同的权值。这样在查找出成果的时分,就能够根据不同的权值来排序。提取Token便能够入库:
  2Lucene分词器
  1)Lucene分词简介
  lucene将关键词呈现频率和关键词呈现方位分别作为词典文件(TermDictionary)、频率文件(frequencies)、方位文件(positions)保存。其间词典文件不只保存有每个关键词,还保留了指向频率文件和方位文件的指针,通过指针能够找到该关键词的频率信息和方位信息。
  Lucene特色是关键词是按字符次序排列的,其内部没有集成运用B树结构,所以能够用二元查找算法快速定位Lucene的关键词。
  Lucene中也运用了field(域)的概念,用于表达信息所在方位。如标题、内容、url等等。需要指出的是这些域(field)是能够自界说设置的。在索引文件中,每一个field(域)的信息也记载在词典文件中,每个关键词都有一个field信息,由于每个关键词必定属于一个或多个field。关键词没有在field(域)中呈现,就意味着用户想要找的内容没有呈现在数据库中。
  为了减小索引文件的巨细,Lucene对索引运用紧缩技能。首要,对词典文件中的关键词进行了紧缩,关键词紧缩为<前缀长度,后缀>,例如:当时词为“广东省东莞”,上一个词为“广东省”,那么“广东省东莞”紧缩为<3,东莞>。
  其次很多用到的是对数字的紧缩,数字只保存与上一个值的差值,意图是减小数字的长度,进而减少保存该数字需要的字节数。例如当时文章号是1279(不紧缩要用3个字节保存),上一文章号是1273,紧缩后保存6(只用一个字节)。运用紧缩技能的优点就是进步查找的速度和功率。需要指出的是,Lucene3.5版本后,不需要手动处理索引文件,当索引的文件大到必定的程度之后,Lucene会主动的紧缩索引文件。
  2)Lucene分词原理
  a.树立倒排索引。一起记载关键词在文章中呈现频率和呈现的方位。如何用普通的次序匹配算法,不建索引,而是对一切文章的内容进行字符串匹配,这个进程将会相当缓慢,当文章数目很大时,时间往往是长到无法忍受的。
  b.获得文章/记载中的关键词,并对关键词进行处理。如:lives,living→live
  3IKAnalyzer分词器
  1)IKAnalyzer分词简介
  对信息进行索引前,需要要对关键词进行分词。英文运用空格和标点来分隔单词而中文运用表意文字,不能通过空格和标点来进行分词。Lucene自带的分词器,有StandardAnalyzer,StopAnalyzer,SimpleAnalyzer,WhiteSpaceAnalyzer。这些分词器要么是单字分词要么选用停用词分词,要么选用简略的分词,要么是按空格分词。
  可是,它们并不能有用地解决中文分词的问题。现在中文分词算法工具包大致包括paoding、imdict、mmseg4j、IK。其间最常用的是IKAnalyzer,下面我大致介绍一下这个中文分词器,结构图1所示。
  2)IKAnalyzer特色
  IKAnalyzer支撑多子处理器言语分析模式:中文、数字、字母,并兼容日文、韩文。它选用“正向迭代最细粒度切分算法”的算法,支撑细粒度和最大词长两种分词方式,速度最大支撑80W字/秒,即1600KB/秒。此外,它扩展lucene的扩展完成,选用歧义分析算法优化查询关键词的查找排列组合,进步lucene检索命中率。一起,它具有较小的内存占用,优化词库占有空间,用户可自界说扩展词库。
  IKAnalyzer由org.wltea.analyzer.IKSegmentation和org.wltea.analyzer.lucene.IKAnalyzer两大主要类组成,其间,org.wltea.analyzer.IKSegmentation是IK分词器的中心类,真实分词的完成类。而org.wltea.analyzer.lucene.IKAnalyzer则是IK分词主类,根据Lucene的Analyzer接口完成。
  4根据Lucene的IKAnalyzer分词器
  1)paoding、mmseg4j和IKAnalyzer
  现在流行的几大开源分词器主要有:paoding、mmseg4j、IKAnalyzer,它们三个都是根据JAVA言语开发的,各有优劣,详细如下:
  mmseg4j:有两种分词方法,Simple和Complex,现在complex1200kb/s左右,simple1900kb/s左右,但内存开销了50M左右。选用MMSeg算法,代码复杂度是2500行左右代码。有英文文档,原理比较简略。有自带搜狗的词库,支撑自界说词库,不支撑主动检测。自带词库16W个。Lucene和solr的支撑:支撑Lucene2.4、solr1.3。
  Paoding:选用根据“不限制个数”的词典文件对文章进行有用切分算法,使能够将对词汇分类界说,代码复杂度是7000行左右代码。1秒可精确分词100万汉字。支撑不限制个数的用户自界说词库,主动检测词库的更新。自带词库22W个。
  IKAnalyzer:每秒80W字。选用正向迭代最细粒度切分算法,代码复杂度是4500行左右代码,有一个中文运用手册,支撑自界说词库,不支撑主动检测。自带词库27W个。
  根据上面介绍,结合本体系特色,本体系选用根据Lucene的IKAnalyzer分词器。
  2)自界说近义词分词器
  Lucene分词机制:索引进程和查询进程都用到了一个关键工具分词器analyzer。它将要被索引的内容以流的形式读入,通过词语切分、过滤干扰词等一系列处理,最终输出一个语汇单元流、每个语汇单元携带了一个文本值和它的一些元数据,原文本从起点到终点的偏移量、语汇单元类型和positionincremen。
  近义词索引原理:索引器将语汇单元写入文件时会丢掉每个语汇单元的起点偏移量和终点偏移量。方位增量是语汇单元携带到索引文件的唯一附加元数据。这个值的含义是当时单词与前一个单词的方位偏移量。当这个值为0是表示当时单词与前一个单词被索引到同一个方位上。可是Lucene对中文言语处理才能十分有限,无法中文语义分词只能将一句话机械性的分红单字或双字。例如:用单字分词会将“我来自广东”切分红:“我”“来”“来”“自”“广”“东”。显然,这种景象为每个字增加近义词索引是没有含义的因而需要一个功用更强壮的中文分词器来支撑。
  本体系选用仓库的形式来保存近义词的词组或单词。如(“我国”,“大陆”),(“我”,“咱”)等等都能够是近义词。自界说近义词分词器运用四个类来完成。
  MyDefinedSameAnalyzer类主要是加载的搜狗中文分词器。运用栈来界说过滤器是MyDefinedSameTokenFilter类。DefinedSamewordEngine类是一个接口,运用接口有利于程序的扩展。DefinedSimpleSameword类是界说近义词字典,并判别如果有近义词就回来true
  3)自界说停用词过滤分析
  在关键词处理进程中,有可能会经常呈现没有含义的词。如,“是”,“来”等等。除此之外,停用词分析器StopAnalyzer也已经把没有含义的英文单词收录到停用词表中。默许情况下,这个表被用来滤词用户输入关键词中的词汇,还能够过滤掉一些特定字符,如&,*等,也会把英文的大写字母主动转换成小写字母。
  还有就是,当查找体系需要屏蔽掉一些用户输入的中文灵敏词的时分,就得把灵敏词主动的过滤掉。这个时分就得运用lucene强壮的停用词分析器。由于Luene自带有停用词分析器StopAnalyzer,这使得要过滤掉停用词就变得十分简略。并且运用Lucene3.5的版本,也支撑中文分词。
  自界说一个停用词表就能够过滤掉自己设定的中文或许英文的灵敏词。默许情况下,Lucene会把体系自带的英文停用词加载在停用词分析器中。TokenStream读流属性中的数据即读出数据。别的,停用词分析器StopAnalyzer主动把数字给过滤掉了,所以要完成数字的查找需要通过特别的处理。详细的处理进程能够参考GxjtController类的searchcont()函数的代码部分。
  为了完成该功用,查找的关键词要先通过过滤器处理,再通过近义词的处理。
  参考文献:
  [1]冯斌.根据Lucene小型查找引擎的研讨与完成[D].武汉:武汉理工大学,2008.
  [2]杨馥显,刘嘉勇.根据JSP的数据库开发技能研讨[J].通讯技能,2011,44(3):51-53.
  [3]梁弼,王光琼,邓小青.根据Lucene的全文检索体系模型的研讨及运用[J].微型机与运用,2011,30(1).
  [4]费洪晓,康松林,朱小娟,等.根据词频计算的中文分词的研讨[J].核算机工程与运用,2005,41(7):67-68,100.
  本文转载自
  宁波seo优化www.leseo.net
  补充词条:宁波谷歌优化  宁波网站优化推广  宁波网站seo优化  宁波seo外包  宁波seo推广公司