第12章基于java信息检索技术_第1页
第12章基于java信息检索技术_第2页
第12章基于java信息检索技术_第3页
第12章基于java信息检索技术_第4页
第12章基于java信息检索技术_第5页
已阅读5页,还剩215页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用计算机大容量和快速计算的能力构建本章介绍如何利用开源的信息检索— 信息检索(InformationRetrieval)息 与检索”(InformationStorageand与数据库查询不同,信息检索的处理对象是邮件、多等。因此,信息检索系统建设,从信息检索的定义中可以看出,信息检索包一个是组织和,根据检索对象的外在特 图中实线表示信息的过程,对特征、有检索价值的标识及其属信息,如、的位置查找的数据结构将这些信息起 LuceneAPI Lucene加入到Apache

检索的引擎,IBM的商业软件WebSphere中也采用了1.Lucene的特 2 Lucene使用Lucen3.5.0 ...。...。这 的API包,使用Lucene时需要导入这个程序/docs/api/index.html:API文档3.Lucene的主 IndexWriter、索 器IndexReader、索引编 的枚举类型Version就位于这个包第12章基于Java Field 类文档()表示信息检索系统中索引一个文档由一组字段(Field)组成,每个字,字段只有被在文档中才能被索引和 (1)publicfinalvoidadd(Fieldable(1)publicfinalvoidadd(Fieldable返回name指定的字段的值。如果当前文档publicFieldable[]getFieldables(String(3)publicpublicFieldable[]getFieldables(String返回文档中名称为name的的第一个字段/所(4)publicfinalList<Fieldable>(5)publicfinal emoveField(String Field 字段可 在文档中对象的组成部分返回,而没 Field类在 1Field类的性Field类包含三个嵌指示是否对字段进行指示是否将字 在文档–– 指示是否对字段做索引以及如

对字段值进行分词,并建立词汇级(分词结果)的索引。通常用于文本指示是否及如 字段的

对字段值分词并建立词汇级索引,但不计算字段的权值,所有字段在检索只建立字段级的索引,不分词,也不 字段的值,以便于在索 词向量以及词的偏移量信息(的结束位置息法(1)public2Field法(1)public

Fi T t(2)public

(3)publicField(String TokenStream类型,表示一个切分TokenStream类是一个抽象类,本身不能创建实TokenStream类TokenStream类定义的close()方法关闭切分项(4)publicField(StringTokenStreamtokenStream,索引中不字段值,只对分词的结果进行索引。分词的结果由参数tokenStream指定。是否词向3Field类的普通方(1)String返回字段的名称,此方法由Fieldable接口定义(3)pub(3)puboidsetValue(String(4)Reader(5)TokenStream Field (Directory)代表了Lucene的索引的 Directory是一个抽象类,它是所有表示索引置,其它类型的 Directory类只有Directory类只有一个无参数的构造方–public voiddeleteFile(Stringthrows删 中指定的文件name String[]listAll()throwsIOException以字符串数组形式返 中所有文件的名称 booleanfileExists(String判断文件是否存在,如果指定的文件name回true longfileLength(String返 中name指定的文件的长度5public

longfileModified(Stringname)throwsIOException返回name指定的文件的上次修改时间,返回值为1970年1月1日00:00:00经过的毫秒6public voiddeleteFile(Stringthrows删 中参数name指定的文件7publicvoidcopy(DirectoryStringsrc,Stringdest)throws 8public voidthrows––关闭当 RAMDirectory类表示内存,是Directory类的直接子类,表示在内存当中的索引的位 RAMDirectory throws , dir的内容仅会在创建当前内存时被加载至内存,而dir的任何后续的改变,都不会再反映到所创建的内存中。FSDirectoryFSDirectory是文件系 该类是一个抽象类,不能用new关键字创建实publicstaticFSDirectoryopen(FilethrowsSolaris和Windows64位JRE,实际返回的是若当前系统平台是其它Windows操作系统下的非64位JRE,则实际返回SimpleFSDirectory类为简单文件系统 publicSimpleFSDirectory(File 如果程序明确运行在Windows 如果程序明确运行在Windows操作系统下的NIOFSDirectoryNIOFSDirectory类为新IO(NewI/O)文件系 装非Windows系统中的 publicNIOFSDirectory(File 。MMapDirectory类为内存映 Solaris和Windows64位JRE环境下的 publicMMapDirectory(Filethrows 如果程序仅运行于SunSolaris和Windows64位 Field 在Lucene中,分析器是一种可以对文本字串 yzer

表中的前5个分析器均位于Lucene的程序 抽象 TokenStreamtokenStream(StringReader 此外,yzer类还实现了java.io.Closeable Stopyzer类是停用词分析器,它可以去除原始文Stopyzer原始文本 is .Pleasecontactmewhenyou’reatconvenient切分结果:/my/ Stop yzer(1)public yzer(Version参数matchVersion表示使用的Lucene版Lucene来说,此参数应为Version.LUCENE_35 yzer内置的缺省停用词表包括a、an、参数matchVersion表示使用的Lucene版Lucene来说,此参数应为Version.LUCENE_35(2)public yzer(VersionSet<?>stopWords指stopWords指定FilestopwordsFile)FilestopwordsFile)(4)public yzer(VersionReaderstopwords)throwsIOException yzer 可以切分 原始文本 is .Pleasecontactmewhenyou’reatconvenient切分结果:/m /lease/contact/me/when/ Standard yzer(1)public yzer(Version词表,该停用词表与Stopyzer内置的缺省停(2)public yzer(VersionSet<?>(3)public yzer(VersionFilethrowsIOException(4)ublic zerthrowsIOException 对中文采用二元切分法,将相邻的两个字作为一个切分you’reatconvenient is .Pleaseyou’reatconvenient ,方便时 CJK yzer(1)public yzer(Version yzer类的内置停用词表与 yzer内置停用词表个别地方略有差异,(2)public yzer(VersionSet<?> yzerSmartChinese yzer析系统ICTCLAS(InstituteofComputingTechnology,ChineseLexical ysisSystem)基于隐马尔科夫模型(HiddenMarkovModel, is .Pleasecontactmewhenyou’reatconvenienttime. 切分结果:/我/的/邮箱/是 /方便SmartChinese yzer(1)public yzer(Version(2)public

yzer(VersionbooleanSet(3)publicSetstopWords指定 1.0版开始,IK 先进。高效率:在PIII1G内存个人机器上, mmseg4j用Chih-HaoTsai的MMSeg算法实现的 MMSeg算法有两种分词方法: 则过虑 (HiddenMarkovModel,HMM), //imdict- TokenStream boolean(2)publicvoidreset()throwsIOExceptionpublicvoidend()throwsIOException(3)publicvoidclose()throws(4)public<AextendsAttribute>AaddAttribute(Class<A>Stringintintint返回切分项的位置增量,若两个切分项在原始文本时相邻,则返回1,否则,返回两个切分项中间的词1Stringboolean 是则返回true,否则返回常用属性 插入材料 Zip 分词器扩展配置停用字 IK yzer署在项目中引入 例如放到

Java应用项目是JavaWeb应用项目是WEB- 用IK 第12章基于JavaLucene的索引结类Lucene使用文件系统管理器索引,一个索引 Lucene索引的对象是文档,因此,段由文档文档由多个字段组成,字段经过分析器的分析, 在文件系统中,索引对应了文件,它由索引文件的,就是一个索引。一个索引通1.段(x为字母或数字) (关于segments_x的信息) 建立索引时使用的Lucene版本号引更 (eetee_0.dt_0.d段的数段中包含的文段中包含的文档段中文件的相关信息件.fdt、.fdx2件.fdt、.fdx 3.与索引项有关的件.tis、.tii。件这些文件.tis、.tii。4与词向量有关的记录索引词向量信息,包括三个文件:.tvf.tvd、.tvx 5.包括.frq、.prx 6.管理用件包括.del和write.lock两个文时,表示程序正在修改索引,通过这个文件可以件件 了.cfs中所有项目的项 Lucene的索引结类Lucene35publicIndexWriterConfig(Version 参数matchVersion表示使用的Lucene版本,对3.5版该参数matchVersion表示使用的Lucene版本,对3.5版来说,此参数应为Version.LUCENE_35参 yzer表示建立索引时使用的分析器IndexWriter的索引写到索引中,它只有一个构造方法:IndexWriterConfigconf)throwsCorruptIndexException,publicIndexWriterConfigconf)throwsCorruptIndexException,IndexReader类是一个抽象类,表示索引 IndexReader类提供了多种重写的open()方法(1)publicstaticIndexReaderopen(DirectorythrowsCorruptIndexException, 器为只读,参数readOnly为false时,可以(2)publicstaticIndexReaderopen(DirectorybooleanthrowsCorruptIndexException,Lucene的索引结类 (yzer类及其子类)指定对索引字段内容的切分方式,使用封装类(Directory类及其子//指定索Directoryd=FSDirectory.open(new//指定分 yzer=new IndexWriterConfigconf=new (3)创建IndexWriter对象,将要索引的文()IndexWriter1publicvoid throws2publicvoid 3publicvoid >throwsCorruptIndexException,将指定的文档集合docs添加到索引4publicvoid > throwsCorrutIndexExcetion,用指定的分析 IndexWriterIndexWriterindexWriter=newIndexWriter(d,doc FieldFieldPath=newField( doc.add(FieldPath);//将addr字段加入 publicvoidthrows【例12.4本例对在项目\source子下的资源进行索引,这些资源是期章,经初步加工 IndexReader类中定义了 (1)public(2)public (3)public int(4)public (intn) Collection<String>getFieldNames(IndexReader.FieldOption2IndexReader.FieldOption.INDEXED:已进行了索引的所2IndexReader.FieldOption.INDEXED:已进行了索引的所4INDEXED_WITH_TERMVECTOR:已进行了索引并且6TERMVECTOR(6)publicint(7)publicfinalvoidthrows 【例12.5 引本程 通常,信息检索系统中的资源应随着时间的有时也需要废弃现有的索引,建立全新的索引,IndexWriterConfigIndexWriterConfig2IndexWriterConfig.OpenMode.以覆盖方式建立索引,原有的索引将被清除,强制创建的索3缺省在,则以追加方式创 publicIndexWriterConfig.OpenMode indexWriter类和IndexReader类都提供了删除。类修饰符与返方说public类修饰符与返方说public 删除包含索引项termpublics(Term...删除包含terms中指定的文publics(Query删除与查询query相匹配public删除与查询queries中任何一个相匹的文public删除索引中所有publicpublic 删除文档号 um的文public删除包含索引项term为被删除的文档的public恢复被删除的文(1)IndexWriter类中的删除方法,除(2)IndexReader类中的删除方法,全部会IndexReader类将删除的文档存放在.del文件中,IndexReader类将删除的文档存放在.del文件中, 或检索到被删除的文档,非该文 IndexWriter (1)publicvoid

(Termterm, throwsthrowsCorrutIndexExcetion,更更新包含有索引项term的文档,原有内容用参数doc指定的文档替换(2)publicvoid

(Term

throwsthrowsCorruptIndexException,更新包含有索引项term的文档,原有内容用参数doc指定的文档替换。对文档内容的分析使用指定的分析 yzer(3)publicvoid >docs)throwsCorruptIndexException,IOException更新包含有索引项term的文档,原有内容用参数docs指定文档集合替换(4)publicvoid s(Term > throwsthrowsCorruptIndexException,更新包含有索引项更新包含有索引项term的文档,原有内容用参数docs档集合替换。对文档

yzer变的字段,,才能保证那些没有发 第12章基于Java 滤 滤检索是信息检索系统的表现形式出的查询要求(词或者短语)找到与用出的查询要求(词或者短语)找到与用户查询相匹Lucene多,通常各种类型的IndexSearcher作IndexSearcher类代表了索引搜索器,是检索 作IndexReader类型,经由该参数,索引搜索器与指定的索引相关联。IndexSearcher类 了抛出异常部分) 了抛出异常部分)IndexSearcher类的常用方publicpublicsearch(QueryFilterint返回与查询query相匹配的、符合过滤条件filter的前n个文档,如不使用过滤器,可以publicsearch(QueryintSort返回与查询query相匹配的前n个文档,返回publicsearch(QueryFilter返回与查询query相匹配的、符合过滤条件intSortpublicQueryintublicTo返回与查询 Filterfilter,intn)后的前n个文档,返回结果用过滤条件filterdoc(intpublicQueryParser类是对用户查询的解析器,其作QueryParserpublicQueryParser(VersionStringyzerQueryParser类的最重要方法是parse()方法,定publicQueryparse(Stringthrows 查 字段中包 查 字段中包 询puter档computer+puter“+”表示必须包含,返回一定包含scienceputercomputer!scienceputer-例如返回包含foam、roams等词的文档。“~的邻近检索,“~author:[AidaTOCarmen](1)publicint此属性表示索引中符合IndexSearcher对象的search()searchAfter()方法中指定查询的(1)publicint此属性表示索引中符合IndexSearcher对象的search()searchAfter()方法中指定查询的所有文档的数(2)publicScoreDoc[]此属性返回ScoreDocIndexSearcher对象的search()方法和searchAfter()方法实际earc()earcter()方类IndexSearcher类中与排序有关的search()方法类IndexSearcher类中与排序有关的search()方法TopFieldDocs类除了继承Topdocs类的totalHitspublicSortField[]ScoreDoc类用于封装一个检索返回文档的信息, :(1)publicint(2)publicfloat 滤 滤 4.::(1)Term–利用此方法,可以创建一个字段为fld、查询单词为的查询词实例(2)Term类–该构造方法的参数为查询词对象t1单词检索区分大小写,系统本身不负责大小写的 1单词检索区分大小写,系统本身不负责大小写的2查询单词的文本必须对应一个索引单元,必须根 3单词查询特别适用于未分析但建立索引的文本, erpublicTermRangeQuery(StringStringlowerTerm,StringupperTerm,boolean其 1可以对文档的任何文本字段进行范围检索,3下界单词和上界单词均可以为3下界单词和上界单词均可以为null,null表 PrefixQuery(Term 如返回该字段 的文档(注意,在分词publicWildcardQuery(Term其中的参数为查询词对象,在构建查询词对象时,查其中的参数为查询词对象,在构建查询词对象时,查询词中应包括通配符,通配符可以位于查询词文本中的任 uer档 档 public void voidadd(Term““(2)publicvoidadd(Termterm,int(3)publicvoidsetSlop(int 例如,查询单词的次序为digitallibrary,索引词的次序为librarydigital,索引词的要排索代码索代码不仅可以命中题名title字段中出现digitallibrary的文而且,可以命中题名为“ANOPTIMIZEDCOMBINATORIALLIBRARYBYDIGITALIMAGINGSPECTROSCOPY”的文档需需要注意的T3。多短语检索可以是看作是短语检索的另外一添加多个查询单词,但这些单词之间是“与publicvoidadd(Term[]publicvoidadd(Term[]terms,int 括digitallibraries BooleanQuery类是代表布尔查询的类,该类 BooleanQuery类常用的构造方法publicBooleanQuery()BooleanQuery(1)publicvoidadd(Queryquery,BooleanClause.Occur––与子查询相匹配,对––中可以包–中可以包含与子查询publicstaticint1024(publicstaticint1024 uer Lucene中代表模糊查询的类是FuzzyQuery类。该类是算法最早由 FuzzyQuery(1)publicFuzzyQuery(TermfloatminSimilarity,intprefixLength,intmaxExpansions)创建一个模糊查询对象,查询词对象由参数term指定参数minSimilarity值范围是[0.0,1.0),缺省值为0.5–minSimilarity 在模糊查询中,可以指定查询词中的一部分前缀做精确配,在模糊查询中,可以指定查询词中的一部分前缀做精确配,其余部分进行模糊匹配,参数prefixLength的作用就是aoaEpaios(2)publicFuzzyQuery(Term(3)publicFuzzyQuery(Termfloat(4)publicFuzzyQuery(Term 滤 滤在信息检索系统中,找出与用户查询表达式212 Lucene内部提供了相关度计算方法,对每一为了满足不同的排序需求,Lucene还提供了Lucene(1)Sort 1public2publicSort(SortField ublicSortSortField...指定。fields(2)SortFieldSortField1publicSortField(Stringfield,intieldtpetpe.若type取值为SortField.SCORE或SortField.DOC,参field可以为null2publicSortField(String参数由reverse指定了排序的顺序,若为true,表3publicSortField(Stringfield,Locale4publicSortField(String总之,SortField类指定了排序的标准,即结参加排序的字段必须在文档中存在,且已经 结果过滤是指查从询表达式获得的结果中去 或其他判断用户所在的位置,当用户查询某一的,从已有的查询中找出符合特定条件的子集。查查第三,过滤功能可以使用缓存来被过滤的字段,Lucene实现过滤的类称为过滤器,它们的基(1)(3)(3)(5)(7)TermsFilter类是多语词过滤器,是Filter其效果与等价的布尔查询(在查询表达式基础TermsFilter类在Lucene的\contrib\queries子目TermsFilter类仅有一个构造方法,创建一个publicTermsFilter类的常用方法是向多语词过滤器publicvoidaddTerm(Term 项目:过滤器示例FieldCacheRangeFilter<T> 在以后使用该过滤器时,重用缓存中的内容,从而提高了检索的速度,而多语词过滤器不支持缓 项目:过滤器示例 的文返回题名字段title中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论