我试图用DB作为文档语料库来实现在java中计算TF-IDF。我已经在hashmap中计算了Term Frequency存储,但我有一个问题,我如何计算每个术语的文档频率?例如。术语"总统"发生在哪个文件ID?以及其他文件中出现了多少?我在DB中有3个文件用于培训,我在这里,任何建议?并感谢您的帮助,这是我的代码:
try{
Map <String,Integer> kamus = new HashMap<String, Integer>();
k.Koneksi();
String sql = "select * from data_berita";
Statement n = k.koneksi.createStatement();
ResultSet res = n.executeQuery(sql);
while(res.next()){
int id = res.getInt("id");
String konten = res.getString("konten");
String f = konten.replaceAll("[-?/<>_+=!@#%&*.“”‘’()$·,';:{}|\"]", "").toLowerCase();
String [] array = f.split("\\s+");
for(String s : array){
int fl = 1;
k.Koneksi();
String sq = "Select * from StopWord";
Statement stat = k.koneksi.createStatement();
ResultSet rs = stat.executeQuery(sq);
while(rs.next()){
if(s.equals(rs.getString("Stopword"))){
fl=0;
}
}
if (fl!=0){
if(kamus.containsKey(s)){
kamus.put(s, kamus.get(s)+1);
}
else{
kamus.put(s, 1);
}
}
}
for(Map.Entry<String,Integer> en : kamus.entrySet()){
String d = en.getKey();
Integer s = en.getValue();
System.out.println(d+" "+s);
}
这是术语频率的结果(并非全部):
联盟= 1,总统= 3,苏州= 3,卸货= 1,参加= 1,液化= 1,亮= 1