0
各ファイルに単語が出現する頻度を上げることに問題があります。 私は3つの等しいファイルにテストし、それぞれ異なる結果を得ました。 例:各ワードファイル「プログラムは、」13回 周波数を上げることによるJavaの索引付けエラー
*理由語幹のこの「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());
}
出力: [プログラム] ---------------- 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 –
私はすでにそれを試みましたが、1つの文書の頻度とデクリメントしか表示されません。私は何が起きているのか理解できません= –