提交 2a65e14e 编写于 作者: W wizardforcel

2020-12-29 18:35:01

上级 bc8f3bc7
......@@ -67,7 +67,7 @@ NLTK 同样很多地方都有更改:
| NetworkX: | (可选)这是一个用于存储和操作由节点和边组成的网络结构的函数库。可视化语义网络还需要安装 *Graphviz* 库。 |
| Prover9: | (可选)这是一个使用一阶等式逻辑定理的自动证明器,用于支持语言处理中的推理。 |
## 自然语言工具包 (NLTK)
## 自然语言工具包(NLTK)
NLTK 创建于 2001 年,最初是宾州大学计算机与信息科学系计算语言学课程的一部分。从那以后,在数十名贡献者的帮助下不断发展壮大。如今,它已被几十所大学的课程所采纳,并作为许多研究项目的基础。[VIII.1](http://www.nltk.org/book/ch00.html#tab-modules) 列出了 NLTK 的一些最重要的模块。
......@@ -108,7 +108,7 @@ NLTK 设计中的四个主要目标:
本书包含了数百个练习,可作为学生作业的基础。最简单的练习涉及用指定的方式修改已有的程序片段来回答一个具体的问题。另一个极端,NLTK 为研究生水平的研究项目提供了一个灵活的框架,包括所有的基本数据结构和算法的标准实现,几十个广泛使用的数据集(语料库)的接口,以及一个灵活可扩展的体系结构。NLTK 网站上还有其他资源支持教学中使用 NLTK。
我们相信本书是唯一为学生提供在学习编程的环境中学习 NLP 的综合性框架。各个章节和练习通过 NLTK 紧密耦合,并将各章材料分割开,为学生(即使是那些以前没有编程经验的学生)提供一个实用的 NLP 的入门指南。学完这些材料后,学生将准备好尝试一本更加深层次的教科书,例如《语音和语言处理》,作者是 Jurafsky 和 Martin (Prentice Hall 出版社,2008 年)
我们相信本书是唯一为学生提供在学习编程的环境中学习 NLP 的综合性框架。各个章节和练习通过 NLTK 紧密耦合,并将各章材料分割开,为学生(即使是那些以前没有编程经验的学生)提供一个实用的 NLP 的入门指南。学完这些材料后,学生将准备好尝试一本更加深层次的教科书,例如《语音和语言处理》,作者是 Jurafsky 和 Martin(Prentice Hall 出版社,2008 年)
本书介绍编程概念的顺序与众不同,以一个重要的数据类型字符串列表开始,然后介绍重要的控制结构如推导和条件式等。这些概念允许我们在一开始就做一些有用的语言处理。有了这样做的冲动,我们回过头来系统的介绍一些基础概念,如字符串,循环,文件等。这样的方法同更传统的方法达到了同样的效果而不必要求读者自己已经对编程感兴趣。
......
......@@ -879,7 +879,7 @@ Ishmael
你会发现在`if``for`语句所在行末尾——缩进开始之前——有一个冒号。事实上,所有的 Python 控制结构都以冒号结尾。冒号表示当前语句与后面的缩进块有关联。
我们也可以指定当`if`语句的条件不满足时采取的行动。在这里,我们看到`elif`(else if)语句和`else`语句。请注意,这些在缩进代码前也有冒号。
我们也可以指定当`if`语句的条件不满足时采取的行动。在这里,我们看到`elif``else if`语句和`else`语句。请注意,这些在缩进代码前也有冒号。
```py
>>> for token in sent1:
......
......@@ -273,7 +273,7 @@ True
## 3.5 独立变量和赋值
在我们的模型,上下文的使用对应的是为变量赋值。这是一个从独立变量到域中实体的映射。赋值使用构造函数`Assignment`,它也以论述的模型的域为参数。我们无需实际输入任何绑定,但如果我们要这样做,它们是以(变量,值)的形式来绑定,类似于我们前面看到的估值。
在我们的模型,上下文的使用对应的是为变量赋值。这是一个从独立变量到域中实体的映射。赋值使用构造函数`Assignment`,它也以论述的模型的域为参数。我们无需实际输入任何绑定,但如果我们要这样做,它们是以`(变量,值)`的形式来绑定,类似于我们前面看到的估值。
```py
>>> g = nltk.Assignment(dom, [('x', 'o'), ('y', 'c')])
......@@ -364,7 +364,7 @@ NLTK 中提供了一个有用的工具是`satisfiers()`方法。它返回满足
{'b', 'o'}
```
想一想为什么`fmla2``fmla3`是那样的值,这是非常有用。`->`的真值条件的意思是`fmla2`等价于`-girl(x) | walk(x)`,要么不是女孩要么没有步行的个体满足条件。因为`b`(Bertie)和`c`(Cyril)都不是女孩,根据模型`m`,它们都满足整个公式。当然`o`也满足公式,因为`o`两项都满足。现在,因为话题的域的每一个成员都满足`fmla2`,相应的全称量化公式也为真。
想一想为什么`fmla2``fmla3`是那样的值,这是非常有用。`->`的真值条件的意思是`fmla2`等价于`-girl(x) | walk(x)`,要么不是女孩要么没有步行的个体满足条件。因为`b`(Bertie)和`c`(Cyril)都不是女孩,根据模型`m`,它们都满足整个公式。当然`o`也满足公式,因为`o`两项都满足。现在,因为话题的域的每一个成员都满足`fmla2`,相应的全称量化公式也为真。
```py
>>> m.evaluate('all x.(girl(x) -> walk(x))', g)
......
......@@ -734,7 +734,7 @@ OLAC 元数据是描述语言资源的标准。通过限制某些元数据元素
本章的附加材料发布在`http://nltk.org/`,包括网络上免费提供的资源的链接。
语言学语料库的首要来源是*语言数据联盟**欧洲语言资源局*,两者都有广泛的在线目录。本书中提到的主要语料库的细节也有介绍:美国国家语料库(Reppen, Ide, & Suderman, 2005)、英国国家语料库(BNC, 1999),Thesaurus Linguae Graecae(TLG, 1999)、儿童语言数据交换系统 (CHILDES) (MacWhinney, 1995)和 TIMIT(S., Lamel, & William, 1986)。
语言学语料库的首要来源是*语言数据联盟**欧洲语言资源局*,两者都有广泛的在线目录。本书中提到的主要语料库的细节也有介绍:美国国家语料库(Reppen, Ide, & Suderman, 2005)、英国国家语料库(BNC, 1999),Thesaurus Linguae Graecae(TLG, 1999)、儿童语言数据交换系统(CHILDES)(MacWhinney, 1995)和 TIMIT(S., Lamel, & William, 1986)。
计算语言学协会定期组织研讨会发布论文集,它的两个特别兴趣组:SIGWAC 和 SIGANN;前者推动使用网络作为语料,发起去除 HTML 标记的 CLEANEVAL 任务;后者鼓励对语言注解的互操作性的努力。
......
......@@ -779,7 +779,7 @@ pott AA1 pout AW1 puett UW1 purt ER1 put UH1 putt AH1
['gn', 'kn', 'mn', 'pn']
```
音素包含数字表示主重音(`1`),次重音(`2`)和无重音(`0`)。作为我们最后的一个例子,我们定义一个函数来提取重音数字,然后扫描我们的词典,找到具有特定重音模式的词汇。
音素包含数字表示主重音`(1)`,次重音`(2)`和无重音`(0)`。作为我们最后的一个例子,我们定义一个函数来提取重音数字,然后扫描我们的词典,找到具有特定重音模式的词汇。
```py
>>> def stress(pron):
......@@ -1215,7 +1215,7 @@ WordNet 原始描述是(Fellbaum, 1998)。虽然 WordNet 最初是为心理
13. ◑ 没有下位词的名词同义词集所占的百分比是多少?你可以使用`wn.all_synsets('n')`得到所有名词同义词集。
14. ◑ 定义函数`supergloss(s)`,使用一个同义词集`s`作为它的参数,返回一个字符串,包含`s`的定义和`s`所有的上位词与下位词的定义的连接字符串。
15. ◑ 写一个程序,找出所有在布朗语料库中出现至少 3 次的词。
16. ◑ 写一个程序,生成一个词汇多样性得分表(例如词符/词型的比例),如我们在 1.1 所看到的。包括布朗语料库文体的全集 (`nltk.corpus.brown.categories()`)。哪个文体词汇多样性最低(每个类型的标识符数最多)?这是你所期望的吗?
16. ◑ 写一个程序,生成一个词汇多样性得分表(例如词符/词型的比例),如我们在 1.1 所看到的。包括布朗语料库文体的全集`nltk.corpus.brown.categories()`。哪个文体词汇多样性最低(每个类型的标识符数最多)?这是你所期望的吗?
17. ◑ 写一个函数,找出一个文本中最常出现的 50 个词,停用词除外。
18. ◑ 写一个程序,输出一个文本中 50 个最常见的双连词(相邻词对),忽略包含停用词的双连词。
19. ◑ 写一个程序,按文体创建一个词频表,以 1 节给出的词频表为范例。选择你自己的词汇,并尝试找出那些在一个文体中很突出或很缺乏的词汇。讨论你的发现。
......
......@@ -1745,7 +1745,7 @@ SIGHAN,ACL 中文语言处理特别兴趣小组`http://sighan.org/`,重点
42. ★ 使用 WordNet 为一个文本集合创建语义索引。扩展例 3.6 中的一致性搜索程序,使用它的第一个同义词集偏移索引每个词,例如`wn.synsets('dog')[0].offset`(或者使用上位词层次中的一些祖先的偏移,这是可选的)。
43. ★ 在多语言语料库如世界人权宣言语料库(`nltk.corpus.udhr`),和 NLTK 的频率分布和关系排序的功能(`nltk.FreqDist`, `nltk.spearman_correlation`)的帮助下,开发一个系统,猜测未知文本。为简单起见,使用一个单一的字符编码和少几种语言。
43. ★ 在多语言语料库如世界人权宣言语料库(`nltk.corpus.udhr`),和 NLTK 的频率分布和关系排序的功能(`nltk.FreqDist`, `nltk.spearman_correlation`的帮助下,开发一个系统,猜测未知文本。为简单起见,使用一个单一的字符编码和少几种语言。
44. ★ 写一个程序处理文本,发现一个词以一种新的意义被使用的情况。对于每一个词计算这个词所有同义词集与这个词的上下文的所有同义词集之间的 WordNet 相似性。(请注意,这是一个粗略的办法;要做的很好是困难的,开放性研究问题。)
......
......@@ -1025,7 +1025,7 @@ Python 提供了一个调试器,它允许你监视程序的执行,指定程
>>> pdb.run('mymodule.myfunction()')
```
它会给出一个提示`(Pdb)`,你可以在那里输入指令给调试器。输入`help`来查看命令的完整列表。输入`step`(或只输入`s`)将执行当前行然后停止。如果当前行调用一个函数,它将进入这个函数并停止在第一行。输入`next`(或只输入`n`)是类似的,但它会在当前函数中的下一行停止执行。`break`(或`b`)命令可用于创建或列出断点。输入`continue`(或`c`)会继续执行直到遇到下一个断点。输入任何变量的名称可以检查它的值。
它会给出一个提示`(Pdb)`,你可以在那里输入指令给调试器。输入`help`来查看命令的完整列表。输入`step`(或只输入`s`)将执行当前行然后停止。如果当前行调用一个函数,它将进入这个函数并停止在第一行。输入`next`(或只输入`n`是类似的,但它会在当前函数中的下一行停止执行。`break`(或`b`)命令可用于创建或列出断点。输入`continue`(或`c`)会继续执行直到遇到下一个断点。输入任何变量的名称可以检查它的值。
我们可以使用 Python 调试器来查找`find_words()`函数的问题。请记住问题是在第二次调用函数时产生的。我们一开始将不使用调试器而调用该函数,使用可能的最小输入。第二次我们使用调试器调用它。
......
......@@ -589,7 +589,7 @@ TypeError: list objects are unhashable
## 3.5 递增地更新字典
我们可以使用字典计数出现的次数,模拟[fig-tally](./ch01.html#fig-tally)所示的计数词汇的方法。首先初始化一个空的`defaultdict`,然后处理文本中每个词性标记。如果标记以前没有见过,就默认计数为零。每次我们遇到一个标记,就使用`+=`运算符递增它的计数。
我们可以使用字典计数出现的次数,模拟 [fig-tally](./ch01.html#fig-tally) 所示的计数词汇的方法。首先初始化一个空的`defaultdict`,然后处理文本中每个词性标记。如果标记以前没有见过,就默认计数为零。每次我们遇到一个标记,就使用`+=`运算符递增它的计数。
```py
>>> from collections import defaultdict
......@@ -876,7 +876,7 @@ def display():
## 4.4 评估
在前面的例子中,你会注意到对准确性得分的强调。事实上,评估这些工具的表现是 NLP 的一个中心主题。回想[fig-sds](./ch01.html#fig-sds)中的处理流程;一个模块输出中的任何错误都在下游模块大大的放大。
在前面的例子中,你会注意到对准确性得分的强调。事实上,评估这些工具的表现是 NLP 的一个中心主题。回想 [fig-sds](./ch01.html#fig-sds) 中的处理流程;一个模块输出中的任何错误都在下游模块大大的放大。
我们对比人类专家分配的标记来评估一个标注器的表现。由于我们通常很难获得专业和公正的人的判断,所以使用黄金标准测试数据来代替。这是一个已经手动标注并作为自动系统评估标准而被接受的语料库。当标注器对给定词猜测的标记与黄金标准标记相同,标注器被视为是正确的。
......
......@@ -222,7 +222,7 @@ WFST 1 2 3 4 5 6 7
6 . . . . . . N
```
回到我们的表格表示,假设对于词`an`我们有`Det`(2, 3)单元,对以词`elephant``N``(3, 4)`单元,对于`an elephant`我们应该在`(2, 4)`放入什么?我们需要找到一个形如`A -> Det N`的产生式。查询了文法,我们知道我们可以输入`(0, 2)`单元的`NP`
回到我们的表格表示,假设对于词`an`我们有`Det``(2, 3)`单元,对以词`elephant``N``(3, 4)`单元,对于`an elephant`我们应该在`(2, 4)`放入什么?我们需要找到一个形如`A -> Det N`的产生式。查询了文法,我们知道我们可以输入`(0, 2)`单元的`NP`
更一般的,我们可以在`(i, j)`输入`A`,如果有一个产生式`A -> B C`,并且我们在`(i, k)`中找到非终结符`B`,在`(k, j)`中找到非终结符`C`。4.4 中的程序使用此规则完成 WFST。通过调用函数`complete_wfst()`时设置`trace``True`,我们看到了显示 WFST 正在被创建的跟踪输出:
......
......@@ -262,7 +262,7 @@ fem
## 2.1 包含和统一
认为特征结构提供一些对象的部分信息是很正常的,在这个意义上,我们可以根据它们通用的程度给特征结构排序。例如,`(23a)``(23b)`具有更少特征,(23b)`(23c)`具有更少特征。
认为特征结构提供一些对象的部分信息是很正常的,在这个意义上,我们可以根据它们通用的程度给特征结构排序。例如,`(23a)``(23b)`具有更少特征,`(23b)``(23c)`具有更少特征。
```py
[NUMBER = 74]
......@@ -680,7 +680,7 @@ In the case of complex values, we say that feature structures are themselves typ
用 Python 检查你的答案。
3. ◑ 列出两个包含[A=?x, B=?x]的特征结构。
3. ◑ 列出两个包含`[A=?x, B=?x]`的特征结构。
4. ◑ 忽略结构共享,给出一个统一两个特征结构的非正式算法。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册