Contexte
PRISM est une bibliothèque Python conçue pour le calcul de similarité de chaînes de caractères1. Elle fournit une API permettant de comparer des textes à l’aide de plusieurs algorithmes indépendants, tels que des mesures de distance de caractères, des comparaisons lexicales, des indexations phonétiques ou des représentations sémantiques (embeddings).
Objectif
La comparaison de chaînes de caractères sert à mesurer la proximité ou la divergence entre plusieurs textes. Cependant, chaque algorithme répond à un type de variation textuelle spécifique. Par exemple, les erreurs de saisie (comme les fautes d’orthographe) sont détectées par des calculs de distance d’édition au niveau des caractères. Les variations de vocabulaire (comme les synonymes « voiture » et « automobile ») ne peuvent pas être détectées par des comparaisons de caractères et nécessitent des représentations sémantiques. Ces différents algorithmes étant généralement implémentés dans des bibliothèques logicielles distinctes avec des formats d’entrée et de sortie variables, leur utilisation conjointe nécessite d’écrire du code d’intégration spécifique pour harmoniser les résultats.
Approche
PRISM propose un cadre de travail unifié structuré autour d’une classe centrale Matcher et d’un registre de méthodes de similarité. Chaque méthode implémente une interface commune qui expose une fonction compute(a, b) retournant un score de similarité sous forme de nombre réel (float) compris entre 0.0 (totalement différent) et 1.0 (identique).
Les méthodes sont réparties en six familles :
- Distance d’édition (calcule le nombre de modifications de caractères requises) : Levenshtein, Damerau-Levenshtein, Hamming.
- Similarité de séquence (analyse les motifs de caractères et leur ordre relatif) : Jaro-Winkler, SequenceMatcher.
- Méthodes lexicales (découpent les textes en tokens avant comparaison) : token sort, token set, partial ratio.
- Phonétique (convertit les mots en codes basés sur leur prononciation) : Soundex, Metaphone, Double Metaphone, Match Rating Codex.
- TF-IDF (Term Frequency-Inverse Document Frequency, qui pondère les mots selon leur fréquence d’apparition) : vectorisation TF-IDF combinée avec une mesure de similarité.
- Embedding (convertit le texte en vecteurs numériques capturant le sens sémantique) : similarité sémantique à l’aide du modèle Jina Embeddings v32.
Les dépendances externes lourdes telles que scikit-learn (pour le TF-IDF), fastembed (for embeddings) et matplotlib (pour la visualisation) sont chargées à la demande lors du premier appel de la méthode associée afin d’éviter une surcharge mémoire au démarrage de l’application.
Fonctionnalités
- API unifiée : Toutes les méthodes enregistrées sont accessibles via l’appel
compare(a, b)de la classeMatcher. - Filtrage des méthodes : Le
Matcherpeut être instancié en limitant le calcul à des méthodes spécifiques ou à des catégories de méthodes. - Pipeline de prétraitement : Les chaînes d’entrée peuvent être normalisées via des fonctions de traitement successives (conversion en minuscules, suppression des accents ou retrait de la ponctuation) avant l’évaluation de la similarité.
- Comparaison par lots : La méthode
compare_batch()traite plusieurs paires de chaînes en parallèle à l’aide d’un pool de threads (ThreadPoolExecutor). - Registre personnalisable : De nouvelles métriques de similarité peuvent être ajoutées au système en décorant des classes personnalisées avec le décorateur
@register.
Résultat
PRISM offre un cadre structuré pour évaluer et comparer simultanément plusieurs métriques de similarité de chaînes. En unifiant l’interface de ces algorithmes et en les découplant de leurs bibliothèques d’origine, PRISM permet d’exécuter et de combiner les stratégies de comparaison adaptées à la nature des données textuelles analysées.
Footnotes
-
La bibliothèque est optimisée pour des cas d’usage comme le dédoublonnage de données ou la réconciliation d’entités (Entity Resolution). ↩
-
Ce modèle de pointe permet de projeter les chaînes de caractères dans un espace vectoriel dense afin de capturer les relations synonymiques au-delà de la simple ressemblance lexicale. ↩


