欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Indri使用会遇到的坑和BUG

程序员文章站 2024-03-24 11:20:46
...

最近帮一个大佬处理一下语料,用Indri做个查询,但是中间遇到了不少的坑。虽然我不是做检索的,但还是记录一下吧2333。

首先Indri的安装及使用,可以参考这一篇博客Indri:安装及使用注意安装过程中可能会因为找不到zlib.h而失败,请自行百度zlib安装。

然后在建立索引和检索的时候要注意一下几点:

1 索引和检索的关键词注意都要进行分词和停用词的去除。停用词需要复制下来然后直接黏贴在建立索引 以及 查询的参数文件中,Indri提供有一份停用词列表

<parameters>
...

<!--通常都使用krovetz分词工具-->
<stemmer>
    <name>krovetz</name>
</stemmer>

<!--Indri需要直接在建立索引和检索的参数文件中指定停用词-->
<stopper>
    <word>word1</word>
    <word>word2</word>
</stopper>

...
</parameters>

2 使用Indri进行查询的时候需要把关键词中的标点全部去掉!!!例如但不限于! ? . , ( ) ' " :   冒号也要去掉,否则就会出现如下错误。但是连字符不用去掉如so-called 中间的- 就不会引起错误。

EXCEPTION in query 0: IndriRunQuery.cpp(383): QueryThread::_runQuery Exception 
../src/QueryEnvironment.cpp(874): Couldn't understand this query: NoViableAlt Seahawks

EXCEPTION in query 122: IndriRunQuery.cpp(410): QueryThread::_runQuery Exception
../src/QueryEnvironment.cpp(890): Couldn't understand this query: NoViableAlt

3 如果语料的格式不完全相同,那么建议单独建立索引,建立不同索引的时候建议完善参数文件中的<field>标签,查询的时候也可以用一个关键词查好几个索引。

<parameters>
...

<index>/home/username/indri/index1</index>
<index>/home/username/indri/index2</index>


<!--当有多个关键词的时候会将每个关键词在每个索引上都进行查询-->
<query>
    <number>001</number>
    <text>keyword1</text>
</query>

<query>
    </number>002</number>
    <text>keyword2</number>
</query>
...
</parameters>