xapian建立索引

时间变 发布于 2013/08/01 16:28
阅读 603
收藏 0
xapian对于多个txt文档建立索引时,能否加入行号信息?以达到具体定位到哪一个文件的哪一行吗?
加载中
0
狮子的魂
狮子的魂

其实定位到行了也没有你预想的那个效果。

因为txt文档不能实现行的快速定位。

你可以将内容指针信息存储到索引中,这样通过seek就可以快速定位了。

时间变
时间变
恩,是个好方法。正好还有个问题要请教:friso中文分词的结果保存的格式是什么样的?比如说我的一个文本中有多行数据,那么分词后的结果还会保存原来的行列关系吗?friso是怎么处理换行符的?
0
狮子的魂
狮子的魂
回复 @Zoelov : friso把换行符号和标点符号直接过滤掉了。但是,每一个切分结果,task里面都会返回这个切分到的词在整个字符串中的索引。
typedef struct {
    int offset;
    char word[__HITS_WORD_LENGTH__];
} friso_hits_term;
通过task->word获取一个切分的字符串,通过task->offset获取这个词在整个切分字符串中的索引,你将这个task->offset存储到索引中即可,查询的时候通过得到的offset, 调用seek(offset)就直接定位到给定文件中这个词所在的地方了。
时间变
时间变
我在使用friso时,在链接阶段,总是提示 undefined reference to `friso_new_from_ifile(char*) 这类的错误,而我已经-L指定了libfriso.so的位置,不明白哪里出错了?
狮子的魂
狮子的魂
回复 @Zoelov : xapian是按照词索引的(倒排文档)。具体API我也不熟悉,你需要查看xapian文档。 总体原则,你需要将friso切分到的词的位移添加到索引内容中去,这样获取到的查询内容就是文档中该词的位移,再通过该位移在文件中快速定位。
时间变
时间变
现在使用friso分词,将分词结果保存到char *result,将每一个词的偏移量保存在int *offset,那么如何将这些保存到xapian的索引中呢,怎么样让它们对应起来?
时间变
时间变
非常感谢您的回答,我好好研究研究!
0
狮子的魂
狮子的魂

1. 用make和sudo make install来安装friso.  

    再配置下friso.ini中的friso.lex_dir指向friso里面的dict词库目录。

    然后运行下测试程序: friso -init ../friso.ini来运行下测试程序,确保安装正确。

2. 编译你自己的程序的时候引入friso, 通过 -lfriso   注意不是-L (小写的"诶咯"),你打错了。 

时间变
时间变
我安装正确,测试程序friso -init ../friso.ini 运行也正确,在编译我的程序时加上-lfriso,还是会出现这种错误,不知道是不是跟我使用c和c++混合编程有关?
狮子的魂
狮子的魂
回复 @Zoelov : 这个修改很简单, friso.c中的friso_next函数中是字符类型判断, 你只要加一个换行符的判断即可.
时间变
时间变
我想来想去,还得需要知道行,我需要处理很多日志文件,每一行一条之日,将整个文档分词后,就失去了原来行的关系,我想修改一下分词代码,如何修改可以在分词的时候不要过滤掉回车符,在最后的结果中还保留下来?
0
狮子的魂
狮子的魂
friso里面确实使用string关键字,这个是C++里面的关键字。你加我QQ, 我发一份新的给你吧。
狮子的魂
狮子的魂
回复 @Zoelov : friso_t是friso实例, friso_task_t是分词任务描述实例. 这些都是指针, 分词结果的存储, 你具体看下tst-friso.c文件.
时间变
时间变
使用friso_t friso ; friso_task_t task;我将这两个变量作为参数保存分词的结果传递给另外一个函数使用时,总是出错:segmentation fault
返回顶部
顶部