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 物体。
nltk.featstruct.FeatDict(features=None, **morefeatures)[源代码]基类:nltk.featstruct.FeatStruct, dict
类似于Python字典的功能结构。即,从特征标识符到特征值的映射,其中特征标识符可以是字符串或 Feature ;其中,特征值可以是基本值(如字符串或整数),也可以是嵌套的特征结构。的功能标识符 FeatDict 有时称为“功能名称”。
如果两个功能指令为所有功能分配相同的值,并且具有相同的重入,则认为它们是相等的。
FeatStruct 有关特征路径、重入、循环特征结构、可变性、冻结和哈希的信息。
get(name_or_path, default=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 a2元组;但如果d为空,则引发keyror。如果自身被冻结,则引发ValueError。
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]
nltk.featstruct.FeatList(features=None, **morefeatures)[源代码]基类:nltk.featstruct.FeatStruct, list
功能值列表,其中每个功能值要么是基本值(如字符串或整数),要么是嵌套的功能结构。
功能列表可能包含可重入的功能值。“可重入特征值”是可以通过多个特征路径访问的单个特征值。功能列表也可以是循环的。
如果两个特性列表为所有特性指定相同的值,并且具有相同的重入,则认为它们是相等的。
FeatStruct 有关特征路径、重入、循环特征结构、可变性、冻结和哈希的信息。
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(other, check_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 .
rename_variables(vars=None, used_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(other, bindings=None, trace=False, fail=None, rename_vars=True)[源代码]variables()[源代码]nltk.featstruct.find_variables()
walk()[源代码]返回生成此功能结构的迭代器及其包含的每个功能结构。每个功能结构将只生成一次。
nltk.featstruct.FeatStructReader(features=(*slash*, *type*), fdict_class=基类: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(s, fstruct=None)[源代码]将特征结构的字符串表示形式(由repr显示)转换为 FeatStruct . 此过程对字符串表示形式施加以下限制:
功能名称不能包含以下任何内容:空白、括号、引号、等号、短划线、逗号和方括号。功能名称不能以加号或减号开头。
只支持以下基本功能值:字符串、整数、变量、无和未加引号的字母数字字符串。
对于可重入值,第一次提及必须指定一个可重入标识符和一个值;随后提及的任何内容都必须使用箭头 ('->' )引用重入标识符。
read_app_value(s, position, reentrances, match)[源代码]主要包括向后兼容。
read_fstruct_value(s, position, reentrances, match)[源代码]read_int_value(s, position, reentrances, match)[源代码]read_logic_value(s, position, reentrances, match)[源代码]read_partial(s, position=0, reentrances=None, fstruct=None)[源代码]在功能结构中读取的助手函数。
s -- 要读取的字符串。
position -- 要开始分析的字符串中的位置。
reentrances -- 从重入ID到值的字典。默认为空字典。
通过解析创建的特征结构的元组(val,pos)和解析的特征结构结束的位置。
bool
read_set_value(s, position, reentrances, match)[源代码]read_str_value(s, position, reentrances, match)[源代码]read_sym_value(s, position, reentrances, match)[源代码]read_tuple_value(s, position, reentrances, match)[源代码]read_value(s, position, reentrances)[源代码]read_var_value(s, position, reentrances, match)[源代码]nltk.featstruct.Feature(name, default=None, display=None)[源代码]基类:object
专门用于放置附加约束、默认值等的功能标识符。
read_value(s, position, reentrances, parser)[源代码]unify_base_values(fval1, fval2, bindings)[源代码]如果可能,返回单个值。如果没有,返回值 UnificationFailure .
nltk.featstruct.RangeFeature(name, default=None, display=None)[源代码]read_value(s, position, reentrances, parser)[源代码]unify_base_values(fval1, fval2, bindings)[源代码]如果可能,返回单个值。如果没有,返回值 UnificationFailure .
nltk.featstruct.SlashFeature(name, default=None, display=None)[源代码]read_value(s, position, reentrances, parser)[源代码]nltk.featstruct.conflicts(fstruct1, fstruct2, trace=0)[源代码]返回分配了不兼容值的所有功能的功能路径列表 fstruct1 和 fstruct2 .
list(tuple)
nltk.featstruct.subsumes(fstruct1, fstruct2)[源代码]如果返回真 fstruct1 归类 fstruct2 . 也就是说,如果统一,则返回true fstruct1 具有 fstruct2 将导致特征结构等于 fstruct2.
bool
nltk.featstruct.unify(fstruct1, fstruct2, bindings=None, trace=False, fail=None, rename_vars=True, fs_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,请点击这里