我有一个像这样的文本文件:
http://192.168.10.10/video.mp4
我也想获得每个单词的频率,包括部分匹配。也就是说,单词tom
and
jerry
went
to
america
and
england
中存在单词to
。因此,我期望的tom
的字数是2。
to
我的文本文件大约为 30gb ,因此无法将所有内容加载到内存中。 所以我现在正在做的是:
1 america
3 and
1 england
1 jerry
2 to
1 tom
1 went
读取输入文件使用该代码查找频率的每个单词:
scanner
即,对于每个单词,我循环播放整个文件内容。即使我使用的是Long wordsCount = Files.lines(Paths.get(allWordsFile))
.filter(s->s.contains(word)).count();
,这种方法的性能也确实很差。
有更好的方法吗?
有什么工具可以从大文件中查找单词的出现频率?
答案 0 :(得分:1)
假设有很多重复,您可以尝试这样的操作(从头开始编写可能无法完美编译)
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);
}
}
编辑:我没有注意到部分匹配项,但是您应该能够在阅读回车文件后在地图上循环浏览,这样,如果存在部分匹配项,则只需组合部分匹配项值即可匹配值
答案 1 :(得分:0)
最好的性能是使用BufferedReader从文件中读取各行,并将单词计数器存储在HashMap中。