我需要创建几个文档的单词索引。
索引的格式如下:
单词,{d1,f1,d2,f2 ...},值
单词 = 几个文档中的单词
d1,d2,.. = 出现该单词的文档名称
f1,f2... = 单词在该文档中出现的次数
值=基于单词出现文件数的某种计算
到目前为止,我已经创建了两个类。IRSystems和ReferenceCount。
ReferenceCount具有documentId(d1,d2 ..)和Count(f1,f2 ..)
IRSystems具有ReferenceCount的arraylist和Hashmap [String,arraylist(ReferenceCount)] 我一次从一个文档中读取所有单词,并将其命名为“ tokens” 我试图以这样的方式将单词添加到HashMap中:如果该单词已经存在于HashMap中,则查找该单词所属的文档,如果它来自同一文档,则更新计数。如果是来自不同文档,则将新的documentId和新的count添加到arrayList中。
到目前为止我已经做到了这一点。 我有两个问题:如果该单词来自同一文档,则不会增加单词的数量,并且我无法实现“ value”。
单词,{d1,f1,d2,f2 ...},值
单词 = 几个文档中的单词
d1,d2,.. = 出现该单词的文档名称
f1,f2... = 单词在该文档中出现的次数
值=基于单词出现文件数的某种计算
到目前为止,我已经创建了两个类。IRSystems和ReferenceCount。
ReferenceCount具有documentId(d1,d2 ..)和Count(f1,f2 ..)
IRSystems具有ReferenceCount的arraylist和Hashmap [String,arraylist(ReferenceCount)] 我一次从一个文档中读取所有单词,并将其命名为“ tokens” 我试图以这样的方式将单词添加到HashMap中:如果该单词已经存在于HashMap中,则查找该单词所属的文档,如果它来自同一文档,则更新计数。如果是来自不同文档,则将新的documentId和新的count添加到arrayList中。
到目前为止我已经做到了这一点。 我有两个问题:如果该单词来自同一文档,则不会增加单词的数量,并且我无法实现“ 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());
}
}
}