我正在建立一个应该是容忍噪音的单词排名系统,这意味着它应该与 aaaaabbccccc 之类的单词一起使用,其中 aaaaa , bb 和 ccccc 是一些随机词。
问题本身需要一个字典,我不允许使用它,但在我的实例中,很有可能在数据集中包含单个单词,所以我想利用这些信息创建一个分裂器,没有明确的字典。
我想做的就是在向结果地图添加单词的同时在单次迭代中使用它。
这是我的意思的快速场景:
输入字
word1
composedword1
1
abiggercomposedword1
bigger
abigger
结果:
{word1}
结果:
{composed word1} // Note that this is still a single word!
结果:
{composed word 1}
直到下一步才能正常工作。
现在,考虑到这种情况,这里是我使用的代码(工作到第4步的代码):
// Map between word and score
for (Map.Entry<String, Integer> word : words.entrySet()) {
boolean hasMergedWords = false;
// result is the final HashMap, calling new to avoid concurrent modification
for (Map.Entry<String, Integer> resultWord : new LinkedHashMap<>(result).entrySet()) {
String wordToCheck = resultWord.getKey().trim();
String currentWordToCheck = word.getKey().trim();
if (currentWordToCheck.contains(wordToCheck)) {
// Merge provided word into topWord
result.put(currentWordToCheck.replace(wordToCheck, " " + wordToCheck + " ").trim().replaceAll(" +", " "), result.get(wordToCheck) + word.getValue());
result.remove(wordToCheck);
hasMergedWords = true;
} else if (wordToCheck.contains(currentWordToCheck)) {
result.put(wordToCheck.replace(currentWordToCheck, " " + currentWordToCheck + " ").trim().replaceAll(" +", " "), result.get(wordToCheck) + word.getValue());
result.remove(wordToCheck);
hasMergedWords = true;
}
}
if (!hasMergedWords) {
// Nothing was merged so we add current word
result.put(word.getKey(), word.getValue());
}
}
最后,问题是:有人可以帮助我处理第4步中发现的案例吗?我的第一个想法是使用空格作为分隔符来分割 result 中的每个单词,但这会在合并分数时引起问题。
编辑:预期结果为result = {a bigger composed word 1}
,一个字符串,其中每个单词用空格分隔。