登录    |    注册

NLTK--grammar 模块

2021-02-23 10:02:28

用于表示上下文无关语法的基本数据类。“语法”指定哪些树可以表示给定文本的结构。这些树中的每一个都被称为文本的“解析树”(或者简单地称为“解析”)。在“上下文无关”语法中,一段文本的解析树集只能依赖于该段,而不能依赖于文本的其余部分(即该段的上下文)。上下文无关语法常被用来寻找句子可能的句法结构。在此上下文中,解析树的叶子是单词标记;节点值是短语类别,例如 NP 和 VP .

这个 CFG 类用于对上下文无关语法进行编码。各 CFG 由开始符号和一组产品组成。“开始符号”指定分析树的根节点值。例如,用于语法分析的起始符号通常是 S . 开始符号使用 Nonterminal 类,下面讨论。

语法的“产品”指定解析树可以包含哪些父子关系。每个产品都指定特定节点可以是特定子集合的父节点。例如,生产  ->   指定一个 S 节点可以是 NP 节点与A VP 节点。

语法生成由 Production 班级。各 Production 由左侧和右侧组成。“左手边”是 Nonterminal 它指定潜在父级的节点类型;“右侧”是一个列表,指定该父级的允许子级。此列表包括 Nonterminals 和文本类型:每个 Nonterminal 指示相应的子级可以是 TreeToken 具有指定的节点类型;并且每个文本类型指示对应的子级可以是 Token 和那个类型的。

这个 Nonterminal 类用于区分节点值和叶值。这可以防止语法意外地使用叶值(如英语单词“a”)作为子树的节点。在一个 CFG ,所有节点值都包装在 Nonterminal 班级。但是请注意,语法指定的树 not 包括这些 Nonterminal 包装纸。

语法也可以得到更为程序化的解释。根据这种解释,语法指定任何树结构 tree 可通过以下程序产生:

将树设置为开始符号

重复,直到树不再包含非终端叶:

选择左手边的生产产品

lhs是树的非末梢叶子。

将非终端叶替换为子树,其节点

值是由非终端lhs包装的值,并且

他们的孩子是普罗德的右手边。

更换左侧的操作( lhs )右手边的产品( rhs 在一棵树上( tree )被称为“扩张” lhs 到 rhs 在里面 tree .

class nltk.grammar.CFG(start, productions, calculate_leftcorners=True)[源代码]

基类:object

上下文无关的语法。语法由一个开始状态和一组产生组成。终端和非终端集由产品隐式指定。

如果需要对产品进行有效的基于键的访问,可以使用子类来实现它。

classmethod binarize(grammar, padding='@$@')[源代码]

通过引入新的令牌,将所有非二进制规则转换为二进制规则。示例::原始:

A=>B C D

转换后:

A=>B A@$@B A@$@B=>C D

check_coverage(tokens)[源代码]

检查语法规则是否覆盖给定的令牌列表。如果没有,则引发异常。

chomsky_normal_form(new_token_padding='@$@', flexible=False)[源代码]

返回Chomsky Normal中的新语法:param:new_token_padding

在二值化期间自定义新规则的形成

classmethod eliminate_start(grammar)[源代码]

如果开始规则出现在rhs上,则取消该规则示例:s->s0 s1和s0->s1 s,然后添加另一个规则s0_sigma->s。

classmethod fromstring(input, encoding=None)[源代码]

返回与输入字符串对应的语法实例。

参数

input -- 一种文法,可以是字符串形式,也可以是字符串列表形式。

is_binarised()[源代码]

如果所有生成最多为二进制,则返回true。请注意,仍然可以有空的和一元的产品。

is_chomsky_normal_form()[源代码]

如果语法是Chomsky标准形式,即所有生成的形式都是a->b c或a->s,则返回true。

is_flexible_chomsky_normal_form()[源代码]

如果所有产品的形式都是A->B C、A->B或A->S,则返回true。

is_leftcorner(cat, left)[源代码]

如果Left是cat的左角,则为true,其中Left可以是终端,也可以是非终端。

参数
返回类型

bool

is_lexical()[源代码]

如果所有产品都是词典化的,则返回true。

is_nonempty()[源代码]

如果没有空生产,则返回true。

is_nonlexical()[源代码]

如果所有词汇规则都是“preterminals”,即可以在预处理步骤中分隔的一元规则,则返回true。

这意味着所有的产品都是A->B1…bn(n>=0),或a->“s”。

注意:is_lexical()和is_nonlexical()不是对立词。有既不是的语法,也有既不是的语法。

leftcorner_parents(cat)[源代码]

返回给定类别为左角的所有非终端的集合。这是左角关系的倒数。

参数

cat (Nonterminal) -- 建议的左角

返回

所有家长集合到左角

返回类型

set(Nonterminal)

leftcorners(cat)[源代码]

返回给定非终端可以开始的所有非终端的集合,包括其本身。

这是立即左角关系的反身传递闭包:(a>b)iff(a->b beta)

参数

cat (Nonterminal) -- 左角的父级

返回

所有左角的集合

返回类型

set(Nonterminal)

max_len()[源代码]

返回最长语法生成的右侧长度。

min_len()[源代码]

返回最短语法生成的右侧长度。

productions(lhs=None, rhs=None, empty=False)[源代码]

返回语法产物,由左侧或右侧的第一项筛选。

参数
  • lhs -- 仅返回具有给定左侧的产品。

  • rhs -- 仅返回右手边具有给定第一项的生产。

  • empty -- 仅返回右侧为空的生产。

返回

与给定约束匹配的产品列表。

返回类型

list(Production)

classmethod remove_unitary_rules(grammar)[源代码]

删除非词汇的单一规则并将其转换为词汇规则

start()[源代码]

返回语法的开始符号

返回类型

Nonterminal

class nltk.grammar.DependencyGrammar(productions)[源代码]

基类:object

依赖语法。DependencyGrammar由一组产品组成。每个产品都指定一对单词之间的标题/修饰词关系。

contains(head, mod)[源代码]
参数
  • head (str) -- 头头字

  • mod (str) -- 一个修饰词,作为“head”的修饰语进行测试。

返回

如果这是真的 DependencyGrammar 包含一个 DependencyProduction 将“head”映射到“mod”。

返回类型

bool

classmethod fromstring(input)[源代码]
class nltk.grammar.DependencyProduction(lhs, rhs)[源代码]

基类:nltk.grammar.Production

依赖语法生成。每个作品都将一个单词映射到一个或多个修饰词的无序列表中。

class nltk.grammar.Nonterminal(symbol)[源代码]

基类:object

上下文无关文法的非终端符号。 Nonterminal 是节点值的包装类;它由 Production 对象来区分节点值和叶值。由包装的节点值 Nonterminal 被称为“符号”。符号通常是表示短语类别的字符串(例如 "NP" 或 "VP" )但是,有时会使用更复杂的符号类型(例如,用于词汇化语法)。因为符号是节点值,所以它们必须是不可变的和可哈希的。二 Nonterminals 如果符号相等,则视为相等。

看见

CFG, Production

变量

_symbol -- 与此对应的节点值 Nonterminal . 此值必须是不可变的和可哈希的。

symbol()[源代码]

返回与此对应的节点值 Nonterminal .

返回类型

(any)

class nltk.grammar.PCFG(start, productions, calculate_leftcorners=True)[源代码]

基类:nltk.grammar.CFG

概率上下文无关语法。PCFG由一个开始状态和一组具有概率的生产组成。终端和非终端集由产品隐式指定。

PCFG生产使用 ProbabilisticProduction 班级。 PCFGs 施加一个约束,即任何给定左手边的一组生产必须具有总和为1的概率(允许小误差)。

如果需要对产品进行有效的基于键的访问,可以使用子类来实现它。

变量

EPSILON -- 用于检查具有给定左侧的生产是否具有总和为1的概率的可接受误差范围。

EPSILON = 0.01
classmethod fromstring(input, encoding=None)[源代码]

返回与输入字符串相对应的概率上下文无关语法。

参数

input -- 一种语法,可以是字符串形式,也可以是字符串列表形式。

class nltk.grammar.ProbabilisticDependencyGrammar(productions, events, tags)[源代码]

基类:object

contains(head, mod)[源代码]

如果这个返回真 DependencyGrammar 包含一个 DependencyProduction 将“head”映射到“mod”。

参数
  • head (str) -- 头头字

  • mod (str) -- 一个修饰词,作为“head”的修饰语进行测试。

返回类型

bool

class nltk.grammar.ProbabilisticProduction(lhs, rhs, **prob)[源代码]

基类:nltk.grammar.Productionnltk.probability.ImmutableProbabilisticMixIn

概率上下文无关文法的产生。光子晶体光纤 ProbabilisticProduction 基本上只是一个 Production 这有一个相关的概率,它表示使用这种产品的可能性有多大。尤其是 ProbabilisticProduction 记录其右侧是其左侧的任何给定事件的正确实例化的可能性。

看见

Production

class nltk.grammar.Production(lhs, rhs)[源代码]

基类:object

语法作品。每个产品都将“左侧”上的一个符号映射到“右侧”上的一系列符号。(对于上下文无关的产品,左侧必须是 Nonterminal ,右侧是一系列端子和 Nonterminals )“终端”可以是任何非 Nonterminal . 通常,终端是表示单词的字符串,例如 "dog" 或 "under" .

看见

CFG

看见

DependencyGrammar

看见

Nonterminal

变量
  • _lhs -- 生产的左侧。

  • _rhs -- 生产的右侧。

is_lexical()[源代码]

如果右侧至少包含一个终端标记,则返回true。

返回类型

bool

is_nonlexical()[源代码]

如果右侧仅包含 Nonterminals

返回类型

bool

lhs()[源代码]

返回此的左侧 Production .

返回类型

Nonterminal

rhs()[源代码]

把这个放回右边 Production .

返回类型

sequence(Nonterminal and terminal)

nltk.grammar.induce_pcfg(start, productions)[源代码]

从产品列表中归纳出PCFG语法。

PCFG中A->B C生产的概率为:

计数(A->B C)
p(b,c_a)=----------式中 * 有右手边的吗
计数(A-) * )
参数
nltk.grammar.nonterminals(symbols)[源代码]

给定包含符号名称列表的字符串,返回 Nonterminals 由这些符号构成。

参数

symbols (str) -- 符号名字符串。此字符串可以用空格或逗号分隔。

返回

列表 Nonterminals 根据中给出的符号名称构造 symbols . 这个 Nonterminals 按与符号名称相同的顺序排序。

返回类型

list(Nonterminal)

nltk.grammar.read_grammar(input, nonterm_parser, probabilistic=False, encoding=None)[源代码]

返回一对由起始类别和 Productions .

参数
  • input -- 一种语法,可以是字符串形式,也可以是字符串列表形式。

  • nonterm_parser -- 用于分析非终端的函数。它应该需要一个 (string, position) 作为参数并返回 (nonterminal, position) 结果。

  • probabilistic (bool) -- 语法规则是概率的吗?

  • encoding (str) -- 语法的编码,如果它是二进制字符串

想要了解NLTK,请点击这里

想要了解安装NLTK,请点击这里