python.nlp随笔(九)上下文无关文法

本文介绍了一种上下文无关文法(CFG)及其在自然语言处理中的应用实例。通过Python和nltk库构建了一个简单的CFG,并使用递归下降解析器来解析句子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上下文无关文法(context-free grammar,CFG)是指文法中所有的产生式左边只有一个非终结符,比如:
S -> aSb
S -> ab

这个文法有两个产生式,每个产生式左边只有一个非终结符S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。下面是一个简单的上下文无关文法的例子:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue May  8 12:58:28 2018

@author: dag
"""

import nltk  
from nltk import CFG  
grammar1 = CFG.fromstring(""" 
s -> NP VP  
VP -> V NP | V NP PP  
PP -> P NP  
V -> "saw" | "ate" | "walked"  
NP -> "John" | "Mary" | "Bob" | Det N | Det N PP  
Det -> "a" | "an" | "the" | "my"  
N -> "man" | "dog" | "cat" | "telescope" | "park"  
P -> "in" | "on" | "by" | "with"  
""")  
sent = "Mary saw Bob".split()  
rd_parser = nltk.RecursiveDescentParser(grammar1)  
for tree in rd_parser.parse(sent):  
    print (tree)
tree.draw()

output:

runfile('/Users/dag/cfg.py', wdir='/Users/dag')
(s (NP Mary) (VP (V saw) (NP Bob)))




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值