java - 从大文件中查找单词频率
问题描述
我有一个这样的文本文件:
tom
and
jerry
went
to
america
and
england
我也想获得每个单词的频率,包括部分匹配。即,单词to
中出现的单词tom
。所以我的预期字数to
是2。
1 america
3 and
1 england
1 jerry
2 to
1 tom
1 went
我拥有的文本文件约为30gb,因此无法将所有内容加载到内存中。所以我现在正在做的是:
- 使用读取输入文件
scanner
对于使用此代码查找频率的每个单词:
Long wordsCount = Files.lines(Paths.get(allWordsFile)) .filter(s->s.contains(word)).count();
即,对于每个单词,我都在循环整个文件内容。即使我正在使用threadpool executor
,这种方法的性能也很差。有没有更好的方法来做到这一点?有什么工具可以从大文件中找到单词的频率吗?
解决方案
假设有很多重复,您可以尝试这样的事情(从头开始编写可能无法完美编译)
File file =
new File("fileLoc");
BufferedReader br = new BufferedReader(new FileReader(file));
Map <String, Integer> hm = new HashMap<>();
String name;
while ((name = br.readLine()) != null)
if(hm.containsKey(name){
hm.replace(name,hm.get(name) + 1);
}
else{
hm.put(name,1);
}
}
编辑:我没有注意到部分匹配部分,但您应该能够在读取输入文件后循环回地图,这样如果存在部分匹配,只需将部分匹配值与匹配值结合起来
推荐阅读
- sql-server - SQL Server批处理和选择语句输出的小数点差异
- jsf - Bean 初始化 JSF (Primefaces)
- java - 有人可以帮我处理这个消息吗?我试图制作一个列表视图,但是当我运行代码时会弹出这个错误
- python - 忽略 pkg_resources.ContextualVersionConflict
- java - 安排每年执行的事情
- python - 是否可以使用 python 按字母顺序对 xml 属性值进行排序?
- java - 如何在受用户名和密码保护的远程位置创建和写入 CSV 文件?
- python - 从python中的消息列表中查找最常见的词对
- wordpress - 如何在 wordpress 中使用分类术语获取帖子
- javascript - 使用 useState() 设置道具时未重新渲染子项