【发布时间】:2017-05-23 01:21:57
【问题描述】:
比如我有一句话:
This is a trash bag.
,它存储在一个List中,其中每个元素都是一个单词:
List<String> wrodList = new ArrayList<String>;
我有另一个存储单词频率对的字典:
Map<String, Integer> allWords = new HashMap<String, Integer>();
几个例子:
bag 300
trash 250
trash bag 100
big trash bag 50
现在我想通过 wordList
["this", "is", "a", "trash", "bag"]
并想检查句子中是否有与字典中的条目匹配的短语。在这种情况下,["trash", "bag"] 应该匹配字典中的条目 "trash bag"。
我在想这个算法:
-
从标记列表中重构所有可能的短语:
["this", "is", "a", "trash", "bag"]=>
this is a trash bag this is a trash this is a this is is a trash bag is a trash is a a trash bag a trash trash bag
然后在字典中查找这些短语中的每一个。一旦找到与字典键的匹配项,就返回; 这种幼稚的算法似乎有效(未经测试),但效率不高,因为它必须为必须失败的潜在匹配构造大量无用的短语。
如果我提取所有映射键,用空格分隔它们并将它们插入另一个列表,我将从字典键中获取:
[[trash], [bag], [trash, bag], [big, trash, bag]]
然后尝试将句子中的所有这些短语与此列表进行匹配。这应该会更好吗?
有什么建议吗?
【问题讨论】:
-
你受限于当前的数据结构吗?因为我可能会考虑实现树结构。
-
您有什么建议?请具体。