Indri和Terrier搜索引擎的使用
生活随笔
收集整理的這篇文章主要介紹了
Indri和Terrier搜索引擎的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹
Indri和Terrier都是開源的搜索引擎,當中Indri作為Lemur項目的一個重要部分,具有強大的查詢接口,易建索引,可擴展,高效率等長處。能夠在SourceForge Lemur Project Page中下載。Terrier也是IR領域很有影響力的開源搜索引擎,Terrier是Glasgow大學用Java語言編寫的,具有高效靈活及易于部署等特點,眼下最新的版本號為Terrier 4.0。可在Terrier官網下載。
不管Indri還是Terrier整個過程,須要先建立索引,然后依據自己定義的query phrases(查詢短語。當然也能夠是句子),在已建立的索引上查詢,并返回一個結果。類似例如以下(后面會詳細解說每一列的含義):
兩個搜索引擎的使用關鍵在于它們的配置文件,接下來解說怎樣配置
文本格式
<DOC> <DOCNO>2011-12-05-20_1323118648-7cfd066125ff1daf479748f81346895d</DOCNO> <date>12/05/2011 (MM/DD/YYYY)</date> <SOURCE>arxiv</SOURCE> <TEXT> S and ?? production in pp interactions at a??s = 0.9 and 7 TeV measured with the....</TEXT> </DOC>
1、Indri
Indri建索引
<parameters> <memory>16G<memory> <index>path/to/index</index> //建完索引后,這些索引結果文件存放的位置,如/home/tempUser/myindex <stemmer> <name>krovetz</name> //詞干化工具,也即分詞,這個是默認的,能夠選擇其它的 </stemmer><corpus> <path>path/to/original/file/directory</path> //原始須要建立索引的文件文件夾 <class>trectext</class> //須要建立什么格式的索引,有xml, txt, trectext, web </corpus><field> <name>DOCNO</name> //文本ID號 </field><field> //假設須要用到時間信息,需加此field。 <name>date</name> <numeric>true</numeric> <parserName>DateFieldAnnotator</parserName> </field> </parameters>Indri查詢
配置文件<span style="font-size:14px;"><parameters> <index>path1/to/index</index> <index>path2/to/index</index> <rule>method:dirichlet,mu:1000</rule> //內置方法,用狄利克雷,參數值1000 <count>1000</count> //每一個查詢值返回1000條記錄,能夠自己設置<query> //第一個查詢 <number>001</number> //編號自定義 //假設文本的公布日期在兩個時間段之間的,則在其文本中查詢“Abbotsford Arts Centre”,依據其內置算法。計算query phrases與文本的相關度值 <text>#scoreif(#datebetween(10/05/2011 01/26/2012) #1(Abbotsford Arts Centre))</text> </query> <query> //第二個查詢 <number>003</number> <text>#scoreif(#datebetween(10/05/2011 08/08/2012) #1(Andy Billig))</text> </query><trecFormat>true</trecFormat> <queryOffset>1</queryOffset> <runID>query_id</runID> //自定義queryID </parameters></span>Indri查詢語言 1、Combining Beliefs #combine,#weight, #not, #max, #or, #band(boolean and) #wsum, #wand(weighted and) #weight( 1 #1(Abbotsford Arts Centre) ?0.5 #1(office) 0.5 #1(band))
2、Filter Operators scoreif(#datebetween(10/05/2011 01/26/2012) ?#1(Abbotsford Arts Centre))?
3、Numeric Field Operator #less( F N ) matches numeric field extents of type Fif value < N #greater( F N ), #between(F N_low N_high ) , #equals(F N )
4、Date Field Operator #dateafter( D ), #datebefore( D ), #datebetween( D_low D_high ), #dateequals( D )
查詢結果文件:
當中: 第一列:表示第003query 第二列:不用理會 第三列:DOCNO 第四列:排名 第五列:詳細排序值 第六列:query_id
2、Terrier
Terrier是還有一個開源的搜索引擎,能夠從官網下載terrier-4.0,下載terrier-4.0.gz后。解壓:tar -xvzf terrier-4.0.gz? 得到例如以下:
(Terrier是用java開發的,能夠去上面圖片的src文件夾下查看源代碼)
以下分別說說這些文件夾都是些什么: bin: 在建索引,檢索的時候要用到,在linux系統下用.sh,在windows下用相應的.bat doc:一些幫助文檔集 etc: 存放建立索引和檢索時的配置文件 lib:包括terrier能執行所依賴的jar包,如terrier-4.0-core.jar,junit-4.8.1.jar等 licenses: ?包括各種依賴包的licenses src: 搜索引擎源代碼 var: 默認的索引。檢索結果的存放位置(你能夠通過改動etc文件夾下的terrier.properties配置文件,自定義到別的文件夾) build.xml:各種依賴關系進行build
在執行terrier之前。首先要確定是否已經安裝了jdk。 能夠通過:echo $JAVA_HOME,若有值,則表示已經安裝。否則須要自己去安裝,然后 export JAVA_HOME="Absolute_Path_of_Java_Installation" 建索引: 1)定位到terrier文件夾cd terrier2)收集須要建索引的文檔./bin/trec_setup.sh "Absolute_Path_To_Collection_Files"這里須要指定絕對路徑。比方須要建索引的文件集在/home/hadoop/kba/kba2014/trecdata/2011-10文件夾下(該文件夾下都為文件。不是文件夾,Files已經是最后一層文件夾了),則上面的 Absolute_Path_To_Collection_Files即為 /home/hadoop/kba/kba2014/trecdata/2011-10執行后在etc文件夾下生成例如以下圖: collection.spec里面的內容例如以下: /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-01.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-03.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-05.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-07.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-08.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-11.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-12.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-13.trectext /home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-14.trectext
terrier.properties配置文件的內容例如以下: #default controls for query expansion querying.postprocesses.order=QueryExpansion querying.postprocesses.controls=qe:QueryExpansion #default controls for the web-based interface. SimpleDecorate #is the simplest metadata decorator. For more control, see Decorate. querying.postfilters.order=SimpleDecorate,SiteFilter,Scope querying.postfilters.controls=decorate:SimpleDecorate,site:SiteFilter,scope:Scope#default and allowed controls querying.default.controls= querying.allowed.controls=scope,qe,qemodel,start,end,site,scope#document tags specification #for processing the contents of #the documents, ignoring DOCHDR TrecDocTags.doctag=DOC TrecDocTags.idtag=DOCNO TrecDocTags.skip=DOCHDR #set to true if the tags can be of various case TrecDocTags.casesensitive=false#query tags specification TrecQueryTags.doctag=TOP TrecQueryTags.idtag=NUM TrecQueryTags.process=TOP,NUM,TITLE TrecQueryTags.skip=DESC,NARR#stop-words file stopwords.filename=stopword-list.txt#the processing stages a term goes through termpipelines=Stopwords,PorterStemmer
terrier.properties里面的#行表示凝視,建立索引時須要注意標簽
TrecDocTags表示要建索引的文件的配置 TrecDocTags.idtag:表示須要處理的標簽,TrecDocTags.skip=DOCHDR表示要忽略DOCHDR標簽。能夠有多個,用逗號隔開就可以。
文件格式例如以下: <DOC> <DOCNO>id</DOCNO> <TEXT>text content</TEXT> </DOC>
TrecQueryTags表示檢索的query文件的配置 TrecQueryTags.process表示要處理哪些標簽。 文件格式例如以下: <TOP> <NUM>003</NUM> //這個相當于你自己給這個query定一個id。所以能夠隨便寫 <TITLE>"Abbotsford Arts Centre" office band "Abbotsford Arts Centre May" company "Abbotsford Arts Centre" </TITLE> //Query Phrases </TOP>
3)建索引: ./bin/trec_terrier.sh -i
建索引的時候假設DOCNO里面的id長度大于默認的20個字符,那就會報錯,例如以下:
這時須要我們再次配置terrier.properties配置文件,增加一行 indexer.meta.forward.keylens=120 ?//你能夠自己定義長度
再次執行建索引命令就不會報錯了
你還能夠例如以下配置: collection.spec=/absolute/path/to/your.spec terrier.index.path=/absolute/path/to/index/path //你想把你的建好的index放在哪個文件夾 trec.results.file=/absolute/path/to/resultfile.res //你想想把你的query結果放在哪個文件 ignore.low.idf.terms=false //假設某個詞的逆文檔頻率idf非常低,還是要考慮,而不是丟棄 matching.retrieved_set_size=40000 //query后結果有多少條,假設test.query文件寫了非常多個query,那么這么多個query的返回的結果不大于40000,注意此時不是單個query的結果數
對于全部的properties的含義能夠在官網terrier.properties中查看。
4)檢索: ./bin/trec_terrier.sh -r -Dtrec.model=PL2 -c 10.99 -Dtrec.topics=/path/to/your.query -r表示retrieve,? -Dtrec.model表示用什么model去檢索,這里用到了PL2模型。詳細可在 terrier weighting model中查看 -c表示參數,后面10.99表示參數值 -Dtrec.topics表示your.query文件的詳細路徑 假設有多個索引文件。多個不同的query。怎么辦? 比方對5個文件集分別建立索引,有5個query分別要在相應的索引文件中面找怎么辦,因為是共用terrier.properties配置文件的。 所以你能夠通過寫一個shell腳本。針對不同的文件集。配置相應的collection.spec, terrier.index.path, trec.results.file. 終于得到的結果和開頭indri的結果類似。
3、Indri和Terrier注意點
兩者在寫query phrases時都須要注意不要有其它的字符出現, indri:除了a-z,A-Z,0-9。空格,其余字符如#@¥%都是非法字符。會導致錯誤 terrier:除了a-z,A-Z,0-9。空格,在多個單詞構成的詞組時可用雙引號(如"term1 term2 ?term3")。在表示權重時可用^(如”term1 term2“^0.5)。還有某些情況下可用+和-,詳細看官網 terrier query language總結
以上是生活随笔為你收集整理的Indri和Terrier搜索引擎的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeScript Type Innf
- 下一篇: setAnimationTransiti