2016-10-04 2 views
0

Je veux construire un index inversé en Java. J'ai des données de cran de 1400 fichiers texte. J'étais capable de compter la fréquence de chaque terme/mot. J'ai été capable de retourner le nombre de fois qu'un mot apparaît dans toute la collection, mais je n'ai pas réussi à créer un triplet (t, d, f) où t = terme, d = doc, f = fréquence. Ceci est le code que j'ai jusqu'à présent:comment créer un triple en utilisant la carte

Je veux la sortie sous la forme suivante

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

ici terme est un mot dans un fichier doc et doc 1: 2 signifie terme1 figure dans le document 1 2 fois

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); 

} 
} 
+0

Indexé sur quoi? – Spotted

Répondre

0

Qu'en est-i stockage t que List<Map<String,Integer>>? Créez une nouvelle carte pour chaque document, en mappant le terme avec sa fréquence.

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++; 
    } 
+0

si je veux stocker cela dans une base de données comment puis-je le faire? J'ai vu que netbeans a une base de données nommée derby comment puis-je stocker cette sortie dans cette base de données? –