【发布时间】: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]]
现在我的问题: 假设用户有兴趣了解:
- 有哪些文件可以实现和预定? (想法)
- 具有成就和技能但没有书籍或视频的文档
- 文档包括空气动力学
- 和其他一些类似这样的简单查询
(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