【问题标题】:Java indexing error by increasing the frequencyJava索引错误通过增加频率
【发布时间】:2016-05-24 19:40:19
【问题描述】:

我有一个问题是要增加单词在每个文件中出现的频率, 我测试了 3 个相同的文件,并在每个文件中获得了不同的结果。 示例:每个文件中的“program”一词出现 13 次

但我的输出是:

*搜索字段中的单词作为这个“programa”,而不是因为词干提取功能而不是program

[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

文档类:

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

【问题讨论】:

    标签: java indexing stemming


    【解决方案1】:

    看看这个:

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

    如果在列表中找到 dociid -> 然后什么都不做
    否则(从列表中检索到的当前文档不等于docid)-> 然后增加计数器
    交换这些操作,或在条件中使用否定。

    【讨论】:

    • 输出:[程序]---------------- 文档:site1.html 频率:10 文档:site1.html 频率:9 文档:site1.html频率:8 文档:site1.html 频率:7 文档:site1.html 频率:6 文档:site1.html 频率:5 文档:site1.html 频率:4 文档:site1.html 频率:3 文档:site1.html 频率: 2 文档:site1.html 频率:1
    • 我已经尝试过了,但只出现了 1 个文档的频率并递减。我无法理解发生了什么 = /
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多