我正在建立一個倒排索引,但當我檢查數據庫時,我似乎無法得到正確的頻率。我到處讀到你應該使用HashMap,但我不確定這是否是正確的方法。有任何想法嗎?如何確定每個文檔中術語的術語頻率?
公共類記號化{
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));
}
}
工作完美,非常感謝。 – Ostepop 2011-04-15 13:23:55
+1完全忘了get()可能返回一個'null'值。 – helpermethod 2011-04-15 14:09:14