
21.4
余談:ギブスサンプリング
■
313
#
ランダムに生成ルールのいずれかと置き換える
replacement = random.choice(grammar[token])
if is_terminal(replacement):
tokens[i] = replacement
else:
#
置き換えは、例えば
"_NP _VP"
になる可能性があるため、
#
スペースで分割する必要があります。
tokens = tokens[:i] + replacement.split() + tokens[(i+1):]
#
新しいトークンのリストに
expand
を適用する
return expand(grammar, tokens)
#
ここに到達した際には、すべて終端記号に置き換え完了している
return tokens
それでは、文を生成してみましょう。
def generate_sentence(grammar: Grammar) -> List[str]:
return expand(grammar, ["_S"])
単語やルールや独自の言い回しなどを追加して、必要とする
Web
ページが生成でき
る程度まで文法を変更してみてください。
これとは異なる目的のために文法を使えば、より興味深い結果が得られます。与え
られた文に文法を適用して構文解析を行えば、文の主語や動詞を特定したり、文の意
味を理解する助けとなります。
データサイエンスを使った文章の生成は匠の技です。そして文章の理解のために ...