Я пытаюсь написать выражение регулярного выражения, которое может правильно проанализировать как можно больше из этих возможных словесных команд для установки будильника, например ::10000
Группа 1:
установить будильник в 15:50.
установить будильник на завтра в 3: 50
установить будильник на 6 часов утра.
установить будильник на 3 часа
Группа 2:
установить будильник за 1 час 10 минут
установить будильник за 59 минут
установить будильник за 6 часов
Группа 3:
установить будильник через 3 четверти часа
установить будильник за 2 с половиной часа
установить будильник через полчаса
Это выражение работает для группы 1:
(\D)+(\d+)(?::)?(\d+)?(?: )?(a\.m\.|p\.m\.)?(.+)
https://regex101.com/r/H6z5NU/3
установить будильник на завтра в 3 часа дня.
Группа 1. 28-29
Группа 2. 29-30 3
Группа 5. 31-35 p.m.
установить будильник на завтра в 15:50.
Группа 1. 28-29
Группа 2. 29-30 3
Группа 3. 31-33 50
Группа 5. 34-38 p.m.
Выражение работает для группы 2:
(\D)+(\d+){1,2}( hour| minute)((\D)+(\d+){1,2}( minute))?(.+)?
https://regex101.com/r/3yt7tK/1
установить будильник за 20 часов и 1 минуту
Группа 1. 15-16
Группа 2. 16-18 20
Группа 3. 18-23 hour
Группа 4. 23-37 s and 1 minute
Группа 5. 28-29
Группа 6. 29-30 1
Группа 7. 30-37 minute
установить будильник за 1 минуту
Группа 1. 15-16
Группа 2. 16-17 1
Группа 3. 17-24 minute
Но я схожу с ума, пытаясь достать секретный соус, который может справиться с объединением часа / минуты утра / вечера.
Приложение: у меня есть собственный анализатор распознавания, созданный с использованием различных инструментов (например, vanilla python - без импорта ML), и он уже успешно обрабатывает несколько задач ... просто пытается добавить задачу установки тревоги и надеется получить некоторое регулярное выражение Помогите. Спасибо!
=========== Еще одно обновление ===========
Это выражение работает для группы 1:
(\D+)(noon|midnight|\d{1,2})(?::(\d{0,2})| o'clock)?(?: )?(p.m.|a.m.|noon|midnight)?
https://regex101.com/r/H6z5NU/5
А также обрабатывает "12 часов дня" или "полночь"
И ... это выражение хорошо работает как для группы 2, так и для группы 3:
(\D)?(\d){0,2}(?: )?(and a )?(hour|minute|quarter|half)((\D)+(\d+){0,2}(?: )?(minute|hour))?(.+)?
https://regex101.com/r/3yt7tK/2
Сейчас я, вероятно, просто использую эти два по отдельности и определю подходящее по поиску различных ключевых слов.