2016-05-24 11 views
0

Ich habe ein Problem Häufigkeit zu erhöhen, dass das Wort in jeder Datei auftritt, Ich testete in 3 gleiche Dateien und erhielt unterschiedliche Ergebnisse in jedem. Beispiel: Jedes der Word-Datei „Programm“ tritt 13mal enter image description hereJava-Indexierungsfehler durch Erhöhung der Häufigkeit

aber die Ausgabe ich habe, ist: enter image description here

* das Wort in das Suchfeld ein, da dieses „programa“ und nicht Programm wegen stamm Funktion

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

keiner der Ausgänge ist korrekt.

Der Ausgang sein musste:

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

Dokumentklasse:

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

Funktion aufzurufen Buscar (Suchfunktion) in:

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

Funktion zu und Dokument finden einfügen alle Worte.

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

Antwort

0

Blick auf diese:

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

Wenn dociid in der Liste zu finden ist -> dann nothning tun.
Andernfalls (ein aktuelles Dokument, das aus der Liste abgerufen wird, ist ungleich zu docid) -> dann erhöhen Sie den Zähler.
Tauschen Sie diese Operationen oder verwenden Sie eine Negation in der Bedingung.

+0

Output: [program] ---------------- 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 Doc : site1.html Freq: 2 Doc: site1.html Freq: 1 –

+0

Ich habe das schon versucht, aber nur die Häufigkeit von 1 Dokument erscheint und dekrementieren. Ich kann nicht verstehen, was passiert. –