2021-02-23 10:02:28
用于表示上下文无关语法的基本数据类。“语法”指定哪些树可以表示给定文本的结构。这些树中的每一个都被称为文本的“解析树”(或者简单地称为“解析”)。在“上下文无关”语法中,一段文本的解析树集只能依赖于该段,而不能依赖于文本的其余部分(即该段的上下文)。上下文无关语法常被用来寻找句子可能的句法结构。在此上下文中,解析树的叶子是单词标记;节点值是短语类别,例如 NP 和 VP .
这个 CFG 类用于对上下文无关语法进行编码。各 CFG 由开始符号和一组产品组成。“开始符号”指定分析树的根节点值。例如,用于语法分析的起始符号通常是 S . 开始符号使用 Nonterminal 类,下面讨论。
语法的“产品”指定解析树可以包含哪些父子关系。每个产品都指定特定节点可以是特定子集合的父节点。例如,生产 ->
语法生成由 Production 班级。各 Production 由左侧和右侧组成。“左手边”是 Nonterminal 它指定潜在父级的节点类型;“右侧”是一个列表,指定该父级的允许子级。此列表包括 Nonterminals 和文本类型:每个 Nonterminal 指示相应的子级可以是 TreeToken 具有指定的节点类型;并且每个文本类型指示对应的子级可以是 Token 和那个类型的。
这个 Nonterminal 类用于区分节点值和叶值。这可以防止语法意外地使用叶值(如英语单词“a”)作为子树的节点。在一个 CFG ,所有节点值都包装在 Nonterminal 班级。但是请注意,语法指定的树 not 包括这些 Nonterminal 包装纸。
语法也可以得到更为程序化的解释。根据这种解释,语法指定任何树结构 tree 可通过以下程序产生:
将树设置为开始符号
重复,直到树不再包含非终端叶:
选择左手边的生产产品
lhs是树的非末梢叶子。
将非终端叶替换为子树,其节点
值是由非终端lhs包装的值,并且
他们的孩子是普罗德的右手边。
更换左侧的操作( lhs )右手边的产品( rhs 在一棵树上( tree )被称为“扩张” lhs 到 rhs 在里面 tree .
基类:object
上下文无关的语法。语法由一个开始状态和一组产生组成。终端和非终端集由产品隐式指定。
如果需要对产品进行有效的基于键的访问,可以使用子类来实现它。
通过引入新的令牌,将所有非二进制规则转换为二进制规则。示例::原始:
A=>B C D
A=>B A@$@B A@$@B=>C D
检查语法规则是否覆盖给定的令牌列表。如果没有,则引发异常。
返回Chomsky Normal中的新语法:param:new_token_padding
在二值化期间自定义新规则的形成
如果开始规则出现在rhs上,则取消该规则示例:s->s0 s1和s0->s1 s,然后添加另一个规则s0_sigma->s。
返回与输入字符串对应的语法实例。
input -- 一种文法,可以是字符串形式,也可以是字符串列表形式。
如果所有生成最多为二进制,则返回true。请注意,仍然可以有空的和一元的产品。
如果语法是Chomsky标准形式,即所有生成的形式都是a->b c或a->s,则返回true。
如果所有产品的形式都是A->B C、A->B或A->S,则返回true。
如果Left是cat的左角,则为true,其中Left可以是终端,也可以是非终端。
cat (Nonterminal) -- 左角的父级
left (Terminal or Nonterminal) -- 建议的左角
bool
如果所有产品都是词典化的,则返回true。
如果没有空生产,则返回true。
如果所有词汇规则都是“preterminals”,即可以在预处理步骤中分隔的一元规则,则返回true。
这意味着所有的产品都是A->B1…bn(n>=0),或a->“s”。
注意:is_lexical()和is_nonlexical()不是对立词。有既不是的语法,也有既不是的语法。
返回给定类别为左角的所有非终端的集合。这是左角关系的倒数。
cat (Nonterminal) -- 建议的左角
所有家长集合到左角
set(Nonterminal)
返回给定非终端可以开始的所有非终端的集合,包括其本身。
这是立即左角关系的反身传递闭包:(a>b)iff(a->b beta)
cat (Nonterminal) -- 左角的父级
所有左角的集合
set(Nonterminal)
返回最长语法生成的右侧长度。
返回最短语法生成的右侧长度。
返回语法产物,由左侧或右侧的第一项筛选。
lhs -- 仅返回具有给定左侧的产品。
rhs -- 仅返回右手边具有给定第一项的生产。
empty -- 仅返回右侧为空的生产。
与给定约束匹配的产品列表。
list(Production)
删除非词汇的单一规则并将其转换为词汇规则
返回语法的开始符号
基类:object
依赖语法。DependencyGrammar由一组产品组成。每个产品都指定一对单词之间的标题/修饰词关系。
head (str) -- 头头字
mod (str) -- 一个修饰词,作为“head”的修饰语进行测试。
如果这是真的 DependencyGrammar 包含一个 DependencyProduction 将“head”映射到“mod”。
bool
依赖语法生成。每个作品都将一个单词映射到一个或多个修饰词的无序列表中。
基类:object
上下文无关文法的非终端符号。 Nonterminal 是节点值的包装类;它由 Production 对象来区分节点值和叶值。由包装的节点值 Nonterminal 被称为“符号”。符号通常是表示短语类别的字符串(例如 "NP" 或 "VP" )但是,有时会使用更复杂的符号类型(例如,用于词汇化语法)。因为符号是节点值,所以它们必须是不可变的和可哈希的。二 Nonterminals 如果符号相等,则视为相等。
CFG, Production
_symbol -- 与此对应的节点值 Nonterminal . 此值必须是不可变的和可哈希的。
返回与此对应的节点值 Nonterminal .
(any)
概率上下文无关语法。PCFG由一个开始状态和一组具有概率的生产组成。终端和非终端集由产品隐式指定。
PCFG生产使用 ProbabilisticProduction 班级。 PCFGs 施加一个约束,即任何给定左手边的一组生产必须具有总和为1的概率(允许小误差)。
如果需要对产品进行有效的基于键的访问,可以使用子类来实现它。
EPSILON -- 用于检查具有给定左侧的生产是否具有总和为1的概率的可接受误差范围。
返回与输入字符串相对应的概率上下文无关语法。
input -- 一种语法,可以是字符串形式,也可以是字符串列表形式。
基类:object
如果这个返回真 DependencyGrammar 包含一个 DependencyProduction 将“head”映射到“mod”。
head (str) -- 头头字
mod (str) -- 一个修饰词,作为“head”的修饰语进行测试。
bool
基类:nltk.grammar.Production, nltk.probability.ImmutableProbabilisticMixIn
概率上下文无关文法的产生。光子晶体光纤 ProbabilisticProduction 基本上只是一个 Production 这有一个相关的概率,它表示使用这种产品的可能性有多大。尤其是 ProbabilisticProduction 记录其右侧是其左侧的任何给定事件的正确实例化的可能性。
Production
基类:object
语法作品。每个产品都将“左侧”上的一个符号映射到“右侧”上的一系列符号。(对于上下文无关的产品,左侧必须是 Nonterminal ,右侧是一系列端子和 Nonterminals )“终端”可以是任何非 Nonterminal . 通常,终端是表示单词的字符串,例如 "dog" 或 "under" .
CFG
DependencyGrammar
Nonterminal
_lhs -- 生产的左侧。
_rhs -- 生产的右侧。
如果右侧至少包含一个终端标记,则返回true。
bool
如果右侧仅包含 Nonterminals
bool
返回此的左侧 Production .
把这个放回右边 Production .
sequence(Nonterminal and terminal)
从产品列表中归纳出PCFG语法。
PCFG中A->B C生产的概率为:
start (Nonterminal) -- 开始符号
productions (list(Production)) -- 定义语法的产品列表
给定包含符号名称列表的字符串,返回 Nonterminals 由这些符号构成。
symbols (str) -- 符号名字符串。此字符串可以用空格或逗号分隔。
列表 Nonterminals 根据中给出的符号名称构造 symbols . 这个 Nonterminals 按与符号名称相同的顺序排序。
list(Nonterminal)
返回一对由起始类别和 Productions .
input -- 一种语法,可以是字符串形式,也可以是字符串列表形式。
nonterm_parser -- 用于分析非终端的函数。它应该需要一个 (string, position) 作为参数并返回 (nonterminal, position) 结果。
probabilistic (bool) -- 语法规则是概率的吗?
encoding (str) -- 语法的编码,如果它是二进制字符串
想要了解NLTK,请点击这里
想要了解安装NLTK,请点击这里