从嵌套的哈希图中获取、放置键和值

Get,Put key and values from nested hashmap

我想创建一个嵌套的 HashMap,它 return 是多个文件中术语的频率。喜欢,

Map<String, Map<String, Integer>> wordToDocumentMap=new HashMap<>();

我已经能够 return 某个术语在文件中出现的次数。

  Map<String, Integer> map = new HashMap<>();//for frequecy count       
   String str = "Wikipedia is a free online encyclopedia, created and edited by 
     volunteers around the world."; //String str suppose a file a.java

    // The query string
    String query = "edited Wikipedia volunteers";

    // Split the given string and the query string on space
    String[] strArr = str.split("\s+");
    String[] queryArr = query.split("\s+");

    // Map to hold the frequency of each word of query in the string
    Map<String, Integer> map = new HashMap<>();

    for (String q : queryArr) {
        for (String s : strArr) {
            if (q.equals(s)) {
                map.put(q, map.getOrDefault(q, 0) + 1);
            }
        }
    }

    // Display the map
    System.out.println(map);

在我的代码中,它单独计算给定查询的频率。但我想用文件名映射查询词及其频率。我在网上搜索了解决方案,但发现很难找到适用于我的解决方案。如有任何帮助,我们将不胜感激!

希望我对你的理解是正确的。

你想要的是能够读取文件列表并将文件名映射到你在上面的代码中创建的地图。那么让我们从您的代码开始,让我们把它变成一个函数:

public Map<String, Integer> createFreqMap(String str, String query) {

    Map<String, Integer> map = new HashMap<>();//for frequecy count       

    // The query string
    String query = "edited Wikipedia volunteers";

    // Split the given string and the query string on space
    String[] strArr = str.split("\s+");
    String[] queryArr = query.split("\s+");

    // Map to hold the frequency of each word of query in the string
    Map<String, Integer> map = new HashMap<>();

    for (String q : queryArr) {
        for (String s : strArr) {
            if (q.equals(s)) {
                map.put(q, map.getOrDefault(q, 0) + 1);
            }
        }
    }

    // Display the map
    System.out.println(map);
    return map;
}

好的,现在你有了一个漂亮的函数,可以从一个字符串和一个查询中创建一个映射

现在您要设置一个系统以将文件读入字符串。

有很多方法可以做到这一点。您可以在此处查看适用于不同 java 版本的一些方法:

让我们开始吧(假设 >java 11):

String content = Files.readString(path, StandardCharsets.US_ASCII);

其中路径是你想要的文件的路径。

现在我们可以把它们放在一起了:

String[] paths = ["this.txt", "that.txt"]
Map<String, Map<String, Integer>> output = new HashMap<>();
String query = "edited Wikipedia volunteers"; //String query = "hello";
for (int i = 0; i < paths.length; i++) {
    String content = Files.readString(paths[i], StandardCharsets.US_ASCII);
    output.put(paths[i], createFreqMap(content, query);
}