Java-从大文本文件中计算单词出现次数

3
我有一个大小为115MB的文本文件,其中包含约2000万单词。我需要将该文件用作单词集合,并使用它来搜索用户提供的每个单词在集合中出现的次数。我在项目中将此过程用作小部分,因此需要以更快、更准确的方式查找给定单词的出现次数,因为我可能会在迭代中使用它。我需要建议关于任何可以使用的API或其他更快速执行任务的方法。任何建议都可以接受。
1个回答

3
这种东西通常使用 Lucene 实现,特别是如果您将要反复重启应用程序或没有大量内存。Lucene 还支持 许多其他好东西
然而,如果您想要“自己编写”代码,并且有足够的内存(可能为1GB),则您的应用程序可以:
  • 将文件解析为单词序列,
  • 过滤停用词,
  • 构建一个“反向索引”,作为 HashMap<String,List<Integer>>,其中String值是唯一的单词,List<Integer>对象给出文件中单词出现的偏移量。
处理那么大的文件可能需要几秒钟(或几分钟)。但是一旦创建了内存中的反向索引,您就可以非常快速地进行出现搜索。(每次搜索可能小于微秒。)

我认为他甚至不需要Map<String,List<Integer>>。他只需要一个Map<String,Integer>来存储出现次数的计数器。 - AlexR
@AlexR - 不清楚。有一次,OP说他需要“发生”。我把它解释为意味着“发生次数”。 - Stephen C
非常感谢您的帖子。我使用Lucene索引完成了我的工作。我使用了Lucene freq() 方法来检索已索引术语的频率。 - Naveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接