Member 10826067 Ответов: 1

Python parser для генерации строк путем применения заданных правил.


python parser для генерации строк путем применения заданных правил.
ниже приведены 6 примеров из 500

1) ([go] back | return)

список = [ вернуться, вернуться, вернуться]

2) (AM | Medium Wave) помощь
список = [АМ помочь, средневолновая помочь]

3) (SiriusXM) [спутниковое радио | Радио]

list = SiriusXM radio, SeriusXM спутниковое радио

4) (север вверх [на карте [вид]])
список = [север на карте , север В посмотреть на карте ]

5) ((отмена | очистка) маршрут | (остановка (навигация | направления движения)))
список - [отменить маршрут, очистить маршрут, остановить навигацию, остановить направление движения]

6) (стоп | удержание) на (мой дом [адрес] | моя квартира) [и избежать &ЛТ;объезды и GT; | [через] &ЛТ;route_type&ГТ; [маршрут]]
список = [
Остановись у моего дома,
остановитесь по моему домашнему адресу,
остановитесь у моей квартиры,
остановитесь у моего дома и избегайте "уклонений".;,
остановитесь по моему домашнему адресу и избегайте <уклонений>
остановитесь в моей квартире и избегайте "избеганий";,
остановитесь у моего дома через <route_type>
остановитесь на моем домашнем адресе через <route_type>
остановитесь в моей квартире через <route_type>
остановка у моего дома через <route_type> маршрут
остановитесь на моем домашнем адресе через <route_type> route
остановка в моей квартире через <route_type> маршрут
остановка у моего дома по маршруту
остановка по моему домашнему адресу маршрут
остановка в пути квартира
держись у меня дома,
держите на моем домашнем адресе,
держать в квартире,
держись у меня дома и избегай <уклонений>,
держите на моем домашнем адресе и избегайте <уклонений>
держитесь в моей квартире и избегайте "уклонений";,
держите в моем доме через <route_type>
держите на моем домашнем адресе через <route_type>
держите в моей квартире через <route_type>
держите в моем доме через <route_type> маршрут
держите на моем домашнем адресе через <route_type> маршрут
держите в моей квартире через <route_type> маршрут
держите у меня дома через маршрут
держите на моем домашнем адресе маршрут
держите в моей квартире маршрут
]
7) <app_name>
list = [<app_name>]
8) выход из <app_name>
list = [exit <app_name>]
9) <app_name> справка
list = [<app_name> справка]

10) (выбрать | выбрать | забрать | взять) ([(строка | строк) [количество] | количество | возможность | вход] &ЛТ;cardinal_number&ГТ; | по (&ЛТ;line_position&ГТ; | &ЛТ;ordinal_number&ГТ;) [(строка | строка) [номер] | номер | опция | запись])
список = [
Выберите номер строки <cardinal_numbers>
Выберите строку <ordinal_number>
Выберите строку <ordinal_number>
Выберите строку <line_position>
и так далее.. ]

Правила для генерации предложений или строк:
1) все, что находится под " []", является опциональным
2) все, что находится под ' ()', является обязательным и
3) вокруг '|' находится OR, а остальное-конкретный текст
4) Все, что находится под " < gt;", рассматривается как бетон
5) кардинальное число и порядковый номер текста обрабатываются как обычный текст

Что я уже пробовал:

текущая версия парсера :
1) я начал с расчета :
количество слов,
количество или ' |'
количество обязательных '()'
количество опционов' []'
количество бетонов : текст, находящийся между специальными символами.

а потом поставить их в такие условия, как :
если # words - это > 5, то сделайте это
если обязательные меньше 1, то сделайте это
если обязательный = 2 и опциональный ==2, то сделайте это `

но это всего лишь 6 примеров, и у меня действительно большой лист даты более 500, и мои разборы не могут удовлетворить всех .

так что интересно, есть ли лучшие решения, которые вы можете предложить, и спасибо.

1 Ответов

Рейтинг:
0

CPallini

Эти правила таковы производства (см., например: Грамматика и синтаксический анализ[^]). Обычный подход к их решению таков рекурсия (опять же, смотрите связанную страницу).