#java #information-retrieval
#java #поиск информации
Вопрос:
Я хочу создать инвертированный индекс на Java. У меня есть данные cran из 1400 текстовых файлов. Я смог подсчитать частоту каждого термина / слова. Я смог вернуть количество раз, когда слово появляется во всей коллекции, но я не смог создать тройку (t, d, f), где t = термин, d = документ, f = частота. Это код, который у меня есть до сих пор:
Я хочу, чтобы вывод был в следующем виде
term1: doc1:2,
term2: doc2:3,
term1: doc3:1
здесь term — это слово в файле doc, а doc 1: 2 означает, что term1 появляется в документе 1 2 раза
public static void main(String[]args) throws FileNotFoundException{
Map<String, Integer> m = new HashMap<>();
String wrd;
for(int i=1;i<=2;i ){
//FileInputStream tdfr = new FileInputStream("D:\logs\steem" i ".txt");
Scanner tdsc=new Scanner(new File("D:\logs\steem" i ".txt"));
while(tdsc.hasNext()){
// m.clear();
Integer docid=i;
wrd=tdsc.next();
//Vector<Integer> vPosList = p.hPosList.get(wrd);
Integer freq=m.get(wrd);
//Integer doc=m1.get(i);
//System.out.println(m.get(wrd));
m.put(wrd, (freq == null) ? 1 : freq 1);
}
System.out.println(m.size() " distinct words" " steem" i);
System.out.println("Doc" i "" m);
//System.out.println("Doc" i "" m1);
m.clear();
tdsc.close();
}
//System.out.println(m.size() " distinct words");
//System.out.println(m);
// System.out.println(m1);
}
}
public static void main(String[]args) throws FileNotFoundException{
Map<String, Integer> m = new HashMap<>();
String wrd;
for(int i=1;i<=2;i ){
//FileInputStream tdfr = new FileInputStream("D:\logs\steem" i ".txt");
Scanner tdsc=new Scanner(new File("D:\logs\steem" i ".txt"));
while(tdsc.hasNext()){
// m.clear();
Integer docid=i;
wrd=tdsc.next();
//Vector<Integer> vPosList = p.hPosList.get(wrd);
Integer freq=m.get(wrd);
//Integer doc=m1.get(i);
//System.out.println(m.get(wrd));
m.put(wrd, (freq == null) ? 1 : freq 1);
}
System.out.println(m.size() " distinct words" " steem" i);
System.out.println("Doc" i "" m);
//System.out.println("Doc" i "" m1);
m.clear();
tdsc.close();
}
//System.out.println(m.size() " distinct words");
//System.out.println(m);
// System.out.println(m1);
}
}
Комментарии:
1. Индексируется на чем?
Ответ №1:
Как насчет сохранения ее как List<Map<String,Integer>>
? Создайте новую карту для каждого документа, сопоставляя термин с его частотой.
List<Map<String, Integer>> list = new ArrayList<>();
Map<String, Integer> map;
String word;
//Iterate over documents
for (int i = 1; i <= 2; i ) {
map = new HashedMap<>();
Scanner tdsc = new Scanner(new File("D:\logs\steem" i ".txt"));
//Iterate over words
while (tdsc.hasNext()) {
word = tdsc.next();
final Integer freq = map.get(word);
if (freq == null) {
map.put(word, 1);
} else {
map.put(word, map.get(word) 1);
}
}
list.add(map);
}
//Print result
int documentNumber = 0;
for (Map<String, Integer> document : list) {
for (Map.Entry<String, Integer> entry : document.entrySet()) {
System.out.println(entry.getKey() ":doc" documentNumber ":" entry.getValue());
}
documentNumber ;
}
Комментарии:
1. если я хочу сохранить это в базе данных, как я могу это сделать? я видел, что у netbeans есть база данных с именем derby как я могу сохранить этот вывод в этой базе данных?