java - 信息检索系统的数据结构/算法

标签 java algorithm data-structures information-retrieval

<分区>

我有一个条件如下的任务 - 它是关于 Java/数据结构的。我会尽量简要地提出我的问题,因为回答这些问题将帮助我找到出路(因为我迷路了):

  1. 您建议使用什么数据结构?
  2. 你会遵循什么算法? (细节表示赞赏)。

简单的信息检索系统,其中查询包含关键字和 有一组要搜索的文档。在响应查询时,系统 标识包含全部或部分内容的每个文档(最多 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/

相关文章:

java - 如何在 Java 中实现多核算法?

python - 高效的字符串算法——正则匹配

java - 从命令行运行 netbeans maven 项目

php - 算法实现对比c++和php

java - 是否可以在同一个项目中使用 jersey 和 java websockets (ServerEndpoint)

c - C中的图算法通过将网格读入数组

algorithm - 我们可以使用 1 个表实现布谷鸟哈希吗?

C++ 最适合的数据结构

java - 如何通过单击暂停音频文件并开始新的音频文件?

java - 如何将图像保存到资源文件夹java swing