0

Je recherche des algorithmes de chaîne floue pour l'exemple suivant: dans une base de données de noms existants, associez les entrées au nom le mieux adapté si la précision de correspondance est supérieure au seuil d'entrée (par exemple 90%), ou NA sinonAlgorithmes de correspondance de chaîne approximative pour les noms

database = [James Bond, Michael Smith] 

entrée

James L Bond->James Bond 
JBondL->James Bond 
Bond,James->James Bond 
BandJamesk->James Bond 
Jenny,Bond->N/A 

Actuellement, la plupart des algorithmes comme Levenstein et ceux basés sur phonétiques comme Soundex ne peuvent pas correspondre aux noms inversés comme BondJames. Jusqu'à présent, cosinus et Jacquard donnent les meilleurs résultats, mais je cherche plus, afin que je puisse choisir le meilleur ou éventuellement combiner des algorithmes.

Répondre

3

Étant donné vos exemples, je considérerais:

  • séparation n1 - le nom dans l'entrée et n2 - un nom dans la base de données en mots (par délimiteurs et lettres majuscules): n1 -> {u1, u2, ...}, n2 -> {v1, v2, ...}
  • Trouver la permutation de l'ordre des mots dans n2 qui minimise s = somme (L (u, v)) où L est la distance de Levenshtein.
  • Sélection de l'entrée de la base de données qui minimise s.

Lorsque le nombre de mots L1 et le nombre de mots L2 ne correspondent pas - vous devez « pénaliser » s.

+0

bonne idée Lior, merci. Une question: comment voulez-vous séparer jamesbond, sans le bénéfice des virgules ou des majuscules? – user1569897

+0

Une façon que je pourrais penser est peut-être un algorithme qui permet 1-2 échanges/relocalisations de groupes de caractères sans aucune pénalité. (Max 2 parce qu'il pourrait y avoir trois groupes -herbertbondjames, par exemple) Je ne peux pas penser à un algorithme existant qui fait cela, ou à tout autre algorithme qui peut prendre en compte ce critère de bondjames -> jamesbond. – user1569897

+0

Lorsque le nom de l'entrée a un mot, je concaténerais les mots composant le nom de la base de données dans différentes permutations, au lieu de le séparer, et minimiser L (u, v1 || v2 || ...)). ('' || 'indique une concaténation). –