Введение
В этом проекте вы научитесь извлекать имена пользователей из текста с использованием 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 для разбора и извлечения соответствующей информации из текста
- Разработать надежную и эффективную функцию для извлечения имен пользователей из текста
- Применить свои навыки решения задач для улучшения функциональности функции
- Полностью протестировать свой код, чтобы убедиться, что он работает как ожидается
Реализация функции after_at
В этом шаге вы реализуете функцию after_at для извлечения имен пользователей из заданного текста.
Откройте файл
parse_username.pyв вашем редакторе кода.Найдите определение функции
after_at.Функция должна принимать на вход строку
text, которая может быть пустой.Внутри функции инициализируйте пустой список под названием
usernames, чтобы хранить извлеченные имена пользователей.Найдите индекс первого вхождения символа
@в строкеtextс использованием методаfind(), и сохраните его в переменнойat_index.Пока
at_indexне равен-1(что означает, что символ@был найден):- Инициализируйте пустую строку под названием
username. - Переберите символы в строке
textначиная от индекса после символа@. - Для каждого символа проверьте, является ли он алфавитно-цифровым или подчеркиванием с использованием методов
isalnum()иisalpha(). - Если символ допустим, добавьте его в строку
username. - Если символ недопустим, прервите цикл.
- Если
usernameне пустая, добавьте ее в списокusernames. - Найдите следующее вхождение символа
@в строкеtextначиная от индекса после предыдущего символа@.
- Инициализируйте пустую строку под названием
После цикла удалите любые дубликаты имен пользователей из списка
usernamesс использованием функцииset().Отсортируйте список
usernamesв порядке убывания на основе количества каждого имени пользователя с использованием функцииsorted()с пользовательской функцией ключа.Верните отсортированный список
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 с помощью предоставленных примеров.
- Откройте файл
parse_username.pyв вашем редакторе кода. - Найдите блок
if __name__ == "__main__":внизу файла. - Внутри этого блока добавьте следующий код для тестирования функции
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"))
- Сохраните файл
parse_username.py. - Запустите файл
parse_username.pyв вашей терминале или командной строке с использованием следующей команды:
python parse_username.py
- Проверьте, что вывод соответствует ожидаемым результатам, предоставленным в задании.
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



