在HashMap java中计算文档频率

时间:2014-02-12 14:06:37

标签: java database tf-idf

我试图用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

0 个答案:

没有答案