【发布时间】:2014-06-18 12:26:38
【问题描述】:
我使用 SortedMap 来保存 String 键和 ArrayList 之间的映射以获取值。键是由几个单词组成的简单字符串。我想获取键与查询匹配的所有条目。
所以如果我有以下映射:
"A B C D E" => ArrayList("hello","hi","howdy")
"A C B" => ArrayList("hehe","haha","hihi")
"C B E" => ArrayList("non", "sense")
然后我查询“A C”,我得到了对应于“A B C D E”和“A C B”的两个条目,以及相应的相似系数(0.4 和 0.66)。
我的想法是使用 .keySet() 遍历所有键。然后,我使用 query.split(" ") 将查询拆分为单独的字符串,并递归限制匹配列表,但我不确定这是否是最佳的处理方式,以及是否可能尚未实现现有的“搜索引擎” Java。
我的从头开始:
public HashMap<String,Double> searchTags(String query) {
HashMap<String,Double> hash = new HashMap<String,Double>();
double similarity = 0;
//split tags
String[] tags = query.split(" ");
for (String key : this.tagsToUtterance.keySet()) {
for (String tag : tags) {
if (key.contains(tag)) {
System.out.println("ok");
hash.put(key,similarity);
similarity =+1 ;
}
}
similarity = similarity/key.split(" ").length;
}
return hash;
}
【问题讨论】:
-
这个解决方案似乎效率很低。您可以在使用地图的地方实现自定义数据结构?
-
如果有
B C X A键,对于A C搜索,它应该在你的结果中吗? -
肯特:是的,它也应该在结果中