2016-04-29 29 views
1

Der Datensatz ist wie folgt:Wie wird diese Dokumentensammlung gespeichert?

39861 // number of documents 
28102 // number of words of the vocabulary (another file) 
3710420 // number of nonzero counts in the bag-of-words 
1 118 1 // document_id index_in_vocabulary count 
1 285 3 
... 
2 46 1 
... 
39861 27196 5 

Wir beraten werden nicht, dass in der Matrix zu speichern (der Größe 39861 x 39861 glaube ich), da es nicht * und von here in Speicher passen Ich kann davon ausgehen, dass für jede Ganzzahl 24 Byte gespeichert werden müssen, also 27 Gb (= 39861 * 28102 * 24 Byte) mit einer dichten Matrix. Welche Datenstruktur sollte ich verwenden, um den Datensatz zu speichern?


Ein Array von Listen?

  • Wenn ja (jede Liste Knoten mit zwei Daten-Mitglieder haben wird, die index_in_vocubulary und die count), um nur positive Antwort posten. Wenn ich davon ausgehen, dass jedes Dokument im Durchschnitt 200 Worte hat, dann wäre der Raum sein:

NO_OF_DOCUMENTS x words_per_doc * no_of_datamembers * 24 = 39861 * 200 * 2 * 24 = 0,4 Gb

  • Wenn nicht, welche würden Sie vorschlagen (die würde weniger Platz benötigen)?

Nach dem Datensatz speichert, werden wir mit brutalen Gewalt und LSH k-nächste Nachbarn (k ähnliche Dokumente), finden erforderlich.


* Ich habe 3,8 GiB in meinem persönlichen Laptop, aber ich habe Zugriff auf einen Desktop mit ~ 8 Gb RAM.

+0

Wer uns geraten, nicht die Daten in einer Matrix zu speichern? Vielleicht sollten wir sie einfach fragen. –

+0

Der Professor @ Robᵩ, ich aktualisiert. Der Grund ist, dass es nicht in den Speicher passt. Der Kurs hat jedoch keine TA (!?!?), Also sind wir in unserem eigenen, wörtlich. – gsamaras

+0

Nach dem Speichern der Daten, was als nächstes? Müssen Sie die Daten abrufen? Suche darin? Grafikoperationen durchführen? –

Antwort

1

Verwenden Sie das HDF5-Format.

Es soll die Größe Ihrer Datei erheblich reduzieren.

Siehe my answer to similar question

+0

Jan gute Idee bringen HDF5-Format im Spiel, +1. Ich erinnere mich jedoch, dieses Format nur zum Speichern in Dateien zu verwenden und beim Laden des Datensatzes in den Speicher würden wir unsere eigene Datenstruktur in C++ verwenden. – gsamaras

+0

Ich bin mir nicht sicher, ich verstehe Ihren Kommentar. Wenn Sie die Daten in HDF5-Datei speichern, können Sie die Tatsache nutzen, dass das Format definiert ist und es APIs für verschiedene Programmiersprachen gibt (Python, C++, Java, FORTRAN und viele andere). –

+0

Hmm Ich sehe Jan. Ihre Antwort sagt jedoch nicht, warum ich nicht die Datenstruktur verwenden sollte, die ich vorschlage. – gsamaras

Verwandte Themen