Frage

Ich habe eine große Reihe von Saiten, die ich für die Forschung für natürliche Sprache verwende, und ich möchte eine gute Möglichkeit, sie in Python aufzubewahren.

Ich könnte Pickle verwenden, aber das Laden der gesamten Liste in den Speicher wäre dann eine Unmöglichkeit (glaube ich), da es ungefähr 10 GB groß ist und ich nicht so viel Hauptspeicher habe. Derzeit habe ich die Liste mit der Shelve -Bibliothek gespeichert ... Das Regal wird durch Zeichenfolgen "0", "1", ..., "n" indexiert, was ein bisschen klobig ist.

Gibt es schönere Möglichkeiten, ein solches Objekt in einer einzelnen Datei zu speichern und dennoch zufällige (ISH) Zugriff darauf zu haben?

Es kann sein, dass die beste Option darin besteht, es in mehrere Listen aufzuteilen.

Vielen Dank!

War es hilfreich?

Lösung

Abhängig davon, wie Sie die Daten erhalten möchten, ist SQLite3 möglicherweise der beste Ansatz. SQLite3 ist beim Zufallszugriff auf relationale Daten hervorragend, aber wenn Ihre Daten nicht sehr relational sind, ist dies möglicherweise nicht so viel Sinn. (Auch wenn alles Ihre ID -Nummer und dann Ihre Zeichenfolge ist, denke ich, dass SQLite3 für die zugrunde liegende Speicherung Ihrer Saiten großartig sein könnte.)

Wenn Sie einen Mechanismus herausfinden können, um Ihre Saiten auf irgendeine Weise zu gruppieren, die Sie verwenden würden (z. Die Quelle Ihrer Zeichenfolgen, ob formal oder informell oder hyperinformal) oder ähnliches, können Sie den „Arbeitssatz“ Ihrer Daten erheblich reduzieren, indem Sie sie verteilt und möglicherweise drastisch verbessern. Aber wenn Sie auf einen wirklich zufälligen Zugriff beabsichtigen, ist ein großer Stapel am besten.

Hoffe das hilft.

Andere Tipps

Sie könnten in Betracht ziehen, eine Datenbank zu verwenden. Vielleicht eine Satz- oder Zeichenfolge -Tabelle mit einer Zeile für jede Zeichenfolge.

Mit Hilfe eines relationalen Mapper von Objekten (z. B. Sqlalchemy) Sie können eine objektorientierte Ansicht über die Daten haben und über die Zeichenfolgen iterieren oder mit größeren Teilmengen Ihrer Daten nacheinander arbeiten (wenn dies für Ihre Aufgabe anwendbar ist).

Darüber hinaus können Sie zusätzliche Daten für jeden Satz speichern, um eine feinkörnigere Kontrolle über die Sätze von Elementen zu erhalten, mit denen Sie arbeiten möchten.

Ich würde sagen, verwenden Sie Regale (das ein BDB -Backend verwendet) oder SQLite3.
Ich würde mit SQLite3 für eine einfache Liste einer Tabelle wie gehen CREATE TABLE list(idx int primary key, value text); sollte genug sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top