Поиск упомянутых дней недели из текста

Допустим, у нас есть текст

Несмотря на то, что мы празднуем Страстную пятницу и Пасхальное воскресенье, такие дни, как «воскресенье» или «среда», не упоминаются.

Обратите внимание, что упомянуты следующие дни недели, Friday, Sunday, Sunday, Wednesday

Нам нужно вывести некоторую переменную weekdays, которая в этом случае будет иметь:

weekdays:    [3,5,7]

Предполагая,

  • Считаем от 1
  • Нам плевать на повторные записи
  • 1 понедельник
  • 7 воскресенье

Какой был бы самый питонический способ приблизиться к такой информации?

Пожалуйста, поделитесь своей попыткой. Найти код для разбора дней недели должно быть легко. Затем преобразовать их в числа.

dfundako 10.01.2023 17:07

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

TAbdiukov 10.01.2023 17:09
the most Pythonic way to approach - ИМО найти работающий метод; оценить его эффективность; точно настройте проблемные детали.
wwii 10.01.2023 18:25
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
3
3
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы использовал регулярное выражение для определения дней недели, которые появляются в тексте, а затем использовал понимание набора, чтобы получить желаемые индексы:

days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
day_indices = dict(zip(days_of_week, range(1, 8)))
expr = "|".join(rf"\b{day}\b" for day in days_of_week)
matches = re.findall(expr, text)
result = sorted(list(set(day_indices[day] for day in matches)))

print(result)

Это выводит:

[3, 5, 7]

Это потрясающая реализация, спасибо!! Очень жаль, что мудрые модераторы решили закрыть вопрос, потому что этот ответ - жемчужина.

TAbdiukov 11.01.2023 22:06

Вы можете создать словарь дней, а затем проверить ключи по словам в заданном тексте.

# Dictonary with days as keys and numbers as values
day_dict = {"Monday": 1, "Tuesday": 2, "Wednesday":3 }
text = "Even though we celebrate Good Friday and Easter Sunday, there is no mention of days such as 'Sunday' or 'Wednesday' in the Bible."
res=[]
# loop over words in text
for word in text.split(' '):
    # get dict value based on word
    a = day_dict.get(word)
    # if word exists in dict and is not yet in your "result" --> add it
    if a and a not in res:
        res.append(a)

Другие вопросы по теме