J'ai une base de données de 50 000 + entreprises constamment mises à jour (200+ par mois). P>
Le problème est un énorme problème avec le contenu répété car les noms edit strong>: un autre exemple .. qui a probablement besoin d'une approche différente: Nous avons besoin d'un outil pour analyser les données pour des noms similaires.
J'ai une certaine expérience avec distance de levenshtein distance et LCS Mais ils fonctionnent bien pour comparer si 2 cordes sont similaires ... J'ai besoin de conseils Comment attaquer ce problème Les résultats attendus sont d'avoir une liste de 10 à 20 groupes de noms très similaires, et d'ajuster davantage la sensibilité pour plus de résultats. P>
"Super 1 magasin"
"Super un magasin"
"SUPER 1 MAGASINS" P>
"Pizza d'Amy" <----> "Pizza bio par Amy et Société" P>
Ici, je dois numériser 50 000 noms peut être chacun avec chacun et calculer là ... Note générale de la similarité ... P>
3 Réponses :
Je pense que vous devriez passer à travers cette liste d'entreprises manuellement et créer une table avec une entrée unique pour chaque entreprise. Ensuite, avez une table à plusieurs à une fois où vous référence aux différents noms à la bonne compagnie. Je pense que c'est ce que c'est ce que l'on entend par la normalisation em>. Table: Sociétés CODE>: P>
|id|company_id|name
|1 |1 |Super 1 Store
|2 |1 |Super One Store
|3 |1 |Super 1 Stores
Désolé, je ne pense pas que nous avons suffisamment d'informations sur les activités de l'OP afin de dicter qu'une tâche informatique devrait être faite manuellement. À moins que l'entreprise n'utilise des formulaires pré-imprimés, permettant aux clients de passer des données à la main se retrouvera toujours conformément à la situation de l'OP.
@ user2310289 Je dis simplement que leventstein et Soundex donneront probablement beaucoup de résultats erronés (deux sociétés complètement différentes qui ne diffèrent que par 2 lettres) qui nécessiteraient toujours un nettoyage manuel d'une manière ou d'une autre.
En pensant à quelque chose comme une entreprise d'abonnement à magazines où le magazine contient une carte postale vierge pour que l'utilisateur se renseigne. Sauf si le programme de saisie de données a le système SMARTS, SoundSEn et Soundex et votre approche échouera toujours. Si vous pouvez changer votre réponse pour refléter cela, je vous éviterai.
@ user2310289 N'hésitez pas à modifier ma réponse car je ne comprends pas tout à fait ce que vous voulez.
Bonjour Silkfire, je sens que je suis en désaccord que vous suggérez un processus manuel. Il n'y a pas de limites pour la stupidité des personnes, il ne peut pas être normalisé. Essayer de venir avec (manuellement) une liste de corruptions possibles d'un nom est infinie.
purement dépend de la quantité de si nous devrions tolérer pour considérer 2 chaînes comme similaires. Soundex peut être utile aussi bien
select * from ( select 'Super One Store' as c union select 'Super 1 Store' as c union select 'Super One Stores' as c union select 'different one' as c union select 'supers stores' as c ) tmp where soundex(c) like CONCAT('%', soundex('Super store'), '%') or soundex(c) like CONCAT('%', soundex('Super one store'), '%')
J'ai eu un problème similaire il y a un an il y a environ un an, et si je me souviens bien, j'ai résolu (plus ou moins) à l'aide de Dans mon cas, utilisez un pourcentage de 66% pour déterminer les sociétés sont les mêmes (dans ce cas, n'entrez pas dans la base de données, mais envoyez-moi un email à votre avis. Vérifiez si c'est correct). P> Après quelques mois avec ces solutions, je décide d'utiliser une sorte de code unique pour les entreprises (CIF dans mon cas car est unique par la société ici en Espagne). P > p> similaire_text code> et
Soundex code> comme d'autres personnes ont dit dans les commentaires . Quelque chose comme ceci:
Cela semble cool sont la ponctuation "" "" `ignoré dans Soundex? Qu'en est-il de la "pizza d'Amy" <-> "pizza biologique d'Amy et de l'entreprise" ... Je pense que c'est un autre type de problème
Oui, cela fonctionne pour beaucoup d'entreprises mais pas pour tous, c'est pourquoi j'envoie un email à moi-même pour vérifier si la comparaison est correcte. Parfois, je dois insérer les entreprises manuellement, c'est pourquoi, après quelques mois, je modifie l'enregistrement et la force pour insérer le CIF de la société afin que je puisse comparer le CIF dans BD et assurer que la Comany est la même ou non.
intéressant! avez-vous essayé le
similaire_text () code> fonction A >?
La réponse facile est d'abord normalisée après la carte / réduite, mais je suppose que vous recherchez quelque chose de plus complexe.
Je ne l'ai jamais utilisé, mais qu'en est-il de Soundex?
Levenshtein, Soundex et similaire_text sont plus ou moins identiques, avec différents algorithmes
@mcuadros pouvez-vous donner un exemple?
Ma méthode est "à la main", vous devez créer vos propres règles pour normaliser les noms, pourquoi les variantes communes, ce sera la manière la plus précise, mais avec Soundex / Levenshtein sera la solution facile.
Si vous pouvez modifier l'interface utilisée pour insérer de nouvelles entreprises, je vous suggère de commencer à utiliser des conseils pour réduire (au moins par un bit) les différents noms de la même entreprise. Après cela, travailler avec similaire_text / Levenshtein / Soundex devrait être quelque chose que vous devriez faire chaque semaine / quelques semaines.