前文传送门:

在说上下文无关文法之前,我们来看看形式语言理论,什么是形式语言理论?形式语言理论形式语言理论是用数学方法研究自然语言或者程序设计语言的理论。研究语言组成规则,而不研究语言的具体含义。说到形式语言,必须说一下它的形式文法。形式文法被严格地定义为四元组G=(N,T,P,S)S:start 开始符号

P:productions 生成式集合

T:terminal 终结符集合

N:Nonterminal 非终结符集合

文法形式语言中主要有4种文法:

0型文法(无限制文法)

1型文法(上下文有关文法)

2型文法(上下文无关文法)

3型文法(正则文法)

我们现在不用纠结每种文法的具体含义,因为我们暂时只需要了解2型文法(上下文无关文法)即可。

之前说过,形式语言理论会用在自然语言中,文法也会用在自然语言中,我们举个例子看看:

当我们在小学学习语文课程时,会说到句子的结构,例如句子的结构可以是:主语+谓语+宾语,可以用名词+动词+名词表示。

如果你还有印象,小时候语文作业有一种习题叫做造句或者将词语按顺序组成句子,就是从给定的词语中选取部分词语构成句子。

例如给定的词语集合是:【羊 老虎 草 水 吃 喝】,我们首先可以将词语分类为:

名词:{羊 老虎 草 水},

动词:{吃 喝}

我们可以按照给出的词语库和之前说的句子结构(名词+动词+名词)造出很多句子:

例如:羊吃草 羊喝水 草吃老虎

我们先不管这个造句是否符合常理,

例如 草吃老虎 就不符合常理。

我们将刚说的例子抽象出来,做形式化分析:我们做如下定义:

S表示句子,->表示推出,N表示名词,V表示动词则句子结构可以表示为:S -> N V N

按照不同词性将词分类的规则整理为:N -> 羊 | 老虎 | 草 | 水V -> 吃 | 喝

我们将其中的大写符号叫做非终结符:{S, N, V}

将这里的名词和动词叫做终结符:{羊 老虎 草 水 吃 喝}

接下来说说最左推导和最右推导最左推导:每次总是选择最左侧的符号进行替换即对于上例中的 N V N ,首先替换最左边的 N 为 羊, 再替换之后最左侧的非终结符 V 为 吃, 最后替换最右边一个非终结符 N 为 羊

最终推导出 羊吃羊

最右推导:每次总是选择最右侧的符号进行替换,在这个例子里的结果是:水喝水

语法分析给定文法 G 和句子 S, 语法分析要回答的问题是:是否存在对句子 S 的推导?若仍然选择上面的文法 G,当 S = 羊喝水 时,我们能够实现 S 通过若干步的推导得到。

所以回答:是。

若 S = 吃喝水, 则不能实现该推导,

回答:否。

大家到这里应该发现了,文法是用来定义句子结构的。

当我们在进行句法结构分析的时候,上下文无关文法(CFG)是最常用的句法知识形式化的工具。

我们可以通过nltk工具包实现给定文法情况下句子的句法结构分析:from nltk import CFGimport nltkgrammar = CFG.fromstring("""S -> N V N N -> '羊' | '老虎' | '草' | '水' V -> '吃' | '喝' """)sent = '羊 喝 水'sent = nltk.word_tokenize(sent)parser = nltk.ChartParser(grammar)trees = parser.parse(sent)for tree in trees:tree.draw()

我们可以看一个更复杂的句法结构分析,主要是文法更加复杂了。from nltk import CFGimport nltkgrammar = CFG.fromstring("""S -> NP VP PP -> P NP NP -> Det N | Det N PP | 'I' VP -> V NP | VP PP Det -> 'an' | 'my' N -> 'elephant' | 'pajamas' V -> 'shot' P -> 'in' """)sent = 'I shot an elephant in my pajamas'sent = nltk.word_tokenize(sent)parser = nltk.ChartParser(grammar)trees = parser.parse(sent)for tree in trees:tree.draw()

第一种:

第二种:

从结果可以看出,nltk输出了两种句法结构分析结果,这两种结构都符合该文法规则。

关注“数据科学杂谈”公众号,带你零基础学习自然语言处理~

扫码下图关注我们不会让你失望!

python语言平台无关_从零开始学Python自然语言处理(十二)——上下文无关文法...相关推荐

  1. 从零开始学python数据分析 罗攀_从零开始学Python数据分析(视频教学版)

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  2. python渲染html页面_从零开始学Python - 第031课:用Python解析HTML页面

    ,放在标签下的内容会显示在浏览器窗口中,这部分内容是网页的主体:放在标签下的内容不会显示在浏览器窗口中,但是却包含了页面重要的元信息,通常称之为网页的头部.HTML页面大致的代码结构如下所示.

  3. 跟我从零开始学python之一_从零开始学 Python 之运算符

    从零开始学 Python 之运算符 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  4. 从零开始学python项目_从零开始学Python程序设计

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  5. 从零开始用python处理excel视频_从零开始学数据分析,什么程度可以找工作,如何计划学习方案?...

    首先要明确数据分析工作的基本流程,然后再考虑每个流程可能需要掌握的技能.我是一位从事数据分析与挖掘5年的数据小兵,简单回答一下数据各流程下的技能. 数据搜集:它往往是数据分析的第一步,即根据分析或挖掘 ...

  6. python实现素数筛选法_从零开始学Python系列-第6讲:循环结构

    应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景.例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令.在这个场景 ...

  7. python37从零开始学_从零开始学Python【37】--朴素贝叶斯模型(理论部分)

    [知识铺垫] 在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式: 如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中P(AB) ...

  8. 从零开始学python网络爬虫读书笔记_从零开始学Python网络爬虫 中文pdf

    资源名称:从零开始学Python网络爬虫 中文pdf 第1章 Python零基础语法入门 1 第2章 爬虫原理和网页构造 17 第3章 我的第一个爬虫程序 26 第4章 正则表达式 45 第5章 Lx ...

  9. 从零开始学python数据分析-【01】从零开始学Python—数据分析与挖掘概述

    马云曾说"中国正迎来从IT时代到DT时代的变革",DT就是大数据时代.数据已成为企业的核心资产和宝贵资源,企业愈加重视和善加利用数据分析与挖掘技术. 1.1什么是数据分析与挖掘 数 ...

最新文章

  1. java基本数据类型_Java面试题Java中有几种基本数据类型?它们分别占多大字节?...
  2. 超融合架构下的数据中心
  3. python中获取python版本号的方法
  4. 原型与原型链的简单理解
  5. 15.Numpy之点乘、算术运算、切片、遍历和下标取值
  6. win11资源管理器卡顿怎么办 Windows11解决资源管理器卡顿的步骤方法
  7. 忘记mysql密码 重置密码
  8. C#/.NET 上位机快速入门1——界面渐变设计、实现无边框拖动、关闭的淡出效果、基于socket实现与PLC服务器通信
  9. 仿钉钉考勤统计圆形控件
  10. JAVA类计算机专业毕业设计题目课题选题
  11. nodejs async.whilst用法
  12. Chrome 浏览器安装 ChroPath 插件
  13. 上海个人住房公积金复议材料
  14. [论文翻译]A SURVEY ON DEEP LEARNING METHODS FOR SEMANTIC IMAGE SEGMENTATION IN REAL-TIME
  15. [CTF]2021长安战疫 WP
  16. Mysql导出数据的几种方式
  17. lan8742a怎么用_LAN8742A
  18. 2005考研阅读Text1翻译
  19. Redis高可用方案:sentinel(哨兵模式)和集群
  20. python获取excel单元格内容作为文件名_python——根据电子表格的数据自动查找文件...

热门文章

  1. java 二元组_java里有类似于二元组之类的数据结构么?
  2. pkuseg对文件分词时报错
  3. java入门—第二节(1)(数据类型)
  4. Springboot 之 HandlerMethodArgumentResolver 运用
  5. 渗透测试学习之日常打靶THE PLANETS: EARTH
  6. html5 健身房模板,健身房瘦身HTML模板
  7. 图解windows系统 硬盘主分区、扩展分区、逻辑分区的区别.
  8. 2018-2019赛季多校联合新生训练赛第五场补题与题解(中石油)
  9. batch norm的作用
  10. 机械革命z2黑苹果改造计划第三番-macOS键盘快捷键Win键盘适配