示例:
d1 =“天空是蓝色的”
d2 =“汽车是蓝色的”
Key Value
the [<d1,1>,<d2,1>]
sky [<d1,1>]
is [<d1,1>,<d2,1>]
blue [<d1,1>,<d2,1>]
car [<d2,1>]
其中: key = String
例如:
<d1,1>
d1 =文件ID
1 =文件中的单词数量
的次数我使用docid变量和频率创建了一个文档类型对象。
public class Documento {
private final int docid;
private final int frequencia;
public Documento(int docid, int frequencia) {
this.docid = docid;
this.frequencia = frequencia;
}
public int getDocid() {
return docid;
}
public int getFrequencia() {
return frequencia;
}
@Override
public boolean equals(Object o) {
if ((o instanceof Documento) && docid == ((Documento) o).docid && frequencia == ((Documento) o).frequencia) {
return true;
}
return false;
}
字典类是带
的hashmappublic class Dicionario {
public Map<String, Documento> indice = new HashMap<>();
public void InsereDicionario(String palavra, int docid) {
int cont = indice.containsKey(palavra) ? indice.get(palavra).getFrequencia() : 0;
indice.put(palavra, new Documento(docid, cont + 1));
}
public int frequencia(String palavra) {
return indice.get(palavra).getFrequencia();
}
public void criaDicionario(String entrada) {
String[] palavras = entrada.split("\\s+");
for (int i = 0; i < palavras.length; i++) {
InsereDicionario(palavras[i], 1);
}
}
public void ListaPalavras(){
for(String key:indice.keySet()){
System.out.println("");
}
}
但我真正需要的是字典列表,我不知道怎么做,有人可以帮助我吗?
或者有更简单的方法吗?
答案 0 :(得分:2)
如果您需要一份文件清单,为什么不创建一份?使用Java8,这变得更加方便:
例如:
public Map<String, List<Documento>> indice = new HashMap<>();
//register new word
indice.putIfAbsent(palavra, new ArrayList<>());
//add additional occurence
indice.get(palavra).add(documento);
//get frequency
int frequencia = indice.get(palavra)
.stream()
.map(d -> d.getFrequencia())
.reduce(0, (s, i) -> s + i);
另一种方法是使用Guava的Multimap,请参阅here
答案 1 :(得分:1)
Map<String, List<Documento>>
显然你需要调整其余的代码。
例如,当您需要向字典添加内容时,如果您第一次需要使用该单个文档创建List
,则下次需要创建已创建的列表时并在那里添加文件。