J'écris du code Python pour mettre en œuvre certains des concepts que j'ai récemment appris, liés à des index inversés/listes de messages. Je suis relativement nouveau à Python et j'ai quelques difficultés à comprendre son efficacité dans certains cas.Python inversé indice efficacité
En théorie, la création d'un index inversé d'un ensemble de documents D, chacun avec un identifiant unique doc_id
devrait impliquer:
- Parsing/effectuer une analyse lexicale de chaque document D
- suppression de termes courants, l'exécution découlant etc.
- Création d'une liste de toutes les paires
(word,doc_id)
- tri de la liste
- doublons se condensant dans
{word:[set_of_all_doc_ids]}
(index inversé)
étape 5 est souvent réalisée en ayant un dictionnaire contenant le mot avec des méta-données (fréquence de terme, décalages d'octets) et un pointeur vers la liste des messages (liste de documents, il se produit in) . La liste d'écritures est souvent mise en œuvre en tant que structure de données qui permet une insertion aléatoire efficace, c'est-à-dire une liste chaînée. Mon problème est que Python est un langage de plus haut niveau, et l'utilisation directe de choses comme les pointeurs de mémoire (et donc les listes liées) semble être hors de portée. J'optimise avant le profilage car pour des ensembles de données très volumineux, il est déjà connu que l'efficacité doit être maximisée pour conserver toute sorte de capacité à calculer l'index dans un délai raisonnable.
Plusieurs autres messages existent ici sur SO à propos des index inversés Python et, comme MY implémentation actuelle, ils utilisent des clés de mappage de dictionnaires pour les listes (ou ensembles). Faut-il s'attendre à ce que cette méthode ait des performances similaires à celles d'un langage permettant le codage direct de pointeurs vers des listes chaînées?
Quand vous dites que les listes chaînées ne sont pas possibles dans python, c'est complètement faux. Voulez-vous dire l'arithmétique du pointeur par hasard? – forivall