как создать тройку с помощью карты

#java #information-retrieval

#java #поиск информации

Вопрос:

Я хочу создать инвертированный индекс на Java. У меня есть данные cran из 1400 текстовых файлов. Я смог подсчитать частоту каждого термина / слова. Я смог вернуть количество раз, когда слово появляется во всей коллекции, но я не смог создать тройку (t, d, f), где t = термин, d = документ, f = частота. Это код, который у меня есть до сих пор:

Я хочу, чтобы вывод был в следующем виде

 term1: doc1:2, 
term2: doc2:3, 
term1: doc3:1 
  

здесь term — это слово в файле doc, а doc 1: 2 означает, что term1 появляется в документе 1 2 раза

 public static void main(String[]args) throws FileNotFoundException{
        Map<String, Integer> m = new HashMap<>();
       
        String wrd;
        
        for(int i=1;i<=2;i  ){
           //FileInputStream tdfr = new FileInputStream("D:\logs\steem" i ".txt");
           Scanner tdsc=new Scanner(new File("D:\logs\steem" i ".txt"));
           while(tdsc.hasNext()){
              // m.clear();
              Integer docid=i;
              
               wrd=tdsc.next();
               //Vector<Integer> vPosList = p.hPosList.get(wrd);
               Integer freq=m.get(wrd);
               
               //Integer doc=m1.get(i);
              //System.out.println(m.get(wrd));
               m.put(wrd, (freq == null) ? 1 : freq   1);
          
              
               
               
               
           }
        
               
             
          System.out.println(m.size()   " distinct words"   " steem"  i);
          System.out.println("Doc"  i "" m);
          //System.out.println("Doc" i "" m1);
          m.clear();
        
          
        tdsc.close();
        
    }
        //System.out.println(m.size()   " distinct words");
        //System.out.println(m);
       // System.out.println(m1);
        
}
}  

 public static void main(String[]args) throws FileNotFoundException{
        Map<String, Integer> m = new HashMap<>();

        String wrd;

        for(int i=1;i<=2;i  ){
           //FileInputStream tdfr = new FileInputStream("D:\logs\steem" i ".txt");
           Scanner tdsc=new Scanner(new File("D:\logs\steem" i ".txt"));
           while(tdsc.hasNext()){
              // m.clear();
              Integer docid=i;

               wrd=tdsc.next();
               //Vector<Integer> vPosList = p.hPosList.get(wrd);
               Integer freq=m.get(wrd);

               //Integer doc=m1.get(i);
              //System.out.println(m.get(wrd));
               m.put(wrd, (freq == null) ? 1 : freq   1);





           }



          System.out.println(m.size()   " distinct words"   " steem"  i);
          System.out.println("Doc"  i "" m);
          //System.out.println("Doc" i "" m1);
          m.clear();


        tdsc.close();

    }
        //System.out.println(m.size()   " distinct words");
        //System.out.println(m);
       // System.out.println(m1);

}
}
  

Комментарии:

1. Индексируется на чем?

Ответ №1:

Как насчет сохранения ее как List<Map<String,Integer>> ? Создайте новую карту для каждого документа, сопоставляя термин с его частотой.

   List<Map<String, Integer>> list = new ArrayList<>();
    Map<String, Integer> map;
    String word;
    //Iterate over documents
    for (int i = 1; i <= 2; i  ) {
        map = new HashedMap<>();
        Scanner tdsc = new Scanner(new File("D:\logs\steem"   i   ".txt"));
        //Iterate over words
        while (tdsc.hasNext()) {
            word = tdsc.next();
            final Integer freq = map.get(word);
            if (freq == null) {
                map.put(word, 1);
            } else {
                map.put(word, map.get(word)   1);
            }
        }
        list.add(map);
    }

    //Print result
    int documentNumber = 0;
    for (Map<String, Integer> document : list) {
        for (Map.Entry<String, Integer> entry : document.entrySet()) {
            System.out.println(entry.getKey()   ":doc" documentNumber ":"   entry.getValue());
        }
        documentNumber  ;
    }
  

Комментарии:

1. если я хочу сохранить это в базе данных, как я могу это сделать? я видел, что у netbeans есть база данных с именем derby как я могу сохранить этот вывод в этой базе данных?