J'ai entendu parler de la regroupement de données similaires. Je veux savoir comment cela fonctionne dans le cas spécifique de la chaîne.
J'ai une table avec plus que 100 000 mots différents.
Je veux identifier le même mot avec quelques différences (par exemple: house, house!!, hooouse, HoUse, @house, "house", etc...
).
Ce qui est nécessaire pour identifier la similitude et le groupe chaque mot dans un cluster? Quel algorithme est plus recommandé pour cela?
Comprendre ce que la clustering imagine une carte géographique. Vous pouvez voir de nombreux objets distincts (tels que des maisons). Certains d'entre eux sont proches les uns des autres et d'autres sont loin. Sur cette base, vous pouvez diviser tous les objets en groupes (tels que les villes). Les algorithmes de regroupement font exactement cette chose - ils vous permettent de scinder vos données en groupes sans précédent Spécification des frontières.
Tous les algorithmes de regroupement sont basés sur le distance (ou vraisemblance) entre 2 objets. Sur la carte géographique, il s'agit d'une distance normale entre 2 maisons, dans un espace multidimensionnel, il peut s'agir de la distance euclidienne (en fait, la distance entre 2 maisons sur la carte est également une distance euclidienne). Pour la comparaison des chaînes, vous devez utiliser quelque chose de différent. 2 bons choix ici sont Hamming et distance Levenshtein . Dans votre cas particulier La distance de Levenshtein Si plus préférable (distance de Hamming ne fonctionne qu'avec les cordes de la même taille).
Vous pouvez maintenant utiliser l'un des algorithmes de clustering existants. Il y en a beaucoup, mais tous ne peuvent pas tous répondre à vos besoins. Par exemple, pure k-moyen, déjà mentionné ici vous aidera à peine à vous aider, car il nécessite un nombre initial de groupes à trouver, et avec un grand dictionnaire de chaînes, il peut être 100, 200 500, 10000 - vous ne connaissez tout simplement pas le nombre . Donc, d'autres algorithmes peuvent être plus appropriés.
L'un d'entre eux est Attente maximisation algorithme. Son avantage est qu'il peut trouver un nombre de clusters automatiquement. Cependant, dans la pratique, il donne souvent moins de résultats précis que les autres algorithmes, il est donc normal d'utiliser k-moyen sur le dessus de EM, c'est-à-dire d'abord le nombre de clusters et de leurs centres avec EM puis utilisez K-moyen pour ajuster le résultat.
Une autre branche possible des algorithmes pouvant convenir à votre tâche, est clustering hiérarchique . Le résultat de l'analyse de grappes dans ce cas n'est pas un ensemble de groupes indépendants, mais plutôt d'arborescence (hiérarchie), où plusieurs clusters plus petits sont regroupés en une plus grande, et toutes les clusters font finalement une partie d'un gros cluster. Dans votre cas, cela signifie que tous les mots sont similaires aux autres jusqu'à une certaine mesure.
Il existe un package appelé stringdist qui permet une comparaison de chaîne à l'aide de plusieurs méthodes différentes . Copypyposant de cette page:
Cela vous donnera la distance. Vous n'avez peut-être pas besoin d'effectuer une analyse de grappes, peut-être trier par la distance de cordes elle-même suffit. J'ai créé un script pour fournir la fonctionnalité de base ici ... N'hésitez pas à l'améliorer au besoin.