如何确定每个文档中术语的频率?

| 我正在建立一个倒排索引,但是当我检查数据库时似乎无法获得正确的频率。我到处都读到您应该使用HashMap,但是我不确定这是否是正确的方法。有任何想法吗? 公共类Tokenize {
public static void createIndex() throws Exception{

    ArrayList<Dokument> dok = new QueryHandler().getDokuments();
    ArrayList<String> queries = new ArrayList<String>();
    ArrayList<String> queries2 = new ArrayList<String>();
    HashMap<String, Integer> frek = new HashMap<String, Integer>();

    for(int d = 0; d < dok.size(); d++){
        String token = \"\";
        int frekvens = 0;


        try{

            Dokument document = dok.get(d);
            StringTokenizer st = new StringTokenizer(document.dokument());
            while (st.hasMoreTokens()) {


                token = st.nextToken();
                token.replaceAll(\"[\']\", \"\");
                token.replaceAll(\"[,]\", \"\");
                token.replaceAll(\"[)]\", \"\");
                token.replaceAll(\"[(]\", \"\");
                token.replaceAll(\"[.]\", \"\");
                frekvens ++;
                frek.put(token, frekvens);


                    queries.add(\"INSERT IGNORE INTO termindeks (docID, term) values (\"+document.docID()+\", \'\"+token+\"\')\");
                    queries2.add(\"INSERT IGNORE INTO invertedindeks (term, docID, termfrekvens) values (\'\"+token+\"\', \"+document.docID()+\", \"+ frekvens+\")\");


            }
        }


        catch (Exception e) {
        e.printStackTrace();
        System.out.println(token);
        }
    }

    String[] ffs = new String[queries.size()];
    ffs = queries.toArray(ffs);
    getDB().runQueriesIgnoreException(queries.toArray(ffs));

    String[] ffs2 = new String[queries2.size()];
    ffs2 = queries2.toArray(ffs2);
    getDB().runQueriesIgnoreException(queries2.toArray(ffs2));

}
}     
已邀请:
您应该首先获取令牌的值,将其递增并再次放入。 在循环中像这样:
Integer frekvens = frek.get(token); //remove the other frekvens as it\'s not needed - or find a better name for this one ;)
if( frekvens == null ) { frekvens = 0 };
frekvens++;
frek.put(token, frekvens);
    
这个想法是正确的,但据我所知,您没有正确使用
HashMap
。您必须获取与密钥关联的值,即
Integer i = map.get(token);
i += 1;
map.put(token, i);
编辑 另一种选择是使用ѭ4而不是ѭ5,因为ѭ4是可变的。
Map<String, AtomicInteger> map = new HashMap<String, AtomicInteger>();    
map.get(token).getAndIncrement();
    

要回复问题请先登录注册