Extraire des noms d'utilisateur à partir de texte avec Python

PythonBeginner
Pratiquer maintenant

Introduction

Dans ce projet, vous allez apprendre à extraire des noms d'utilisateur à partir de texte à l'aide de Python. C'est une tâche courante dans les applications de médias sociaux et de messagerie instantanée, où le caractère @ est souvent utilisé pour mentionner quelqu'un.

👀 Aperçu

## Exemple 1
>>> from parse_username import after_at
>>> text = "@LabEx @labex I won in the @ competition"
>>> print(after_at(text))
['LabEx', 'labex']
## Exemple 2
>>> text = "@LabEx@labex I won in the @ competition"
>>> print(after_at(text))
['LabEx', 'labex']
## Exemple 3
>>> text = "@labex @LabEx I won in the @LabEx competition"
>>> print(after_at(text))
['LabEx', 'labex']
## Exemple 4
>>> text = "@!LabEx @labex I won in the competition"
>>> print(after_at(text))
['labex']
## Exemple 5
>>> text = "I won in the competition@"
>>> print(after_at(text))
[]
## Exemple 6
>>> text = "LabEx@!"
>>> print(after_at(text))
[]
## Exemple 7
>>> text = "@!@LabEx @labex I won in the @LabEx competition @experiment"
>>> print(after_at(text))
['LabEx', 'experiment', 'labex']

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment implémenter la fonction after_at pour extraire des noms d'utilisateur à partir d'un texte donné
  • Comment gérer les cas limites et optimiser les performances de la fonction
  • Comment tester la fonction avec diverses scénarios d'entrée

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Comprendre comment utiliser Python pour analyser et extraire des informations pertinentes à partir de texte
  • Développer une fonction robuste et efficace pour extraire des noms d'utilisateur à partir de texte
  • Appliquer vos compétences de résolution de problèmes pour améliorer la fonctionnalité de la fonction
  • Tester votre code soigneusement pour vous assurer qu'il fonctionne comme prévu

Implémentez la fonction after_at

Dans cette étape, vous allez implémenter la fonction after_at pour extraire des noms d'utilisateur à partir d'un texte donné.

  1. Ouvrez le fichier parse_username.py dans votre éditeur de code.

  2. Localisez la définition de la fonction after_at.

  3. La fonction devrait prendre une chaîne de caractères text en entrée, qui peut être vide.

  4. À l'intérieur de la fonction, initialisez une liste vide appelée usernames pour stocker les noms d'utilisateur extraits.

  5. Trouvez l'index de la première occurrence du caractère @ dans le text à l'aide de la méthode find(), et stockez-le dans la variable at_index.

  6. Tant que at_index n'est pas -1 (ce qui signifie que le caractère @ a été trouvé) :

    • Initialisez une chaîne de caractères vide appelée username.
    • Itérez sur les caractères de la chaîne text en commençant à partir de l'index après le caractère @.
    • Pour chaque caractère, vérifiez s'il est alphanumérique ou un tiret bas en utilisant les méthodes isalnum() et isalpha().
    • Si le caractère est valide, ajoutez-le à la chaîne username.
    • Si le caractère n'est pas valide, sortez de la boucle.
    • Si username n'est pas vide, ajoutez-le à la liste usernames.
    • Trouvez la suivante occurrence du caractère @ dans la chaîne text en commençant à partir de l'index après la précédente occurrence de @.
  7. Après la boucle, supprimez tous les noms d'utilisateur dupliqués de la liste usernames à l'aide de la fonction set().

  8. Triez la liste usernames par ordre décroissant en fonction du nombre d'occurrences de chaque nom d'utilisateur à l'aide de la fonction sorted() avec une fonction clé personnalisée.

  9. Retournez la liste usernames triée.

Votre fonction after_at complétée devrait ressembler à ceci :

def after_at(text):
    usernames = []
    at_index = text.find("@")  ## Trouvez l'index de la première occurrence de "@"
    while at_index!= -1:  ## Continuez la boucle jusqu'à ce qu'aucun autre symbole "@" ne soit trouvé
        username = ""
        for char in text[
            at_index + 1 :
        ]:  ## Itérez sur les caractères après le symbole "@"
            if (
                char.isalnum() or char == "_" or char.isalpha()
            ):  ## Vérifiez si le caractère est alphanumérique ou un tiret bas
                username += char  ## Ajoutez le caractère au nom d'utilisateur
            else:
                break  ## Si le caractère n'est pas alphanumérique ou un tiret bas, arrêtez d'ajouter des caractères au nom d'utilisateur
        if username:
            usernames.append(username)  ## Ajoutez le nom d'utilisateur extrait à la liste
        at_index = text.find(
            "@", at_index + 1
        )  ## Trouvez le prochain symbole "@" en commençant à partir de l'index suivant

    ## Supprimez les doublons et triez par nombre d'occurrences par ordre décroissant
    usernames = sorted(
        list(set(usernames)), key=lambda x: usernames.count(x), reverse=True
    )

    return usernames

Tester la fonction after_at

Dans cette étape, vous allez tester la fonction after_at avec les exemples fournis.

  1. Ouvrez le fichier parse_username.py dans votre éditeur de code.
  2. Localisez le bloc if __name__ == "__main__": en bas du fichier.
  3. À l'intérieur du bloc, ajoutez le code suivant pour tester la fonction after_at :
## Exemple 1
print(after_at("@LabEx @labex I won in the @ competition"))
## Exemple 2
print(after_at("@LabEx@labex I won in the @ competition"))
## Exemple 3
print(after_at("@labex @LabEx I won in the @LabEx competition"))
## Exemple 4
print(after_at("@!LabEx @labex I won in the competition"))
## Exemple 5
print(after_at("I won in the competition@"))
## Exemple 6
print(after_at("LabEx@!"))
## Exemple 7
print(after_at("@!@LabEx @labex I won in the @LabEx competition @experiment"))
  1. Enregistrez le fichier parse_username.py.
  2. Exécutez le fichier parse_username.py dans votre terminal ou invite de commandes en utilisant la commande suivante :
python parse_username.py
  1. Vérifiez que la sortie correspond aux résultats attendus fournis dans le défi.
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']

Résumé

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.

✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer