给lemur加中文分词

      回到学校读研以后,前半年的生活比较堕落,所以没有什么可以在这个博客上写的,这学期突然醒悟,最近在弄lemur来给问答作支撑,中国人的话没有空格分词,所以所有老外的开源系统拿到中国来使用,第一件事情一般都是给它加个中文分词。
      我们先说一下lemur和lucene这两个东西,个人对lucene比较熟悉,对lemur现在也有一点了解,对他们评价如下:
  1. lemur中的检索对于作实验来说比lucene要好,它支持语言模型和其他检索方法;
  2. lucene的通用性和易用性比lemur要好,稳定性和效率还没看出来,但是lucene的稳定性毋庸置疑;
  3. lemur的文档写的太粗糙,基本无法提供帮助,要想在其上工作看完了它的官网就得靠它的论坛了,万幸的是老外一般都比较乐于助人,有问题只要用英文说明白,基本都有回复;
  4. 相比之下,lucene的文档和wiki可以说相当只好,且资料较多。
     废话少说,在lemur中加入分词(仅针对indri索引)的步骤如下:   
  1. lemur的indri::parse::Tokenizer* tokenizer负责将输入的文档的标签去掉,然后负责对输入的词按空格切分,并把结果存放到它自身的terms向量中,它的positions向量存位置信息;
  2. lemur支持简单的将中文按单字切分,但是这个是没有用的,我的办法是没有选择中文文档类型(chinese),而是选择了(trectext)这个类型,这样的代价是输入的文档需要是utf-8编码的,如果你的切词程序不支持这种编码就可以把它转码为gb2312切词,然后在转回utf-8输出,这个我们后面谈;
  3. 依据1和2,我们的文档输入以后去掉标签的内容就按照标点符号切分开放到tokenizer的terms向量中了,可以通过打印信息看出这一点;
  4. 然后,我们在tokenizer的adddocument函数的tokenizer后面的部分作文章,我们依次读出terms这个vector中的文字(这个时候是句子),然后我们加入我们的切词程序,将这个句子切词;
  5. 我们定义一个新的和terms同类型的变量,将切好的词放入这个向量;
  6. 最后在全部处理完以后用自己定义的那个向量替换tokenizer原来的terms向量,一个简单你的赋值语句即可;
  7. 在parsed之后,我们还要同样的操作,将这个terms赋值给parsed的terms;
  8. 然后后者你重新打包,利用Indribuildindex建立索引,或者可以将indribuildindex和indexenvironment这两个类提出来,然后改改命名空间,自己编译连接为一个可执行文件就可以了;
  9. 隊于positions信息,可以按照同样的步骤进行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值