我正在使用此NLTK代碼從demo_grammar生成句子(請參見下文),問題在於,像NN或NNNI這樣的語法規則最終會生成諸如「creation創造創造「。我只對生成相同單詞不會出現兩次的句子感興趣(即創建視頻軟件)。NLTK在Python中生成沒有出現同一單詞的兩個句子
我該怎麼做?
的generate.py
從NLTK是這樣的:https://github.com/nltk/nltk/blob/develop/nltk/parse/generate.py
我試圖從generate.py
演示代碼:
from nltk.grammar import CFG
from nltk.parse import generate
demo_grammar = """
S -> NP VP
NP -> Det N
PP -> P NP
VP -> 'slept' | 'saw' NP | 'walked' PP
Det -> 'the' | 'a'
N -> 'man' | 'park' | 'dog'
P -> 'in' | 'with'
"""
def demo(N=23):
print('Generating the first %d sentences for demo grammar:' % (N,))
print(demo_grammar)
grammar = CFG.fromstring(demo_grammar)
for n, sent in enumerate(generate(grammar, n=N), 1):
print('%3d. %s' % (n, ' '.join(sent)))
每個規則的擴展都獨立於其他規則;這是**上下文無關**語法。重寫語法是一種選擇嗎?你可以做你想做的,把終端從你的語法中刪除,並把它們作爲一個單獨的步驟。 – alexis