【问题标题】:Data retrieval / search in text文本中的数据检索/搜索
【发布时间】:2015-08-31 14:37:24
【问题描述】:

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

.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" 表示 doc ID2 对应的文本块的开头。

我做到了:

  • 拆分文档并将它们放在单独的文件中
  • 删除停用词(and, or, while, is, are, ...)
  • 词干获取每个词的根 (achievement, achieve, achievable, ...全部转换为 achiv 等等)
  • 最后创建一个如下所示的 TreeMultiMap

{key: word}  {Values are arraylist of docID and frequency of that word in that docID} 

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. 和其他一些类似这样的简单查询

(input) 所以假设她输入了

  • 实现和书籍
  • (获得和技能)和(不是(书籍和视频))
  • 空气动力学
  • .....和其他一些简单的查询

输出

  • [Doc_00562,6],[Doc_01121,5],[Doc_01151,3],[Doc_00012,2],[Doc_00001,1]
  • ....

如你所见,可能有

  • 一些优先修饰符(我们不知道深度的括号)
  • AND、OR、NOT 的优先级
  • 以及其他一些有趣的挑战和问题

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

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

【问题讨论】:

    标签: java full-text-search search-engine information-retrieval data-retrieval


    【解决方案1】:

    您使用的集合是 Cranfield 测试集合,我相信它有大约 3000 个文档。而对于这种大小的集合,可以使用基于哈希或基于树的组织将倒排列表(您构建的数据结构)存储在内存中,以用于更大大小的实际集合,通常包含数百万个文档,您会发现在这种情况下很难将倒排列表完全存储在内存中。

    因此,实际的解决方案是使用标准文本索引(和检索)框架,例如Lucene,而不是重新发明轮子。这个tutorial 应该可以帮助您入门。

    您寻求解决的问题可以通过布尔查询来回答,您可以在其中指定一组布尔运算符 AND、OR 和 NOT 在其组成术语之间。 Lucene 支持这一点。查看 API 文档 here 和相关的 StackOverflow 问题 here

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

    【讨论】:

    • 谢谢。你非常详细地解决了这个问题。我会花一些时间在这个笔记上,如果有更多问题,我会回复你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2012-01-31
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多