Domanda

Ho un grande insieme di stringhe che sto usando per elaborazione del linguaggio naturale di ricerca, e mi piacerebbe un bel modo per conservarlo in Python.

ho potuto usare salamoia, ma il caricamento l'intero elenco in memoria sarebbe allora una cosa impossibile (credo), in quanto si tratta di circa 10 GB di grandi dimensioni, e non ho più di tanto la memoria principale. Attualmente ho la lista memorizzata con la libreria ripiano ... Il ripiano è indicizzato da stringhe, "0", "1", ..., "n", che è un po 'goffo.

Ci sono modi più belli per memorizzare un oggetto in un unico file, e hanno ancora casuale (ish) l'accesso ad esso?

E 'possibile che l'opzione migliore è quella di dividere in più elenchi.

Grazie!

È stato utile?

Soluzione

A seconda di come avete intenzione di ottenere i dati, SQLite3 potrebbe essere l'approccio migliore. SQLite3 è eccellente a accesso casuale ai dati relazionali, ma se i dati non è molto relazionale, potrebbe non fare come molto senso. (Anche se tutti hanno il tuo è un numero 'id' e poi la stringa, penso SQLite3 per sottostante lo stoccaggio delle corde potrebbe essere grande.)

Se si riesce a capire qualche meccanismo per raggruppare insieme le corde da qualche modo in cui loro (usereste per esempio, se alcune delle vostre frasi sono oggetti implicite o soggetti, e vi piacerebbe fare ricerca su di essi in particolare; oppure a seconda della fonte delle corde, che si tratti di formale o informale o hyperinformal) o qualcosa di simile, allora si potrebbe ridurre il 'working set' dei dati in modo significativo il partizionamento, e migliorando potenzialmente drasticamente il throughput della tua ricerca. Ma se si ha intenzione di accesso realmente casuale poi un grande mucchio potrebbe essere migliore.

Spero che questo aiuti.

Altri suggerimenti

Si potrebbe considerare l'utilizzo di un database; forse un tavolo frase o una stringa con una riga per ogni stringa.

Con l'aiuto di alcuni Object Relational Mapper (ad esempio sqlalchemy ) si potrebbe avere un oggetto vista orientato sulla dati e iterare sulle corde, o lavorare con i più grandi sottoinsiemi di dati in sequenza (se questo è il caso per il vostro compito).

Inoltre, è possibile memorizzare dati aggiuntivi per ogni frase per ottenere un maggiore controllo a grana fine nel corso degli insiemi di elementi che si desidera lavorare.

direi uso ripiano (che utilizza un backend bdb) o Sqlite3.
Vorrei andare con SQLite3, per un semplice elenco una tabella come CREATE TABLE list(idx int primary key, value text); dovrebbe essere sufficiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top