Hi,
Ich hab folgendes Problem:
Ich habe eine ganz große Datei mit viel Text. Für diese will ich ein Index File erstellen. Jedes Wort aus meiner Datei speichere ich in eine Map als KeyWert ab und als ValueWert speichere ich die Position des Wortes (getFilePointer()).
In einem Text kommen gleiche KeyWerte öfters vor, d.h. der KeyWert braucht als ValueWert mehrere Werte (z.B. key= halloo value=[1,5,7,9,10])
Ich krieg das für eine kleinere Textdatei hin, aber wenn sie ganz groß ist, dauert es viel zu lange, bis die indices gebaut werden.
Festgestellt habe ich, das vor allem dieser Code viel Zeit braucht:
Wenn ich den weglasse, geht alles schneller, aber mir fehlen dann ValueWerte,die ich brauche.
Jemand einen Vorschlag?
Danke.
Ich hab folgendes Problem:
Ich habe eine ganz große Datei mit viel Text. Für diese will ich ein Index File erstellen. Jedes Wort aus meiner Datei speichere ich in eine Map als KeyWert ab und als ValueWert speichere ich die Position des Wortes (getFilePointer()).
In einem Text kommen gleiche KeyWerte öfters vor, d.h. der KeyWert braucht als ValueWert mehrere Werte (z.B. key= halloo value=[1,5,7,9,10])
Ich krieg das für eine kleinere Textdatei hin, aber wenn sie ganz groß ist, dauert es viel zu lange, bis die indices gebaut werden.
Festgestellt habe ich, das vor allem dieser Code viel Zeit braucht:
Java:
id.add(offset);
Wenn ich den weglasse, geht alles schneller, aber mir fehlen dann ValueWerte,die ich brauche.
Jemand einen Vorschlag?
Danke.
Java:
public void indexFile(String file) {
Map<String, Set<Long>> indexMap = new HashMap<String, Set<Long>>();
try {
RandomAccessFile readIn = new RandomAccessFile(file, "r");
String line;
while ((line = readIn.readLine()) != null) {
long offset = readIn.getFilePointer();
String delims = "[ .,?!]+";
String[] terms = line.toLowerCase().split(delims);
int k = 0;
while (k < terms.length) {
if (stopwords.contains(terms[k])) {
k++;
continue;
} else {
if (line.length() == 0
|| line.startsWith("---------------------")) {
k++;
continue;
}
else {
Set<Long> idList = new HashSet<Long>();
if (idList.size() == 0)
idList.add(offset);
if (indexMap.containsKey(terms[k])) {
Set<Long> id = new HashSet<Long>();
id.addAll(indexMap.get(terms[k]));
id.add(offset);
indexMap.put(terms[k], id);
k++;
} else {
indexMap.put(terms[k], idList);
k++;
}
}
}
}
}
readIn.close();
RandomAccessFile indexedFile = new RandomAccessFile("index.txt",
"rw");
int n = 0;
Object[] key = indexMap.keySet().toArray();
Object[] values = indexMap.values().toArray();
while (n < indexMap.size()) {
indexedFile.write(key[n].toString().getBytes());
indexedFile.write(";".getBytes());
indexedFile.write(values[n].toString().getBytes());
indexedFile.write("\n".getBytes());
n++;
}
indexedFile.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}