Добавить возможность разбивать совпадение на несколько фактов
dveselov opened this issue · 1 comments
dveselov commented
Например, есть такой текст:
Смольный определит победителей конкурса на оформление Дворцового, Троицкого, Большеохтинского, Первого Инженерного и Первого Садового, Пантелеймоновского и Нижнего Лебяжьего мостов в Санкт-Петербурге к Новому 2018 году и Рождеству
Хотелось бы иметь возможность извлекать название каждого моста по отдельности:
Location(name='дворцовый мост'),
Location(name='троицкий мост'),
Location(name='большеохтинский мост'),
...
kuk commented
Такое предполагается делать на пост обработке.
from yargy import Parser, rule
from yargy.interpretation import fact, attribute
Objs = fact('Objs', [attribute('names').repeatable(), 'type'])
class Objs(Objs):
def unfold(self):
for name in self.names:
yield name, self.type
OBJS = rule(
rule('name').interpretation(Objs.names).repeatable(),
rule('type').interpretation(Objs.type)
).interpretation(Objs)
parser = Parser(OBJS)
text = 'name name name type'
match = parser.match(text)
list(match.fact.unfold())
[('name', 'type'), ('name', 'type'), ('name', 'type')]