0

Javaで逆インデックスを作成したいと思います。私は1400のテキストファイルのデータを持っています。 各単語/単語の頻度を数えることができました。私はコレクション全体に単語が現れる回数を返すことができましたが、どの文書がその中に現れるかを返すことができませんでした。これは私がこれまで持っているコードです:逆インデックスをJavaで作成する方法

次の形式 TERM1:DOC1:2、DOC2:3 TERM2:DOC1:3、doc4:1 ...............ここで用語がワードである

になりますDOCファイルやドキュメントに1:// ST: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); 

} 
} 
+0

HTTP意味しますackoverflow.com/questions/12511543/how-to-build-a-simple-inverted-index –

答えて

0
public static void main(String[]args) throws FileNotFoundException{ 
    Map<String, Set<Doc>> wordDocMap = new HashMap<>(); 

    for(int i=1;i<=2;i++){ 
     Scanner tdsc = new Scanner(new File("D:\\logs\\steem"+i+".txt")); 
     Doc document = new Doc("doc"+i); 
     while(tdsc.hasNext()){ 
      String word = tdsc.next(); 
      document.put(word); 
      Set<Doc> documents = wordDocMap.get(word); 
      if(documents == null){ 
       documents = new HashSet<>(); 
       wordDocMap.put(word, documents); 
      } 
      documents.add(document); 
     } 
     tdsc.close(); 
    } 

    StringBuilder builder = new StringBuilder(); 
    for(String word: wordDocMap.keySet()) { 
     Set<Doc> documents = wordDocMap.get(word); 
     builder.append(word + ":"); 
     for(Doc document:documents){ 
      builder.append(document.getDocName() +":"+ document.getCount(word)); 
      builder.append(", "); 
     } 
     builder.delete(builder.length()-2, builder.length()-1); 
     builder.append("\n"); 
    } 
    System.out.println(builder); 
} 

static class Doc { 
    String docName; 
    Map<String, Integer> m = new HashMap<>(); 

    public Doc(String docName){ 
     this.docName = docName; 
    } 

    public void put(String word) { 
     Integer freq = m.get(word); 
     m.put(word, (freq == null) ? 1 : freq + 1); 
    } 

    public Integer getCount(String word) { 
     return m.get(word); 
    } 

    public String getDocName() { 
     return this.docName; 
    } 
} 
+0

私が間違っていない場合、私はマップ "wordDocMap"を印刷する必要があります だから私は行を入れてSystem.out.println( worddocMap); この値は{}しか表示されません 私はマップ内で初心者ですので、何が起こっているか教えてくれれば助けになるでしょうか? –

+0

出力の印刷方法は? –

+0

StringBuilderビルダー –

関連する問題