Question

J'ai un grand ensemble de cordes que j'utilise pour la recherche de traitement du langage naturel, et je voudrais une façon agréable de le stocker en Python.

Je pourrais utiliser cornichon, mais le chargement de la liste entière en mémoire serait alors une impossibilité (je crois), comme il est environ 10 Go grand, et je n'ai pas beaucoup de mémoire principale. Actuellement, j'ai la liste stockée avec la bibliothèque shelve ... La tablette est indicé par des chaînes, « 0 », « 1 », ..., « n », qui est un peu maladroit.

Y at-il des moyens plus agréables pour stocker un tel objet dans un seul fichier, et ont toujours un accès aléatoire (ish) à elle?

Il est peut-être que la meilleure option est de le diviser en plusieurs listes.

Merci!

Était-ce utile?

La solution

En fonction de la façon dont vous avez l'intention d'obtenir les données, SQLite3 pourrait être la meilleure approche. SQLite3 est excellent à accès aléatoire aux données relationnelles, mais si vos données ne sont pas très relationnelle, il pourrait ne pas faire comme beaucoup de sens. (Même si tous vos avez est un numéro « id » et votre chaîne, je pense que SQLite3 pour le stockage de vos chaînes sous-jacentes pourrait être grande.)

Si vous pouvez trouver un mécanisme pour regrouper vos chaînes en quelque sorte que vous utiliser cette fonctionnalité? (Par exemple, si certaines de vos phrases ont des objets implicites ou sujets, et que vous souhaitez faire des recherches sur les spécifiquement; ou en fonction de la source de vos chaînes, que ce soit formel ou informel ou hyperinformal) ou quelque chose comme ça, alors vous pourriez réduire le « jeu de travail » de vos données de manière significative par le partitionnement, et potentiellement améliorer considérablement le débit de votre recherche. Mais si vous avez l'intention sur l'accès vraiment au hasard puis un gros tas pourrait être mieux.

Hope this helps.

Autres conseils

Vous pourriez envisager d'utiliser une base de données; peut-être une table de phrase ou une chaîne avec une ligne pour chaque chaîne.

Avec l'aide d'un objet Relational Mapper (par exemple sqlalchemy ), vous pouvez avoir une vue orientée objet sur la données et itérer sur les cordes, ou de travailler avec des sous-ensembles plus grands de vos données de manière séquentielle (si c'est applicable pour votre tâche).

En outre, vous pouvez stocker des données supplémentaires pour chaque phrase pour obtenir un contrôle plus grains fins sur les ensembles d'articles que vous voulez travailler avec.

Je dirais shelve utilisation (qui utilise un backend bdb) ou Sqlite3.
Je vais avec SQLite3, pour une liste simple comme une table CREATE TABLE list(idx int primary key, value text); devrait être suffisant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top