【NLP】动手实现一个句子生成器

本文主要介绍如何通过预先设定好的语法规则以及单词,通过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),对此感兴趣的话可以参考以下文章:

语法说明

  1. sentence => noun_phrase verb_phrase:表示一个 sentencenoun_phraseverb_phrase 组成。
  2. Adj => 蓝色的 | 好看的 | 小小的:表示 Adj 一共有 蓝色的 | 好看的 | 小小的 3个选择。

基于上面的两条规说明,我们就能够读懂上面的语法规则。

观察上面的语法,我们可以发现一共有两类词汇,左边的词汇是可以继续拓展的,右边的词汇如果不在左边,那么是不可拓展的。

我们先以adj为例,编写代码。Adj语法如下:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值