WHU Bruisefree分享 http://blog.sciencenet.cn/u/bruisefree Link together

博文

Indri查询命令(Indri Query Retrieval)及JAVA调用

已有 6066 次阅读 2013-1-5 16:59 |个人分类:lemur Indri|系统分类:科研笔记| Lemur, indri

   原文地址:http://www.lemurproject.org/doxygen/lemur/html/IndriRunQuery.html 
 
基本命令

查询参数

index

Indri索引库路径。在参数文件中像<index>/path/to/repository</index>这样指定,在命令行中像-index=/path/to/repository这样指定。该参数可以设置多次来组合多个索引库。

server

运行Indri的服务器主机名(IndriDaemon)。在参数文件中如<server>hostname</server>方式指定,在命令行中像-server=hostname这样来指定。主机名可以指定一个可选的商品号用来连接,用hostname:portnum这种形式。该参数可以指定多次来组合多个服务器。

count

整数值,设置给定查询返回的最大结果数。在参数文件中如<count>number</count>设置,在命令行中如-count=number设置。

query

需要执行的indri查询语言的query,可指定多个。

rule

指定应用的平滑规则(TermScoreFunction),格式如下:

 ( key ":" value ) [ "," key ":" value ]*

下面是一个命令行的规则格式:

-rule=method:linear,collectionLambda:0.2,field:title

参数文件中格式:

<rule>method:linear,collectionLambda:0.2,field:title</rule>

代表利用Jelinek-Mercer平滑(Jelinek-Mercer平滑方法是在最大似然模型和文档集模型上进行线性插值),且背景lambda值为0.2,并只在title字段中查找。

如果某项规则键(key)没有设置,则默认采用所有值。因此,如果一个规则没有指定字段,那么会匹配所有字段,故-rule=method:linear,collectionLambda:0.2是一个合法的规则。

合法的规则键有:

method:平滑方法 (text)

field:规则应用字段

operator:应用的查询项类型{ term, window }

合法的平滑方法有:

dirichlet(also 'd', 'dir') (default mu=2500)

jelinek-mercer(also 'jm', 'linear') (default collectionLambda=0.4, documentLambda=0.0), collectionLambda is also known as just "lambda", either will work

twostage(also 'two-stage', 'two') (default mu=2500, lambda=0.4)

如果规则没有正确解析,默认为Dirichlet, mu=2500.

stopper

一个复杂的元素,包含了一个或多个word子元素,用于指定所使用的停止词列表。用如下方法指定: <stopper><word>stopword</word></stopper> (参数文件),-stopper.word=stopword (命令行). 这是一个可选参数,默认为不采用停止词。

maxWildcardTerms

(可选项) 整数值,用于为查询或者查询集的同义词列表指定特殊符号项(wildcard term)的最大数量。如果限定为一项,会抛出异常。如果没有设置值,默认为100

 

基准检索(非语言模型)

baseline

指定所应用的基准检索方法(非语言模型),这使得那些对于Lemur RetMethod API过大的语料,也能在这些语料上运行基准实验。当运行基准实验时,查询词不能包含任何indri检索符,只能包括词项。

参数值的格式:(tfidf|okapi) [ "," key ":" value ]*

命令行格式例子:-baseline=tfidf,k1:1.0,b:0.3

参数文件例子:<baseline>tfidf,k1:1.0,b:0.3</baseline>

Methods:

tfidf:用tfidf评分来实施检索,如lemur::retrieval::TFIDFRetMethod实现的使用BM25TF词项加权。在如下参数下,可实施伪相关反馈。

参数 (可选):

k1 k1词权重,默认为1.2

b b词权重,默认为0.75

okapi:用Okapi评分来实施检索,如lemur::retrieval::OkapiRetMethod中所实现的。

Performs retrieval via Okapi scoring as implemented in lemur::retrieval::OkapiRetMethod. 这种基准测试方法下不能实施伪相关反馈。

参数 (可选):

k1 k1词权重,默认值为1.2

bb词权重,默认值为0.75

k3 k3 查询权重,默认为7

   格式化参数

queryOffset

指定查询的序号偏移,例如针对TREC格式的150。在参数文件中如<queryOffset>number</queryOffset>指定,在命令行中如-queryOffset=number方式指定

runID

查询运行的id字符串,在TREC的评分输出中使用。在参数文件中,像这样<runID>someID</runID>指定,在命令行中如下-runID=someID

trecFormat

标识true下产生TREC的评分输出,否则标识为false。在参数文件中这样指定: <trecFormat>true</trecFormat>,在命令行中这样指定-trecFormat=true。注意0可以用来表示false1可以用来表示true

inex participant-id

触发INEX格式的结果输出,指定提交所用的参与者ID,在参数文件中的格式如下<inex><particpantID>someID</participantID><inex>,命令行格式为-inex.participantID=someID

inex task

触发INEX格式的结果输出,指定任务属性,默认(CO.Thorough),在参数文件中格式如下<inex><task>someTask</task><inex>,命令行格式-inex.task=someTask

inex query

触发INEX格式的结果输出,指定查询属性(默认为automatic),在参数文件中格式为<inex><query>someQueryType</query><inex>,命令行格式-inex.query=someQueryType

inex topic-part

触发INEX格式的结果输出,指定topic-part 的属性(默认T),在参数文件中格式为<inex><topicPart>someTopicPart</topicPart><inex>,命令行格式如下 -inex.topicPart=someTopicPart

inex description

触发INEX格式的结果输出,指定描述内容,在参数文件中用如下形式指定<inex><description>some description</description><inex>,在命令行中用 -inex.description="some description"描述。

 

   伪相关反馈参数(Pseudo-Relevance Feedback

fbDocs

用于相关反馈的文档数,在参数文件中如下方式指定<fbDocs>number</fbDocs>,命令行指定方式-fbDocs=number

fbTerms

用于相关反馈的词项数,在命令行中如下方式指定<fbTerms>number</fbTerms>,在命令行中指定方式-fbTerms=number

fbMu

用于相关反馈的mu值,浮点数,在命令行中指定方式为<fbMu>number</fbMu>,在命令行中指定方式为:-fbMu=number

fbOrigWeight

[0.0..1.0]区间内的浮点值用于指定扩展Query中原始Query的权重,参数文件中指定方式<fbOrigWeight>number</fbOrigWeight>,命令行中的指定方式为 -fbOrigWeight=number

 

 

 

2  命令实例

IndriRunQuery D:/index/queryparam.txt

其中D:/index/queryparam.txt为参数配置文件,如下: 

<parameters>

       <index>E:indexgenomic_subajepidem</index>

       <index>E:indextext</index>

       <index>E:indextest2</index>

       <index>E:indexx</index>

       <count>10</count>

       <query>case</query>

       <trecFormat>false</trecFormat>

       <stemmer><name>krovertz</name></stemmer>

</parameters>

注意,这里可以有多个索引文件。

3  Java调用并保存结果

下表的功能实现用Java调用命令执行,并将结果存入文本文件之中。

 

      

       /**

        *

        * @param args

        */

       public static void main(String[] args){

             

              //original results

              LemurCommandExecutor lce = new LemurCommandExecutor("IndriRunQuery", "D:/index/queryparam.txt");

              lce.setOutputFile("D:/index/queryresult.txt");

             

              lce.executeToFile();

       }

      

       /**

        *

        */

       public void executeToFile(){

              Process p = null;

              try {

                     String fullExecute = this.commandName +" "+ this.parameterFile;

                     System.out.println(fullExecute);

                     p = Runtime.getRuntime().exec(fullExecute);

                     InputStreamReader isr = new InputStreamReader(p.getInputStream());

               File file = new File(this.outputFile);

               BufferedWriter output = new BufferedWriter(new FileWriter(file));

               int c = 0;

               while ((c = isr.read()) >-1) {

                      output.write(c);

               }

              

               output.close();

              

            

              } catch (IOException e) {

                     e.printStackTrace();

              }

       }

}

 



https://blog.sciencenet.cn/blog-563898-649865.html

上一篇:情报学相关的2011SCI分区情况
下一篇:Lemur 平滑支撑文件生成命令(GenerateSmoothSupport)
收藏 IP: 183.61.244.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-22 18:41

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部