登录    |    注册

NLTK--featstruct 模块

2021-02-21 13:54:14

用于表示特征结构以及对这些特征结构执行基本操作的基本数据类。特征结构是从特征标识符到特征值的映射,其中每个特征值要么是基本值(如字符串或整数),要么是嵌套的特征结构。有两种类型的特征结构,由以下两个子类实现 FeatStruct :

功能字典,由实现 FeatDict ,类似于python字典。功能标识符可以是 Feature 班级。功能列表,由实现 FeatList ,类似于python列表。功能标识符是整数。

特征结构通常用于表示对象的部分信息。未映射到值的功能标识符表示值未知的功能( not 没有值的功能)。两个表示(可能重叠)同一对象信息的特征结构可以通过统一进行组合。当两个不一致的特征结构被统一时,统一就会失败,并且不会返回任何信息。

可以使用“功能路径”或功能标识符的元组指定功能,这些标识符指定通过嵌套的功能结构到值的路径。特征结构可以包含可重入的特征值。“可重入特征值”是可以通过多个特征路径访问的单个特征值。统一保留了两个统一特征结构所施加的再入关系。在统一产生的特征结构中,对可重入特征值的任何修改都将使用其任何特征路径可见。

功能结构变量使用 nltk.sem.Variable 班级。使用绑定字典跟踪变量的值,该字典将变量映射到其值。当两个功能结构统一时,将创建一个新的绑定字典来跟踪它们的值;在统一完成之前,所有绑定变量都将替换为它们的值。因此,绑定字典通常严格地位于统一过程的内部。但是,如果您选择跟踪变量的绑定,则可以通过向 unify() 功能。

当未绑定的变量彼此统一时,它们将变为别名。这是通过将一个变量绑定到另一个变量来编码的。

轻量级特征结构

许多函数由 nltk.featstruct 可以直接应用于简单的python字典和列表,而不是完全成熟的 FeatDict 和 FeatList 物体。换句话说,python dicts 和 lists 可作为“轻量”特征结构。

>>> from nltk.featstruct import unify
>>> unify(dict(x=1, y=dict()), dict(a='a', y=dict(b='b')))  
{'y': {'b': 'b'}, 'x': 1, 'a': 'a'}

但是,您应该记住以下注意事项:

当检查值之间是否相等时,python字典和列表将忽略重入。但是两个具有不同重入度的特征被认为是不相等的,即使它们的基值都是相等的。Feathstruct可以很容易地冻结,允许它们用作哈希表中的键。python字典和列表不能。Featstruct在其字符串表示形式中显示可重入性;而Python字典和列表则不显示可重入性。特色建筑 not 与Python字典和列表混合(例如,在执行统一时)。FeathStructs提供了许多有用的方法,例如 walk() 和 cyclic() 不适用于python dict和list。

一般来说,如果您的特性结构将包含任何重入,或者您计划将它们用作字典键,强烈建议您使用完全成熟的 FeatStruct 物体。

class nltk.featstruct.FeatDict(features=None**morefeatures)[源代码]

基类:nltk.featstruct.FeatStructdict

类似于Python字典的功能结构。即,从特征标识符到特征值的映射,其中特征标识符可以是字符串或 Feature ;其中,特征值可以是基本值(如字符串或整数),也可以是嵌套的特征结构。的功能标识符 FeatDict 有时称为“功能名称”。

如果两个功能指令为所有功能分配相同的值,并且具有相同的重入,则认为它们是相等的。

看见

FeatStruct 有关特征路径、重入、循环特征结构、可变性、冻结和哈希的信息。

clear() → None. Remove all items from D.

如果自身被冻结,则引发ValueError。

get(name_or_pathdefault=None)[源代码]

如果具有给定名称或路径的功能存在,则返回其值;否则,返回 default .

has_key(name_or_path)[源代码]

如果存在具有给定名称或路径的功能,则返回true。

pop(k[, d]) → v, remove specified key and return the corresponding value.

如果找不到键,则返回d(如果给定),否则,如果自身被冻结,则引发keyError,则引发valueError。

popitem() → (k, v), remove and return some (key, value) pair as a

2元组;但如果d为空,则引发keyror。如果自身被冻结,则引发ValueError。

setdefault(*args**kwargs)

如果关键字不在字典中,则插入值为默认值的关键字。

如果key在字典中,则返回key的值,否则返回default。如果自身冻结,则引发值错误。

update([E, ]**F) → None. Update D from dict/iterable E and F.[源代码]

如果e存在并且有.keys()方法,那么对e:d中的k执行:操作 [k] = e [k] 如果e存在,并且缺少.keys()方法,则为:对于k,e:d中的v [k] =v在任何一种情况下,后面跟着:对于f:d中的k [k] = f [k]

class nltk.featstruct.FeatList(features=None**morefeatures)[源代码]

基类:nltk.featstruct.FeatStructlist

功能值列表,其中每个功能值要么是基本值(如字符串或整数),要么是嵌套的功能结构。

功能列表可能包含可重入的功能值。“可重入特征值”是可以通过多个特征路径访问的单个特征值。功能列表也可以是循环的。

如果两个特性列表为所有特性指定相同的值,并且具有相同的重入,则认为它们是相等的。

看见

FeatStruct 有关特征路径、重入、循环特征结构、可变性、冻结和哈希的信息。

append(*args**kwargs)

将对象追加到列表末尾。如果自身冻结,则引发值错误。

extend(*args**kwargs)

通过附加iterable中的元素来扩展列表。如果自身冻结,则引发值错误。

insert(*args**kwargs)

在索引之前插入对象。如果自身冻结,则引发值错误。

pop(*args**kwargs)

移除并返回索引处的项(默认最后一个)。

如果列表为空或索引超出范围,则引发IndexError。如果自身被冻结,则引发ValueError。

remove(*args**kwargs)

删除第一次出现的值。

如果值不存在,则引发ValueError。如果自身被冻结,则引发ValueError。

reverse(*args**kwargs)

反向 就位 . 如果自身冻结,则引发值错误。

sort(*args**kwargs)

稳定排序 就位 . 如果自身冻结,则引发值错误。

class nltk.featstruct.FeatStruct(features=None**morefeatures)[源代码]

基类:nltk.sem.logic.SubstituteBindingsI

从特征标识符到特征值的映射,其中每个特征值要么是基本值(如字符串或整数),要么是嵌套的特征结构。有两种类型的功能结构:

  • 功能字典,由实现 FeatDict ,类似于python字典。功能标识符可以是 Feature 班级。

  • 功能列表,由实现 FeatList ,类似于python列表。功能标识符是整数。

功能结构可以使用简单的功能标识符或“功能路径”进行索引。功能路径是代表相应索引操作序列的功能标识符序列。特别地, fstruct[(f1,f2,...,fn)] 等于 fstruct[f1][f2]...[fn] .

特征结构可以包含可重入特征结构。“可重入特征结构”是可以通过多个特征路径访问的单个特征结构对象。特征结构也可以是循环的。如果有从特征结构到自身的任何特征路径,则特征结构是“循环”的。

如果两个特征结构为所有特征指定相同的值,并且具有相同的重入度,则认为它们是相等的。

默认情况下,特征结构是可变的。它们可以用 freeze() 方法。一旦它们被冻结,就可以进行哈希运算,从而用作字典键。

copy(deep=True)[源代码]

返回的新副本 self . 新副本不会被冻结。

参数

deep -- 如果为真,则创建深度副本;如果为假,则创建浅副本。

cyclic()[源代码]

如果此功能结构包含自身,则返回true。

equal_values(othercheck_reentrance=False)[源代码]

如果返回真 self 和 other 为每个特征指定相同的值。尤其是,如果 self[p]==other[p] 对于每个功能路径 p 这样的话 self[p] 或 other[p] 是基值(即不是嵌套的功能结构)。

参数

check_reentrance -- 如果是真的,那么如果在 self 和 other .

笔记

这个 == 等于 equal_values() 具有 check_reentrance=True .

freeze()[源代码]

使此功能结构及其包含的任何功能结构不可变。注意:此方法不会尝试“冻结”任何不是 FeatStruct ;建议您只使用不可变的功能值。

frozen()[源代码]

如果此功能结构不可变,则返回true。特征结构可以通过 freeze() 方法。不可变的特征结构不能再变,但可以使用 copy() 方法。

remove_variables()[源代码]

返回通过删除值为 Variable .

返回类型

FeatStruct

rename_variables(vars=Noneused_vars=()new_vars=None)[源代码]
看见

nltk.featstruct.rename_variables()

retract_bindings(bindings)[源代码]
看见

nltk.featstruct.retract_bindings()

substitute_bindings(bindings)[源代码]
看见

nltk.featstruct.substitute_bindings()

subsumes(other)[源代码]

如果返回真 self 归类 other . 也就是说,如果统一,则返回true self 具有 other 将导致特征结构等于 other .

unify(otherbindings=Nonetrace=Falsefail=Nonerename_vars=True)[源代码]
variables()[源代码]
看见

nltk.featstruct.find_variables()

walk()[源代码]

返回生成此功能结构的迭代器及其包含的每个功能结构。每个功能结构将只生成一次。

class nltk.featstruct.FeatStructReader(features=(*slash**type*)fdict_class=flist_class=logic_parser=None)[源代码]

基类:object

VALUE_HANDLERS = [('read_fstruct_value', re.compile('\\s*(?:\\((\\d+)\\)\\s*)?(\\??[\\w-]+)?(\\[)')), ('read_var_value', re.compile('\\?[a-zA-Z_][a-zA-Z0-9_]*')), ('read_str_value', re.compile('[uU]?[rR]?([\'"])')), ('read_int_value', re.compile('-?\\d+')), ('read_sym_value', re.compile('[a-zA-Z_][a-zA-Z0-9_]*')), ('read_app_value', re.compile('<(app)\\((\\?[a-z][a-z]*)\\s*,\\s*(\\?[a-z][a-z]*)\\)>')), ('read_logic_value', re.compile('<(.*?)(?')), ('read_set_value', re.compile('{')), ('read_tuple_value', re.compile('\\('))]

指示应如何处理功能值的表。表中的每个条目都是一对(handler、regexp)。具有匹配regexp的第一个条目将调用其处理程序。处理程序应具有以下签名::

def handler(s, position, reentrances, match): ...

并且应该返回一个元组(value,position),其中position是值结束的字符串位置。(注意:这里的秩序很重要!)

fromstring(sfstruct=None)[源代码]

将特征结构的字符串表示形式(由repr显示)转换为 FeatStruct . 此过程对字符串表示形式施加以下限制:

  • 功能名称不能包含以下任何内容:空白、括号、引号、等号、短划线、逗号和方括号。功能名称不能以加号或减号开头。

  • 只支持以下基本功能值:字符串、整数、变量、无和未加引号的字母数字字符串。

  • 对于可重入值,第一次提及必须指定一个可重入标识符和一个值;随后提及的任何内容都必须使用箭头 ('->' )引用重入标识符。

read_app_value(spositionreentrancesmatch)[源代码]

主要包括向后兼容。

read_fstruct_value(spositionreentrancesmatch)[源代码]
read_int_value(spositionreentrancesmatch)[源代码]
read_logic_value(spositionreentrancesmatch)[源代码]
read_partial(sposition=0reentrances=Nonefstruct=None)[源代码]

在功能结构中读取的助手函数。

参数
  • s -- 要读取的字符串。

  • position -- 要开始分析的字符串中的位置。

  • reentrances -- 从重入ID到值的字典。默认为空字典。

返回

通过解析创建的特征结构的元组(val,pos)和解析的特征结构结束的位置。

返回类型

bool

read_set_value(spositionreentrancesmatch)[源代码]
read_str_value(spositionreentrancesmatch)[源代码]
read_sym_value(spositionreentrancesmatch)[源代码]
read_tuple_value(spositionreentrancesmatch)[源代码]
read_value(spositionreentrances)[源代码]
read_var_value(spositionreentrancesmatch)[源代码]
class nltk.featstruct.Feature(namedefault=Nonedisplay=None)[源代码]

基类:object

专门用于放置附加约束、默认值等的功能标识符。

property default

此功能的默认值。

property display

自定义显示位置:可以是前缀或斜线。

property name

此功能的名称。

read_value(spositionreentrancesparser)[源代码]
unify_base_values(fval1fval2bindings)[源代码]

如果可能,返回单个值。如果没有,返回值 UnificationFailure .

class nltk.featstruct.RangeFeature(namedefault=Nonedisplay=None)[源代码]

基类:nltk.featstruct.Feature

RANGE_RE = re.compile('(-?\\d+):(-?\\d+)')
read_value(spositionreentrancesparser)[源代码]
unify_base_values(fval1fval2bindings)[源代码]

如果可能,返回单个值。如果没有,返回值 UnificationFailure .

class nltk.featstruct.SlashFeature(namedefault=Nonedisplay=None)[源代码]

基类:nltk.featstruct.Feature

read_value(spositionreentrancesparser)[源代码]
nltk.featstruct.conflicts(fstruct1fstruct2trace=0)[源代码]

返回分配了不兼容值的所有功能的功能路径列表 fstruct1 和 fstruct2 .

返回类型

list(tuple)

nltk.featstruct.subsumes(fstruct1fstruct2)[源代码]

如果返回真 fstruct1 归类 fstruct2 . 也就是说,如果统一,则返回true fstruct1 具有 fstruct2 将导致特征结构等于 fstruct2.

返回类型

bool

nltk.featstruct.unify(fstruct1fstruct2bindings=Nonetrace=Falsefail=Nonerename_vars=Truefs_class='default')[源代码]

统一 fstruct1 具有 fstruct2 ,并返回生成的特征结构。这个统一的功能结构是最小的功能结构,它包含来自两个功能的所有功能值分配 fstruct1 和 fstruct2 这就保留了所有的再入。

如果不存在这样的功能结构(因为 fstruct1 和 fstruct2 为某些功能指定不兼容的值),然后统一失败,以及 unify 没有返回。

绑定变量被其值替换。别名变量替换为其代表变量(如果未绑定)或其代表变量(如果绑定)的值。即,如果变量 v 是在 bindings 然后 v 被替换 bindings[v] . 这将重复,直到变量被未绑定的变量或非变量值替换。

未绑定变量在与值统一时绑定;在与变量统一时别名。即,如果变量 v 不在 bindings ,并与变量或值统一 x 然后 bindings[v] 设置为 x .

如果 bindings 未指定,则假定所有变量都未绑定。即。, bindings 默认为空的dict。

>>> from nltk.featstruct import FeatStruct
>>> FeatStruct('[a=?x]').unify(FeatStruct('[b=?x]'))
[a=?x, b=?x2]
参数
  • bindings (dict(Variable -> any)) -- 在统一期间要使用和更新的一组变量绑定。

  • trace (bool) -- 如果为真,则生成跟踪输出。

  • rename_vars (bool) -- 如果为真,则重命名 fstruct2 也用于 fstruct1 ,以避免变量名冲突。

想要了解NLTK,请点击这里

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