本文主要介绍如何通过预先设定好的语法规则以及单词,通过Python来自动生成一些句子。
解析语法
在生成句子之前,我们需要先告诉机器生成句子的语法。
因此,我们先定义一个简单的语法:
simple_grammar = """
sentence => noun_phrase verb_phrase
noun_phrase => Article Adj* noun
Adj* => null | Adj Adj*
verb_phrase => verb noun_phrase
Article => 一个 | 这个
noun => 女人 | 篮球 | 桌子 | 小猫
verb => 看着 | 坐在 | 听着 | 看见
Adj => 蓝色的 | 好看的 | 小小的
"""
上面的语法其实可以表示成一棵语法树(Syntax Tree),对此感兴趣的话可以参考以下文章:
语法说明
sentence => noun_phrase verb_phrase
:表示一个sentence
由noun_phrase
和verb_phrase
组成。Adj => 蓝色的 | 好看的 | 小小的
:表示Adj
一共有蓝色的 | 好看的 | 小小的
3个选择。
基于上面的两条规说明,我们就能够读懂上面的语法规则。
观察上面的语法,我们可以发现一共有两类词汇,左边的词汇是可以继续拓展的,右边的词汇如果不在左边,那么是不可拓展的。
我们先以adj
为例,编写代码。Adj
语法如下:
adj_grammar = """
Adj* => null | Adj Adj*
Adj => 蓝色的 | 好