Я пытаюсь проанализировать слоги с помощью pyparsing. Я работаю с языком, в котором есть шаблон слогов CV(C), поэтому каждый слог начинается с согласной. Однако мой парсер "съедает" согласную следующего слога.
import pyparsing as pp
C = pp.Regex(r'[bcdghklmnpqrstwxyz]')
V = pp.Regex(r'[aeiou]|y$')
syllable = pp.Group(C + V + pp.Opt(C))
word = pp.WordStart() + pp.OneOrMore(syllable) + pp.WordEnd()
Пример слов: ["банан", "бар", "ба"]
Результаты (result = word.parseString(w)):
banana -> Expected end of a word, found 'ana' (at char 3), (line:1, col:4)
bar -> [['b', 'a', 'r']]
ba -> [['b', 'a']]
Что я хочу:
banana -> [['b', 'a'], ['n', 'a'], ['n', 'a']]
bar -> [['b', 'a', 'r']]
ba -> [['b', 'a']]
Я также пробовал syllable = pp.Group(C ^ V ^ pp.Opt(C)), но он просто зависает и никогда не завершает анализ.
Вот мой код для этих тестовых слов, который перехватывает исключение:
for w in "banana", "bar", "ba":
try:
result = word.parseString(w)
print(f"{w} -> {result}")
except pp.ParseException as e:
print(f"{w} -> {e}")
Подробнее здесь: https://stackoverflow.com/questions/798 ... too-greedy
Pyparsing для слогов слишком жадный ⇐ Python
Программы на Python
1763484525
Anonymous
Я пытаюсь проанализировать слоги с помощью pyparsing. Я работаю с языком, в котором есть шаблон слогов CV(C), поэтому каждый слог начинается с согласной. Однако мой парсер "съедает" согласную следующего слога.
import pyparsing as pp
C = pp.Regex(r'[bcdghklmnpqrstwxyz]')
V = pp.Regex(r'[aeiou]|y$')
syllable = pp.Group(C + V + pp.Opt(C))
word = pp.WordStart() + pp.OneOrMore(syllable) + pp.WordEnd()
Пример слов: ["банан", "бар", "ба"]
Результаты (result = word.parseString(w)):
banana -> Expected end of a word, found 'ana' (at char 3), (line:1, col:4)
bar -> [['b', 'a', 'r']]
ba -> [['b', 'a']]
Что я хочу:
banana -> [['b', 'a'], ['n', 'a'], ['n', 'a']]
bar -> [['b', 'a', 'r']]
ba -> [['b', 'a']]
Я также пробовал syllable = pp.Group(C ^ V ^ pp.Opt(C)), но он просто зависает и никогда не завершает анализ.
Вот мой код для этих тестовых слов, который перехватывает исключение:
for w in "banana", "bar", "ba":
try:
result = word.parseString(w)
print(f"{w} -> {result}")
except pp.ParseException as e:
print(f"{w} -> {e}")
Подробнее здесь: [url]https://stackoverflow.com/questions/79821571/pyparsing-for-syllables-is-too-greedy[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия