Мне показалось, что я понял логику pyparsing, но не могу понять, почему не работает нижний пример.
Я пытаюсь разобрать комментарии в открытом тексте, где продукт или набор продуктов могут быть упомянуты либо в началеили конец комментария.Названия продуктов также могут быть опущены в комментарии.
На выходе должен быть список упомянутых продуктов и описание к ним.
Ниже приведены несколько тестов.Анализ разбирает все как «описание», а не сначала подбирает продукты (разве это не то, что должен делать негатив?)
Что не так в моем понимании?
import pyparsing as pp
products_list = ['aaa', 'bbb', 'ccc']
products = pp.OneOrMore(' '.join(products_list))
word = ~products + pp.Word(pp.alphas)
description = pp.OneOrMore(word)
comment_expr = (pp.Optional(products("product1")) + description("description") + pp.Optional(products("product2")))
matches = comment_expr.scanString("""\
aaa is a good product
I prefer aaa
No comment
aaa bbb are both good products""")
for match in matches:
print match
Ожидаемые результаты будут:
product1: aaa, description: is a good product
product2: aaa, description: I prefer
description: No comment
product1: [aaa, bbb] description: are both good products