美文网首页
配置phRank

配置phRank

作者: fliquidy | 来源:发表于2016-10-06 22:27 被阅读0次

    编译iState文件夹中的indri_api

    在已经编译好的indri文件夹中,可以找到Makefile.app文件。修改其中内容

    APP=indri_API
    

    然后将此文件拷到iState文件夹下。执行命令

    make -f Makefile.app
    

    就可以将indri_app编译。

    编译indri_api

    配置参数

    打开phrank文件夹下的params.py文件。配置以下变量

    indri = '/mnt/i/databackup/indri/indri-2.12/bin/'
    index_collection = '/mnt/i/databackup/testdocs/'
    index_wikipedia = '/mnt/i/databackup/wiki412/'
    graph_k = 5
    

    其中,indri对应的文件夹中应含有buildindex, dumpindexrunquery三个文件。这三个文件可以在经过编译后的indri文件夹内找到(分别位于三个不同的子文件夹下)。
    index_collection对应存放文件index的目录。
    index_wikipedia对应存放wiki的index的目录。

    使用phrank

    使用phrank需要新建两个文件。(假设我们新建了query.txt和term.txt两个文件)。其中query.txt存放我们的query,term.txt存放了query中term的全排列。
    格式如下

    query.txt

    1: player goal area
    

    term.txt

    1 : player
    1 : goal
    1 : area
    1 : player goal 
    1 : player area
    1 : goal area
    1 : player goal area
    

    其中1表示query的id,用来区分不同的query。可以使用任意其他值。query.txt和term.txt中可以包含多个query。

    要使用phrank对term进行排序时,执行
    python phRank.py query.txt terms.txt -c football -r 1
    此次,我也不清楚-c和-r的作用。在没有wiki的index的时候,似乎这两个参数没有任何作用。也就是可以把football 和1 替换成任意其他的东西。执行后,在data/keyphr文件夹下将生成term的权重。我执行后生成了如下内容

    1 : goal    1.0
    1 : player goal 0.861430988572
    1 : goal area   0.861386567364
    1 : player goal area    0.815211703957
    1 : player  0.722861977144
    1 : player area 0.722817555936
    1 : area    0.722773134728
    

    可以根据term的权重来选择要用哪些term来进行查询。

    使用indri来进行检索

    首先,需要修正下之前我们建立的index。这个非常坑,让我浪费了好多的时间。
    先回忆下,上次我们建立index的时候,每个问题放在一个txt文件里。事实上我们并没有成功建立index。
    看下上次的结果图

    上次的截图

    图中红色圈出的显示,只有一个文件建立的索引。

    所以,这次我们先重新修正建立index。

    我们依然为每一个问题建立一个文件。
    文件的格式如下

    <DOC>
    <DOCNO>1</DOCNO>
    <TEXT>
    In all codes, common skills include passing, tackling, evasion of tackles, catching and kicking.[8] In most
    codes, there are rules restricting the movement of players offside, and players scoring a goal must put the 
    ball either under or over a crossbar between the goalposts.
    </TEXT>
    </DOC>
    //注意,此处一定要有一个空行。
    

    文件最后一定要有一个空行,否则会提示错误(我在这浪费了好多时间)。把注释删掉。
    其中DOCNO中的是文档id,不可以重复
    TEXT中间是题目的文本信息。

    参数文件parameter.txt内容与上次差不多,但是要少许修改

    <parameters>
    <memory>8000m</memory>
    <index>/mnt/i/databackup/test/</index>
    <corpus>
    <path>/mnt/i/databackup/docs2</path>
    <class>trectext</class> //注意,此处与上次不同,类型为trectext
    </corpus>
    </parameters>
    

    重新执行命令

    Paste_Image.png

    可以看到,6个文件都成功建立索引了。

    接下来我们介绍如何使用indri来检索结果

    就像建立索引一样,我们依然需要一个文件来指定参数。

    <parameters>
      <index>/mnt/i/databackup/test</index> //指定index的位置
      <count>3</count> //返回结果的数量
      <trecFormat>true</trecFormat>//懒得解释了,放上来肯定没错
      <query> //以下为一个query
        <number>1</number> //query的id
        <text>football</text> //query的内容
      </query>
    </parameters>
    

    处理query我们需要runquery。在含有runquery的文件夹下,我们执行命令./runquery params.txt,可以看到一下结果

    query 结果

    每一行的意思如下
    <queryID> Q0 <DocID> <rank> <score> <runID>
    红色标出来的数字表示retrive到的文档的id,也就是在我们之前用<DOCNO></DOCNO>所围起来的数字。

    在使用indri来检索文件的时候,还有更多的参数可以使用。本次暂时不做介绍。具体的参数可以参考
    http://lemurproject.org/doxygen/lemur/html/IndriRunQuery.html.

    相关文章

      网友评论

          本文标题:配置phRank

          本文链接:https://www.haomeiwen.com/subject/qaoeyttx.html