使用NLTK找出所有的语法解析树

60 篇文章 1 订阅

使用NLTK完成Udacity公开课CS271(Intro to Artificial Intelligence)的Final Assessment Question 20
在这里插入图片描述

首先我们按照题目要求编写语法规则final_question_20.fcfg

% start S
S[SEM=(?np + ?vp)] -> NP[SEM=?np] VP[SEM=?vp]
S[SEM=(?s1 + and + ?s2)] -> S[SEM=?s1] 'and' S[SEM=?s2]
NP[SEM=?n] -> N[SEM=?n]
NP[SEM=(?d + ?n)] -> D[SEM=?d] N[SEM=?n]
NP[SEM=(?adj + ?n)] -> ADJ[SEM=?adj] N[SEM=?n]
NP[SEM=(?d + ?adj + ?n)] -> D[SEM=?d] ADJ[SEM=?adj] N[SEM=?n]
VP[SEM=(?v + ?np)] -> V[SEM=?v] NP[SEM=?np]
VP[SEM=?v] -> V[SEM=?v]
VP[SEM=(?v + ?np + ?np)] -> V[SEM=?v] NP[SEM=?np] NP[SEM=?np]
N[SEM='fall'] -> 'fall'
N[SEM='spring'] -> 'spring'
N[SEM='leaves'] -> 'leaves'
N[SEM='dog'] -> 'dog'
N[SEM='cat'] -> 'cat'
V[SEM='spring'] -> 'spring'
V[SEM='leaves'] -> 'leaves'
V[SEM='fall'] -> 'fall'
V[SEM='left'] -> 'left'
D[SEM='the'] -> 'the'
ADJ[SEM='fall'] -> 'fall'
ADJ[SEM='spring'] -> 'spring'
ADJ[SEM='purple'] -> 'purple'
ADJ[SEM='left'] -> 'left'

然后使用nltk对这些句子进行语法树解析,打印最终语法树列表的长度即可:

from nltk import load_parser
sentences=['fall leaves fall',
           'fall leaves fall and spring leaves spring',
           'the fall leaves left',
           'the purple dog left',
           'the dog and cat left']
cfg_path='../grammars/cs271/final_question_20.fcfg'
parser=load_parser(cfg_path)

for sentence in sentences:
    trees= list(parser.parse(sentence.split()))
    print('%s:%s'%(sentence, trees.__len__()))

其输出如下:

fall leaves fall:2
fall leaves fall and spring leaves spring:4
the fall leaves left:1
the purple dog left:1
the dog and cat left:0

当然我们还可以打印出每一棵语法树

     i=1
     for tree in trees:
         print('tree_%s:'%i)
         print(tree)
         i+=1

最后别忘了将结果写在试卷上:
在这里插入图片描述
在这里插入图片描述
完整代码可在我的github上下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值