我有一个像这样的文本文件:
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,因此不可能加载内存中的所有内容。 所以我现在正在做的是:
- 使用
扫描仪
读取输入文件 使用此代码查找每个单词的频率:
长字数 = Files.lines(Paths.get(allWordsFile)) .filter(s->s.contains(word)).count();
即,对于每个单词,我循环整个文件内容。尽管我使用的是线程池执行器,但这种方法的性能确实很差。 有更好的方法吗? 有什么工具可以从大文件中查找单词的频率吗?
最佳答案
假设有很多重复,你可以尝试这样的事情(从头开始写的可能无法完美编译)
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);
}
}
编辑:我没有注意到部分匹配部分,但您应该能够在读取输入文件后循环返回 map ,这样如果存在部分匹配,只需组合部分匹配值与匹配值
关于java - 从大文件中查找词频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049523/