有时两个单词(或单词的变体)被映射到相同的单词 响应。通过将同义词或相关表达式映射到同一个字符串来处理此问题,这样您就不需要在响应映射中为同一个响应添加多个条目。
我需要避免两次添加相同的值。下面的键是从分割为单个单词的用户输入创建的。以下值是为包含键的用户输入生成的响应。
responseMap.put("bug",
"Well, you know, all software has some bugs. But our
software engineers\n" +
"are working very hard to fix them. Can you describe the
problem a bit\n" +
"further?");
responseMap.put("buggy",
"Well, you know, all software has some bugs. But our
software engineers\n" +
"are working very hard to fix them. Can you describe the
problem a bit\n" +
"further?");
我如何添加这样的"多个"钥匙?在参数中 - 例如,K可以是正则表达式吗?或者我应该创建一个HashMap,其中K是某个单词,V包含其sysnonyms的arraylist,然后尝试迭代ArrayList以将分割的用户输入与ArrayList中的元素进行比较以提取必要的键?
P.S。我不是这样做的学生。这只是为了自我教育,我没有老师提出任何问题。
答案 0 :(得分:0)
我想说的是使用同义词列表。
List<String> synonyms = new ArrayList<String>();
synonyms.add("Bug");
synonyms.add("Buggy");
if(synonyms.contains(userInputString)){
Map.get("bug");
}
为每个地图键创建一个这样的集合...如果列表足够短,实际可行。但是根据定义,Map应该有唯一的密钥。
答案 1 :(得分:0)
再次阅读这部分说明“通过将同义词或相关表达式映射到相同的字符串来处理此问题”这听起来像 分两步执行查找。
首先,您可以获得相同值的所有可能同义词的映射,例如
bug → bug
buggy → bug
mistake → bug
other → something else
etc.
然后是第二个带有响应规范键的地图
bug → "Well, you know, all software has some bugs..."
因此查找包括检查第一个地图以找到要在第二个地图中使用的密钥,然后将提供所需的响应。