2017-10-15 3 views
1

J'écris sur la fonction qui essaie d'extraire le nom d'utilisateur de CV.vérifier la présence de la chaîne dans la boucle imbriquée

La plupart du temps, la première ligne contient le nom d'utilisateur mais parfois aussi mes étudiants écrivent CV, titre CV en première ligne. Donc, je veux ignorer cette ligne et vérifier la ligne suivante.

IF ligne sans saut mots dans la première ligne de quatre CV se produit, alors le considérer comme un nom de personne

def name_extractor(self, text): 
    skip_words = ['CURRICULUM', 'VITAE', 'resume'] 
    text_lines = text.split('\n') 
    name = '' 
    # pdb.set_trace()   
    for i in range(0,4): 
     if text_lines[i]: 
      for word in skip_words: 
       if word.lower() in text_lines[i]: 
        break 
       else: 
        name = text.split('\n')[i] 
        # print name 
        return name   
    return name 

Ici, j'ai essayé d'écrire la logique, mais il ne fonctionne pas correctement. S'il y a une première ligne comme résumé, même cela donne le nom comme résumé.

Comment puis-je ignorer les lignes de début qui ont un mot dans skip_list et imprimer le nom correct.

J'apprécie toute aide à ce sujet.

+0

Quelle est votre question? –

+0

@CarlosMonroyNieblas: désolé, mis à jour la question. S'il vous plaît laissez-moi savoir si toujours pas clair – honeyboney

+0

Exemples de fichiers que vous recherchez les noms, serait utile pour produire un meilleur code! –

Répondre

0

La principale raison pour laquelle votre code ne fonctionne pas comme prévu est que la fonction renvoie dès que l'un des mots-clés n'est pas dans une ligne de texte.

Vous avez besoin d'aide pour les principes de base plus qu'une réponse à cette question. Essayez de coller votre code dans pythontutor.com et d'observer l'exécution ligne par ligne.

  • Votre code n'utilise pas (et n'a pas besoin) d'une approche orientée objet. Le paramètre self est utilisé lorsque votre fonction def est une méthode définie dans class. Le fait que vous n'utilisiez jamais self dans votre définition de fonction est un signe que vous pouvez écrire une définition de fonction régulière, en dehors d'une définition de classe. Supprimez le paramètre self.

  • Vous ne comparez pas les minuscules aux minuscules. Votre code transforme les éléments de la liste codée en dur en minuscules, mais le paramètre text reste en l'état tel quel. Utilisez des minuscules dans votre constante skip_words et appelez le lower sur le texte transmis à la fonction plutôt que d'appeler lower sur la constante.

  • Le code Python est généralement plus lisible si vous parcourez les éléments de liste eux-mêmes. Utilisez une variable pour représenter chaque élément plutôt qu'un compteur pour accéder aux éléments de la liste. Cela élimine également le besoin de l'instruction if que vous utilisez pour vérifier l'existence des quatre premières lignes.

  • Il est généralement préférable d'utiliser une seule instruction return dans une fonction.

  • break va sortir de la boucle for, et je pense que vous avez l'intention continue qui sauter le reste de la boucle et passer à la prochaine itération.

    def name_extractor(text): 
        skip_words = ['curriculum', 'vitae', 'resume'] 
        text_lines = text.split('\n') 
        for line in text_lines[:4]: 
         line_words = set(line.lower().split(' ')) 
         if not line_words.intersection(skip_words): 
          return line 
        return ''