2016-05-24 5 views
0

各ファイルに単語が出現する頻度を上げることに問題があります。 私は3つの等しいファイルにテストし、それぞれ異なる結果を得ました。 例:各ワードファイル「プログラムは、」13回 enter image description here周波数を上げることによるJavaの索引付けエラー

が、私は持って出力されるが発生します。 enter image description here

*理由語幹のこの「PROGRAMA」とないプログラムなどの検索フィールドに単語機能

[program] 
---------------- 
Doc: site1.html Freq: 21 
Doc: site2.html Freq: 11 
Doc: site3.html Freq: 1 

出力が正しくありません。

出力がなければなりませんでした:

[program] 
---------------- 
Doc: site1.html Freq: 13 
Doc: site2.html Freq: 13 
Doc: site3.html Freq: 13 

Documentクラス:文書を挿入し、見つけるため

public class Documento { 

    private String docid; 
    private int frequencia; 

    public Documento(String docid, int frequencia) { 
     this.docid = docid; 
     this.frequencia = frequencia; 
    } 

    public String getDocid() { 
     return docid; 
    } 

    public int getFrequencia() { 
     return frequencia; 
    } 

    public void setFrequencia(int frequencia) { 
     this.frequencia = frequencia; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if ((o instanceof Documento) && docid == ((Documento) o).docid && frequencia == ((Documento) o).frequencia) { 
      return true; 
     } 
     return false; 
    } 

機能:

 public class Dicionario { 

    public Map<String, List<Documento>> indice = new HashMap<>(); 

    public void InsereDicionario(String palavra, String docid) { 
     if (!indice.containsKey(palavra)) { 
      indice.put(palavra, new ArrayList<Documento>()); 
      indice.get(palavra).add(new Documento(docid, 1)); 
     } else { 
      boolean inserido = false; 
      List<Documento> lista = indice.get(palavra); 
      for (int i = 0; i < lista.size(); i++) { 
       Documento d = lista.get(i); 
       if (d.getDocid().equals(docid)) { 
//     indice.get(palavra).add(new Documento(docid, 1)); 
        inserido = true; 
       } else { 
        d.setFrequencia(d.getFrequencia() + 1); 
       } 
       System.out.println(""); 
      } 
      if (!inserido) { 
       indice.get(palavra).add(new Documento(docid, 1)); 
      } 
     } 
    } 

    public String Busca(String palavra) { 
     String saida = ""; 
     System.out.println("Buscando [" + palavra + "]"); 
     List<Documento> list = new ArrayList(); 

     for (String p : indice.keySet()) { 
      if (p.equals(palavra)) { 
       list.addAll(indice.get(p)); 
       for (Documento d : indice.get(p)) { 
        System.out.println("Doc: " + d.getDocid() + " Freq: " + d.getFrequencia()); 
        saida += "Doc: " + d.getDocid() + " Freq: " + d.getFrequencia() + "".trim() + "\n"; 
       } 
      } 
     } 
     return saida; 
    } 

機能にBuscar(検索機能)を呼び出しますすべての言葉。この時

for (String palavra : query.split(" ")) { 
    resultado += ("\n[" + palavra + "]\n----------------\n"); 
    resultado += dic.Busca(palavra.trim()); 
} 

答えて

0

ルック:

   if (d.getDocid().equals(docid)) { 
//     indice.get(palavra).add(new Documento(docid, 1)); 
        inserido = true; 
       } else { 
        d.setFrequencia(d.getFrequencia() + 1); 
       } 

dociidがリストに発見された場合 - >その後、をnothningありません。
そうでない場合(リストから取得現在ドキュメントはdocidから等しくない) - >次にインクリメントカウンタ
これらの操作を入れ替えるか、条件に否定を使用してください。

+0

出力: [プログラム] ---------------- DOC:site1.htmlのFreq:10 DOC:site1.htmlのFreq:9 DOC:site1.html FREQ:8 DOC:site1.html FREQ:7 DOC:site1.html FREQ:6 DOC:site1.html FREQ:5 DOC:site1.html FREQ:4 DOC:site1.html FREQ:3 ドク:site1.html Freq:2 Doc:site1.html Freq:1 –

+0

私はすでにそれを試みましたが、1つの文書の頻度とデクリメントしか表示されません。私は何が起きているのか理解できません= –

関連する問題