<分区>
我有一个条件如下的任务 - 它是关于 Java/数据结构的。我会尽量简要地提出我的问题,因为回答这些问题将帮助我找到出路(因为我迷路了):
- 您建议使用什么数据结构?
- 你会遵循什么算法? (细节表示赞赏)。
简单的信息检索系统,其中查询包含关键字和 有一组要搜索的文档。在响应查询时,系统 标识包含全部或部分内容的每个文档(最多 n 个文档) 关键字并按找到的关键字的降序打印文档名称,即 a 包含所有关键字的文档应出现在列表的顶部。
<分区>
我有一个条件如下的任务 - 它是关于 Java/数据结构的。我会尽量简要地提出我的问题,因为回答这些问题将帮助我找到出路(因为我迷路了):
简单的信息检索系统,其中查询包含关键字和 有一组要搜索的文档。在响应查询时,系统 标识包含全部或部分内容的每个文档(最多 n 个文档) 关键字并按找到的关键字的降序打印文档名称,即 a 包含所有关键字的文档应出现在列表的顶部。
最佳答案
首先,您可能正在寻找 apache lucene ,这是一个用java实现IR系统的开源库!
自己实现一些东西很困难,但 IR 中最重要的数据结构是 inverted index .
倒排索引其实就是一个map:term->list<index>
,它在每个术语与它出现的文档之间进行映射。倒排索引的优点 - 它非常适合 IR 标准操作,例如联合(和查询)。
在你的具体问题中,从集合中构建一个倒排索引,并一次查询k
条款到达 - 获取 k
列出与这些术语相对应的列表,并获得它们的联合。
现在,一旦你有了联合——剩下的就是创建一个histogram。 (每个术语在多少个列表中出现,可以实现为 HashMap<Term,Integer>
)- 并按值降序打印这些直方图的键。
如果您想扩展您的 IR 知识,我建议您阅读 Manning 的 Introduction to Information Retrieval .
关于java - 信息检索系统的数据结构/算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397060/