Indri和Terrier搜索引擎的使用
生活随笔
收集整理的這篇文章主要介紹了
Indri和Terrier搜索引擎的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
介紹
Indri和Terrier都是開源的搜索引擎,當(dāng)中Indri作為Lemur項(xiàng)目的一個(gè)重要部分,具有強(qiáng)大的查詢接口,易建索引,可擴(kuò)展,高效率等長處。能夠在SourceForge Lemur Project Page中下載。Terrier也是IR領(lǐng)域很有影響力的開源搜索引擎,Terrier是Glasgow大學(xué)用Java語言編寫的,具有高效靈活及易于部署等特點(diǎn),眼下最新的版本號(hào)為Terrier 4.0。可在Terrier官網(wǎng)下載。
不管Indri還是Terrier整個(gè)過程,須要先建立索引,然后依據(jù)自己定義的query phrases(查詢短語。當(dāng)然也能夠是句子),在已建立的索引上查詢,并返回一個(gè)結(jié)果。類似例如以下(后面會(huì)詳細(xì)解說每一列的含義):
兩個(gè)搜索引擎的使用關(guān)鍵在于它們的配置文件,接下來解說怎樣配置
文本格式
<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> //建完索引后,這些索引結(jié)果文件存放的位置,如/home/tempUser/myindex <stemmer> <name>krovetz</name> //詞干化工具,也即分詞,這個(gè)是默認(rèn)的,能夠選擇其它的 </stemmer><corpus> <path>path/to/original/file/directory</path> //原始須要建立索引的文件文件夾 <class>trectext</class> //須要建立什么格式的索引,有xml, txt, trectext, web </corpus><field> <name>DOCNO</name> //文本ID號(hào) </field><field> //假設(shè)須要用到時(shí)間信息,需加此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> //內(nèi)置方法,用狄利克雷,參數(shù)值1000 <count>1000</count> //每一個(gè)查詢值返回1000條記錄,能夠自己設(shè)置<query> //第一個(gè)查詢 <number>001</number> //編號(hào)自定義 //假設(shè)文本的公布日期在兩個(gè)時(shí)間段之間的,則在其文本中查詢“Abbotsford Arts Centre”,依據(jù)其內(nèi)置算法。計(jì)算query phrases與文本的相關(guān)度值 <text>#scoreif(#datebetween(10/05/2011 01/26/2012) #1(Abbotsford Arts Centre))</text> </query> <query> //第二個(gè)查詢 <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 )
查詢結(jié)果文件:
當(dāng)中: 第一列:表示第003query 第二列:不用理會(huì) 第三列:DOCNO 第四列:排名 第五列:詳細(xì)排序值 第六列:query_id
2、Terrier
Terrier是還有一個(gè)開源的搜索引擎,能夠從官網(wǎng)下載terrier-4.0,下載terrier-4.0.gz后。解壓:tar -xvzf terrier-4.0.gz? 得到例如以下:
(Terrier是用java開發(fā)的,能夠去上面圖片的src文件夾下查看源代碼)
以下分別說說這些文件夾都是些什么: bin: 在建索引,檢索的時(shí)候要用到,在linux系統(tǒng)下用.sh,在windows下用相應(yīng)的.bat doc:一些幫助文檔集 etc: 存放建立索引和檢索時(shí)的配置文件 lib:包括terrier能執(zhí)行所依賴的jar包,如terrier-4.0-core.jar,junit-4.8.1.jar等 licenses: ?包括各種依賴包的licenses src: 搜索引擎源代碼 var: 默認(rèn)的索引。檢索結(jié)果的存放位置(你能夠通過改動(dòng)etc文件夾下的terrier.properties配置文件,自定義到別的文件夾) build.xml:各種依賴關(guān)系進(jìn)行build
在執(zhí)行terrier之前。首先要確定是否已經(jīng)安裝了jdk。 能夠通過:echo $JAVA_HOME,若有值,則表示已經(jīng)安裝。否則須要自己去安裝,然后 export JAVA_HOME="Absolute_Path_of_Java_Installation" 建索引: 1)定位到terrier文件夾cd terrier2)收集須要建索引的文檔./bin/trec_setup.sh "Absolute_Path_To_Collection_Files"這里須要指定絕對(duì)路徑。比方須要建索引的文件集在/home/hadoop/kba/kba2014/trecdata/2011-10文件夾下(該文件夾下都為文件。不是文件夾,Files已經(jīng)是最后一層文件夾了),則上面的 Absolute_Path_To_Collection_Files即為 /home/hadoop/kba/kba2014/trecdata/2011-10執(zhí)行后在etc文件夾下生成例如以下圖: collection.spec里面的內(nèi)容例如以下: /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配置文件的內(nèi)容例如以下: #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里面的#行表示凝視,建立索引時(shí)須要注意標(biāo)簽
TrecDocTags表示要建索引的文件的配置 TrecDocTags.idtag:表示須要處理的標(biāo)簽,TrecDocTags.skip=DOCHDR表示要忽略DOCHDR標(biāo)簽。能夠有多個(gè),用逗號(hào)隔開就可以。
文件格式例如以下: <DOC> <DOCNO>id</DOCNO> <TEXT>text content</TEXT> </DOC>
TrecQueryTags表示檢索的query文件的配置 TrecQueryTags.process表示要處理哪些標(biāo)簽。 文件格式例如以下: <TOP> <NUM>003</NUM> //這個(gè)相當(dāng)于你自己給這個(gè)query定一個(gè)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
建索引的時(shí)候假設(shè)DOCNO里面的id長度大于默認(rèn)的20個(gè)字符,那就會(huì)報(bào)錯(cuò),例如以下:
這時(shí)須要我們?cè)俅闻渲胻errier.properties配置文件,增加一行 indexer.meta.forward.keylens=120 ?//你能夠自己定義長度
再次執(zhí)行建索引命令就不會(huì)報(bào)錯(cuò)了
你還能夠例如以下配置: collection.spec=/absolute/path/to/your.spec terrier.index.path=/absolute/path/to/index/path //你想把你的建好的index放在哪個(gè)文件夾 trec.results.file=/absolute/path/to/resultfile.res //你想想把你的query結(jié)果放在哪個(gè)文件 ignore.low.idf.terms=false //假設(shè)某個(gè)詞的逆文檔頻率idf非常低,還是要考慮,而不是丟棄 matching.retrieved_set_size=40000 //query后結(jié)果有多少條,假設(shè)test.query文件寫了非常多個(gè)query,那么這么多個(gè)query的返回的結(jié)果不大于40000,注意此時(shí)不是單個(gè)query的結(jié)果數(shù)
對(duì)于全部的properties的含義能夠在官網(wǎng)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模型。詳細(xì)可在 terrier weighting model中查看 -c表示參數(shù),后面10.99表示參數(shù)值 -Dtrec.topics表示your.query文件的詳細(xì)路徑 假設(shè)有多個(gè)索引文件。多個(gè)不同的query。怎么辦? 比方對(duì)5個(gè)文件集分別建立索引,有5個(gè)query分別要在相應(yīng)的索引文件中面找怎么辦,因?yàn)槭枪灿胻errier.properties配置文件的。 所以你能夠通過寫一個(gè)shell腳本。針對(duì)不同的文件集。配置相應(yīng)的collection.spec, terrier.index.path, trec.results.file. 終于得到的結(jié)果和開頭indri的結(jié)果類似。
3、Indri和Terrier注意點(diǎn)
兩者在寫query phrases時(shí)都須要注意不要有其它的字符出現(xiàn), indri:除了a-z,A-Z,0-9。空格,其余字符如#@¥%都是非法字符。會(huì)導(dǎo)致錯(cuò)誤 terrier:除了a-z,A-Z,0-9。空格,在多個(gè)單詞構(gòu)成的詞組時(shí)可用雙引號(hào)(如"term1 term2 ?term3")。在表示權(quán)重時(shí)可用^(如”term1 term2“^0.5)。還有某些情況下可用+和-,詳細(xì)看官網(wǎng) terrier query language總結(jié)
以上是生活随笔為你收集整理的Indri和Terrier搜索引擎的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeScript Type Innf
- 下一篇: setAnimationTransiti