gpt4 book ai didi

java - 更新 HashMap 中的 ArrayList

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:11 25 4
gpt4 key购买 nike

我需要为多个文档中的单词创建索引。索引具有以下格式。

单词,{d1,f1,d2,f2...},值

word = 几个文档中的几个词

d1,d2,.. = 它出现的文档的名称

f1,f2... = 它在该文档中出现的次数

value = 根据单词出现的文件数量进行的一些计算

到目前为止,我已经创建了两个类。 IRSystems 和 ReferenceCount。

ReferenceCount 有 documentId(d1,d2..) 和 Count(f1,f2..)

IRSystems 有 ReferenceCount 和 Hashmap 的数组列表[String,arraylist(ReferenceCount)]我正在一次阅读一份文件中的所有单词,并命名为“tokens”我正在尝试以某种方式在 HashMap 中添加单词,如果该单词已存在于 Hashmap 中,则查找该单词所属的文档,如果它来自同一文档,则更新计数。如果它来自不同的文档,请添加arrayList 的新文档 ID 和新计数。

到目前为止,我已经做到了。我有两个问题,如果它来自同一个 documnet,它不会增加单词数。而且我无法实现“值(value)”。

HashMap<String, ArrayList<ReferenceCount>> normalList = new HashMap<String, ArrayList<ReferenceCount>>(); 

while (st.hasMoreElements())
{
String tokens = st.nextToken();
if(normalList.size()== 0 || !normalList.containsKey(tokens) )
{
rList = new ArrayList<ReferenceCount>();
rCount = new ReferenceCount(name);
rList.add(rCount);
normalList.put(tokens,rList);
}
else if(normalList.containsKey(tokens) )
{
System.out.println("Match found");
Iterator it = normalList.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pair = (Map.Entry)it.next();
ArrayList<ReferenceCount> rList1 = new ArrayList<ReferenceCount>();
rList1 =(ArrayList)pair.getValue();
for( ReferenceCount rC : rList1 )
{
if(pair.getKey().equals(rC.getDocumentId()))
{
System.out.println("Match found 2 ");
rC.increment();
}
}
}
}
}
//to display the hashmap
Iterator it = normalList.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey()+ ",");
ArrayList<ReferenceCount> rList1 = new ArrayList<ReferenceCount>();
rList1 =(ArrayList)pair.getValue();
for( ReferenceCount rC : rList1 )
{
rCount = new ReferenceCount(name);
System.out.println(rCount.getDocumentId()+","+rCount.getCount());
}


}
}

最佳答案

你用了一张 map 来表示这些词。为什么不对 documentIds 使用相同的方法?您可以像这样创建一个 HashMap of HashMap:

HashMap<String, HashMap<String, Integer>> wordCountMap = 
new HashMap<String, HashMap<String, Integer>>();

对于您的值,您可以创建一个单独的 HashMap,其中单词作为键,计算值作为值:

HashMap<String, String> wordValueMap = new HashMap<String, String>(); 

对于每个单词,检查 wordCountMap.containsKey(newWord),如果不存在,则使用新的 documentId 和单词计数创建内部 HashMap 1.如果key存在,则获取已有的内层HashMap,然后检查documentId是否存在,依此类推...

最后,您可以在wordValueMap中单独维护计算出的value

关于java - 更新 HashMap 中的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255351/

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