Dans l'un de mes projets, je suis d'analyse par l'intermédiaire du texte à la recherche à la fréquence de mot de triplets. Dans mon premier aller, j'ai utilisé le dictionnaire par défaut trois niveaux de profondeur. En d'autres termes, topDictionary[mot1][mot2][terme3] renvoie le nombre de fois où ces mots apparaissent dans le texte, topdictionary[mot1][mot2] retourne un dictionnaire avec tous les mots qui sont apparues à la suite des mots 1 et 2, etc.
Cela fonctionne correctement, mais il est très gourmande en mémoire. Dans mes premiers essais, il a utilisé quelque chose comme 20 fois la quantité de mémoire de juste le stockage de triplets dans un fichier texte, ce qui semble être une quantité trop importante de la surcharge de la mémoire.
Mon soupçon est que beaucoup de ces dictionnaires sont créés avec beaucoup plus de logements que sont réellement utilisées, alors je veux remplacer les dictionnaires avec quelque chose d'autre qui est plus de mémoire efficace lorsqu'il est utilisé de cette manière. Je vous recommande de préférer une solution qui permet à la clé des recherches le long de la lignes de dictionnaires.
De ce que je sais de structures de données, l'équilibre binaire de recherche de l'arbre à l'aide de quelque chose comme le rouge et le noir ou AVL serait probablement l'idéal, mais je préfère vraiment ne pas mettre en place moi-même. Si possible, je préfère rester avec les standards de python, des bibliothèques, mais je suis ouvert à d'autres solutions de rechange si elles fonctionnent le mieux.
Donc, quelqu'un aurait-il des suggestions pour moi?
Edité pour ajouter:
Merci pour les réponses à ce jour. Quelques réponses ont suggéré l'utilisation de n-uplets, qui n'a pas vraiment faire beaucoup pour moi, quand j'ai condensé les deux premiers mots dans un tuple. J'hésite à utiliser tous les trois comme une clé car je veux qu'il soit facile de rechercher tous les mots étant donné que les deux premiers. (c'est à dire je veux quelque chose comme le résultat de topDict[mot1,mot2].keys() ).
Le dataset actuel je joue avec la version la plus récente de Wikipédia Pour les Écoles. Les résultats de l'analyse du premier millier de pages, par exemple, est quelque chose comme 11MO pour un fichier texte où chaque ligne est les trois mots et le nombre de tous séparées par des tabulations. Stocker le texte dans le format du dictionnaire, je suis maintenant en utilisant prend environ 185MB. Je sais qu'il y aura des surcharges supplémentaires pour les pointeurs et autres joyeusetés, mais la différence semble excessif.
Encore une fois, merci à tous pour les réponses à ce jour.