Java计算大型文本文件中单词的出现率

Java计算大型文本文件中单词的出现率,java,full-text-search,Java,Full Text Search,我有一个115MB大小的文本文件。它由大约2000万字组成。我必须将该文件用作单词集合,并使用它搜索集合中每个用户给定单词的出现情况。我把这个过程作为我项目的一小部分。我需要一种方法来更快、正确地找出给定单词的出现次数,因为我可能会在迭代中使用它。我需要关于我可以使用的任何API的建议,或者以更快的方式执行任务的其他方式。非常感谢您的推荐。这类功能通常是使用来实现的,尤其是当您要重复重新启动应用程序或没有大量内存时。Lucene也支持 但是,如果您想“滚动您自己的”代码,并且您有足够的内存(可能

我有一个115MB大小的文本文件。它由大约2000万字组成。我必须将该文件用作单词集合,并使用它搜索集合中每个用户给定单词的出现情况。我把这个过程作为我项目的一小部分。我需要一种方法来更快、正确地找出给定单词的出现次数,因为我可能会在迭代中使用它。我需要关于我可以使用的任何API的建议,或者以更快的方式执行任务的其他方式。非常感谢您的推荐。

这类功能通常是使用来实现的,尤其是当您要重复重新启动应用程序或没有大量内存时。Lucene也支持

但是,如果您想“滚动您自己的”代码,并且您有足够的内存(可能是1Gb),那么您的应用程序可以:

  • 将文件解析为单词序列
  • 过滤掉停止词
  • 构建一个“反向索引”作为
    哈希映射
    ,其中
    字符串
    值是唯一的单词,
    列表
    对象给出单词在文件中出现的偏移量

处理这么大的文件可能需要几秒钟(或几分钟)。但是一旦创建了内存中的反向索引,就可以非常快速地进行事件搜索。(每次搜索可能需要亚微秒。)

我认为他甚至不需要地图。他只需要存储事件计数器的地图。@AlexR-还不清楚。有一次,OP说他需要“事件”。我将其解释为“出现”的意思。非常感谢您的帖子。我使用lucene索引完成了我的工作。我使用lucene freq()方法检索索引术语的频率