1

J'ai un grand ensemble (phrase 36k) de phrases (liste de texte) et leurs étiquettes POS (liste POS), et je voudrais regrouper/cluster les éléments dans la liste POS en utilisant edit distance/Levenshtein:Comment grouper des phrases en fonction de la distance d'édition?

(par exemple Sentx balises POS = [CC DT VBZ RB JJ], les balises Senty POS = [CC DT VBZ RB JJ]) sont à une distance d'édition du cluster = 0,

while ([CC DT VBZ RB JJ] , [CC DT VB RB JJ]) sont dans la distance d'édition du cluster = 1.

Je comprends comment les algorithmes de cluster fonctionnent, mais je suis confus comment aborder un tel problème en python et comment stocker les clusters dans les structures de données afin que je puisse les récupérer facilement.

J'ai essayé de créer une matrice (en mesurant la distance de chaque phrase avec toutes les phrases du corpus) mais cela prend beaucoup de temps à traiter.

+2

Cela peut valoir la peine de demander dans https://cs.stackexchange.com, puisqu'il s'agit d'une question de conception d'algorithme, plutôt que d'une question de programmation. On dirait que vous avez besoin de rechercher des algorithmes de clustering: la force brute sera toujours trop lente, quelle que soit la langue. –

Répondre

0

Il existe seulement un ensemble limité de points de vente. Plutôt que d'utiliser la distance d'édition, calculez une matrice de similarité POS-POS juste une fois. Vous pouvez même vouloir éditer ces matrices désirées, par ex. faire deux tags POS identiques ou augmenter la différence de deux tags. Stockez cela dans un tableau numpy, convertissez tous vos vecteurs en index, puis calculez les similarités à l'aide de cette table de recherche. Pour des raisons de performances, utilisez numpy si possible et écrivez le code critique de performance dans Cython car l'interpréteur Python est très lent.