6
votes

Des noms similaires dans une liste énorme

J'ai une base de données de 50 000 + entreprises constamment mises à jour (200+ par mois).

Le problème est un énorme problème avec le contenu répété car les noms ne sont pas toujours stricts / corrects:

"Super 1 magasin"
"Super un magasin"
"SUPER 1 MAGASINS"

edit : un autre exemple .. qui a probablement besoin d'une approche différente:
"Pizza d'Amy" <----> "Pizza bio par Amy et Société"

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 ...
Ici, je dois numériser 50 000 noms peut être chacun avec chacun et calculer là ... Note générale de la similarité ...

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.


3 Réponses :


-1
votes

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


5 commentaires

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.



1
votes

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'), '%')


0 commentaires

3
votes

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 similaire_text et Soundex comme d'autres personnes ont dit dans les commentaires . Quelque chose comme ceci: xxx

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).

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).


2 commentaires

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.