2016-08-08 2 views
-3

Quelle devrait être l'implémentation optimale pour une meilleure correspondance en python.meilleur algorithme de correspondance en python

J'ai un fichier txt qui a des codes de pays mappés par ex.

CODES NOM

123 ABC

1234 DEF

1235 GHI

124 JKL

1241 MNO

Ce fichier txt est grand (13500 dossiers) I Je mets juste un échantillon. En outre, j'ai quelques fichiers CDR où j'obtiens le code de pays (numérique) dans chaque enregistrement (ligne) que je veux convertir en nom de pays. Par exemple, si l'enregistrement CDR contient le code de pays "1234", le nom de pays serait "DEF", s'il est "1235", le nom du pays serait "GHI" mais si le pays le code est "1236" alors la correspondance parfaite échoue et il devrait revenir à "ABC" puisque "123" est disponible.

Je ne sais pas s'il existe un nom standard pour cette recherche. comme la recherche gourmande dans les expressions régulières.

Quelle peut être la meilleure implémentation pour cette recherche aimable, puisque les fichiers CDR sont vraiment gros (jusqu'à 25GB).

+0

Il existe de nombreuses approches pour se rapprocher de l'appariement. Le «meilleur» pour vous dépend de vos critères, que vous ne divulguez pas. Vote pour fermer comme trop large; pourrait également être floue, ou principalement basée sur l'opinion. S'il vous plaît voir le [aide] pour plus de détails. – tripleee

+0

Collez le code que vous essayez ici. – Trimax

+0

@ Trimax - et bien je dois encore coder pour le même. Je pensais juste à avoir une approche. Ce que j'ai pensé jusqu'ici est, triant (par des codes de pays) le contenu du fichier txt dans une liste de tuple. Puis recherche avec le code du pays complet dans la liste, si la correspondance échoue puis la recherche à nouveau la liste en supprimant le dernier chiffre, et ainsi de suite. Y a-t-il un meilleur moyen? – jagpreet

Répondre

-1

Les dictionnaires sont le moyen le plus simple d'implémenter ceci. Voir ci-dessous la solution:

  1. Convertir

123 ABC

1234 DEF

1235 GHI

124 JKL

1241 MNO

à {1241: 'MNO', 1234: 'DEF', 123: 'ABC', 124: 'JKL', 1235: 'GHI'}

  1. Lire fichier CDR avec les codes du pays, puis chercher dans le dictionnaire
  2. si le code n'est pas trouvé, supprimer la place de l'unité et rechercher à nouveau.
  3. Pas encore implantées- print « Aucun résultat trouvé »

est Ci-dessous le code de la excursionnistes

country_name = {} 
with open('U:\countrynames.csv','r') as f: 
    for line in f: 
     linesplit = line.split() 
     country_name[int(linesplit[0])] = linesplit[1] 

with open('U:\countrycodesCDR.csv','r') as f: 
    for line in f: 
     country_code = int(line.strip()) 
     while country_code != 0: 
      if country_code in country_name: 
       print country_name[country_code] 
       break 
      else: 
       country_code /=10 

     else: 
      print 'No match found'