xapian建立索引
xapian对于多个txt文档建立索引时,能否加入行号信息?以达到具体定位到哪一个文件的哪一行吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
xapian对于多个txt文档建立索引时,能否加入行号信息?以达到具体定位到哪一个文件的哪一行吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(13)
使用friso_t friso ; friso_task_t task;我将这两个变量作为参数保存分词的结果传递给另外一个函数使用时,总是出错:segmentation fault
我想来想去,还得需要知道行,我需要处理很多日志文件,每一行一条之日,将整个文档分词后,就失去了原来行的关系,我想修改一下分词代码,如何修改可以在分词的时候不要过滤掉回车符,在最后的结果中还保留下来?
回复
friso_t是friso实例, friso_task_t是分词任务描述实例. 这些都是指针, 分词结果的存储, 你具体看下tst-friso.c文件.
回复
这个修改很简单, friso.c中的friso_next函数中是字符类型判断, 你只要加一个换行符的判断即可.
我安装正确,测试程序friso -init ../friso.ini 运行也正确,在编译我的程序时加上-lfriso,还是会出现这种错误,不知道是不是跟我使用c和c++混合编程有关?
1. 用make和sudo make install来安装friso.
再配置下friso.ini中的friso.lex_dir指向friso里面的dict词库目录。
然后运行下测试程序: friso -init ../friso.ini来运行下测试程序,确保安装正确。
2. 编译你自己的程序的时候引入friso, 通过 -lfriso 注意不是-L (小写的"诶咯"),你打错了。
非常感谢您的回答,我好好研究研究!
现在使用friso分词,将分词结果保存到char *result,将每一个词的偏移量保存在int *offset,那么如何将这些保存到xapian的索引中呢,怎么样让它们对应起来?
回复
xapian是按照词索引的(倒排文档)。具体API我也不熟悉,你需要查看xapian文档。 总体原则,你需要将friso切分到的词的位移添加到索引内容中去,这样获取到的查询内容就是文档中该词的位移,再通过该位移在文件中快速定位。
我在使用friso时,在链接阶段,总是提示 undefined reference to `friso_new_from_ifile(char*) 这类的错误,而我已经-L指定了libfriso.so的位置,不明白哪里出错了?
回复
@Zoelov : friso把换行符号和标点符号直接过滤掉了。但是,每一个切分结果,task里面都会返回这个切分到的词在整个字符串中的索引。
通过task->word获取一个切分的字符串,通过task->offset获取这个词在整个切分字符串中的索引,你将这个task->offset存储到索引中即可,查询的时候通过得到的offset, 调用seek(offset)就直接定位到给定文件中这个词所在的地方了。
恩,是个好方法。正好还有个问题要请教:friso中文分词的结果保存的格式是什么样的?比如说我的一个文本中有多行数据,那么分词后的结果还会保存原来的行列关系吗?friso是怎么处理换行符的?
其实定位到行了也没有你预想的那个效果。
因为txt文档不能实现行的快速定位。
你可以将内容指针信息存储到索引中,这样通过seek就可以快速定位了。