2010-09-14 27 views
2

Je suis en train de développer un site de comparaison d'achats, et le projet est dans une phase très avancée. Nous indexons 50 millions de produits par jour en utilisant les flux marchands de divers réseaux affiliés. La plupart des problèmes que j'ai rencontrés sont déjà résolus, y compris la majorité des goulots d'étranglement.Algorithme précis pour normaliser les termes de taxonomie?

Quel est mon problème: S'il vous plaît, tout d'abord, nous utilisons apache solr avec drupal MAIS, ce problème n'est pas spécifique à drupal ou solr, si vous ne les connaissez pas, cela n'a pas d'importance.

Nous recevons des flux de produits de plus de 2000 marchands différents, et ces flux sont en désordre. Ils n'ont pas de modèle spécifique, chaque marchand envoie les flux comme ils le veulent. Nous avons déjà résolu beaucoup de problèmes à ce sujet, mais il en reste un. Normalisation des termes de taxonomie pour la fonctionnalité de navigation à facettes.

Supposons que j'ai une facette de navigation «Narrow by Brands» sur mon site Web. Supposons maintenant que 100 marchands proposent des produits de Microsoft. Maintenant vient le problème. Certains commerçants mettent dans la colonne "Marques" du flux de données "Microsoft", d'autres "Microsoft, Inc.", d'autres "Microsoft Corporation" d'autres "Produits de Microsoft", etc ... il n'y a pas de modèle spécifique entre les commerçants et les pires , certains commerçants individuels sont si bâclés qu'ils ont des chaînes différentes pour la même marque DANS LE MÊME DON DE DONNÉES.

Nous ne voulons pas que toutes ces marques différentes apparaissent dans la navigation. Nous avons une solution manuelle au problème où nous cartographions manuellement les marques importées à la "bonne" marque tableau ("Microsoft Corporation" -> "Microsoft", "Produits de Microsoft" -> "Microsoft", etc.). Nous avons environ 10 000 marques dans la base de données, ce qui est faisable. Le problème est quand il s'agit de choses plus grandes comme "Auteurs". Lorsque nous importons des livres dans le système, il y a plus de 800 000 auteurs et nous avons le même problème, ce qui n'est pas réalisable à la main. Le problème est le même: "Tom Mike Apostol", "Tom M. Apostol", "Apostol, Tom M.", etc ...

Quelqu'un sait-il un bon moyen de résoudre automatiquement ce problème avec un degré acceptable de précision (85% -95% de précision)?

Merci pour votre aide!

Répondre

0

Une idée qui me vient à l'esprit, il est barbante juste une pensée lâche:

  1. Convertir les noms des initiales (dans votre exemple: TMA). Traitez '-' comme des espaces, donc fe. Antoine de Saint-Exupéry serait ADSE. Problème ici est de savoir comment traiter ",", mais il est courant d'avoir un nom de famille avant le prénom, donc juste échanger des positions devrait fonctionner (donc A, TM serait TM, A, se débarrasser de la virgule - TMA).
  2. Filtres auteurs dans la base de données par ces initiales
  3. Pour chaque intitial, si vous avez le nom complet (Tom, Apostol) vérifiez si elle correspond, sinon (M.) considère automatiquement une correspondance.
  4. Si vous voulez une certaine tolérance, vous pouvez comparer les noms avec la distance Levenshtein et tolérer quelques différences (here vous avez l'implémentation d'Oracle)
  5. noms que vous correspondent à traiter les mêmes auteurs, de trouver le nom complet, pour chaque première (T, M, A) vous recherchez vos auteurs filtrés (après l'étape 2) et essayez d'en trouver un sans simplement initial (M.) mais avec le nom entier (Mike), si vous ne pouvez pas en trouver un, utilisez initial. Par conséquent, chacun des exemples que vous avez donnés serait converti en la même valeur, qui serait le nom complet (Tom Mike Apostol).

choses qui en valent la peine d'y penser:
Inclure les correspondances pour les synonymes de nom (serait plus probablement au maximum cent des dossiers, comme Thomas < -> Tom
De cette façon est essentiel d'avoir des initiales valides (pas M au lieu de N etc.)

edit: J'ai codé une telle chose il y a quelque temps, quand j'ai dû identifier une personne par sa signature, en ignorant les problèmes de numérisation, les gens signent parfois par Nom S. Nom, ou NS ou juste par nom de famille (ce qui est une autre chose que vous devriez peut-être considérer dans la solution, pour permettre à l'algorithme d'ignorer le second nom, même si dans votre situation il d être plutôt rare d'ommiter le deuxième nom de quelqu'un que je suppose).