第12章基于java信息檢索技術_第1頁
第12章基于java信息檢索技術_第2頁
第12章基于java信息檢索技術_第3頁
第12章基于java信息檢索技術_第4頁
第12章基于java信息檢索技術_第5頁
已閱讀5頁,還剩215頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

利用計算機大容量和快速計算的能力構建本章介紹如何利用開源的信息檢索— 信息檢索(InformationRetrieval)息 與檢索”(InformationStorageand與數(shù)據(jù)庫查詢不同,信息檢索的處理對象是郵件、多等。因此,信息檢索系統(tǒng)建設,從信息檢索的定義中可以看出,信息檢索包一個是組織和,根據(jù)檢索對象的外在特 圖中實線表示信息的過程,對特征、有檢索價值的標識及其屬信息,如、的位置查找的數(shù)據(jù)結構將這些信息起 LuceneAPI Lucene加入到Apache

檢索的引擎,IBM的商業(yè)軟件WebSphere中也采用了1.Lucene的特 2 Lucene使用Lucen3.5.0 ...。...。這 的API包,使用Lucene時需要導入這個程序/docs/api/index.html:API文檔3.Lucene的主 IndexWriter、索 器IndexReader、索引編 的枚舉類型Version就位于這個包第12章基于Java Field 類文檔()表示信息檢索系統(tǒng)中索引一個文檔由一組字段(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類是一個抽象類,本身不能創(chuàng)建實TokenStream類TokenStream類定義的close()方法關閉切分項(4)publicField(StringTokenStreamtokenStream,索引中不字段值,只對分詞的結果進行索引。分詞的結果由參數(shù)tokenStream指定。是否詞向3Field類的普通方(1)String返回字段的名稱,此方法由Fieldable接口定義(3)pub(3)puboidsetValue(String(4)Reader(5)TokenStream Field (Directory)代表了Lucene的索引的 Directory是一個抽象類,它是所有表示索引置,其它類型的 Directory類只有Directory類只有一個無參數(shù)的構造方–public voiddeleteFile(Stringthrows刪 中指定的文件name String[]listAll()throwsIOException以字符串數(shù)組形式返 中所有文件的名稱 booleanfileExists(String判斷文件是否存在,如果指定的文件name回true longfileLength(String返 中name指定的文件的長度5public

longfileModified(Stringname)throwsIOException返回name指定的文件的上次修改時間,返回值為1970年1月1日00:00:00經(jīng)過的毫秒6public voiddeleteFile(Stringthrows刪 中參數(shù)name指定的文件7publicvoidcopy(DirectoryStringsrc,Stringdest)throws 8public voidthrows––關閉當 RAMDirectory類表示內存,是Directory類的直接子類,表示在內存當中的索引的位 RAMDirectory throws , dir的內容僅會在創(chuàng)建當前內存時被加載至內存,而dir的任何后續(xù)的改變,都不會再反映到所創(chuàng)建的內存中。FSDirectoryFSDirectory是文件系 該類是一個抽象類,不能用new關鍵字創(chuàng)建實publicstaticFSDirectoryopen(FilethrowsSolaris和Windows64位JRE,實際返回的是若當前系統(tǒng)平臺是其它Windows操作系統(tǒng)下的非64位JRE,則實際返回SimpleFSDirectory類為簡單文件系統(tǒng) publicSimpleFSDirectory(File 如果程序明確運行在Windows 如果程序明確運行在Windows操作系統(tǒng)下的NIOFSDirectoryNIOFSDirectory類為新IO(NewI/O)文件系 裝非Windows系統(tǒng)中的 publicNIOFSDirectory(File 。MMapDirectory類為內存映 Solaris和Windows64位JRE環(huán)境下的 publicMMapDirectory(Filethrows 如果程序僅運行于SunSolaris和Windows64位 Field 在Lucene中,分析器是一種可以對文本字串 yzer

表中的前5個分析器均位于Lucene的程序 抽象 TokenStreamtokenStream(StringReader 此外,yzer類還實現(xiàn)了java.io.Closeable Stopyzer類是停用詞分析器,它可以去除原始文Stopyzer原始文本 is .Pleasecontactmewhenyou’reatconvenient切分結果:/my/ Stop yzer(1)public yzer(Version參數(shù)matchVersion表示使用的Lucene版Lucene來說,此參數(shù)應為Version.LUCENE_35 yzer內置的缺省停用詞表包括a、an、參數(shù)matchVersion表示使用的Lucene版Lucene來說,此參數(shù)應為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析系統(tǒng)ICTCLAS(InstituteofComputingTechnology,ChineseLexical ysisSystem)基于隱馬爾科夫模型(HiddenMarkovModel, is .Pleasecontactmewhenyou’reatconvenienttime. 切分結果:/我/的/郵箱/是 /方便SmartChinese yzer(1)public yzer(Version(2)public

yzer(VersionbooleanSet(3)publicSetstopWords指定 1.0版開始,IK 先進。高效率:在PIII1G內存?zhèn)€人機器上, mmseg4j用Chih-HaoTsai的MMSeg算法實現(xiàn)的 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使用文件系統(tǒng)管理器索引,一個索引 Lucene索引的對象是文檔,因此,段由文檔文檔由多個字段組成,字段經(jīng)過分析器的分析, 在文件系統(tǒng)中,索引對應了文件,它由索引文件的,就是一個索引。一個索引通1.段(x為字母或數(shù)字) (關于segments_x的信息) 建立索引時使用的Lucene版本號引更 (eetee_0.dt_0.d段的數(shù)段中包含的文段中包含的文檔段中文件的相關信息件.fdt、.fdx2件.fdt、.fdx 3.與索引項有關的件.tis、.tii。件這些文件.tis、.tii。4與詞向量有關的記錄索引詞向量信息,包括三個文件:.tvf.tvd、.tvx 5.包括.frq、.prx 6.管理用件包括.del和write.lock兩個文時,表示程序正在修改索引,通過這個文件可以件件 了.cfs中所有項目的項 Lucene的索引結類Lucene35publicIndexWriterConfig(Version 參數(shù)matchVersion表示使用的Lucene版本,對3.5版該參數(shù)matchVersion表示使用的Lucene版本,對3.5版來說,此參數(shù)應為Version.LUCENE_35參 yzer表示建立索引時使用的分析器IndexWriter的索引寫到索引中,它只有一個構造方法:IndexWriterConfigconf)throwsCorruptIndexException,publicIndexWriterConfigconf)throwsCorruptIndexException,IndexReader類是一個抽象類,表示索引 IndexReader類提供了多種重寫的open()方法(1)publicstaticIndexReaderopen(DirectorythrowsCorruptIndexException, 器為只讀,參數(shù)readOnly為false時,可以(2)publicstaticIndexReaderopen(DirectorybooleanthrowsCorruptIndexException,Lucene的索引結類 (yzer類及其子類)指定對索引字段內容的切分方式,使用封裝類(Directory類及其子//指定索Directoryd=FSDirectory.open(new//指定分 yzer=new IndexWriterConfigconf=new (3)創(chuàng)建IndexWriter對象,將要索引的文()IndexWriter1publicvoid throws2publicvoid 3publicvoid >throwsCorruptIndexException,將指定的文檔集合docs添加到索引4publicvoid > throwsCorrutIndexExcetion,用指定的分析 IndexWriterIndexWriterindexWriter=newIndexWriter(d,doc FieldFieldPath=newField( doc.add(FieldPath);//將addr字段加入 publicvoidthrows【例12.4本例對在項目\source子下的資源進行索引,這些資源是期章,經(jīng)初步加工 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 引本程 通常,信息檢索系統(tǒng)中的資源應隨著時間的有時也需要廢棄現(xiàn)有的索引,建立全新的索引,IndexWriterConfigIndexWriterConfig2IndexWriterConfig.OpenMode.以覆蓋方式建立索引,原有的索引將被清除,強制創(chuàng)建的索3缺省在,則以追加方式創(chuàng) 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的文檔,原有內容用參數(shù)doc指定的文檔替換(2)publicvoid

(Term

throwsthrowsCorruptIndexException,更新包含有索引項term的文檔,原有內容用參數(shù)doc指定的文檔替換。對文檔內容的分析使用指定的分析 yzer(3)publicvoid >docs)throwsCorruptIndexException,IOException更新包含有索引項term的文檔,原有內容用參數(shù)docs指定文檔集合替換(4)publicvoid s(Term > throwsthrowsCorruptIndexException,更新包含有索引項更新包含有索引項term的文檔,原有內容用參數(shù)docs檔集合替換。對文檔

yzer變的字段,,才能保證那些沒有發(fā) 第12章基于Java 濾 濾檢索是信息檢索系統(tǒng)的表現(xiàn)形式出的查詢要求(詞或者短語)找到與用出的查詢要求(詞或者短語)找到與用戶查詢相匹Lucene多,通常各種類型的IndexSearcher作IndexSearcher類代表了索引搜索器,是檢索 作IndexReader類型,經(jīng)由該參數(shù),索引搜索器與指定的索引相關聯(lián)。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()方法中指定查詢的所有文檔的數(shù)(2)publicScoreDoc[]此屬性返回ScoreDocIndexSearcher對象的search()方法和searchAfter()方法實際earc()earcter()方類IndexSearcher類中與排序有關的search()方法類IndexSearcher類中與排序有關的search()方法TopFieldDocs類除了繼承Topdocs類的totalHitspublicSortField[]ScoreDoc類用于封裝一個檢索返回文檔的信息, :(1)publicint(2)publicfloat 濾 濾 4.::(1)Term–利用此方法,可以創(chuàng)建一個字段為fld、查詢單詞為的查詢詞實例(2)Term類–該構造方法的參數(shù)為查詢詞對象t1單詞檢索區(qū)分大小寫,系統(tǒng)本身不負責大小寫的 1單詞檢索區(qū)分大小寫,系統(tǒng)本身不負責大小寫的2查詢單詞的文本必須對應一個索引單元,必須根 3單詞查詢特別適用于未分析但建立索引的文本, erpublicTermRangeQuery(StringStringlowerTerm,StringupperTerm,boolean其 1可以對文檔的任何文本字段進行范圍檢索,3下界單詞和上界單詞均可以為3下界單詞和上界單詞均可以為null,null表 PrefixQuery(Term 如返回該字段 的文檔(注意,在分詞publicWildcardQuery(Term其中的參數(shù)為查詢詞對象,在構建查詢詞對象時,查其中的參數(shù)為查詢詞對象,在構建查詢詞對象時,查詢詞中應包括通配符,通配符可以位于查詢詞文本中的任 uer檔 檔 public void voidadd(Term““(2)publicvoidadd(Termterm,int(3)publicvoidsetSlop(int 例如,查詢單詞的次序為digitallibrary,索引詞的次序為librarydigital,索引詞的要排索代碼索代碼不僅可以命中題名title字段中出現(xiàn)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)創(chuàng)建一個模糊查詢對象,查詢詞對象由參數(shù)term指定參數(shù)minSimilarity值范圍是[0.0,1.0),缺省值為0.5–minSimilarity 在模糊查詢中,可以指定查詢詞中的一部分前綴做精確配,在模糊查詢中,可以指定查詢詞中的一部分前綴做精確配,其余部分進行模糊匹配,參數(shù)prefixLength的作用就是aoaEpaios(2)publicFuzzyQuery(Term(3)publicFuzzyQuery(Termfloat(4)publicFuzzyQuery(Term 濾 濾在信息檢索系統(tǒng)中,找出與用戶查詢表達式212 Lucene內部提供了相關度計算方法,對每一為了滿足不同的排序需求,Lucene還提供了Lucene(1)Sort 1public2publicSort(SortField ublicSortSortField...指定。fields(2)SortFieldSortField1publicSortField(Stringfield,intieldtpetpe.若type取值為SortField.SCORE或SortField.DOC,參field可以為null2publicSortField(String參數(shù)由reverse指定了排序的順序,若為true,表3publicSortField(Stringfield,Locale4publicSortField(String總之,SortField類指定了排序的標準,即結參加排序的字段必須在文檔中存在,且已經(jīng) 結果過濾是指查從詢表達式獲得的結果中去 或其他判斷用戶所在的位置,當用戶查詢某一的,從已有的查詢中找出符合特定條件的子集。查查第三,過濾功能可以使用緩存來被過濾的字段,Lucene實現(xiàn)過濾的類稱為過濾器,它們的基(1)(3)(3)(5)(7)TermsFilter類是多語詞過濾器,是Filter其效果與等價的布爾查詢(在查詢表達式基礎TermsFilter類在Lucene的\contrib\queries子目TermsFilter類僅有一個構造方法,創(chuàng)建一個publicTermsFilter類的常用方法是向多語詞過濾器publicvoidaddTerm(Term 項目:過濾器示例FieldCacheRangeFilter<T> 在以后使用該過濾器時,重用緩存中的內容,從而提高了檢索的速度,而多語詞過濾器不支持緩 項目:過濾器示例 的文返回題名字段title中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論