URL:     https://linuxfr.org/users/jul/journaux/poc-transformer-les-tableaux-associatifs-dict-map-en-vecteur-algebrique
Title:   PoC : Transformer les tableaux associatifs (dict/map) en vecteur algébrique
Authors: Jul
Date:    2026-04-13T19:23:25+02:00
License: CC By-SA
Tags:    algèbre et programmation_orientee_objet
Score:   3


La PoC (*Preuve de concept*) dont il est ici question est en python, mais elle est généralisable à tout langage objet.

# Le projet

Aujourd'hui à 99% de couverture de code on peut considérer la PoC complète. Le code source [sur github est ici](https://github.com/jul/archery).

Le projet vise à transformer de manière portable les tableaux associatifs en vecteur algébrique.

Pour ça on part d'un développement initialement [piloté par les propriétés algébriques](https://github.com/jul/archery/blob/master/consistent_algebrae.py#L35) pour obtenir du code *chez moi ça marche*©.

Pourquoi ? Parce que c'est drôle, mais incidemment, et on va explorer plus tard comment : c'est utile.

La [présentation FOSDEM 2017 est ici](http://jul.github.io/cv/pres.html#printable), la [version vidéo est ici](https://www.youtube.com/watch?v=Rd6rY5zNcGM).



# Comment ?

En utilisant des [traits](https://fr.wikipedia.org/wiki/Trait_(programmation)) ou [mixins](https://fr.wikipedia.org/wiki/Mixin) (votre éclairage sur le sujet est bienvenu) par surcharge des opérateurs (à droite et à gauche) on obtient des comportements qui sont compatibles avec n'importe quoi qui a l'interface d'une table associative.

En composant les traits, on obtient deux familles de tableaux associatifs algébriques 

![Voir Schéma](https://archery.readthedocs.io/en/latest/_images/graphviz-ea9fd70dd0a85d192132b1ddbde6812a3fb1dcce.png)

Les tableaux associatifs algébriques qui supportent la logique de combinaison linéaire.

Et les tableaux associatifs vectoriels qui supportent les opérations sur la norme, le produit scalaire et le cosinus.

# Utilité

## Avoir des vecteurs de dimensions n et fractal

Autant la fractalité des vecteurs me laisse de marbre et je ne vois pas l'utilité, autant avoir des vecteurs indéfinis est utile. Un cas simple est le fameux « word counter » (*compte mots*) utilisé dans les exemples d'indexation textuelle. 

Plus un cosinus est proche de 1 plus vos deux vecteurs pointent dans la même direction ce qui permet de mesurer la similarité.

Ce qui est vrai avec des *comptes mots* est vrai avec d'autres vecteurs.

## Utiliser python comme démonstrateur de pseudo code qui « marche » pour de l'objet

Foncièrement, les ficelles utilisées dans ce projet sont les mêmes que pour du C++/ruby/php?/C# : de la bonne vieille surcharge d'opérateur et des utilisations d'interfaces.

Il est donc possible de porter le code en utilisant les algorithmes pas très sioux utilisés et les tests vers d'autres langages.
