gpt4 book ai didi

java - 在 Java 中通过 HashMap 搜索多个键

转载 作者:行者123 更新时间:2023-12-01 11:36:17 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何在某些用户输入中搜索多个关键字。关键字来自名为Synonym的 HashMap 。所以基本上我输入一些句子,如果该句子包含一个或多个关键字或关键字同义词,我想调用解析文件方法。到目前为止我只能搜索一个关键词。我试图获取用户输入,该输入可能是一个长句子,也可能只是一个包含关键字的单词,并在 HashMap 键中搜索该匹配的单词。例如,如果 HashMap 是

responses.put("textbook name", new String[] { "name of textbook", "text", "portfolio" });


responses.put("current assignment", new String[] { "homework","current work" });

并且用户输入“有作业的教科书的名称是什么”我想在文本文件中搜索教科书当前作业。假设文本文件包含句子“当前作业位于第二本教科书名称 ralphy”中。我的意思是我已经完成了大部分实现,问题是处理多个关键字。有人可以帮我解决这个问题吗?

这是我的代码

private static HashMap<String, String[]> responses = new HashMap<String, String[]>(); // this


public static void parseFile(String s) throws FileNotFoundException {
File file = new File("data.txt");

Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
final String lineFromFile = scanner.nextLine();
if (lineFromFile.contains(s)) {
// a match!
System.out.println(lineFromFile);
// break;
}

}
}


private static HashMap<String, String[]> populateSynonymMap() {


responses.put("test", new String[] { "test load", "quantity of test","amount of test" });

responses.put("textbook name", new String[] { "name of textbook", "text", "portfolio" });
responses.put("professor office", new String[] { "room", "post", "place" });
responses.put("day", new String[] { "time", "date" });
responses.put("current assignment", new String[] { "homework","current work" });


return responses;
}



public static void main(String args[]) throws ParseException, IOException {
/* Initialization */
HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
synonymMap = populateSynonymMap(); // populate the map


Scanner scanner = new Scanner(System.in);
String input = null;
/*End Initialization*/
System.out.println("Welcome To DataBase ");
System.out.println("What would you like to know?");

System.out.print("> ");
input = scanner.nextLine().toLowerCase();
String[] inputs = input.split(" ");

for (String ing : inputs) { // iterate over each word of the sentence.
boolean found = false;
for (Map.Entry<String, String[]> entry : synonymMap.entrySet()) {
String key = entry.getKey();
String[] value = entry.getValue();
if (input.contains(key) || key.contains(input)|| Arrays.asList(value).contains(input)) {

found = true;
parseFile(entry.getKey());



}

}
}
}

如有任何帮助,我们将不胜感激

最佳答案

我回答过非常相似的问题Understand two or more keys with Hashmaps 。但我会让我的观点更清楚。在您使用的当前数据结构集中,让我们考虑以下结构

1) 输入列表 --> 句子中溢出的单词(可能按顺序排列)并将其保留在列表示例中 [what,is,the,name,of,textbook,that,has,the,homework]

2) 关键字列表 --> 您正在使用的 Hashmap 数据库中的所有键示例 [test,教材名称,教授办公室]

现在你必须设置一些标准,你可以说我可以在句子中最多包含 3 个单词的短语(例如“教科书名称”)作为关键字,为什么这个标准 - 限制处理,否则你最终会检查大量输入组合。

获得此信息后,您可以检查输入列表和关键字列表中的常见内容以查找您设置的条件。如果您没有设置条件,那么您可以尝试针对键集的所有组合。一旦找到单个或多个匹配,则输出同义词列表等。

示例根据 map 的所有键检查[教科书名称]。

如果您想反向检查,请通过创建同义词列表并检查它来执行相同的过程。

我解决这个问题的两个技巧

1)定义关键字集并且不检查值列表, HashMap 结构对此不利。在此请为冗余数据做好准备。

2) 设置您要在此键集中搜索的单词数量。并且最好只保留不同的单词。

希望这有帮助!

关于java - 在 Java 中通过 HashMap 搜索多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com