我有一些文件。例如1000个文件。每个文件都有一些单词。 例如如何在java中创建hashmap的hashmap?
文件1:你好,我是来自地球
文档2:我是来自火星各位网友如何
文档2:地球火星太阳
输出应该是这样的
[你好:doc1-1,doc2-2 doc3-0] [我:doc1-1,doc2-1,doc3-0] .....
喜欢它需要存储单个词及其与文件相关的频率。
我想它需要映射。但我不知道如何做映射? 任何帮助将不胜感激
我有一些文件。例如1000个文件。每个文件都有一些单词。 例如如何在java中创建hashmap的hashmap?
文件1:你好,我是来自地球
文档2:我是来自火星各位网友如何
文档2:地球火星太阳
输出应该是这样的
[你好:doc1-1,doc2-2 doc3-0] [我:doc1-1,doc2-1,doc3-0] .....
喜欢它需要存储单个词及其与文件相关的频率。
我想它需要映射。但我不知道如何做映射? 任何帮助将不胜感激
试试这个。
String[] files = { "doc1", "doc2", "doc3" };
int size = files.length;
Map<String, Map<String, Long>> result = new HashMap<>();
for (int i = 0; i < size; ++i) {
Path path = Paths.get(files[i]);
Map<String, Long> count = Files.readAllLines(path).stream()
.flatMap(line -> Stream.of(line.split("\\s")))
.collect(Collectors.groupingBy(x -> x, Collectors.counting()));
for (Entry<String, Long> e : count.entrySet()) {
Map<String, Long> m = result.get(e.getKey());
if (m == null)
result.put(e.getKey(), m = new TreeMap<>());
m.put(files[i], e.getValue());
}
}
for (int i = 0; i < size; ++i)
for (Map<String, Long> e : result.values())
e.compute(files[i], (k, v) -> v == null ? 0 : v);
for (Entry<String, Map<String, Long>> e : result.entrySet())
System.out.println(e);
结果:
Earth={doc1=1, doc2=0, doc3=1}
how={doc1=0, doc2=1, doc3=0}
Mars={doc1=0, doc2=1, doc3=1}
Hello={doc1=1, doc2=2, doc3=0}
I={doc1=1, doc2=1, doc3=0}
from={doc1=1, doc2=1, doc3=0}
am={doc1=1, doc2=1, doc3=0}
sun={doc1=0, doc2=0, doc3=1}
不错,每一个文件是一个文本文件,这里 像DOC 1是一个文本fiile,DOC2也是一个文本文件 如何处理呢? –
谢谢,我有一个问题,在BufferedReader中我们指定了文件的路径名,但是当我们使用路径时它是如何得到路径名的? –