Итак, я создал серию грамматик для использования в методе класса, который я создал. Каждый список может состоять из n элементов, поэтому размещение каждого слова с помощью индекса списка - это просто претензии wordlist[1:]
, однако мне нужно использовать оператор |
, а это невозможно сделать с помощью явных строковых индексов (по крайней мере, я так думаю) , Это то, что я написал до сих пор:
noun_types = ['port', 'harbor', 'harbour']
target_pronouns = ['rotterdam', 'moscow']
grammer1 = (
F"""
S -> Det N P NP
P -> P
NP -> '{target_pronouns[0]}' | '{target_pronouns[1]}'
Det -> 'the' | 'a'
P -> 'of'
N -> '{noun_types[0]}' | '{noun_types[1]}' | '{noun_types[2]}'
""")
В идеале, я хотел бы иметь возможность передать список из n имен местоимений и существительных и отформатировать строки с каждым элементом без явного строковые индексы, так что-то вроде этого:
noun_types = ['port', 'harbor', 'harbour']
target_pronouns = ['rotterdam', 'moscow']
grammer1 = (
F"""
S -> Det N P NP
P -> P
NP -> '{target_pronouns[range(0, len(target_pronouns))]}'
Det -> 'the' | 'a'
P -> 'of'
N -> '{noun_types[range(0, len(target_pronouns))]}'
""")
Однако я не уверен, как реализовать оператор |
, тем более любое условное форматирование при форматировании строк. Форматирование грамматики основано на конструкторе грамматики nltk, используемом в этом контексте:
from nltk.parse.generate import generate
from nltk import CFG
grammar = CFG.fromstring(grammer1)
for sentence in generate(grammar, n = 10, depth = 5):
words = ' '.join(sentence)
Это немного запутанный вопрос, поэтому я рад попытаться прояснить любую путаницу!