Извлечение имен пользователей из текста с использованием Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь извлекать имена пользователей из текста с использованием Python. Это распространенная задача в социальных сетях и приложениях мгновенного сообщения, где символ @ часто используется для упоминания кого-то.

👀 Предварительный просмотр

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

🎯 Задачи

В этом проекте вы научитесь:

  • Как реализовать функцию after_at для извлечения имен пользователей из заданного текста
  • Как обрабатывать граничные случаи и оптимизировать производительность функции
  • Как тестировать функцию с различными сценариями входных данных

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться, как использовать Python для разбора и извлечения соответствующей информации из текста
  • Разработать надежную и эффективную функцию для извлечения имен пользователей из текста
  • Применить свои навыки решения задач для улучшения функциональности функции
  • Полностью протестировать свой код, чтобы убедиться, что он работает как ожидается

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/sets("Sets") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/strings -.-> lab-302751{{"Извлечение имен пользователей из текста с использованием Python"}} python/lists -.-> lab-302751{{"Извлечение имен пользователей из текста с использованием Python"}} python/sets -.-> lab-302751{{"Извлечение имен пользователей из текста с использованием Python"}} python/function_definition -.-> lab-302751{{"Извлечение имен пользователей из текста с использованием Python"}} python/file_operations -.-> lab-302751{{"Извлечение имен пользователей из текста с использованием Python"}} end

Реализация функции after_at

В этом шаге вы реализуете функцию after_at для извлечения имен пользователей из заданного текста.

  1. Откройте файл parse_username.py в вашем редакторе кода.

  2. Найдите определение функции after_at.

  3. Функция должна принимать на вход строку text, которая может быть пустой.

  4. Внутри функции инициализируйте пустой список под названием usernames, чтобы хранить извлеченные имена пользователей.

  5. Найдите индекс первого вхождения символа @ в строке text с использованием метода find(), и сохраните его в переменной at_index.

  6. Пока at_index не равен -1 (что означает, что символ @ был найден):

    • Инициализируйте пустую строку под названием username.
    • Переберите символы в строке text начиная от индекса после символа @.
    • Для каждого символа проверьте, является ли он алфавитно-цифровым или подчеркиванием с использованием методов isalnum() и isalpha().
    • Если символ допустим, добавьте его в строку username.
    • Если символ недопустим, прервите цикл.
    • Если username не пустая, добавьте ее в список usernames.
    • Найдите следующее вхождение символа @ в строке text начиная от индекса после предыдущего символа @.
  7. После цикла удалите любые дубликаты имен пользователей из списка usernames с использованием функции set().

  8. Отсортируйте список usernames в порядке убывания на основе количества каждого имени пользователя с использованием функции sorted() с пользовательской функцией ключа.

  9. Верните отсортированный список usernames.

Ваш завершенный код функции after_at должен выглядеть так:

def after_at(text):
    usernames = []
    at_index = text.find("@")  ## Найти индекс первого вхождения "@"
    while at_index!= -1:  ## Продолжать цикл, пока не будут найдены все "@"
        username = ""
        for char in text[
            at_index + 1 :
        ]:  ## Перебрать символы после "@"
            if (
                char.isalnum() or char == "_" or char.isalpha()
            ):  ## Проверить, является ли символ алфавитно-цифровым или подчеркиванием
                username += char  ## Добавить символ к имени пользователя
            else:
                break  ## Если символ не алфавитно-цифровой или не подчеркивание, прекратить добавлять символы к имени пользователя
        if username:
            usernames.append(username)  ## Добавить извлеченное имя пользователя в список
        at_index = text.find(
            "@", at_index + 1
        )  ## Найти следующий "@" начиная от следующего индекса

    ## Удалить дубликаты и отсортировать по количеству вхождений в порядке убывания
    usernames = sorted(
        list(set(usernames)), key=lambda x: usernames.count(x), reverse=True
    )

    return usernames

Тестирование функции after_at

В этом шаге вы будете тестировать функцию after_at с помощью предоставленных примеров.

  1. Откройте файл parse_username.py в вашем редакторе кода.
  2. Найдите блок if __name__ == "__main__": внизу файла.
  3. Внутри этого блока добавьте следующий код для тестирования функции after_at:
## Пример 1
print(after_at("@LabEx @labex I won in the @ competition"))
## Пример 2
print(after_at("@LabEx@labex I won in the @ competition"))
## Пример 3
print(after_at("@labex @LabEx I won in the @LabEx competition"))
## Пример 4
print(after_at("@!LabEx @labex I won in the competition"))
## Пример 5
print(after_at("I won in the competition@"))
## Пример 6
print(after_at("LabEx@!"))
## Пример 7
print(after_at("@!@LabEx @labex I won in the @LabEx competition @experiment"))
  1. Сохраните файл parse_username.py.
  2. Запустите файл parse_username.py в вашей терминале или командной строке с использованием следующей команды:
python parse_username.py
  1. Проверьте, что вывод соответствует ожидаемым результатам, предоставленным в задании.
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']
✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.