L'appariement approximatif de chaînes
Je sais que cette question a été demandé beaucoup de temps.
Je veux une suggestion sur l'algorithme est adapté pour l'appariement approximatif de chaînes.
L'application est spécialement le nom de l'entreprise correspondant seulement et rien d'autre.
Le plus grand défi est probablement l'entreprise la fin de la partie du nom et de courte partie nommée
Exemple:
1. companyA pty ltd vs companyA pty. ltd. vs companyA
2. WES Ingénierie vs W. E. S. de l'Ingénierie (extrêmement rare occurance)
Pensez-vous de Levenshtein Distance d'Édition est-elle adéquate?
Je suis à l'aide de C#
Ce qui concerne,
Max
Je pense que je vais supprimer tous les dot char et ensuite utiliser la distance de levenshtein par la suite. Juste une remarque, j'ai trouvé un autre algorithme est similaire, mais plus rapide que levenshtein, le gars du nom de l'algorithme sift3. Très intéressante.
OriginalL'auteur Max | 2010-11-18
Vous devez vous connecter pour publier un commentaire.
Il existe différents de la chaîne de la distance de mesures que vous pouvez utiliser.
Je recommanderais Jaro-Winkler. Contrairement à modifier la distance où le résultat d'une comparaison est en unités discrètes de modifications, JW vous donne un score de 0-1. Il est particulièrement adapté pour les noms propres. Aussi regarder ce tutoriel de nice et cette SORTE de question.
Je n'ai pas travaillé avec C#, mais voici quelques implémentations de JW j'ai trouvé en ligne:
Impl 1 (Ils ont une DOT NET version trop si vous regardez la liste des fichiers)
Impl 2
Si vous voulez faire un peu plus sophistiqué de correspondance, vous pouvez essayer de faire un peu personnalisé normalisation des formes de mots couramment présentes dans les noms de société tels que
ltd/limited, inc/incorporated, corp/corporation
de compte pour le compte de la casse, abréviations, etc. De cette façon, si vous calculezvous devriez obtenir le résultat à 0 au lieu de 14 (qui est ce que vous obtenez si vous avez calculé levenshtein edit-distance).
OriginalL'auteur hashable
Oui, Levenshtein est adapté pour cela. Il va travailler pour tous ceux que vous avez énumérés au moins.
Vous pouvez également utiliser éventuellement Soundex, mais je ne pense pas que vous en aurez besoin.
OriginalL'auteur Peter Alexander
Dans ces exemples simples, simplement en enlevant tous les non-caractères alpha-numériques vous donne un match, et est le plus facile à faire que vous pouvez pré-calculer les données de chaque côté, puis faire un droit égal match qui sera beaucoup plus rapide que de la croix de multiplication et le calcul de la distance d'édition.
OriginalL'auteur cjk
J'ai fourni ma réponse est déjà dans une autre question.
https://stackoverflow.com/a/30120166/2282794
J'ai travaillé sur de très gros système avec les mêmes nom d'appariement des exigences dont vous avez parlé.
De correspondance de nom n'est pas très simple, et ce afin de noms et de prénoms peuvent être différentes.
Simple floue nom des algorithmes d'appariement échoue lamentablement dans de tels scénarios.
Si nous voulons juste parler de la durée Approximative de la Chaîne des algorithmes d'appariement, il ya beaucoup de. Quelques-uns d'entre eux sont: Jaro-Winkler, distance d'Édition(Levenshtein), la similarité de Jaccard, 'Soundex' /Phonétique basée sur des algorithmes etc. Une simple recherche sur google nous donner tous les détails.
Vous pouvez mettre en œuvre tous en C#
Ironie est, ils travaillent pendant que vous essayez de faire correspondre deux chaînes d'entrée. Bon, théoriquement, et de démontrer la façon floue ou approximatif de la correspondance de chaîne fonctionne.
Cependant, grossièrement sous-estimées point est, comment pouvons-nous utiliser le même dans les paramètres de production. Pas tout le monde que je connais qui ont été le scoutisme pour une évaluation approximative de la chaîne correspondant à l'algorithme savait comment ils pourraient résoudre le même dans l'environnement de production.
J'ai peut-être parlé de Lucene, qui est spécifique à Java, mais il y a Lucene .Net aussi.
https://lucenenet.apache.org/
OriginalL'auteur Dayanand Gowda