首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据检索/文本搜索

数据检索/文本搜索
EN

Stack Overflow用户
提问于 2015-06-15 23:02:05
回答 1查看 357关注 0票数 1

为了我自己对数据检索的兴趣,我正在开发一个selfProjet。我有一个文本文件的格式如下。

代码语言:javascript
复制
.I 1
.T
experimental investigation of the aerodynamics of a
wing in a slipstream . 1989
.A
brenckman,m.
.B
experimental investigation of the aerodynamics of a
wing in a slipstream .
.I 2
.T
simple shear flow past a flat plate in an incompressible fluid of small
viscosity .
.A
ting-yili
.B
some texts...
some more text....
.I 3
...

".I 1“表示对应于doc ID1的文本块的开头,".I 2”表示对应于文档ID2的文本块的开始。

我做了:

  • 拆分文档并将它们放在单独的文件中
  • 删除停止词(或,同时,is,are,.)
  • 词干得到每一个词根(成就,实现,可实现,...all转化为等等)
  • 最后创建e TreeMultiMap,如下所示:
代码语言:javascript
复制
{key: word}  {Values are arraylist of docID and frequency of that word in that docID} 
代码语言:javascript
复制
aerodynam  [[Doc_00001,5],[Doc_01344,4],[Doc_00123,3]]
book       [[Doc_00562,6],[Doc_01111,1]]
....
....
result     [[Doc_00010,5]]
....
....

zzzz       [[Doc_01235,1]]

现在我的问题:假设用户有兴趣知道:

  1. 什么文件有实现和预订?(想法)
  2. 有成绩和技能的文件,但没有预订或录像。
  3. 文件包括空气动力学
  4. 和其他一些类似的简单查询

(输入)所以假设她进入

  • 实现和记账
  • (成就和技能)和(不是(书本和录像))
  • 空气动力学
  • .....and其他一些简单查询

(输出)

  • Doc_00562,6,Doc_01121,5,Doc_01151,3,Doc_00012,2,Doc_00001,1
  • ……

如你所见,可能会有

  • 一些优先级修饰符(我们不知道深度的括号)
  • 优先和,或,不
  • 还有其他一些有趣的挑战和问题

因此,我想对TreeMultimap运行查询,并在单词(键)中搜索,并将值(文档列表)检索给用户。

我应该如何思考这个问题,以及如何设计我的解决方案?我应该读哪些文章或算法?任何想法都将不胜感激。(谢谢你阅读这篇长篇文章)

EN

回答 1

Stack Overflow用户

发布于 2015-06-16 08:33:40

您所使用的集合是Cranfield测试集合,我相信它有大约3000份文档。对于这种大小的集合,可以使用基于散列或基于trie的组织在内存中存储倒排列表(您已经构造的数据结构),对于实际的大得多的集合,通常由数百万个文档组成,在这种情况下,您会发现很难将倒排列表完全存储在内存中。

因此,实际的解决方案不是重新发明轮子,而是使用标准的文本索引(和检索)框架,如卢塞尼。这个教程应该可以帮助您开始工作。

您寻求解决的问题可以通过布尔查询来回答,您可以在其中指定一组布尔运算符和,OR,而不是在其组成术语之间指定。露西尼支持这个。看看API文档这里和相关的StackOverflow问题这里

布尔查询检索算法非常简单。每个项对应的列表元素(即文档it )按排序顺序存储,以便在运行时能够计算与列表大小线性的并和交集,即O(n1+n2).(这非常类似于合并)。您可以在此书章中找到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30856360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档