Время разбора через регулярные выражения для голосовой сигнализации - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь написать выражение регулярного выражения, которое может правильно проанализировать как можно больше из этих возможных словесных команд для установки будильника, например ::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

Сейчас я, вероятно, просто использую эти два по отдельности и определю подходящее по поиску различных ключевых слов.

...