Extrair Nomes de Usuário de Texto com Python

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como extrair nomes de usuário de texto usando Python. Esta é uma tarefa comum em mídias sociais e aplicativos de mensagens instantâneas, onde o caractere @ é frequentemente usado para mencionar alguém.

👀 Visualização

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

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como implementar a função after_at para extrair nomes de usuário de um determinado texto
  • Como lidar com casos extremos (edge cases) e otimizar o desempenho da função
  • Como testar a função com vários cenários de entrada

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Entender como usar Python para analisar e extrair informações relevantes de texto
  • Desenvolver uma função robusta e eficiente para extrair nomes de usuário de texto
  • Aplicar suas habilidades de resolução de problemas para aprimorar a funcionalidade da função
  • Testar seu código minuciosamente para garantir que ele funcione conforme o esperado

Implementar a Função after_at

Nesta etapa, você implementará a função after_at para extrair nomes de usuário de um determinado texto.

  1. Abra o arquivo parse_username.py em seu editor de código.

  2. Localize a definição da função after_at.

  3. A função deve receber uma string text como entrada, que pode estar vazia.

  4. Dentro da função, inicialize uma lista vazia chamada usernames para armazenar os nomes de usuário extraídos.

  5. Encontre o índice da primeira ocorrência do caractere @ no text usando o método find() e armazene-o na variável at_index.

  6. Enquanto at_index não for -1 (o que significa que o caractere @ foi encontrado):

    • Inicialize uma string vazia chamada username.
    • Itere sobre os caracteres na string text, começando do índice após o caractere @.
    • Para cada caractere, verifique se ele é alfanumérico ou um sublinhado usando os métodos isalnum() e isalpha().
    • Se o caractere for válido, adicione-o à string username.
    • Se o caractere não for válido, saia do loop.
    • Se o username não estiver vazio, adicione-o à lista usernames.
    • Encontre a próxima ocorrência do caractere @ na string text, começando do índice após o caractere @ anterior.
  7. Após o loop, remova quaisquer nomes de usuário duplicados da lista usernames usando a função set().

  8. Ordene a lista usernames em ordem decrescente com base na contagem de cada nome de usuário usando a função sorted() com uma função chave (key function) personalizada.

  9. Retorne a lista usernames ordenada.

Sua função after_at completa deve ser semelhante a esta:

def after_at(text):
    usernames = []
    at_index = text.find("@")  ## Encontre o índice da primeira ocorrência de "@"
    while at_index != -1:  ## Continue o loop até que não sejam encontrados mais símbolos "@"
        username = ""
        for char in text[
            at_index + 1 :
        ]:  ## Itere sobre os caracteres após o símbolo "@"
            if (
                char.isalnum() or char == "_" or char.isalpha()
            ):  ## Verifique se o caractere é alfanumérico ou sublinhado
                username += char  ## Adicione o caractere ao nome de usuário
            else:
                break  ## Se o caractere não for alfanumérico ou sublinhado, pare de adicionar caracteres ao nome de usuário
        if username:
            usernames.append(username)  ## Adicione o nome de usuário extraído à lista
        at_index = text.find(
            "@", at_index + 1
        )  ## Encontre o próximo símbolo "@" começando do próximo índice

    ## Remova duplicatas e ordene pela contagem de ocorrências em ordem decrescente
    usernames = sorted(
        list(set(usernames)), key=lambda x: usernames.count(x), reverse=True
    )

    return usernames
✨ Verificar Solução e Praticar

Testar a Função after_at

Nesta etapa, você testará a função after_at com os exemplos fornecidos.

  1. Abra o arquivo parse_username.py em seu editor de código.
  2. Localize o bloco if __name__ == "__main__": na parte inferior do arquivo.
  3. Dentro do bloco, adicione o seguinte código para testar a função after_at:
## Example 1
print(after_at("@LabEx @labex I won in the @ competition"))
## Example 2
print(after_at("@LabEx@labex I won in the @ competition"))
## Example 3
print(after_at("@labex @LabEx I won in the @LabEx competition"))
## Example 4
print(after_at("@!LabEx @labex I won in the competition"))
## Example 5
print(after_at("I won in the competition@"))
## Example 6
print(after_at("LabEx@!"))
## Example 7
print(after_at("@!@LabEx @labex I won in the @LabEx competition @experiment"))
  1. Salve o arquivo parse_username.py.
  2. Execute o arquivo parse_username.py em seu terminal ou prompt de comando usando o seguinte comando:
python parse_username.py
  1. Verifique se a saída corresponde aos resultados esperados fornecidos no desafio.
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']
✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.