Question

Je sais que cette question a été posée beaucoup de temps. Je veux une suggestion sur laquelle l'algorithme convient pour la correspondance de chaîne approximative.

L'application est spécifiquement pour le nom de l'entreprise correspondant à seulement et rien d'autre.

Le plus grand défi est probablement le nom final de l'entreprise et une partie courte partie nommée Exemple: 1. companyA vs ltd companyA pty pty. ltd. vs companyA 2. Ingénierie WES vs W.E.S. Ingénierie (occurance extrêmement rare)

Pensez-vous que Levenshtein Modifier La distance est suffisante?

J'utilise C #

Cordialement, Max

Était-ce utile?

La solution

Il existe différentes métriques de distance de chaîne que vous pouvez utiliser.

Je recommande Jaro-Winkler . Contrairement à modifier distance où le résultat d'une comparaison est en unités distinctes de modifications, JW vous donne un score 0-1. Il est particulièrement adapté pour les noms propres. Regardez aussi cette belle tutoriel et cette question SO.

Je n'ai pas travaillé avec C #, mais voici quelques implémentations de JW J'ai trouvé en ligne:

Impl 1 (Ils ont une version DOT NET aussi si vous regardez la liste des fichiers)

Impl 2


Si vous voulez si vous calculez faire un peu correspondant plus sophistiqué, vous pouvez essayer de faire une normalisation personnalisée des formes de mots apparaissant souvent dans les noms de société tels que ltd/limited, inc/incorporated, corp/corporation pour tenir compte de la casse, des abréviations, etc. De cette façon,

  

distance (normalize("foo corp."), normalize("FOO CORPORATION") )

vous devriez obtenir le résultat à 0 au lieu de 14 (ce qui est ce que vous obtenez si vous calculé modifier distance de levenshtein).

Autres conseils

Oui, la distance Levenshtein convient à cet effet. Il fonctionnera 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 .

Dans ces exemples simple, il suffit de retirer tous les caractères non alphanumériques vous donne une correspondance, et est le plus facile à faire que vous pouvez pré-calculer les données de chaque côté, puis faites un droit égal correspondance qui sera un beaucoup plus rapide que la coupe démultiplicateur et le calcul de la distance d'édition.

J'ai fourni ma réponse déjà dans une autre question.

https://stackoverflow.com/a/30120166/2282794

Je travaille sur le système d'échelle très grande avec les exigences correspondant à des noms similaires que vous avez parlé. Nom correspondant est pas très simple et l'ordre des noms et prénoms peut être différent. algorithmes de correspondance des noms flous simples échouent lamentablement dans de tels scénarios.

Si nous voulons juste parler des algorithmes de recherche approximative, alors il y a beaucoup. Peu d'entre eux sont: Jaro-Winkler, Edit distance (Levenshtein), similitude Jaccard, des algorithmes basés Soundex / Phonétique etc. Un googler simple serait de nous donner tous les détails. Vous pouvez mettre en œuvre tous en C #

est Irony, ils travaillent pendant que vous essayez de faire correspondre deux chaînes d'entrée données. D'accord théoriquement et de démontrer la façon dont fonctionne la chaîne floue correspondant ou approximative.

Toutefois, le point grossièrement sous-estimés est, comment pouvons-nous utiliser les mêmes dans les paramètres de production. Pas tout le monde que je connais qui scouting pour un algorithme de correspondance approximative chaîne savait comment ils pourraient résoudre le même dans l'environnement de production.

Je pourrais viens de parler Lucene qui est spécifique à Java mais il est Lucene pour .Net aussi.

https://lucenenet.apache.org/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top