提交 f0a35a04 编写于 作者: W wizardforcel

2020-11-21 11:01:15

上级 90b71336
......@@ -60,20 +60,12 @@ NLTK 同样很多地方都有更改︰
| Python: | 本书中例子假定你正在使用 Python 3.2 或更高版本。(注,NLTK 3.0 也适用于 Python 2.6 和 2.7)。 |
| --- | --- |
| NLTK: | 这本书中的代码示例使用 NLTK 3.0 版。NLTK 的后续版本将会向后兼容 NLTK 3.0。 |
| --- | --- |
| NLTK-Data: | 包含本书中分析和处理的语言语料库。 |
| --- | --- |
| NumPy: | (推荐)这是一个科学计算库,支持多维数组和线性代数,在某些计算概率、标记、聚类和分类任务中用到。 |
| --- | --- |
| Matplotlib: | (推荐)这是一个用于数据可视化的 2D 绘图库,本书在产生线图和条形图的程序例子中用到。 |
| --- | --- |
| 斯坦福大学 NLP 工具︰ |
| --- |
| | (推荐)NLTK 包括斯坦福大学 NLP 工具的接口,可用于大型语言处理(见`http://nlp.stanford.edu/software/`)。 |
| 斯坦福大学 NLP 工具︰ | (推荐)NLTK 包括斯坦福大学 NLP 工具的接口,可用于大型语言处理(见`http://nlp.stanford.edu/software/`)。 |
| NetworkX: | (可选)这是一个用于存储和操作由节点和边组成的网络结构的函数库。可视化语义网络还需要安装 _Graphviz_ 库。 |
| --- | --- |
| Prover9: | (可选)这是一个使用一阶等式逻辑定理的自动证明器,用于支持语言处理中的推理。 |
| --- | --- |
## 自然语言工具包 (NLTK)
......@@ -103,11 +95,8 @@ NLTK 设计中的四个主要目标:
| 简单︰ | 提供一个直观的框架和大量构建模块,使用户获取 NLP 知识而不必陷入像标注语言数据那样繁琐的事务中 |
| --- | --- |
| 一致︰ | 提供一个具有一致的接口和数据结构的,并且方法名称容易被猜到的统一的框架 |
| --- | --- |
| 可扩展︰ | 提供一种结构,新的软件模块包括同一个任务中的不同的实现和相互冲突的方法都可以方便添加进来 |
| --- | --- |
| 模块化︰ | 提供的组件可以独立使用而无需理解工具包的其他部分 |
| --- | --- |
对比上述目标,我们有意回避了工具包三个非需求行的但可能有用的特征。首先,虽然工具包提供了广泛的工具,但它不是面面俱全的;它是一个工具包而不是一个系统,它将会随着 NLP 领域一起演化。第二,虽然这个工具包的效率足以支持实际的任务,但它运行时的性能还没有高度优化;这种优化往往涉及更复杂的算法或使用 C 或 C++等较低一级的编程语言来实现。这将影响工具包的可读性且更难以安装。第三,我们试图避开巧妙的编程技巧,因为我们相信清楚直白的实现比巧妙却可读性差的方法好。
......
......@@ -28,7 +28,7 @@ Type "help", "copyright", "credits" or "license" for more information.
如果你无法运行 Python 解释器可能是因为没有正确安装 Python。请访问`http://python.org/`查阅详细操作说明。NLTK 3.0 在 Python 2.6 和 2.7 上同样可以工作。如果你使用的是这些较旧的版本,注意`/` 运算符会向下舍入小数(所以`1/3` 会得到`0`)。为了得到预期的除法行为,你需要输入︰`from __future__ import division`
`>>>` 提示符表示 Python 解释器正在等待输入。复制这本书的例子时,自己不要键入"`>>>`"。现在,让我们开始把 Python 当作计算器使用:
`>>>` 提示符表示 Python 解释器正在等待输入。复制这本书的例子时,自己不要键入"`>>>`"。现在,让我们开始把 Python 当作计算器使用:
```py
>>> 1 + 5 * 2 - 3
......@@ -72,7 +72,7 @@ SyntaxError: invalid syntax
图 1.1:下载 NLTK Book 集:使用`nltk.download()` 浏览可用的软件包.下载器上**Collections** 选项卡显示软件包如何被打包分组,选择**book** 标记所在行,可以获取本书的例子和练习所需的全部数据。这些数据包括约 30 个压缩文件,需要 100MB 硬盘空间。完整的数据集(即下载器中的**all**)在本书写作期间大约是这个大小的 10 倍,还在不断扩充。
一旦数据被下载到你的机器,你就可以使用 Python 解释器加载其中一些。第一步是在 Python 提示符后输入一个特殊的命令,告诉解释器去加载一些我们要用的文本:`from nltk.book import *` 。这条语句是说“从 NLTK 的`book` 模块加载所有的东西”。这个`book` 模块包含你阅读本章所需的所有数据。。在输出欢迎信息之后,将会加载几本书的文本(这将需要几秒钟)。下面连同你将看到的输出一起再次列出这条命令。注意拼写和标点符号的正确性,记住不要输入`>>>`
一旦数据被下载到你的机器,你就可以使用 Python 解释器加载其中一些。第一步是在 Python 提示符后输入一个特殊的命令,告诉解释器去加载一些我们要用的文本:`from nltk.book import *` 。这条语句是说“从 NLTK 的`book` 模块加载所有的东西”。这个`book` 模块包含你阅读本章所需的所有数据。。在输出欢迎信息之后,将会加载几本书的文本(这将需要几秒钟)。下面连同你将看到的输出一起再次列出这条命令。注意拼写和标点符号的正确性,记住不要输入`>>>`
```py
>>> from nltk.book import *
......@@ -257,7 +257,7 @@ Note
小心!
当遇到第一行末尾的冒号后,Python 解释器提示符由`>>>` 变为`...``...`提示符表示 Python 期望在后面是一个缩进代码块 。缩进是输入四个空格还是敲击 Tab 键,这由你决定。要结束一个缩进代码段,只需输入一个空行。
当遇到第一行末尾的冒号后,Python 解释器提示符由`>>>` 变为`...``...`提示符表示 Python 期望在后面是一个缩进代码块 。缩进是输入四个空格还是敲击 Tab 键,这由你决定。要结束一个缩进代码段,只需输入一个空行。
`lexical_diversity()` [](http://www.nltk.org/book/ch01.html#fun-parameter1)的定义中,我们指定了一个`text` 参数。这个参数是我们想要计算词汇多样性的实际文本的一个“占位符”,并在用到这个函数的时候出现在将要运行的代码块中 [](http://www.nltk.org/book/ch01.html#locvar)。类似地,`percentage()` 定义了两个参数,`count``total` [](http://www.nltk.org/book/ch01.html#fun-parameter2)
......
......@@ -908,10 +908,10 @@ d1: ['s0-r1', 's1-r0'] : ([z12,z15],[boy(z12), (([x],[dog(x)]) ->
5. ☼ 思考下面的语句:
```py
>>> read_expr = nltk.sem.Expression.fromstring
>>> e2 = read_expr('pat')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> read_expr = nltk.sem.Expression.fromstring
>>> e2 = read_expr('pat')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
exists y.love(pat, y)
```
......@@ -920,63 +920,63 @@ d1: ['s0-r1', 's1-r0'] : ([z12,z15],[boy(z12), (([x],[dog(x)]) ->
现在根据`e3.simplify()`的进一步情况(如下所示)继续做同样的任务。
```py
>>> print(e3.simplify())
>>> print(e3.simplify())
exists y.(love(pat,y) | love(y,pat))
```
```py
>>> print(e3.simplify())
>>> print(e3.simplify())
exists y.(love(pat,y) | love(y,pat))
```
```py
>>> print(e3.simplify())
>>> print(e3.simplify())
walk(fido)
```
6. ☼ 如前面的练习中那样,找到一个λ-抽象`e1`,产生与下面显示的等效的结果。
```py
>>> e2 = read_expr('chase')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> e2 = read_expr('chase')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
\x.all y.(dog(y) -> chase(x,pat))
```
```py
>>> e2 = read_expr('chase')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> e2 = read_expr('chase')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
\x.exists y.(dog(y) & chase(pat,x))
```
```py
>>> e2 = read_expr('give')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> e2 = read_expr('give')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
\x0 x1.exists y.(present(y) & give(x1,y,x0))
```
7. ☼ 如前面的练习中那样,找到一个λ-抽象`e1`,产生与下面显示的等效的结果。
```py
>>> e2 = read_expr('bark')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> e2 = read_expr('bark')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
exists y.(dog(x) & bark(x))
```
```py
>>> e2 = read_expr('bark')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> e2 = read_expr('bark')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
bark(fido)
```
```py
>>> e2 = read_expr('\\P. all x. (dog(x) -> P(x))')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
>>> e2 = read_expr('\\P. all x. (dog(x) -> P(x))')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
all x.(dog(x) -> bark(x))
```
......
......@@ -4,23 +4,23 @@
尽管已经取得前面的所有成果,语言呈现给我们的远远不是计算上的临时挑战。考虑下面的句子,它们证实语言的丰富性:
| (1) | |
```
(1)
| a. | | Overhead the day drives level and grey, hiding the sun by a flight of grey spears. (William Faulkner, _As I Lay Dying_, 1935) |
a. Overhead the day drives level and grey, hiding the sun by a flight of grey spears. (William Faulkner, _As I Lay Dying_, 1935)
| b. | | When using the toaster please ensure that the exhaust fan is turned on. (sign in dormitory kitchen) |
b. When using the toaster please ensure that the exhaust fan is turned on. (sign in dormitory kitchen)
| c. | | Amiodarone weakly inhibited CYP2C9, CYP2D6, and CYP3A4-mediated activities with Ki values of 45.1-271.6 μM (Medline, PMID: 10718780) |
c. Amiodarone weakly inhibited CYP2C9, CYP2D6, and CYP3A4-mediated activities with Ki values of 45.1-271.6 μM (Medline, PMID: 10718780)
| d. | | Iraqi Head Seeks Arms (spoof news headline) |
d. Iraqi Head Seeks Arms (spoof news headline)
| e. | | The earnest prayer of a righteous man has great power and wonderful results. (James 5:16b) |
e. The earnest prayer of a righteous man has great power and wonderful results. (James 5:16b)
| f. | | Twas brillig, and the slithy toves did gyre and gimble in the wabe (Lewis Carroll, _Jabberwocky_, 1872) |
f. Twas brillig, and the slithy toves did gyre and gimble in the wabe (Lewis Carroll, _Jabberwocky_, 1872)
| g. | | There are two ways to do this, AFAIK :smile: (internet discussion archive) |
|
g. There are two ways to do this, AFAIK :smile: (internet discussion archive)
```
语言丰富性的其他证据是以语言为工作中心的学科的浩瀚阵容。一些明显的学科包括翻译、文学批评、哲学、人类学和心理学。许多不太明显的学科研究语言的使用,包括法律、诠释学、辩论术、电话学、教育学、考古学、密码分析学及言语病理学。它们分别应用不同的方法来收集观察资料、发展理论和测试假设。它们都有助于加深我们对语言和表现在语言中的智能的理解。
......@@ -52,31 +52,16 @@
自然语言工具包是在不断发展的,随着人们贡献代码而不断扩大。NLP 和语言学的一些领域(还)没有得到 NLTK 很好的支持,特别欢迎在这些领域的贡献。有关这本书的出版之后的开发新闻,请查阅`http://nltk.org/`
| 音韵学和形态学: |
| --- |
| | 研究声音模式和文字结构的计算方法,通常用一个有限状态机工具包。如不规则词形变化和非拼接形态这样的现象使用我们一直在学习的字符串处理方法很难解决。该技术面临的挑战不仅仅是连接 NLTK 到一个高性能的有限状态机工具包,而且要避免词典数据的重复以及链接形态分析器和语法分析器所需形态学特征。 |
| 高性能模块: |
| --- |
| | 一些 NLP 任务的计算量太大,使纯 Python 实现不可行。然而,在某些情况下,耗时只出现在训练模型期间,不是在标注输入期间使用它们。NLTK 中的包系统提供了一个方便的方式来发布训练好的模型,即使那些使用不能随意发布的语料库训练的模型。替代方法是开发高性能的机器学习工具的 Python 接口,或通过使用类似与 MapReduce 的并行编程技术扩展 Python 的能力。 |
| 词汇语义学: |
| --- |
| | 这是一个充满活力的领域,目前的研究大多围绕词典、本体、多词表达式等的继承模型,大都在现在的 NLTK 的范围之外。一个保守的目标是从丰富的外部存储获得词汇信息,以支持词义消歧、解析和语义解释等任务。 |
| 自然语言生成: |
| --- |
| | 从含义的内在表示生产连贯的文本是 NLP 的重要组成部分;用于 NLP 的基于归一的方法已经在 NLTK 中开发,在这一领域做出更大的贡献还有限制。 |
| 语言实地调查: |
| --- |
| | 语言学家面临的一个重大挑战是记录数以千计的濒危语言,这项工作产生大量异构且快速变化的数据。更多的实地调查的数据格式,包括行间的文本格式和词汇交换格式,在 NLTK 中得到支持,帮助语言学家维护和分析这些数据,解放他们,使他们能在数据提炼中花费尽可能多的时间。 |
| 其他语言: |
| --- |
| | 对英语以外的语言的 NLP 改进支持包括两方面的工作:获准发布更多 NLTK 中的收集的语料库;写特定语言的 HOWTO 文件发布到`http://nltk.org/howto`,说明 NLTK 中的使用,讨论语言相关的 NLP 问题,包括字符编码、分词、形态。一个特定语言专长的 NLP 研究人员可以安排翻译这本书,并在 NLTK 的网站上保存一个副本;这将不仅仅是翻译讨论的内容,而要使用目标语言的数据提供等效的可行的例子,一项不平凡的事业。 |
| NLTK-Contrib: | 许多 NLTK 中的核心组件都由 NLP 社区成员贡献,它们最初被安置在 NLTK 中的“Contrib”包,`nltk_contrib`。对添加到这个包中的软件的唯一要求是它必须用 Python 编写,与 NLP 有关,并给予与 NLTK 中其他软件一样的开源许可。不完善的软件也是值得欢迎的,随着时间的推移可能会被 NLP 社区的其他成员改进。 |
| 音韵学和形态学: | 研究声音模式和文字结构的计算方法,通常用一个有限状态机工具包。如不规则词形变化和非拼接形态这样的现象使用我们一直在学习的字符串处理方法很难解决。该技术面临的挑战不仅仅是连接 NLTK 到一个高性能的有限状态机工具包,而且要避免词典数据的重复以及链接形态分析器和语法分析器所需形态学特征。 |
| --- | --- |
| 教材: |
| --- |
| | 从 NLTK 开发的最初起,教材一直伴随着软件逐渐扩大填补这本书,也加上大量的网上材料。我们希望弄清楚提供这些材料包括:幻灯片、习题集、解答集、我们所覆盖的主题更详细的理解的教员的名字,并通知作者,我们可以为他们在`http://nltk.org/`上做链接。具有特殊价值的材料,帮助 NLP 成为计算机科学和语言学系的本科主流课程,或者使 NLP 在二级本科课程中可以获得,在那里对语言、文学、计算机科学以及信息技术课程中的计算内容有明显的限制。 |
| 高性能模块: | 一些 NLP 任务的计算量太大,使纯 Python 实现不可行。然而,在某些情况下,耗时只出现在训练模型期间,不是在标注输入期间使用它们。NLTK 中的包系统提供了一个方便的方式来发布训练好的模型,即使那些使用不能随意发布的语料库训练的模型。替代方法是开发高性能的机器学习工具的 Python 接口,或通过使用类似与 MapReduce 的并行编程技术扩展 Python 的能力。 |
| 词汇语义学: | 这是一个充满活力的领域,目前的研究大多围绕词典、本体、多词表达式等的继承模型,大都在现在的 NLTK 的范围之外。一个保守的目标是从丰富的外部存储获得词汇信息,以支持词义消歧、解析和语义解释等任务。 |
| 自然语言生成: | 从含义的内在表示生产连贯的文本是 NLP 的重要组成部分;用于 NLP 的基于归一的方法已经在 NLTK 中开发,在这一领域做出更大的贡献还有限制。 |
| 语言实地调查: | 语言学家面临的一个重大挑战是记录数以千计的濒危语言,这项工作产生大量异构且快速变化的数据。更多的实地调查的数据格式,包括行间的文本格式和词汇交换格式,在 NLTK 中得到支持,帮助语言学家维护和分析这些数据,解放他们,使他们能在数据提炼中花费尽可能多的时间。 |
| 其他语言: | 对英语以外的语言的 NLP 改进支持包括两方面的工作:获准发布更多 NLTK 中的收集的语料库;写特定语言的 HOWTO 文件发布到`http://nltk.org/howto`,说明 NLTK 中的使用,讨论语言相关的 NLP 问题,包括字符编码、分词、形态。一个特定语言专长的 NLP 研究人员可以安排翻译这本书,并在 NLTK 的网站上保存一个副本;这将不仅仅是翻译讨论的内容,而要使用目标语言的数据提供等效的可行的例子,一项不平凡的事业。 |
| NLTK-Contrib: | 许多 NLTK 中的核心组件都由 NLP 社区成员贡献,它们最初被安置在 NLTK 中的“Contrib”包,`nltk_contrib`。对添加到这个包中的软件的唯一要求是它必须用 Python 编写,与 NLP 有关,并给予与 NLTK 中其他软件一样的开源许可。不完善的软件也是值得欢迎的,随着时间的推移可能会被 NLP 社区的其他成员改进。 |
| 教材: | 从 NLTK 开发的最初起,教材一直伴随着软件逐渐扩大填补这本书,也加上大量的网上材料。我们希望弄清楚提供这些材料包括:幻灯片、习题集、解答集、我们所覆盖的主题更详细的理解的教员的名字,并通知作者,我们可以为他们在`http://nltk.org/`上做链接。具有特殊价值的材料,帮助 NLP 成为计算机科学和语言学系的本科主流课程,或者使 NLP 在二级本科课程中可以获得,在那里对语言、文学、计算机科学以及信息技术课程中的计算内容有明显的限制。 |
| 只是一个工具包: | 在序言中已经指出,NLTK 是一个工具包,而不是一个系统。在 NLTK、Python、其他 Python 库、外部 NLP 的工具和格式的接口集成中会有很多问题需要解决。 |
| --- | --- |
## Envoi...
......
......@@ -536,11 +536,11 @@ print('Monty Python')
你也可以输入`from monty import *`,它将做同样的事情。
从现在起,你可以选择使用交互式解释器或文本编辑器来创建你的程序。使用解释器测试你的想法往往比较方便,修改一行代码直到达到你期望的效果。测试好之后,你就可以将代码粘贴到文本编辑器(去除所有`>>>``...`提示符),继续扩展它。给文件一个小而准确的名字,使用所有的小写字母,用下划线分割词汇,使用`.py`文件名后缀,例如`monty_python.py`
从现在起,你可以选择使用交互式解释器或文本编辑器来创建你的程序。使用解释器测试你的想法往往比较方便,修改一行代码直到达到你期望的效果。测试好之后,你就可以将代码粘贴到文本编辑器(去除所有`>>>``...`提示符),继续扩展它。给文件一个小而准确的名字,使用所有的小写字母,用下划线分割词汇,使用`.py`文件名后缀,例如`monty_python.py`
注意
**要点:** 我们的内联代码的例子包含`>>>``...`提示符,好像我们正在直接与解释器交互。随着程序变得更加复杂,你应该在编辑器中输入它们,没有提示符,如前面所示的那样在编辑器中运行它们。当我们在这本书中提供更长的程序时,我们将不使用提示符以提醒你在文件中输入它而不是使用解释器。你可以看到[2.2](./ch02.html#code-random-text)已经这样了。请注意,这个例子还包括两行代码带有 Python 提示符;它是任务的互动部分,在这里你观察一些数据,并调用一个函数。请记住,像[2.2](./ch02.html#code-random-text)这样的所有示例代码都可以从`http://nltk.org/`下载。
**要点:** 我们的内联代码的例子包含`>>>``...`提示符,好像我们正在直接与解释器交互。随着程序变得更加复杂,你应该在编辑器中输入它们,没有提示符,如前面所示的那样在编辑器中运行它们。当我们在这本书中提供更长的程序时,我们将不使用提示符以提醒你在文件中输入它而不是使用解释器。你可以看到[2.2](./ch02.html#code-random-text)已经这样了。请注意,这个例子还包括两行代码带有 Python 提示符;它是任务的互动部分,在这里你观察一些数据,并调用一个函数。请记住,像[2.2](./ch02.html#code-random-text)这样的所有示例代码都可以从`http://nltk.org/`下载。
## 3.2 函数
......
......@@ -1638,12 +1638,12 @@ SIGHAN,ACL 中文语言处理特别兴趣小组`http://sighan.org/`,重点
10. ☼ 将下面的循环改写为列表推导:
```py
>>> sent = ['The', 'dog', 'gave', 'John', 'the', 'newspaper']
>>> result = []
>>> for word in sent:
>>> sent = ['The', 'dog', 'gave', 'John', 'the', 'newspaper']
>>> result = []
>>> for word in sent:
... word_len = (word, len(word))
... result.append(word_len)
>>> result
>>> result
[('The', 3), ('dog', 3), ('gave', 4), ('John', 4), ('the', 3), ('newspaper', 9)]
```
......@@ -1660,8 +1660,8 @@ SIGHAN,ACL 中文语言处理特别兴趣小组`http://sighan.org/`,重点
16. ☼ 使用文本编辑器创建一个文件`prog.py`,包含单独的一行`monty = 'Monty Python'`。接下来,打开一个新的 Python 会话,并在提示符下输入表达式`monty`。你会从解释器得到一个错误。现在,请尝试以下代码(注意你要丢弃文件名中的`.py`):
```py
>>> from prog import monty
>>> monty
>>> from prog import monty
>>> monty
```
这一次,Python 应该返回一个值。你也可以尝试`import prog`,在这种情况下,Python 应该能够处理提示符处的表达式`prog.monty`。
......@@ -1730,16 +1730,16 @@ SIGHAN,ACL 中文语言处理特别兴趣小组`http://sighan.org/`,重点
41. ★ 将下面的嵌套循环重写为嵌套列表推导:
> ```py
> >>> words = ['attribution', 'confabulation', 'elocution',
> >>> words = ['attribution', 'confabulation', 'elocution',
> ... 'sequoia', 'tenacious', 'unidirectional']
> >>> vsequences = set()
> >>> for word in words:
> >>> vsequences = set()
> >>> for word in words:
> ... vowels = []
> ... for char in word:
> ... if char in 'aeiou':
> ... vowels.append(char)
> ... vsequences.add(''.join(vowels))
> >>> sorted(vsequences)
> >>> sorted(vsequences)
> ['aiuio', 'eaiou', 'eouio', 'euoia', 'oauaio', 'uiieioa']
> ```
......
......@@ -1421,7 +1421,7 @@ Python 网站提供大量文档。理解内置的函数和标准类型是很重
1. 写一个函数`gematria()`,根据`letter_vals`中的字母值,累加一个词的字母的数值:
```py
>>> letter_vals = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':80, 'g':3, 'h':8,
>>> letter_vals = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':80, 'g':3, 'h':8,
... 'i':10, 'j':10, 'k':20, 'l':30, 'm':40, 'n':50, 'o':70, 'p':80, 'q':100,
... 'r':200, 's':300, 't':400, 'u':6, 'v':6, 'w':800, 'x':60, 'y':10, 'z':7}
```
......
......@@ -754,22 +754,22 @@ def entropy(labels):
* ★ PP 附件语料库是描述介词短语附着决策的语料库。语料库中的每个实例被编码为`PPAttachment`对象:
```py
>>> from nltk.corpus import ppattach
>>> ppattach.attachments('training')
>>> from nltk.corpus import ppattach
>>> ppattach.attachments('training')
[PPAttachment(sent='0', verb='join', noun1='board',
prep='as', noun2='director', attachment='V'),
PPAttachment(sent='1', verb='is', noun1='chairman',
prep='of', noun2='N.V.', attachment='N'),
...]
>>> inst = ppattach.attachments('training')[1]
>>> (inst.noun1, inst.prep, inst.noun2)
>>> inst = ppattach.attachments('training')[1]
>>> (inst.noun1, inst.prep, inst.noun2)
('chairman', 'of', 'N.V.')
```
选择`inst.attachment`为`N`的唯一实例:
```py
>>> nattach = [inst for inst in ppattach.attachments('training')
>>> nattach = [inst for inst in ppattach.attachments('training')
... if inst.attachment == 'N']
```
......@@ -777,17 +777,17 @@ def entropy(labels):
* ★ 假设你想自动生成一个场景的散文描述,每个实体已经有了一个唯一描述此实体的词,例如 the jar,只是想决定在有关的各项目中是否使用 in 或 on,例如 the book is in the cupboard 对比 the book is on the shelf。通过查找语料数据探讨这个问题;编写需要的程序。
| (13) | |
| a. | | in the car _versus_ on the train |
```
(13)
| b. | | in town _versus_ on campus |
a. in the car _versus_ on the train
| c. | | in the picture _versus_ on the screen |
b. in town _versus_ on campus
| d. | | in Macbeth _versus_ on Letterman |
c. in the picture _versus_ on the screen
|
d. in Macbeth _versus_ on Letterman
```
关于本文档...
......
......@@ -532,8 +532,8 @@ grammar = nltk.PCFG.fromstring("""
20. ◑ 若要在一个窗口比较多个树,我们可以使用`draw_trees()`方法。定义一些树,尝试一下:
```py
>>> from nltk.draw.tree import draw_trees
>>> draw_trees(tree1, tree2, tree3)
>>> from nltk.draw.tree import draw_trees
>>> draw_trees(tree1, tree2, tree3)
```
21. ◑ 使用树中的位置,列出宾州树库前 100 个句子的主语;为了使结果更容易查看,限制从高度最高为 2 的子树提取主语。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册