gpt4 book ai didi

java - hashmap.containskey不能将文件的第一个单词与以后出现的其他单词识别为同一单词

转载 作者:行者123 更新时间:2023-12-01 20:03:15 26 4
gpt4 key购买 nike

我正在使用mapreduce构建反向索引(不需要此知识即可帮助解决我的问题)。为此,我在地图函数中使用了一个哈希图,该哈希图包含一个文件中某个单词的出现,找到该文件的位置以及该单词在文件中的位置。

输出看起来像这样:

bart    [Bart_the_Murderer.txt.gz{10, 83, 117, ..., 2356}, Bart_the_Murderer.txt.gz{1}]


但是应该看起来像这样:

bart    [Bart_the_Murderer.txt.gz{1, 10, 83, 117, ..., 2356}]


我用于构建哈希图的代码:

if (!map.containsKey(tokenForMap)) {
if(filePos == 1 || filePos == 10 || filePos == 83)
LOG.info("no key contained for: " + tokenForMap);
inputStringForMap = INPUTFILE.toString();
inputStringForMap = inputStringForMap + "{" + filePos + "}";
map.put(tokenForMap, inputStringForMap);
}
else
{
if(filePos == 1 || filePos == 10 || filePos == 83)
LOG.info("key contained for: " + tokenForMap);
inputStringForMap = map.get(tokenForMap);
inputStringForMap = inputStringForMap.substring(0, inputStringForMap.length()-1) + ", " + filePos + "}";
map.replace(tokenForMap, inputStringForMap);
}


我的日志是:

 [exec] 19/11/22 21:54:04 INFO exercise.BasicInvertedIndex: bart Bart_the_Murderer.txt.gz filepos1
[exec] 19/11/22 21:54:04 INFO exercise.BasicInvertedIndex: no key contained for: bart
[exec] 19/11/22 21:54:04 INFO exercise.BasicInvertedIndex: bart Bart_the_Murderer.txt.gz filepos10
[exec] 19/11/22 21:54:04 INFO exercise.BasicInvertedIndex: no key contained for: bart
[exec] 19/11/22 21:54:04 INFO exercise.BasicInvertedIndex: bart Bart_the_Murderer.txt.gz filepos83
[exec] 19/11/22 21:54:04 INFO exercise.BasicInvertedIndex: key contained for: bart


如您所见,containskey()似乎并不认为filepos 10中的bart与filepos 1中的bart相同,但是它认为它与filepos 83中的bart(以及其他位置)相同。尽管对文档进行了标记化,如下所示:

        String line = value.toString().replaceAll("[^A-Za-z0-9]", " ").toLowerCase();
StringTokenizer itr = new StringTokenizer(line);


由于Barts都应仅是字母数字字符,没有空格(并且在打印时看起来相同),所以我不明白为什么containskey方法没有将它们关联。我找到了一个与containskey类似的问题的人,尽管没有找到解决方案,但它无法识别文件 here的第一个单词。

感谢任何能够提供帮助的人。

最佳答案

代替map.containsKey(..),可以使用:

   map.get(key)


如果返回null,则表示它不包含此键。

     if (map.get(key)==null){
....
}
else {
}


这应该做的相同。我正在提议此解决方案,假设containsKey是您提到的问题。

关于java - hashmap.containskey不能将文件的第一个单词与以后出现的其他单词识别为同一单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com