NLTK封装¶
nltk
包裹¶
collocations
模块¶
在语料库中识别搭配的工具——通常连续出现的单词。它们也可用于查找单词出现之间的其他关联。参见Manning和Schutze第5章,网址为http://nlp.stanford.edu/fsnlp/promo/colloc.pdf,以及http://ngram.sourceforge.net上的文本::nsp perl包。
寻找搭配需要首先计算单词的频率和它们在其他单词上下文中的出现。通常情况下,单词的集合将需要过滤以只保留有用的内容术语。然后,每个词的ngram都可以根据某种关联度量进行评分,以确定每个ngram作为搭配的相对可能性。
这个 BigramCollocationFinder
和 TrigramCollocationFinder
类提供这些功能,取决于提供的函数在给定适当的频率计数的情况下对NGRAM进行评分。在bigram_度量和trigram_度量中提供了许多标准关联度量。
- class nltk.collocations.BigramCollocationFinder(word_fd, bigram_fd, window_size=2)[源代码]¶
基类:
nltk.collocations.AbstractCollocationFinder
用于查找和排序bigram搭配或其他关联度量的工具。使用from_Words()而不是直接构造实例通常很有用。
- default_ws = 2¶
- class nltk.collocations.QuadgramCollocationFinder(word_fd, quadgram_fd, ii, iii, ixi, ixxi, iixi, ixii)[源代码]¶
基类:
nltk.collocations.AbstractCollocationFinder
用于查找和排序四图搭配或其他关联度量的工具。使用from_Words()而不是直接构造实例通常很有用。
- default_ws = 4¶
data
模块¶
函数来查找和加载NLTK资源文件,如语料库、语法和保存的处理对象。资源文件使用URL标识,例如 nltk:corpora/abc/rural.txt
或 http://nltk.org/sample/toy.cfg
. 支持以下URL协议:
file:path
:指定路径为的文件 path . 可以使用相对路径和绝对路径。
http://host/path
:指定存储在Web服务器上的文件 host 在路径上 path .
nltk:path
:指定存储在NLTK数据包中的文件 path . NLTK将在指定的目录中搜索这些文件nltk.data.path
.
如果未指定协议,则默认协议 nltk:
将被使用。
此模块提供可用于访问资源文件的函数,给定其URL: load()
加载给定资源,并将其添加到资源缓存;以及 retrieve()
将给定资源复制到本地文件。
- nltk.data.AUTO_FORMATS = {'cfg': 'cfg', 'fcfg': 'fcfg', 'fol': 'fol', 'json': 'json', 'logic': 'logic', 'pcfg': 'pcfg', 'pickle': 'pickle', 'text': 'text', 'txt': 'text', 'val': 'val', 'yaml': 'yaml'}¶
从文件扩展名到格式名的字典映射,当format=“auto”决定给定资源URL的格式时,由load()使用。
- nltk.data.BufferedGzipFile(*args, **kwargs)¶
A
GzipFile
子类以与旧的nltk版本兼容。使用
GzipFile
因为它还可以在所有支持的Python版本中进行缓冲。@不推荐:使用gzip.gzip文件相反,因为它也使用缓冲区。
- nltk.data.FORMATS = {'cfg': 'A context free grammar.', 'fcfg': 'A feature CFG.', 'fol': 'A list of first order logic expressions, parsed with nltk.sem.logic.Expression.fromstring.', 'json': 'A serialized python object, stored using the json module.', 'logic': 'A list of first order logic expressions, parsed with nltk.sem.logic.LogicParser. Requires an additional logic_parser parameter', 'pcfg': 'A probabilistic CFG.', 'pickle': 'A serialized python object, stored using the pickle module.', 'raw': 'The raw (byte string) contents of a file.', 'text': 'The raw (unicode string) contents of a file. ', 'val': 'A semantic valuation, parsed by nltk.sem.Valuation.fromstring.', 'yaml': 'A serialized python object, stored using the yaml module.'}¶
描述由nltk的load()方法支持的格式的字典。键是格式名,值是格式描述。
- class nltk.data.FileSystemPathPointer(_path)[源代码]¶
基类:
nltk.data.PathPointer
,str
一种路径指针,用于标识可通过给定的绝对路径直接访问的文件。
- join(fileid)[源代码]¶
返回一个新的路径指针,该指针从由该指针标识的路径开始,然后按照
fileid
. 的路径组件fileid
应该用正斜杠分隔,而不管底层文件系统的路径分隔符是什么。
- property path¶
此路径指针标识的绝对路径。
- class nltk.data.GzipFileSystemPathPointer(_path)[源代码]¶
基类:
nltk.data.FileSystemPathPointer
一个子类
FileSystemPathPointer
它标识位于给定绝对路径的gzip压缩文件。GzipFileSystemPathPointer
适用于大型gzip压缩pickle对象的高效加载。
- class nltk.data.OpenOnDemandZipFile(filename)[源代码]¶
基类:
zipfile.ZipFile
一个子类
zipfile.ZipFile
它在不使用文件指针时关闭文件指针;当需要从zipfile读取数据时重新打开文件指针。这对于减少同时访问许多zip文件时打开的文件句柄的数量非常有用。OpenOnDemandZipFile
必须使用文件名而不是类似文件的对象构造(以允许重新打开)。OpenOnDemandZipFile
是只读的(即write()
和writestr()
已禁用。
- class nltk.data.PathPointer[源代码]¶
基类:
object
“path pointers”的抽象基类,由NLTK的数据包用于标识特定路径。存在两个子类:
FileSystemPathPointer
标识可通过给定绝对路径直接访问的文件。ZipFilePathPointer
标识包含在zipfile中的文件,可以通过读取该zipfile来访问该文件。
- class nltk.data.SeekableUnicodeStreamReader(stream, encoding, errors='strict')[源代码]¶
基类:
object
将源字节流自动编码为Unicode(如
codecs.StreamReader
)但仍然支持seek()
和tell()
操作正确。这与codecs.StreamReader
提供 破碎的seek()
和tell()
方法。这门课的动机是
StreamBackedCorpusView
,广泛利用seek()
和tell()
,并且需要能够处理Unicode编码的文件。注意:这个类需要无状态解码器。据我所知,这不会导致任何Python内置的Unicode编码出现问题。
- DEBUG = True¶
- bytebuffer¶
使用已读取但尚未解码的字节的缓冲区。这仅在读取的最后字节不构成字符的完整编码时使用。
- property closed¶
如果基础流已关闭,则为true。
- decode¶
用于将字节字符串解码为Unicode字符串的函数。
- encoding¶
应用于对基础流进行编码的编码的名称。
- errors¶
从基础流解码数据时应使用的错误模式。可以是“strict”、“ignore”或“replace”。
- linebuffer¶
使用的缓冲区
readline()
保留已被读取但尚未被返回的字符read()
或readline()
. 这个缓冲区由一个Unicode字符串列表组成,其中每个字符串对应一行。列表的最后一个元素可能是完整的行,也可能不是完整的行。注意,linebuffer的存在使得tell()
操作更复杂,因为它必须回溯到缓冲区的开头,以确定底层字节流中的正确文件位置。
- property mode¶
基础流的模式。
- property name¶
基础流的名称。
- read(size=None)[源代码]¶
读到
size
字节,使用该读卡器的编码对其进行解码,并返回生成的Unicode字符串。- 参数
size (int) -- 要读取的最大字节数。如果未指定,则读取尽可能多的字节。
- 返回类型
unicode
- readline(size=None)[源代码]¶
读取一行文本,使用该读卡器的编码对其进行解码,然后返回生成的Unicode字符串。
- 参数
size (int) -- 要读取的最大字节数。如果之前没有遇到换行符
size
字节已被读取,则返回的值可能不是完整的文本行。
- readlines(sizehint=None, keepends=True)[源代码]¶
读取此文件的内容,使用此读取器的编码对其进行解码,并将其作为Unicode行的列表返回。
- 返回类型
list(unicode)
- 参数
sizehint -- 忽略。
keepends -- 如果为false,则去掉换行符。
- seek(offset, whence=0)[源代码]¶
将流移动到新的文件位置。如果读卡器正在维护任何缓冲区,那么它们将被清除。
- 参数
offset -- 字节计数偏移量。
whence -- 如果为0,则偏移量是从文件开始的偏移量(偏移量应为正),如果为1,则偏移量是从当前位置开始的偏移量(偏移量可以为正或负);如果为2,则偏移量是从文件结束的偏移量(偏移量通常应为负)。
- stream¶
底层流。
- nltk.data.find(resource_name, paths=None)[源代码]¶
通过搜索路径中的目录和zip文件来查找给定的资源,其中无或空字符串指定绝对路径。返回相应的路径名。如果找不到给定的资源,则引发
LookupError
,其消息提供指向NLTK下载程序安装说明的指针。压缩文件处理:
如果
resource_name
包含具有.zip
扩展名,然后假设它是一个zipfile;剩下的路径组件用于查看zipfile内部。如果
nltk.data.path
有一个.zip
扩展名,则假定为zipfile。如果最初找不到不包含任何zipfile组件的给定资源名,则
find()
将再次尝试查找该资源,方法是替换每个组件 p 在道路上与 p.zip/p . 例如,这允许find()
映射资源名称corpora/chat80/cities.pl
指向zip文件路径指针corpora/chat80.zip/chat80/cities.pl
.使用时
find()
要定位zipfile中包含的目录,资源名称必须以正斜杠字符结尾。否则,find()
将找不到目录。
- 参数
resource_name (str or unicode) -- 要搜索的资源的名称。资源名是POSIX样式的相对路径名,例如
corpora/brown
. 目录名将自动转换为平台相应的路径分隔符。- 返回类型
str
- nltk.data.load(resource_url, format='auto', cache=True, verbose=False, logic_parser=None, fstruct_reader=None, encoding=None)[源代码]¶
从NLTK数据包加载给定的资源。当前支持以下资源格式:
pickle
json
yaml
cfg
(上下文无关语法)pcfg
(概率CFG)fcfg
(基于特征的CFG)fol
(一阶逻辑公式)logic
(逻辑公式由给定的逻辑分析器解析)val
(一阶逻辑模型的估值)text
(文件内容为Unicode字符串)raw
(原始文件内容作为字节字符串)
如果未指定格式,
load()
将尝试根据资源名的文件扩展名确定格式。如果失败了,load()
将提高ValueError
例外。对于所有文本格式(除
pickle
,json
,yaml
和raw
,它尝试使用utf-8解码原始内容,如果这不起作用,它将尝试使用iso-8859-1(拉丁语-1),除非encoding
指定。- 参数
resource_url (str) -- 指定从何处加载资源的URL。默认协议是“nltk:”,它在nltk数据包中搜索文件。
cache (bool) -- 如果为true,请将此资源添加到缓存中。如果load()在其缓存中找到资源,则它将从缓存中返回该资源,而不是加载它。
verbose (bool) -- 如果为真,则在加载资源时打印消息。从缓存中检索资源时不显示消息。
logic_parser (LogicParser) -- 将用于分析逻辑表达式的分析器。
fstruct_reader (FeatStructReader) -- 将用于分析FCFG的功能结构的分析器。
encoding (str) -- 输入的编码;仅用于文本格式。
- nltk.data.path = ['/home/bk/nltk_data', '/tmp/vpy/nltk_data', '/tmp/vpy/share/nltk_data', '/tmp/vpy/lib/nltk_data', '/usr/share/nltk_data', '/usr/local/share/nltk_data', '/usr/lib/nltk_data', '/usr/local/lib/nltk_data']¶
NLTK数据包可能驻留的目录列表。在数据包中查找资源时,将按顺序检查这些目录。请注意,这允许用户在自己的资源版本中替换资源(例如,在其主目录的~/nltk_data下)。
downloader
模块¶
featstruct
模块¶
用于表示特征结构以及对这些特征结构执行基本操作的基本数据类。特征结构是从特征标识符到特征值的映射,其中每个特征值要么是基本值(如字符串或整数),要么是嵌套的特征结构。有两种类型的特征结构,由以下两个子类实现 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.FeatStruct
,dict
类似于Python字典的功能结构。即,从特征标识符到特征值的映射,其中特征标识符可以是字符串或
Feature
;其中,特征值可以是基本值(如字符串或整数),也可以是嵌套的特征结构。的功能标识符FeatDict
有时称为“功能名称”。如果两个功能指令为所有功能分配相同的值,并且具有相同的重入,则认为它们是相等的。
- 看见
FeatStruct
有关特征路径、重入、循环特征结构、可变性、冻结和哈希的信息。
- clear() None. Remove all items from D. ¶
如果自身被冻结,则引发ValueError。
- 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。如果自身冻结,则引发值错误。
- class nltk.featstruct.FeatList(features=None, **morefeatures)[源代码]¶
基类:
nltk.featstruct.FeatStruct
,list
功能值列表,其中每个功能值要么是基本值(如字符串或整数),要么是嵌套的功能结构。
功能列表可能包含可重入的功能值。“可重入特征值”是可以通过多个特征路径访问的单个特征值。功能列表也可以是循环的。
如果两个特性列表为所有特性指定相同的值,并且具有相同的重入,则认为它们是相等的。
- 看见
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()
方法。一旦它们被冻结,就可以进行哈希运算,从而用作字典键。- 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
.
- class nltk.featstruct.FeatStructReader(features=(*slash*, *type*), fdict_class=<class 'nltk.featstruct.FeatStruct'>, flist_class=<class 'nltk.featstruct.FeatList'>, 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(s, fstruct=None)[源代码]¶
将特征结构的字符串表示形式(由repr显示)转换为
FeatStruct
. 此过程对字符串表示形式施加以下限制:功能名称不能包含以下任何内容:空白、括号、引号、等号、短划线、逗号和方括号。功能名称不能以加号或减号开头。
只支持以下基本功能值:字符串、整数、变量、无和未加引号的字母数字字符串。
对于可重入值,第一次提及必须指定一个可重入标识符和一个值;随后提及的任何内容都必须使用箭头 (
'->'
)引用重入标识符。
- class nltk.featstruct.Feature(name, default=None, display=None)[源代码]¶
基类:
object
专门用于放置附加约束、默认值等的功能标识符。
- property default¶
此功能的默认值。
- property display¶
自定义显示位置:可以是前缀或斜线。
- property name¶
此功能的名称。
- class nltk.featstruct.RangeFeature(name, default=None, display=None)[源代码]¶
-
- RANGE_RE = re.compile('(-?\\d+):(-?\\d+)')¶
- nltk.featstruct.conflicts(fstruct1, fstruct2, trace=0)[源代码]¶
返回分配了不兼容值的所有功能的功能路径列表
fstruct1
和fstruct2
.- 返回类型
list(tuple)
- nltk.featstruct.subsumes(fstruct1, fstruct2)[源代码]¶
如果返回真
fstruct1
归类fstruct2
. 也就是说,如果统一,则返回truefstruct1
具有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
,以避免变量名冲突。
grammar
模块¶
用于表示上下文无关语法的基本数据类。“语法”指定哪些树可以表示给定文本的结构。这些树中的每一个都被称为文本的“解析树”(或者简单地称为“解析”)。在“上下文无关”语法中,一段文本的解析树集只能依赖于该段,而不能依赖于文本的其余部分(即该段的上下文)。上下文无关语法常被用来寻找句子可能的句法结构。在此上下文中,解析树的叶子是单词标记;节点值是短语类别,例如 NP
和 VP
.
这个 CFG
类用于对上下文无关语法进行编码。各 CFG
由开始符号和一组产品组成。“开始符号”指定分析树的根节点值。例如,用于语法分析的起始符号通常是 S
. 开始符号使用 Nonterminal
类,下面讨论。
语法的“产品”指定解析树可以包含哪些父子关系。每个产品都指定特定节点可以是特定子集合的父节点。例如,生产 <S> -> <NP> <VP>
指定一个 S
节点可以是 NP
节点与A VP
节点。
语法生成由 Production
班级。各 Production
由左侧和右侧组成。“左手边”是 Nonterminal
它指定潜在父级的节点类型;“右侧”是一个列表,指定该父级的允许子级。此列表包括 Nonterminals
和文本类型:每个 Nonterminal
指示相应的子级可以是 TreeToken
具有指定的节点类型;并且每个文本类型指示对应的子级可以是 Token
和那个类型的。
这个 Nonterminal
类用于区分节点值和叶值。这可以防止语法意外地使用叶值(如英语单词“a”)作为子树的节点。在一个 CFG
,所有节点值都包装在 Nonterminal
班级。但是请注意,语法指定的树 not 包括这些 Nonterminal
包装纸。
语法也可以得到更为程序化的解释。根据这种解释,语法指定任何树结构 tree 可通过以下程序产生:
更换左侧的操作( 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
- 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_leftcorner(cat, left)[源代码]¶
如果Left是cat的左角,则为true,其中Left可以是终端,也可以是非终端。
- 参数
cat (Nonterminal) -- 左角的父级
left (Terminal or Nonterminal) -- 建议的左角
- 返回类型
bool
- 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)
- productions(lhs=None, rhs=None, empty=False)[源代码]¶
返回语法产物,由左侧或右侧的第一项筛选。
- 参数
lhs -- 仅返回具有给定左侧的产品。
rhs -- 仅返回右手边具有给定第一项的生产。
empty -- 仅返回右侧为空的生产。
- 返回
与给定约束匹配的产品列表。
- 返回类型
list(Production)
- class nltk.grammar.DependencyGrammar(productions)[源代码]¶
基类:
object
依赖语法。DependencyGrammar由一组产品组成。每个产品都指定一对单词之间的标题/修饰词关系。
- class nltk.grammar.Nonterminal(symbol)[源代码]¶
基类:
object
上下文无关文法的非终端符号。
Nonterminal
是节点值的包装类;它由Production
对象来区分节点值和叶值。由包装的节点值Nonterminal
被称为“符号”。符号通常是表示短语类别的字符串(例如"NP"
或"VP"
)但是,有时会使用更复杂的符号类型(例如,用于词汇化语法)。因为符号是节点值,所以它们必须是不可变的和可哈希的。二Nonterminals
如果符号相等,则视为相等。- 看见
CFG
,Production
- 变量
_symbol -- 与此对应的节点值
Nonterminal
. 此值必须是不可变的和可哈希的。
- class nltk.grammar.PCFG(start, productions, calculate_leftcorners=True)[源代码]¶
-
概率上下文无关语法。PCFG由一个开始状态和一组具有概率的生产组成。终端和非终端集由产品隐式指定。
PCFG生产使用
ProbabilisticProduction
班级。PCFGs
施加一个约束,即任何给定左手边的一组生产必须具有总和为1的概率(允许小误差)。如果需要对产品进行有效的基于键的访问,可以使用子类来实现它。
- 变量
EPSILON -- 用于检查具有给定左侧的生产是否具有总和为1的概率的可接受误差范围。
- EPSILON = 0.01¶
- class nltk.grammar.ProbabilisticProduction(lhs, rhs, **prob)[源代码]¶
基类:
nltk.grammar.Production
,nltk.probability.ImmutableProbabilisticMixIn
概率上下文无关文法的产生。光子晶体光纤
ProbabilisticProduction
基本上只是一个Production
这有一个相关的概率,它表示使用这种产品的可能性有多大。尤其是ProbabilisticProduction
记录其右侧是其左侧的任何给定事件的正确实例化的可能性。- 看见
Production
- class nltk.grammar.Production(lhs, rhs)[源代码]¶
基类:
object
语法作品。每个产品都将“左侧”上的一个符号映射到“右侧”上的一系列符号。(对于上下文无关的产品,左侧必须是
Nonterminal
,右侧是一系列端子和Nonterminals
)“终端”可以是任何非Nonterminal
. 通常,终端是表示单词的字符串,例如"dog"
或"under"
.- 看见
CFG
- 看见
DependencyGrammar
- 看见
Nonterminal
- 变量
_lhs -- 生产的左侧。
_rhs -- 生产的右侧。
- nltk.grammar.induce_pcfg(start, productions)[源代码]¶
从产品列表中归纳出PCFG语法。
PCFG中A->B C生产的概率为:
计数(A->B C)p(b,c_a)=----------式中 * 有右手边的吗计数(A-) * )- 参数
start (Nonterminal) -- 开始符号
productions (list(Production)) -- 定义语法的产品列表
- 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) -- 语法的编码,如果它是二进制字符串
help
模块¶
probability
模块¶
用于表示和处理概率信息的类。
这个 FreqDist
类用于编码“频率分布”,它计算实验的每个结果发生的次数。
这个 ProbDistI
类为“概率分布”定义了一个标准接口,该接口对实验的每个结果的概率进行编码。概率分布有两种类型:
“导出概率分布”是根据频率分布创建的。他们试图模拟产生频率分布的概率分布。
“分析概率分布”直接由参数(如方差)创建。
这个 ConditionalFreqDist
类和 ConditionalProbDistI
接口用于对条件分布进行编码。条件概率分布可以推导或分析;但目前唯一的实现是 ConditionalProbDistI
接口是 ConditionalProbDist
,派生分布。
- class nltk.probability.ConditionalFreqDist(cond_samples=None)[源代码]¶
基类:
collections.defaultdict
在不同条件下运行的单个实验的频率分布集合。条件频率分布用于记录每个样本发生的次数,给定实验运行的条件。例如,条件频率分布可以用来记录文档中每个单词(类型)的频率(给定其长度)。形式上,条件频率分布可以定义为一个函数,在该条件下从每个条件映射到实验的频率分布。
条件频率分布通常是通过在各种条件下重复运行一个实验,并在适当条件下增加样本结果计数来构建的。例如,下面的代码将生成一个条件频率分布,该分布编码每种单词类型发生的频率(给定该单词类型的长度):
>>> from nltk.probability import ConditionalFreqDist >>> from nltk.tokenize import word_tokenize >>> sent = "the the the dog dog some other words that we do not care about" >>> cfdist = ConditionalFreqDist() >>> for word in word_tokenize(sent): ... condition = len(word) ... cfdist[condition][word] += 1
这样做的等效方法是使用初始值设定项:
>>> cfdist = ConditionalFreqDist((len(word), word) for word in word_tokenize(sent))
使用索引运算符访问每个条件的频率分布:
>>> cfdist[3] FreqDist({'the': 3, 'dog': 2, 'not': 1}) >>> cfdist[3].freq('the') 0.5 >>> cfdist[3]['dog'] 2
当使用索引运算符访问以前未访问过的条件的频率分布时,
ConditionalFreqDist
为该条件创建新的空freqdist。- conditions()[源代码]¶
返回为此访问的条件列表
ConditionalFreqDist
. 使用索引运算符访问给定条件的频率分布。注意,某些条件下的频率分布可能包含零样本结果。- 返回类型
list
- class nltk.probability.ConditionalProbDist(cfdist, probdist_factory, *factory_args, **factory_kw_args)[源代码]¶
基类:
nltk.probability.ConditionalProbDistI
一个条件概率分布模型的实验,用来产生一个条件频率分布。ConditionalProbDist由
ConditionalFreqDist
和AProbDist
工厂:这个
ConditionalFreqDist
指定每个条件的频率分布。这个
ProbDist
工厂是一个函数,它接受一个条件的频率分布,并返回其概率分布。一ProbDist
类的名称(例如MLEProbDist
或HeldoutProbDist
)可用于指定该类的构造函数。
第一个论点
ProbDist
factory是应该建模的频率分布;其余参数由factory_args
参数ConditionalProbDist
构造函数。例如,以下代码构造ConditionalProbDist
,其中每个条件的概率分布是ELEProbDist
有10个箱子:>>> from nltk.corpus import brown >>> from nltk.probability import ConditionalFreqDist >>> from nltk.probability import ConditionalProbDist, ELEProbDist >>> cfdist = ConditionalFreqDist(brown.tagged_words()[:5000]) >>> cpdist = ConditionalProbDist(cfdist, ELEProbDist, 10) >>> cpdist['passed'].max() 'VBD' >>> cpdist['passed'].prob('VBD') 0.423...
- class nltk.probability.ConditionalProbDistI[源代码]¶
基类:
dict
在不同条件下运行的单个实验的概率分布集合。条件概率分布是用来估计每一个样本的可能性,给定的条件下,实验运行。例如,根据单词类型的长度,可以使用条件概率分布来估计文档中每个单词类型的概率。形式上,条件概率分布可以定义为从每个条件映射到
ProbDist
在那种条件下的实验。
- class nltk.probability.CrossValidationProbDist(freqdists, bins)[源代码]¶
-
实验概率分布的交叉验证估计用于生成一组频率分布。样本概率的“交叉验证估计”是通过平均每对频率分布中样本的保留估计得出的。
- SUM_TO_ONE = False¶
如果此概率分布中样本的概率始终为1,则为真。
- class nltk.probability.DictionaryConditionalProbDist(probdist_dict)[源代码]¶
基类:
nltk.probability.ConditionalProbDistI
另一种条件probdist,它只包装probdist的字典,而不是从freqdist创建这些字典。
- class nltk.probability.DictionaryProbDist(prob_dict=None, log=False, normalize=False)[源代码]¶
-
一种概率分布,其概率由给定的字典直接规定。给定的字典将样本映射到概率。
- class nltk.probability.ELEProbDist(freqdist, bins=None)[源代码]¶
基类:
nltk.probability.LidstoneProbDist
用于生成频率分布的实验概率分布的预期似然估计。“预期可能性估计”用计数来近似一个样本的概率。 c 从一个实验 N 结果与 B 箱作为 (c+0.5)/(N+B/2) . 这相当于在每个存储单元的计数中加上0.5,并对产生的频率分布进行最大似然估计。
- class nltk.probability.FreqDist(samples=None)[源代码]¶
基类:
collections.Counter
实验结果的频率分布。频率分布记录了每一个实验结果发生的次数。例如,频率分布可以用来记录文档中每种单词类型的频率。从形式上讲,频率分布可以定义为从每个样本到样本作为结果出现的次数的函数映射。
频率分布通常是通过运行一些实验来构建的,并且每次作为一个实验的结果时,增加一个样本的计数。例如,以下代码将生成一个频率分布,该频率分布编码文本中每个单词的出现频率:
>>> from nltk.tokenize import word_tokenize >>> from nltk.probability import FreqDist >>> sent = 'This is an example sentence' >>> fdist = FreqDist() >>> for word in word_tokenize(sent): ... fdist[word.lower()] += 1
这样做的等效方法是使用初始值设定项:
>>> fdist = FreqDist(word.lower() for word in word_tokenize(sent))
- B()[源代码]¶
返回计数大于零的样本值(或“bin”)的总数。对于记录的样本结果总数,使用
FreqDist.N()
. (freqdist.b()与len(freqdist)相同。)- 返回类型
int
- freq(sample)[源代码]¶
返回给定样本的频率。样本频率定义为该样本的计数除以该freqdist记录的样本结果总数。样本计数定义为此freqdist记录样本结果的次数。频率总是范围内的实数 [0, 1] .
- 参数
sample (any) -- 应返回其频率的样本。
- 返回类型
float
- max()[源代码]¶
返回此频率分布中结果数量最多的样本。如果两个或多个样本具有相同数量的结果,则返回其中一个;返回的样本未定义。如果在这个频率分布中没有发生任何结果,则返回none。
- 返回
在这个频率分布中具有最大结果数的样本。
- 返回类型
any or None
- plot(*args, **kwargs)[源代码]¶
从频率分布中绘制样本,首先显示最频繁的样本。如果提供了一个整数参数,请在绘制了这么多样本后停止。对于累积图,指定cumulative=true。(需要安装Matplotlib。)
- 参数
title (bool) -- 图表的标题
cumulative -- 用于指定绘图是否累积的标志(默认值=假)
- pprint(maxlen=10, stream=None)[源代码]¶
将此freqdist的字符串表示形式打印到“stream”
- 参数
maxlen (int) -- 要打印的最大项目数
stream -- 要打印到的流。默认为标准输出
- r_Nr(bins=None)[源代码]¶
返回字典映射r到nr,即频率为r的样本数,其中nr>0。
- 参数
bins (int) -- 可能的样本结果数。
bins
用于计算nr(0)。特别是,nr(0)是bins-self.B()
. 如果bins
未指定,默认为self.B()
(因此nr(0)将为0)。- 返回类型
int
- class nltk.probability.HeldoutProbDist(base_fdist, heldout_fdist, bins=None)[源代码]¶
-
实验概率分布的Heldout估计用于生成两个频率分布。这两种频率分布称为“Heldout频率分布”和“基频分布”。“Heldout估计”使用“Heldout频率分布”预测每个样本的概率,给定其在“基频分布”中的频率。
特别是,Heldout估计近似于样本发生的概率。 r 基本分布中的时间,作为所有样本Heldout分布中的平均频率 r 基本分布中的时间。
这个平均频率是 [Tr[r]/(Nr[r].N)] ,其中:
[Tr[R]] 是heldout分布中发生的所有样本的总数 r 基本分布中的时间。
[NR[R]] 是发生的样本数 r 基本分布中的时间。
N 是Heldout频率分布记录的结果数。
为了提高
prob
成员函数, [Tr[r]/(Nr[r].N)] 为每个值预计算 r 当HeldoutProbDist
创建。- 变量
_estimate -- 列表映射来自 r ,样本在基本分布中出现的次数,到该样本的概率估计。
_estimate[r]
计算方法是求出所有样本的Heldout分布的平均频率。 r 基本分布中的时间。特别地,_estimate[r]
= [Tr[r]/(Nr[r].N)] ._max_r -- 任何样本在基分布中出现的最大次数。
_max_r
用来决定有多大_estimate
必须是。
- SUM_TO_ONE = False¶
如果此概率分布中样本的概率始终为1,则为真。
- class nltk.probability.ImmutableProbabilisticMixIn(**kwargs)[源代码]¶
- class nltk.probability.KneserNeyProbDist(freqdist, bins=None, discount=0.75)[源代码]¶
-
Kneser-Ney概率分布的估计。这是一个后退的版本,计算一个n-gram在训练中被看到的可能性。扩展probdist接口,需要在trigram freqdist实例上进行训练。或者,可以指定不同于默认折扣值的值。默认折扣设置为0.75。
- class nltk.probability.LaplaceProbDist(freqdist, bins=None)[源代码]¶
基类:
nltk.probability.LidstoneProbDist
拉普拉斯估计用于产生频率分布的实验的概率分布。“拉普拉斯估计”用计数近似一个样本的概率。 c 从一个实验 N 结果与 B 箱作为 (c+1)/(N+B) . 这相当于在每个存储单元的计数中添加一个,并对生成的频率分布进行最大似然估计。
- class nltk.probability.LidstoneProbDist(freqdist, gamma, bins=None)[源代码]¶
-
用于产生频率分布的实验概率分布的Lidstone估计。“Lidstone估计”由实数参数化。 伽马 ,通常在0到1之间。Lidstone估计近似于具有计数的样本的概率。 c 从一个实验 N 结果与 B 箱作为
c+gamma)/(N+B*gamma)
. 这相当于添加 伽马 对每个存储单元进行计数,并对得到的频率分布进行最大似然估计。- SUM_TO_ONE = False¶
如果此概率分布中样本的概率始终为1,则为真。
- class nltk.probability.MLEProbDist(freqdist, bins=None)[源代码]¶
-
用于产生频率分布的实验概率分布的最大似然估计。“最大似然估计”将每个样本的概率近似为频率分布中该样本的频率。
- class nltk.probability.MutableProbDist(prob_dist, samples, store_logs=True)[源代码]¶
-
一种可变的概率分布,其概率很容易被修改。这只需复制现有probdist,将概率值存储在可变字典中,并提供更新方法。
- class nltk.probability.ProbDistI[源代码]¶
基类:
object
实验结果的概率分布。概率分布指定了一个实验有任何给定结果的可能性。例如,概率分布可用于预测文档中令牌具有给定类型的概率。形式上,概率分布可以定义为从样本到非负实数的函数映射,这样函数范围内每个数字的和为1.0。一
ProbDist
通常用来模拟实验的概率分布,用来产生频率分布。- SUM_TO_ONE = True¶
如果此概率分布中样本的概率始终为1,则为真。
- class nltk.probability.ProbabilisticMixIn(**kwargs)[源代码]¶
基类:
object
将概率与其他类(树、规则等)关联在一起的类中的混合。使用
ProbabilisticMixIn
类,定义从现有类和ProbabilityMixin派生的新类。您需要为新类定义一个新的构造函数,它显式地调用两个父类的构造函数。例如:>>> from nltk.probability import ProbabilisticMixIn >>> class A: ... def __init__(self, x, y): self.data = (x,y) ... >>> class ProbabilisticA(A, ProbabilisticMixIn): ... def __init__(self, x, y, **prob_kwarg): ... A.__init__(self, x, y) ... ProbabilisticMixIn.__init__(self, **prob_kwarg)
概率混合见文档
constructor<__init__>
有关它期望的参数的信息。通常还应该重新定义字符串表示方法、比较方法和哈希方法。
- class nltk.probability.SimpleGoodTuringProbDist(freqdist, bins=None)[源代码]¶
-
在对数空间下,用线性回归方法将频率与频率之间的单纯形probdist近似为一条直线。简单良好的图灵算法的详细信息可在以下位置找到:
良好的图灵平滑无泪”(盖尔和桑普森1995年),《定量语言学杂志》,第2卷,第217-237页。
“语音和语言处理(Jurafsky&Martin),第2版,第4.5章P103(Log(NC)=A+B*Log(C))”
给定一组对(Xi,Yi),其中XI表示频率,Yi表示频率的频率,我们希望最小化它们的平方变化。E(X)和E(Y)代表Xi和Yi的平均值。
斜率:b=sigma((xi-e(x)(yi-e(y)))/sigma((xi-e(x))(xi-e(x)))
截距:a=e(y)-b.e(x)
- SUM_TO_ONE = False¶
如果此概率分布中样本的概率始终为1,则为真。
- class nltk.probability.WittenBellProbDist(freqdist, bins=None)[源代码]¶
-
概率分布的维特-贝尔估计。这个分布通过使用只看到一次的事件数,将统一的概率质量分配给尚未看到的事件。为未知事件保留的概率质量等于 T / (N + T) 在哪里? T 是观察到的事件类型的数量,以及 N 是观察到的事件总数。这相当于新类型事件发生的最大可能性估计。剩余的概率质量被贴现,所有的概率估计总和为1,得出:
p = T / Z (N + T) ,如果计数=0
p = c / (N + T) ,否则
text
模块¶
toolbox
模块¶
translate
模块¶
tree
模块¶
treetransforms
模块¶
util
模块¶
- nltk.util.acyclic_branches_depth_first(tree, children=<built-in function iter>, depth=-1, cut_mark=None, traversed=None)[源代码]¶
以深度优先顺序遍历树的节点,丢弃同一分支中的最终循环,但在不同的分支中保留重复路径。如果周期被截断,则添加CUT_MARK(定义时)。
第一个参数应该是树根;子节点应该是一个以树节点为参数并返回该节点的子节点的迭代器的函数。
仅捕获同一分支内的周期,但保留来自不同分支的周期:
>>> import nltk >>> from nltk.util import acyclic_branches_depth_first as tree >>> wn=nltk.corpus.wordnet >>> from pprint import pprint >>> pprint(tree(wn.synset('certified.a.01'), lambda s:s.also_sees(), cut_mark='...', depth=4)) [Synset('certified.a.01'), [Synset('authorized.a.01'), [Synset('lawful.a.01'), [Synset('legal.a.01'), "Cycle(Synset('lawful.a.01'),0,...)", [Synset('legitimate.a.01'), '...']], [Synset('straight.a.06'), [Synset('honest.a.01'), '...'], "Cycle(Synset('lawful.a.01'),0,...)"]], [Synset('legitimate.a.01'), "Cycle(Synset('authorized.a.01'),1,...)", [Synset('legal.a.01'), [Synset('lawful.a.01'), '...'], "Cycle(Synset('legitimate.a.01'),0,...)"], [Synset('valid.a.01'), "Cycle(Synset('legitimate.a.01'),0,...)", [Synset('reasonable.a.01'), '...']]], [Synset('official.a.01'), "Cycle(Synset('authorized.a.01'),1,...)"]], [Synset('documented.a.01')]]
- nltk.util.acyclic_breadth_first(tree, children=<built-in function iter>, maxdepth=-1)[源代码]¶
以广度优先顺序遍历树的节点,丢弃最终循环。
第一个参数应该是树根;子节点应该是一个以树节点为参数并返回该节点的子节点的迭代器的函数。
- nltk.util.acyclic_depth_first(tree, children=<built-in function iter>, depth=-1, cut_mark=None, traversed=None)[源代码]¶
以深度优先的顺序遍历树的节点,丢弃任何分支中的最终循环,如果循环被截断,则添加CUT_MARK(如果指定)。
第一个参数应该是树根;子节点应该是一个以树节点为参数并返回该节点的子节点的迭代器的函数。
捕获所有周期:
>>> import nltk >>> from nltk.util import acyclic_depth_first as acyclic_tree >>> wn=nltk.corpus.wordnet >>> from pprint import pprint >>> pprint(acyclic_tree(wn.synset('dog.n.01'), lambda s:s.hypernyms(),cut_mark='...')) [Synset('dog.n.01'), [Synset('canine.n.02'), [Synset('carnivore.n.01'), [Synset('placental.n.01'), [Synset('mammal.n.01'), [Synset('vertebrate.n.01'), [Synset('chordate.n.01'), [Synset('animal.n.01'), [Synset('organism.n.01'), [Synset('living_thing.n.01'), [Synset('whole.n.02'), [Synset('object.n.01'), [Synset('physical_entity.n.01'), [Synset('entity.n.01')]]]]]]]]]]]]], [Synset('domestic_animal.n.01'), "Cycle(Synset('animal.n.01'),-3,...)"]]
- nltk.util.acyclic_dic2tree(node, dic)[源代码]¶
将非循环字典‘dic’(其中键是节点,值是子级列表)转换为适合pprint()的输出树,从根‘node’开始,子树作为嵌套列表。
- nltk.util.bigrams(sequence, **kwargs)[源代码]¶
以迭代器的形式返回从一系列项生成的大内存。例如:
>>> from nltk.util import bigrams >>> list(bigrams([1,2,3,4,5])) [(1, 2), (2, 3), (3, 4), (4, 5)]
将bigrams用于此函数的列表版本。
- 参数
sequence (sequence or iter) -- 要转换为bigrams的源数据
- 返回类型
iter(tuple)
- nltk.util.binary_search_file(file, key, cache={}, cacheDepth=- 1)[源代码]¶
用第一个字键返回文件中的行。使用二进制搜索算法搜索已排序的文件。
- 参数
file (file) -- 要搜索的文件。
key (str) -- 我们正在搜索的标识符。
- nltk.util.breadth_first(tree, children=<built-in function iter>, maxdepth=-1)[源代码]¶
以广度优先顺序遍历树的节点。(不检查循环。)第一个参数应该是树根;子节点应该是一个以树节点为参数并返回该节点的子节点的迭代器的函数。
- nltk.util.choose(n, k)[源代码]¶
这个函数是一种快速计算二项式系数的方法,通常称为nck,即一次取k的n个事物的组合数。(https://en.wikipedia.org/wiki/binomial_coefficient)。
这就是 scipy.special.comb()。 对于长整数计算,但此近似值更快,请参阅https://github.com/nltk/nltk/issues/1181
>>> choose(4, 2) 6 >>> choose(6, 2) 15
- 参数
n (int) -- 事物的数量。
r (int) -- 一件事被带走的次数。
- nltk.util.elementtree_indent(elem, level=0)[源代码]¶
用于缩进元素树的递归函数。用于漂亮打印的元素接口。在elem上运行indent,然后以正常方式输出。
- 参数
elem (ElementTree._ElementInterface) -- 要缩进的元素。将被修改。
level (nonnegative integer) -- 此元素的缩进级别
- 返回类型
ElementTree._ElementInterface
- 返回
缩进以反映其结构的元素的内容
- nltk.util.everygrams(sequence, min_len=1, max_len=- 1, pad_left=False, pad_right=False, **kwargs)[源代码]¶
以迭代器的形式返回从一系列项生成的所有可能的ngrams。
>>> sent = 'a b c'.split()
- 新版本的输出为每个图形。
>>> list(everygrams(sent)) [('a',), ('a', 'b'), ('a', 'b', 'c'), ('b',), ('b', 'c'), ('c',)]
- 旧版本输出,适用于每个工作台。
>>> sorted(everygrams(sent), key=len) [('a',), ('b',), ('c',), ('a', 'b'), ('b', 'c'), ('a', 'b', 'c')]
>>> list(everygrams(sent, max_len=2)) [('a',), ('a', 'b'), ('b',), ('b', 'c'), ('c',)]
- 参数
sequence (sequence or iter) -- 要转换为ngram的源数据。如果未提供max_len,则此序列将加载到内存中
min_len (int) -- NGRAMS的最小长度,aka。n-gram阶数/n gram阶数
max_len (int) -- NGRAMS的最大长度(默认设置为序列长度)
pad_left (bool) -- NGRAMS是否应留有衬垫
pad_right (bool) -- NGRAMS是否应正确填充
- 返回类型
iter(tuple)
- nltk.util.flatten(*args)[源代码]¶
把清单弄平。
>>> from nltk.util import flatten >>> flatten(1, 2, ['b', 'a' , ['c', 'd']], 3) [1, 2, 'b', 'a', 'c', 'd', 3]
- 参数
args -- 将项目和列表合并为一个列表
- 返回类型
list
- nltk.util.guess_encoding(data)[源代码]¶
给定一个字节字符串,尝试对其进行解码。尝试标准的“utf8”和“Latin-1”编码,以及从区域设置信息中收集到的一些编码。
呼叫程序 must 第一次呼叫:
locale.setlocale(locale.LC_ALL, '')
如果成功,它会返回
(decoded_unicode, successful_encoding)
. 如果失败,它会引发UnicodeError
.
- nltk.util.in_idle()[源代码]¶
如果此函数在空闲状态下运行,则返回true。在空闲状态下运行的tkinter程序不应调用
Tk.mainloop
;因此,应使用此函数将所有调用Tk.mainloop
.- 警告
此功能通过检查
sys.stdin
. 如果用户已修改sys.stdin
,则可能返回不正确的结果。- 返回类型
bool
- nltk.util.ngrams(sequence, n, **kwargs)[源代码]¶
以迭代器的形式返回从一系列项生成的ngrams。例如:
>>> from nltk.util import ngrams >>> list(ngrams([1,2,3,4,5], 3)) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
使用列表换行以获得此函数的列表版本。将Pad_Left或Pad_Right设置为真,以获得额外的Ngrams:
>>> list(ngrams([1,2,3,4,5], 2, pad_right=True)) [(1, 2), (2, 3), (3, 4), (4, 5), (5, None)] >>> list(ngrams([1,2,3,4,5], 2, pad_right=True, right_pad_symbol='</s>')) [(1, 2), (2, 3), (3, 4), (4, 5), (5, '</s>')] >>> list(ngrams([1,2,3,4,5], 2, pad_left=True, left_pad_symbol='<s>')) [('<s>', 1), (1, 2), (2, 3), (3, 4), (4, 5)] >>> list(ngrams([1,2,3,4,5], 2, pad_left=True, pad_right=True, left_pad_symbol='<s>', right_pad_symbol='</s>')) [('<s>', 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, '</s>')]
- 参数
sequence (sequence or iter) -- 要转换为ngrams的源数据
n (int) -- NGRAMS的等级
pad_left (bool) -- NGRAMS是否应留有衬垫
pad_right (bool) -- NGRAMS是否应正确填充
left_pad_symbol (any) -- 用于左填充的符号(默认为无)
right_pad_symbol (any) -- 用于右填充的符号(默认为无)
- 返回类型
sequence or iter
- nltk.util.pad_sequence(sequence, n, pad_left=False, pad_right=False, left_pad_symbol=None, right_pad_symbol=None)[源代码]¶
返回在提取ngram之前填充的项序列。
>>> list(pad_sequence([1,2,3,4,5], 2, pad_left=True, pad_right=True, left_pad_symbol='<s>', right_pad_symbol='</s>')) ['<s>', 1, 2, 3, 4, 5, '</s>'] >>> list(pad_sequence([1,2,3,4,5], 2, pad_left=True, left_pad_symbol='<s>')) ['<s>', 1, 2, 3, 4, 5] >>> list(pad_sequence([1,2,3,4,5], 2, pad_right=True, right_pad_symbol='</s>')) [1, 2, 3, 4, 5, '</s>']
- 参数
sequence (sequence or iter) -- 要填充的源数据
n (int) -- NGRAMS的等级
pad_left (bool) -- NGRAMS是否应留有衬垫
pad_right (bool) -- NGRAMS是否应正确填充
left_pad_symbol (any) -- 用于左填充的符号(默认为无)
right_pad_symbol (any) -- 用于右填充的符号(默认为无)
- 返回类型
sequence or iter
- nltk.util.pr(data, start=0, end=None)[源代码]¶
漂亮地打印一系列数据项
- 参数
data (sequence or iter) -- 要打印的数据流
start (int) -- 起始位置
end (int) -- 结束位置
- nltk.util.print_string(s, width=70)[源代码]¶
漂亮地打印一个字符串,在空白处断行
- 参数
s (str) -- 要打印的字符串,由单词和空格组成
width (int) -- 显示宽度
- nltk.util.re_show(regexp, string, left='{', right='}')[源代码]¶
返回一个字符串,其中标记围绕匹配的子字符串。搜索str以查找匹配的子字符串
regexp
用大括号把火柴包起来。这便于学习正则表达式。- 参数
regexp (str) -- 正则表达式。
string (str) -- 正在匹配的字符串。
left (str) -- 左分隔符(打印在匹配的子字符串之前)
right (str) -- 右分隔符(在匹配的子字符串后打印)
- 返回类型
str
- nltk.util.set_proxy(proxy, user=None, password='')[源代码]¶
为python设置HTTP代理以通过下载。
如果
proxy
如果为“无”,则尝试从环境或系统设置中设置代理。- 参数
proxy -- 要使用的HTTP代理服务器。例如:“http://proxy.example.com:3128/”
user -- 要进行身份验证的用户名。使用“无”禁用身份验证。
password -- 要进行身份验证的密码。
- nltk.util.skipgrams(sequence, n, k, **kwargs)[源代码]¶
以迭代器的形式返回从一系列项生成的所有可能的skipgrams。skipgrams是允许跳过令牌的ngrams。请参阅http://homepages.inf.ed.ac.uk/ballison/pdf/lrec_skipgrams.pdf
>>> sent = "Insurgents killed in ongoing fighting".split() >>> list(skipgrams(sent, 2, 2)) [('Insurgents', 'killed'), ('Insurgents', 'in'), ('Insurgents', 'ongoing'), ('killed', 'in'), ('killed', 'ongoing'), ('killed', 'fighting'), ('in', 'ongoing'), ('in', 'fighting'), ('ongoing', 'fighting')] >>> list(skipgrams(sent, 3, 2)) [('Insurgents', 'killed', 'in'), ('Insurgents', 'killed', 'ongoing'), ('Insurgents', 'killed', 'fighting'), ('Insurgents', 'in', 'ongoing'), ('Insurgents', 'in', 'fighting'), ('Insurgents', 'ongoing', 'fighting'), ('killed', 'in', 'ongoing'), ('killed', 'in', 'fighting'), ('killed', 'ongoing', 'fighting'), ('in', 'ongoing', 'fighting')]
- 参数
sequence (sequence or iter) -- 要转换为三角函数的源数据
n (int) -- NGRAMS的等级
k (int) -- 跳跃距离
- 返回类型
iter(tuple)
- nltk.util.tokenwrap(tokens, separator=' ', width=70)[源代码]¶
漂亮地打印文本标记列表,在空白处断行
- 参数
tokens (list) -- 要打印的令牌
separator (str) -- 用于分隔标记的字符串
width (int) -- 显示宽度(默认值=70)
- nltk.util.transitive_closure(graph, reflexive=False)[源代码]¶
计算有向图的传递闭包,可以选择自反传递闭包。
该算法是对ioannidis&ramakrishnan(1998)“高效传递闭包算法”的“标记算法”的一个微小修改。
- 参数
graph (dict(set)) -- 初始图,表示为集合字典
reflexive (bool) -- 如果设置,也使闭包具有反身性
- 返回类型
dict(set)
- nltk.util.trigrams(sequence, **kwargs)[源代码]¶
以迭代器的形式返回从一系列项生成的三角图。例如:
>>> from nltk.util import trigrams >>> list(trigrams([1,2,3,4,5])) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
使用三角函数作为此函数的列表版本。
- 参数
sequence (sequence or iter) -- 要转换为三角函数的源数据
- 返回类型
iter(tuple)
- nltk.util.unweighted_minimum_spanning_tree(tree, children=<built-in function iter>)[源代码]¶
通过按广度优先顺序遍历树的节点,丢弃最终循环,输出未加权图的最小生成树(MST)。
第一个参数应该是树根;子节点应该是一个以树节点为参数并返回该节点的子节点的迭代器的函数。
>>> import nltk >>> from nltk.util import unweighted_minimum_spanning_tree as mst >>> wn=nltk.corpus.wordnet >>> from pprint import pprint >>> pprint(mst(wn.synset('bound.a.01'), lambda s:s.also_sees())) [Synset('bound.a.01'), [Synset('unfree.a.02'), [Synset('confined.a.02')], [Synset('dependent.a.01')], [Synset('restricted.a.01'), [Synset('classified.a.02')]]]]