繁体   English   中英

如何快速匹配字符串(短语)与HashMap值?

[英]How to match a string (phrase) to a HashMap values quickly?

我有一个HashMap,其键是id,其值是文本:

HashMap<String,String> textMap = new HashMap<String,String>();
textMap.put("id_1","She");
textMap.put("id_2","has");
textMap.put("id_3","a"); 
textMap.put("id_4","neck");
textMap.put("id_5","pain");
//.. more elements in textMap

我想找到一个短语的相关id,比如'颈部疼痛',所以在这种情况下,结果应该是id_4和id_5。

任何人都可以建议一个有效的算法来匹配短语与ids?

对不起,我忘了包含一个重要的条件。 我有短语和单词的偏移量,比如“start_5_end_14”,这意味着5应该是“颈部”的开始,因为“她”的开头为0.但是,使情况复杂化的是偏移可能不正确。

保持一个反转的地图,在其中将单词映射到id。 然后,遍历您的短语并为短语中的每个word调用reversedTextMap.get(word)

您可以使用Guava库中的BiMap

BiMap<String,String> textMap  = HashBiMap.create();

    textMap.put("id_1","She");
    textMap.put("id_2","has");
    textMap.put("id_3","a"); 
    textMap.put("id_4","neck");
    textMap.put("id_5","pain");
    BiMap<String,String> idToText = textMap.inverse();

    System.out.println(idToText.get("neck")); 
    System.out.println(idToText.get("pain"));

如果您有重复值,则可以使用MultiMap

由于您可以为多个键使用相同的值,因此可以使用Multimap来表示键关系的值。 您将使用:

Collection<V>   get(K key) 

从值开始检索id列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM