CFG是基于规则的NLP(自然语言处理)的一种方法,网上关于CFG的文章比较少,尤其是解析算法几乎百度不到。我由于最近用到CFG规则来解决NLP问题,并实现了CFG的解析算法。本文是作为CFG解析算法的前置知识。读者敬请期待即将写的5分钟理解CFG上下文无关文法的解析算法。

CFG是什么

  1. CFG的英文全称context free grammar,中文叫上下文无关文法
  2. CFG是一组替换规则,例如:A->B C; B->E F; E->e;…  A->B C表示变量A可以被变量B和变量C替换,E->e表示变量E可以被最终的值e替换。e不是变量,不可再被替换了。
  3. CFG主要作用是验证一个输入字符串input,是否符合某个文法G。与正则表达式比较像。但是比正则表达式功能更强大,能表达非常复杂的文法,比如C语言语法用正则表达式来表示不可能做到,但是可以用CFG的一组规则来表达。
  4. 因为用到变量,可以将一个复杂的规则分解成多个简单规则。
  5. 几个概念:非终结符(N表示它的集合),终结符(Σ表示它的集合),产生式(P表示它的集合),起始符S
  6. 非终结符(nonterminal):可被进一步替换的符号,也叫变量。通常在公式中用一个或多个大写英文字母表示的是非终结符,N表示非终结符的集合。
  7. 终结符(terminal):不可被替换的符号,在公式中用一个或多个小写英文字母表示非终结符,Σ表示终结符的集合。
  8. NUΣ:是N和Σ的并集,α∈NUΣ 表示α可以是终结符也可以非终结符,公式中的小写希腊字母是属于这种。α可以为空字符串。
  9. 产生式(production): 就是一条条的规则,如A->B C,大写字母P表示规则的集合
  10. 起始符S:特殊的非终结符,表示最高层的变量,相当于树结构的根节点。
  11. 一条规则有“->”分割成2部分,左边称为left hand side,简写LHS,右边称为right hand side,简写RHS
  12. 注意这里说的公式和规则不是一回事。公式是用来表示规则的,但不是具体的规则。公式的例子:A->αY,表示规则的RHS有两部分,一部分用小写希腊字母α表示,代表这个可以是终结符,也可以是非终结符,还可以为空;后面一部分用大写英文字母Y表示,代表这部分确定是个非终结符或变量。对应这个公式的具体规则可以是:A->B, A->BC,A->'1' C

一个例子:约束日期类的文法

合法的:2021年2月1日;1995年10月31日

非法的:20211年2月1日; 2021月2月1日; 2021年22月1日

S->Y M D  #year month day
Y->YN YT  #YN:year number;YT:year tag
YT->"年"
M->MN MT #MN:month number; MT:month tag
MN-> DOZEN  #1 到12
MT->"月"
DT->"日"
YN->DIG1_9   DIG0_9  DIG0_9  DIG0_9  # DIG1_9:digit 1 to 9
DIG0_9->ZERO | DIG1_9
DIG1_9->ONE | DIG2_9
DIG2_9->TWO | DIG3_9
DIG3_9-> THREE | DIG4_9
DIG4_9->"4" | "5" |"6" |"7" |"8" | "9"
ZERO->"0"
ONE->"1"
TWO->"2"
THREE->"3"
DOZEN ->DIG1_9 | ZERO  DIG1_9 | ONE  ZERO | ONE  ONE  | ONE TWO
D->DN DT
DN-> DIG1_9 | ZERO  DIG1_9 | ONE DIG1_9 | TWO DIG1_9 | THREE ZERO | THREE ONE

5分钟理解CFG上下文无关文法相关推荐

  1. 5分钟理解CFG上下文无关文法的解析算法

    本文是5分钟理解CFG上下文无关文法的续集,在5分钟理解CFG上下文无关文法这篇文章中已经讲解了CFG的基本概念,但是CFG的解析算法才是核心.由于它的解析算法极其复杂,网上很少有文章能把解析算法用大 ...

  2. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  3. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  4. 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

    文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...

  5. 上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树--编译原理

    上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树 分析树 根节点的符号为文法开始符号S 每个内部节点都是对某个产生式A→β的应用,该节点的标号就是产生式的左部,子节 ...

  6. 短语结构文法(PSG)、上下文有关文法(CSG)、上下文无关文法(CFG)、右线性文法(RLG)的区别

    Part 1 短语结构文法(PSG).上下文有关文法(CSG).上下文无关文法(CFG).右线性文法(RLG)的区别 Part 2 概念 文法G=(V,T,P,S) G叫做0型文法(type 0 gr ...

  7. 形式语言与自动机 第5章 上下文无关文法与下推自动机

    文章目录 第5章 上下文无关文法与下推自动机 CFG 的化简 无用符号 CNF 和 GNF 范式 CNF 范式 GNF 范式 PDA 与 CFG 下推自动机 CFG →\to→ PDA PDA →\t ...

  8. 计算理论——正则语言,上下文无关文法,图灵机,可判定性,可规约性

    目录 第一章 正则语言 状态图 自动机的形式化定义 非确定性 正则表达式 泵引理 使用泵引理证明某个语言非正则的方法 第二章 上下文无关文法 上下文无关文法概述 1.上下文无关文法形式化定义 2.上下 ...

  9. 【编译原理】什么是上下文无关文法?

    上下文无关是指,一句话的含义与其前后的内容没有或者几乎没有关系,只由自己决定,把它剪切到其他任何位置,也还是原有的意思. 例如: ... a = 0; ... 这是一个赋值语句,无论此语句的前后是什么 ...

最新文章

  1. 【Matlab 控制】利用 Matlab Function 绘制分段函数
  2. ajaxFileUpload上传文件后提示下载的问题
  3. Type Casting
  4. leetcode(34)在排序数组中查找元素的第一个和最后一个位置
  5. 【华为云技术分享】云图说 | 华为云MCP多云容器平台,让您轻松灾备!
  6. html背景图片垂直居中,css — 定位、背景图、水平垂直居中
  7. WPF教程尝试(修正部分格式)
  8. zabbix获取mysql主从状态_zabbix监控MySQL主从状态
  9. POJ 1094 Sorting It All Out 【拓扑排序】
  10. 使用javamail的一些问题总结
  11. 知网回应学者侵权投诉:在研究整改方案,不是一两天能解决,每天忙到零点
  12. python 修改证件照的尺寸
  13. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  14. DataGrip 安装教程 详细版
  15. CAD自学笔记21条,零基础学CAD可以看看
  16. 计算机一级office软件,计算机一级office
  17. ES时间查询报错 - “caused_by“:{“type“:“illegal_argument_exception“,“reason“:“failed to parse date field
  18. RabbitMq中的exclusive
  19. Logistic回归----葡萄酒案例
  20. IBM慢病AI模型简介HWProfile

热门文章

  1. Elasticsearch进阶笔记
  2. 嵌入式项目研发到量产的流程
  3. 黑群晖6.17 安装ax88179_178a.ko驱动(USB千兆网卡)
  4. Java面向对象设计模式
  5. 原生ajax简单post,最简单的原生ajax请求
  6. Linux安装redies+开机自启+远程连接+卸载
  7. 电磁超声传感器的三大典型结构
  8. 7.python 移动目录下的文件至另一个目录下
  9. Windows查看文件占用情况、查看程序的dll依赖项
  10. 数据结构-串、数组和广义表