From d69eaae874862ef3e78ed961ed9c1af595515e6d Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Tue, 29 Dec 2020 14:35:13 +0800 Subject: [PATCH] 2020-12-29 14:35:13 --- 0.md | 4 ++-- 1.md | 61 +++++++++++++++++++++++++++++++---------------------------- 10.md | 8 ++++---- 11.md | 4 ++-- 12.md | 4 ++-- 14.md | 2 +- 2.md | 6 +++--- 3.md | 10 +++++----- 4.md | 13 ++++++------- 5.md | 10 +++++----- 6.md | 25 ++++++++++++------------ 7.md | 12 ++++++------ 8.md | 10 +++++----- 9.md | 12 ++++++------ 14 files changed, 91 insertions(+), 90 deletions(-) diff --git a/0.md b/0.md index 06ceb9c..71d88ef 100644 --- a/0.md +++ b/0.md @@ -189,8 +189,8 @@ NLTK 设计中的四个主要目标: 图 XIV.1:Edward Loper, Ewan Klein 和 Steven Bird, 斯坦福大学, 2007 年 7 月 -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于 2015 年 7 月 1 日 星期三 12:30:05 AEST \ No newline at end of file diff --git a/1.md b/1.md index 5cd227f..1de6317 100644 --- a/1.md +++ b/1.md @@ -398,7 +398,7 @@ Note 注意 -这种从零算起的做法刚开始接触会有些混乱,但这是现代编程语言普遍使用的。如果你已经掌握了 19XY 是 20 世纪中的一年这样的计数世纪的系统,或者如果你生活在一个建筑物楼层编号从 1 开始的国家,你很开就会掌握它的窍门,步行 n-1 级楼梯到第 n 层。 +这种从零算起的做法刚开始接触会有些混乱,但这是现代编程语言普遍使用的。如果你已经掌握了 19XY 是 20 世纪中的一年这样的计数世纪的系统,或者如果你生活在一个建筑物楼层编号从 1 开始的国家,你很开就会掌握它的窍门,步行`n-1`级楼梯到第`n`层。 现在,如果我们不小心使用的索引过大就会得到一个错误: @@ -426,7 +426,7 @@ IndexError: list index out of range >>> ``` -按照惯例,`m:n`表示元素 m…n-1。正如下一个例子显示的那样,如果切片从列表第一个元素开始,我们可以省略第一个数字❶, 如果切片到列表最后一个元素处结尾,我们可以省略第二个数字❷: +按照惯例,`m:n`表示元素`m…n-1`。正如下一个例子显示的那样,如果切片从列表第一个元素开始,我们可以省略第一个数字❶, 如果切片到列表最后一个元素处结尾,我们可以省略第二个数字❷: ```py >>> sent[:3] ❶ @@ -599,23 +599,23 @@ what output do you expect here? >>> ``` -第一次调用`FreqDist`时,传递文本的名称作为参数❶。我们可以看到已经被计算出来的《白鲸记》中的总的词数(“outcomes”)—— 260,819❷。表达式`most_common(50)`给出文本中 50 个出现频率最高的单词类型❸。 +第一次调用`FreqDist`时,传递文本的名称作为参数❶。我们可以看到已经被计算出来的《白鲸记》中的总的词数(`outcomes`)—— 260,819❷。表达式`most_common(50)`给出文本中 50 个出现频率最高的单词类型❸。 注意 **轮到你来**:使用`text2`尝试前面的频率分布的例子。注意正确使用括号和大写字母。如果你得到一个错误消息`NameError: name 'FreqDist' is not defined`,你需要在一开始输入`from nltk.book import *` -上一个例子中是否有什么词有助于我们把握这个文本的主题或风格呢?只有一个词,whale,稍微有些信息量!它出现了超过 900 次。其余的词没有告诉我们关于文本的信息;它们只是“管道”英语。这些词在文本中占多少比例?我们可以产生一个这些词汇的累积频率图,使用`fdist1.plot(50, cumulative=True)`来生成 3.2 中的图。这 50 个词占了书的将近一半! +上一个例子中是否有什么词有助于我们把握这个文本的主题或风格呢?只有一个词,`whale`,稍微有些信息量!它出现了超过 900 次。其余的词没有告诉我们关于文本的信息;它们只是“管道”英语。这些词在文本中占多少比例?我们可以产生一个这些词汇的累积频率图,使用`fdist1.plot(50, cumulative=True)`来生成 3.2 中的图。这 50 个词占了书的将近一半! ![Images/fdist-moby.png](Images/513df73dfd52feca2c96a86dcc261c8b.jpg) 图 3.2:《白鲸记》中 50 个最常用词的累积频率图:这些词占了所有词符的将近一半。 -如果高频词对我们没有帮助,那些只出现了一次的词(所谓的 hapaxes)又如何呢?输入`fdist1.hapaxes()`来查看它们。这个列表包含 lexicographer, cetological, contraband, expostulations 以及其他 9,000 多个。看来低频词太多了,没看到上下文我们很可能有一半的 hapaxes 猜不出它们的意义!既然高频词和低频词都没有帮助,我们需要尝试其他的办法。 +如果高频词对我们没有帮助,那些只出现了一次的词(所谓的 hapaxes)又如何呢?输入`fdist1.hapaxes()`来查看它们。这个列表包含`lexicographer`, `cetological`, `contraband`, `expostulations`以及其他 9,000 多个。看来低频词太多了,没看到上下文我们很可能有一半的 hapaxes 猜不出它们的意义!既然高频词和低频词都没有帮助,我们需要尝试其他的办法。 ## 3.2 细粒度的选择词 -接下来,让我们看看文本中的*长*词,也许它们有更多的特征和信息量。为此我们采用集合论的一些符号。我们想要找出文本词汇表长度中超过 15 个字符的词。我们定义这个性质为 P,则 P(w) 为真当且仅当词 w 的长度大余 15 个字符。现在我们可以用[(1a)](http://www.nltk.org/book/ch01.html#ex-set-comprehension-math) 中的数学集合符号表示我们感兴趣的词汇。它的含义是:此集合中所有 w 都满足 w 是集合 V V(词汇表)的一个元素且 w 有性质 P。 +接下来,让我们看看文本中的*长*词,也许它们有更多的特征和信息量。为此我们采用集合论的一些符号。我们想要找出文本词汇表长度中超过 15 个字符的词。我们定义这个性质为`P`,则`P(w)`为真当且仅当词`w`的长度大余 15 个字符。现在我们可以用[(1a)](http://www.nltk.org/book/ch01.html#ex-set-comprehension-math) 中的数学集合符号表示我们感兴趣的词汇。它的含义是:此集合中所有`w`都满足`w`是集合`V`(词汇表)的一个元素且`w`有性质`P`。 ```py >>> V = set(text1) @@ -636,7 +636,7 @@ what output do you expect here? **轮到你来**:在 Python 解释器中尝试上面的表达式,改变文本和长度条件做一些实验。如果改变变量名,你的结果会产生什么变化吗,如使用`[word for word in vocab if ...]`? -让我们回到寻找文本特征词汇的任务上来。请注意,`text4`中的长词反映国家主题 — constitutionally, transcontinental — 而`text5`中的长词反映的不是真正的内容 boooooooooooglyyyyyy 和 yuuuuuuuuuuuummmmmmmmmmmm。我们是否已经成功的自动提取出文本的特征词汇呢?好的,这些很长的词通常是 hapaxes(即唯一的),也许找出*频繁出现的*长词会更好。这样看起来更有前途,因为这样忽略了短高频词(如 the)和长低频词(如 antiphilosophists)。以下是聊天语料库中所有长度超过 7 个字符,且出现次数超过 7 次的词: +让我们回到寻找文本特征词汇的任务上来。请注意,`text4`中的长词反映国家主题 — `constitutionally`, `transcontinental` — 而`text5`中的长词反映的不是真正的内容`boooooooooooglyyyyyy`和`yuuuuuuuuuuuummmmmmmmmmmm`。我们是否已经成功的自动提取出文本的特征词汇呢?好的,这些很长的词通常是唯一词,也许找出*频繁出现的*长词会更好。这样看起来更有前途,因为这样忽略了短高频词(如`the`)和长低频词(如`antiphilosophists`)。以下是聊天语料库中所有长度超过 7 个字符,且出现次数超过 7 次的词: ```py >>> fdist5 = FreqDist(text5) @@ -652,7 +652,7 @@ what output do you expect here? ## 3.3 词语搭配和双连词 -一个搭配是异乎寻常地经常在一起出现的词序列。red wine 是一个搭配,而 the wine 不是。搭配的一个特点是其中的词不能被类似的词置换。例如:maroon wine(粟色酒)听起来就很奇怪。 +一个搭配是异乎寻常地经常在一起出现的词序列。`red wine`是一个搭配,而`the wine`不是。搭配的一个特点是其中的词不能被类似的词置换。例如:`maroon wine`(粟色酒)听起来就很奇怪。 要获取搭配,我们先从提取文本词汇中的词对,也就是双连词开始。使用函数`bigrams()`很容易实现: @@ -666,7 +666,7 @@ what output do you expect here? 如果上面省掉`list()`,只输入`bigrams(['more', ...])`,你将看到``的输出形式。这是 Python 的方式表示它已经准备好要计算一个序列,在这里是双连词。现在,你只需要知道告诉 Python 使用`list()`将它转换成一个列表。 -在这里我们看到词对 than-done 是一个双连词,在 Python 中写成`('than', 'done')`。现在,搭配基本上就是频繁的双连词,除非我们更加注重包含不常见词的的情况。特别的,我们希望找到比我们基于单个词的频率预期得到的更频繁出现的双连词。`collocations()`函数为我们做这些。我们将在以后看到它是如何工作。 +在这里我们看到词对`than-done`是一个双连词,在 Python 中写成`('than', 'done')`。现在,搭配基本上就是频繁的双连词,除非我们更加注重包含不常见词的的情况。特别的,我们希望找到比我们基于单个词的频率预期得到的更频繁出现的双连词。`collocations()`函数为我们做这些。我们将在以后看到它是如何工作。 ```py >>> text4.collocations() @@ -684,7 +684,7 @@ build >>> ``` -文本中出现的搭配很能体现文本的风格。为了找到 red wine 这个搭配,我们将需要处理更大的文本。 +文本中出现的搭配很能体现文本的风格。为了找到`red wine`这个搭配,我们将需要处理更大的文本。 ## 3.4 计数其他东西 @@ -718,7 +718,7 @@ FreqDist({3: 50223, 1: 47933, 4: 42345, 2: 38513, 5: 26597, 6: 17111, 7: 14399, >>> ``` -由此我们看到,最频繁的词长度是 3,长度为 3 的词有 50,000 多个(约占书中全部词汇的 20%)。虽然我们不会在这里追究它,关于词长的进一步分析可能帮助我们了解作者、文体或语言之间的差异。 +由此我们看到,最频繁的词长度是 3,长度为 3 的词有 50,000 多个(约占书中全部词汇的 20%)。虽然我们不会在这里追究它,关于词长的进一步分析可能帮助我们了解作者、文体或语言之间的差异。 3.1 总结了 NLTK 频率分布类中定义的函数。 @@ -742,7 +742,7 @@ NLTK 频率分布类中定义的函数 >>> ``` -所有这些例子都有一个共同的模式:`[w for w in text if *condition* ]`,其中 *condition* 是 Python 中的一个“测试”,得到真或者假。在前面的代码例子所示的情况中,条件始终是数值比较。然而,我们也可以使用表 4.2 中列出的函数测试词汇的各种属性。 +所有这些例子都有一个共同的模式:`[w for w in text if *condition* ]`,其中`*condition*`是 Python 中的一个“测试”,得到真或者假。在前面的代码例子所示的情况中,条件始终是数值比较。然而,我们也可以使用表 4.2 中列出的函数测试词汇的各种属性。 表 4.2: @@ -760,7 +760,7 @@ NLTK 频率分布类中定义的函数 >>> ``` -我们还可以创建更复杂的条件。如果 c 是一个条件,那么`not` c 也是一个条件。如果我们有两个条件 c[1] 和 c[2],那么我们可以使用合取和析取将它们合并形成一个新的条件:c[1] `and` c[2], c[1] `or` c[2]。 +我们还可以创建更复杂的条件。如果`c`是一个条件,那么`not c`也是一个条件。如果我们有两个条件`c[1]`和`c[2]`,那么我们可以使用合取和析取将它们合并形成一个新的条件:`c[1] and c[2]`, `c[1] or c[2]`。 注意 @@ -775,7 +775,7 @@ NLTK 频率分布类中定义的函数 ## 4.2 对每个元素进行操作 -在3节中,我们看到计数词汇以外的其他项目的一些例子。让我们仔细看看我们所使用的符号: +在第 3 节中,我们看到计数词汇以外的其他项目的一些例子。让我们仔细看看我们所使用的符号: ```py >>> [len(w) for w in text1] @@ -803,7 +803,7 @@ NLTK 频率分布类中定义的函数 >>> ``` -由于我们不重复计算像 This 和 this 这样仅仅大小写不同的词,就已经从词汇表计数中抹去了 2,000 个!还可以更进一步,通过过滤掉所有非字母元素,从词汇表中消除数字和标点符号: +由于我们不重复计算像`This`和`this`这样仅仅大小写不同的词,就已经从词汇表计数中抹去了 2,000 个!还可以更进一步,通过过滤掉所有非字母元素,从词汇表中消除数字和标点符号: ```py >>> len(set(word.lower() for word in text1 if word.isalpha())) @@ -864,7 +864,7 @@ Ishmael ## 4.4 条件循环 -现在,我们可以将`if`语句和`for`语句结合。循环链表中每一项,只输出结尾字母是 *l* 的词。我们将为变量挑选另一个名字以表明 Python 并不在意变量名的意义。 +现在,我们可以将`if`语句和`for`语句结合。循环链表中每一项,只输出结尾字母是`l`的词。我们将为变量挑选另一个名字以表明 Python 并不在意变量名的意义。 ```py >>> sent1 = ['Call', 'me', 'Ishmael', '.'] @@ -899,7 +899,7 @@ Ishmael is a titlecase word 正如你看到的,即便只有这么一点儿 Python 知识,你就已经可以开始构建多行的 Python 程序。分块开发程序,在整合它们之前测试每一块代码是否达到你的预期是很重要的。这也是 Python 交互式解释器的价值所在,也是为什么你必须适应它的原因。 -最后,让我们把一直在探索的习惯用法组合起来。首先,我们创建一个包含 cie 或 cei 的词的列表,然后循环输出其中的每一项。请注意 print 语句中给出的额外信息︰<cite>end=' '</cite>。它告诉 Python 在每个单词后面打印一个空格(而不是默认的换行)。 +最后,让我们把一直在探索的习惯用法组合起来。首先,我们创建一个包含`cie`或`cei`的词的列表,然后循环输出其中的每一项。请注意`print`语句中给出的额外信息:`end=' '`。它告诉 Python 在每个单词后面打印一个空格(而不是默认的换行)。 ```py >>> tricky = sorted(w for w in set(text2) if 'cie' in w or 'cei' in w) @@ -922,7 +922,7 @@ conscientious conscientiously deceitful deceive ... ## 5.1 词意消歧 -在词意消歧中,我们要算出特定上下文中的词被赋予的是哪个意思。思考存在歧义的词 serve 和 dish: +在词意消歧中,我们要算出特定上下文中的词被赋予的是哪个意思。思考存在歧义的词`serve`和`dish`: ```py >>> sorted(set(w.lower() for w in text1)) @@ -939,13 +939,17 @@ conscientious conscientiously deceitful deceive ... * ◑ 写表达式找出`text6`中所有符合下列条件的词。结果应该是单词列表的形式:`['word1', 'word2', ...]`。 - 1. 以 ize 结尾 - 2. 包含字母 z - 3. 包含字母序列 pt - 4. 除了首字母外是全部小写字母的词(即`titlecase`)* ◑ 定义`sent`为一个单词列表:`['she', 'sells', 'sea', 'shells', 'by', 'the', 'sea', 'shore']`。编写代码执行以下任务: + 1. 以`ize`结尾 + 2. 包含字母`z` + 3. 包含字母序列`pt` + 4. 除了首字母外是全部小写字母的词(即`titlecase`) + + * ◑ 定义`sent`为一个单词列表:`['she', 'sells', 'sea', 'shells', 'by', 'the', 'sea', 'shore']`。编写代码执行以下任务: - 1. 输出所有 sh 开头的单词 - 2. 输出所有长度超过 4 个字符的词* ◑ 下面的 Python 代码是做什么的?`sum(len(w) for w in text1)`你可以用它来算出一个文本的平均字长吗? + 1. 输出所有`sh`开头的单词 + 2. 输出所有长度超过 4 个字符的词 + + * ◑ 下面的 Python 代码是做什么的?`sum(len(w) for w in text1)`你可以用它来算出一个文本的平均字长吗? * ◑ 定义一个名为`vocab_size(text)`的函数,以文本作为唯一的参数,返回文本的词汇量。 @@ -953,14 +957,13 @@ conscientious conscientiously deceitful deceive ... * ◑ 我们一直在使用集合存储词汇表。试试下面的 Python 表达式:`set(sent3) < set(text1)`。实验在`set()`中使用不同的参数。它是做什么用的?你能想到一个实际的应用吗? -关于本文档... +## 关于本文档... -针对 NLTK 3.0 进行更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 进行更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST -## Docutils System Messages -System Message: ERROR/3 (`ch01.rst2`, line 1889); [*backlink*](http://www.nltk.org/book/ch01.html#id9) -Unknown target name: "finegan2007". \ No newline at end of file + + diff --git a/10.md b/10.md index 62d59c1..7adff17 100644 --- a/10.md +++ b/10.md @@ -183,7 +183,7 @@ e e ``` -一种二元谓词具有类型〈e, 〈e, t〉〉。虽然这是先组合类型 e 的一个参数成一个一元谓词的类型,我们可以用二元谓词的两个参数直接组合来表示二元谓词。例如,在<cite>Angus sees Cyril</cite>的翻译中谓词 see 会与它的参数结合得到结果 see(angus, cyril)。 +一种二元谓词具有类型〈e, 〈e, t〉〉。虽然这是先组合类型 e 的一个参数成一个一元谓词的类型,我们可以用二元谓词的两个参数直接组合来表示二元谓词。例如,在`Angus sees Cyril`的翻译中谓词 see 会与它的参数结合得到结果 see(angus, cyril)。 在一阶逻辑中,谓词的参数也可以是独立变量,如 x,y 和 z。在 NLTK 中,我们采用的惯例:*e* 类型的变量都是小写。独立变量类似于人称代词,如 he,she 和 it ,其中我们为了弄清楚它们的含义需要知道它们使用的上下文。 @@ -807,7 +807,7 @@ s1 readings: s1-r0: ([x],[PRO(x), runs(x)]) ``` -段落的第一句有两种可能的读法,取决于量词的作用域。第二句的唯一的读法通过条件<cite>PRO(x)`>> dt.readings(show_thread_readings=True) @@ -992,8 +992,8 @@ d1: ['s0-r1', 's1-r0'] : ([z12,z15],[boy(z12), (([x],[dog(x)]) -> 13. [(Warren & Pereira, 1982)](./bibliography.html#warren1982eea)为出发点,开发一种技术,转换一个自然语言查询为一种可以更加有效的在模型中评估的形式。例如,给定一个`(P(x) & Q(x))`形式的查询,将它转换为`(Q(x) & P(x))`,如果`Q`的范围比`P`小。 -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file diff --git a/11.md b/11.md index 8469c16..20bbb77 100644 --- a/11.md +++ b/11.md @@ -96,9 +96,9 @@ TIMIT 的第四个特点是语料库的层次结构。每个句子 4 个文件 小心! -应谨慎解释标注者之间一致性得分,因为标注任务的难度差异巨大。例如,90%的一致性得分对于词性标注是可怕的得分,但对语义角色标注是可以预期的得分。 +应谨慎解释标注者之间一致性得分,因为标注任务的难度差异巨大。例如,90% 的一致性得分对于词性标注是可怕的得分,但对语义角色标注是可以预期的得分。 -Kappa 系数 K 测量两个人判断类别和修正预期的期望一致性的一致性。例如,假设要标注一个项目,四种编码选项可能性相同。这种情况下,两个人随机编码预计有 25%可能达成一致。因此,25%一致性将表示为 k = 0,相应的较好水平的一致性将依比例决定。对于一个 50%的一致性,我们将得到 k = 0.333,因为 50 是从 25 到 100 之间距离的三分之一。还有许多其他一致性测量方法;详情请参阅`help(nltk.metrics.agreement)`。 +Kappa 系数 K 测量两个人判断类别和修正预期的期望一致性的一致性。例如,假设要标注一个项目,四种编码选项可能性相同。这种情况下,两个人随机编码预计有 25% 可能达成一致。因此,25% 一致性将表示为 k = 0,相应的较好水平的一致性将依比例决定。对于一个 50% 的一致性,我们将得到 k = 0.333,因为 50 是从 25 到 100 之间距离的三分之一。还有许多其他一致性测量方法;详情请参阅`help(nltk.metrics.agreement)`。 ![Images/windowdiff.png](Images/58a1097522dc6fbe24eddd96cfd6cbc9.jpg) diff --git a/12.md b/12.md index 36633ad..353ed30 100644 --- a/12.md +++ b/12.md @@ -71,8 +71,8 @@ g. There are two ways to do this, AFAIK :smile: (internet discussion archive) *但是目前为止,happy hacking!* -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file diff --git a/14.md b/14.md index 3d4d998..cb3db6c 100644 --- a/14.md +++ b/14.md @@ -453,6 +453,6 @@ About this document... -UPDATED FOR NLTK 3.0. This is a chapter from *Natural Language Processing with Python*, by [Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) and [Edward Loper](http://ed.loper.org/), Copyright © 2014 the authors. It is distributed with the *Natural Language Toolkit* [`http://nltk.org/`], Version 3.0, under the terms of the *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)]. +UPDATED FOR NLTK 3.0. This is a chapter from《Python 自然语言处理》, by [Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) and [Edward Loper](http://ed.loper.org/), Copyright © 2014 the authors. It is distributed with the *Natural Language Toolkit* [`http://nltk.org/`], Version 3.0, under the terms of the [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/). This document was built on Wed 1 Jul 2015 12:30:05 AEST \ No newline at end of file diff --git a/2.md b/2.md index 50a94a5..672b145 100644 --- a/2.md +++ b/2.md @@ -307,7 +307,7 @@ NLTK 中的一些语料库和语料库样本:关于下载和使用它们,请 ![Images/da1752497a2a17be12b2acb282918a7a.jpg](Images/da1752497a2a17be12b2acb282918a7a.jpg) -图 1.2:累积字长分布:世界人权宣言的 6 个翻译版本;此图显示,5 个或 5 个以下字母组成的词在 Ibibio 语言的文本中占约 80%,在德语文本中占 60%,在 Inuktitut 文本中占 25%。 +图 1.2:累积字长分布:世界人权宣言的 6 个翻译版本;此图显示,5 个或 5 个以下字母组成的词在 Ibibio 语言的文本中占约 80%,在德语文本中占 60%,在 Inuktitut 文本中占 25%。 注意 @@ -1234,8 +1234,8 @@ WordNet 原始描述是[(Fellbaum, 1998)](./bibliography.html#fellbaum1998)。 27. ★ 一个词的多义性是它所有含义的个数。利用 WordNet,使用`len(wn.synsets('dog', 'n'))`我们可以判断名词 *dog* 有 7 种含义。计算 WordNet 中名词、动词、形容词和副词的平均多义性。 28. ★使用预定义的相似性度量之一给下面的每个词对的相似性打分。按相似性减少的顺序排名。你的排名与这里给出的顺序有多接近?[(Miller & Charles, 1998)](./bibliography.html#millercharles1998)实验得出的顺序: car-automobile, gem-jewel, journey-voyage, boy-lad, coast-shore, asylum-madhouse, magician-wizard, midday-noon, furnace-stove, food-fruit, bird-cock, bird-crane, tool-implement, brother-monk, lad-brother, crane-implement, journey-car, monk-oracle, cemetery-woodland, food-rooster, coast-hill, forest-graveyard, shore-woodland, monk-slave, coast-forest, lad-wizard, chord-smile, glass-magician, rooster-voyage, noon-string。 -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file diff --git a/3.md b/3.md index aa68704..3c12ec5 100644 --- a/3.md +++ b/3.md @@ -24,7 +24,7 @@ ### 电子书 -NLTK 语料库集合中有古腾堡项目的一小部分样例文本。然而,你可能对分析古腾堡项目的其它文本感兴趣。你可以在`http://www.gutenberg.org/catalog/`上浏览 25,000 本免费在线书籍的目录,获得 ASCII 码文本文件的 URL。虽然 90%的古腾堡项目的文本是英语的,它还包括超过 50 种语言的材料,包括加泰罗尼亚语、中文、荷兰语、芬兰语、法语、德语、意大利语、葡萄牙语和西班牙语(每种语言都有超过 100 个文本)。 +NLTK 语料库集合中有古腾堡项目的一小部分样例文本。然而,你可能对分析古腾堡项目的其它文本感兴趣。你可以在`http://www.gutenberg.org/catalog/`上浏览 25,000 本免费在线书籍的目录,获得 ASCII 码文本文件的 URL。虽然 90% 的古腾堡项目的文本是英语的,它还包括超过 50 种语言的材料,包括加泰罗尼亚语、中文、荷兰语、芬兰语、法语、德语、意大利语、葡萄牙语和西班牙语(每种语言都有超过 100 个文本)。 编号 2554 的文本是《罪与罚》的英文翻译,我们可以如下方式访问它。 @@ -1401,7 +1401,7 @@ IndexError: tuple index out of range 从左向右取用给`format()`的参数,任何多余的参数都会被简单地忽略。 -System Message: ERROR/3 (`ch03.rst2`, line 2265) + Unexpected indentation. @@ -1443,7 +1443,7 @@ Lee wants a pancake right now 字符串默认是左对齐,但可以通过`'>'`对齐选项右对齐。 -System Message: ERROR/3 (`ch03.rst2`, line 2313) + Unexpected indentation. @@ -1751,8 +1751,8 @@ SIGHAN,ACL 中文语言处理特别兴趣小组`http://sighan.org/`,重点 45. ★ 阅读关于规范化非标准词的文章[(Sproat et al, 2001)](./bibliography.html#sproat2001nor),实现一个类似的文字规范系统。 -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file diff --git a/4.md b/4.md index 68d5536..19234fa 100644 --- a/4.md +++ b/4.md @@ -247,7 +247,7 @@ lorry: 4; red: 1; .: 1; ,: 3; Red: 1; yellow: 2 只在需要的时候进行计算(或者叫做“惰性计算”特性),这是 Python 3 和 NLTK 3 的一个普遍特点。当你期望看到一个序列时,如果你看到的却是类似``这样的结果, 你可以强制求值这个对象,只要把它放在一个期望序列的上下文中,比如`list(`x`)`或`for item in` x。 -对于一些 NLP 任务,有必要将一个序列分割成两个或两个以上的部分。例如,我们可能需要用 90%的数据来“训练”一个系统,剩余 10%进行测试。要做到这一点,我们指定想要分割数据的位置❶,然后在这个位置分割序列❷。 +对于一些 NLP 任务,有必要将一个序列分割成两个或两个以上的部分。例如,我们可能需要用 90% 的数据来“训练”一个系统,剩余 10% 进行测试。要做到这一点,我们指定想要分割数据的位置❶,然后在这个位置分割序列❷。 ```py >>> text = nltk.corpus.nps_chat.words() @@ -1189,7 +1189,7 @@ def preprocess(tagged_corpus): 空间时间权衡的另一个例子是维护一个词汇表。如果你需要处理一段输入文本检查所有的词是否在现有的词汇表中,词汇表应存储为一个集合,而不是一个列表。集合中的元素会自动索引,所以测试一个大的集合的成员将远远快于测试相应的列表的成员。 -我们可以使用`timeit`模块测试这种说法。`Timer`类有两个参数:一个是多次执行的语句,一个是只在开始执行一次的设置代码。我们将分别使用一个整数的列表❶和一个整数的集合❷模拟 10 万个项目的词汇表。测试语句将产生一个随机项,它有 50%的机会在词汇表中❸。 +我们可以使用`timeit`模块测试这种说法。`Timer`类有两个参数:一个是多次执行的语句,一个是只在开始执行一次的设置代码。我们将分别使用一个整数的列表❶和一个整数的集合❷模拟 10 万个项目的词汇表。测试语句将产生一个随机项,它有 50% 的机会在词汇表中❸。 ```py >>> from timeit import Timer @@ -1467,12 +1467,11 @@ Python 网站提供大量文档。理解内置的函数和标准类型是很重 ``` -## Docutils System Messages -System Message: ERROR/3 (`ch04.rst2`, line 1791); [*backlink*](./ch04.html#id10) -Unknown target name: "first-run". -System Message: ERROR/3 (`ch04.rst2`, line 1791); [*backlink*](./ch04.html#id12) -Unknown target name: "second-run". \ No newline at end of file + + + + diff --git a/5.md b/5.md index 5d26c38..968a473 100644 --- a/5.md +++ b/5.md @@ -911,7 +911,7 @@ def display(): ## 5.2 分离训练和测试数据 -现在,我们正在一些数据上训练一个标注器,必须小心不要在相同的数据上测试,如我们在前面的例子中的那样。一个只是记忆它的训练数据,而不试图建立一个一般的模型的标注器会得到一个完美的得分,但在标注新的文本时将是无用的。相反,我们应该分割数据,90%为测试数据,其余 10%为测试数据: +现在,我们正在一些数据上训练一个标注器,必须小心不要在相同的数据上测试,如我们在前面的例子中的那样。一个只是记忆它的训练数据,而不试图建立一个一般的模型的标注器会得到一个完美的得分,但在标注新的文本时将是无用的。相反,我们应该分割数据,90% 为测试数据,其余 10% 为测试数据: ```py >>> size = int(len(brown_tagged_sents) * 0.9) @@ -1050,7 +1050,7 @@ N-gram 标注器不应考虑跨越句子边界的上下文。因此,NLTK 的 0.049297702068029296 ``` -因此,1/20 的三元是有歧义的[示例]。给定当前单词及其前两个标记,根据训练数据,在 5%的情况中,有一个以上的标记可能合理地分配给当前词。假设我们总是挑选在这种含糊不清的上下文中最有可能的标记,可以得出三元标注器准确性的一个下界。 +因此,1/20 的三元是有歧义的[示例]。给定当前单词及其前两个标记,根据训练数据,在 5% 的情况中,有一个以上的标记可能合理地分配给当前词。假设我们总是挑选在这种含糊不清的上下文中最有可能的标记,可以得出三元标注器准确性的一个下界。 调查标注器准确性的另一种方法是研究它的错误。有些标记可能会比别的更难分配,可能需要专门对这些数据进行预处理或后处理。一个方便的方式查看标注错误是混淆矩阵。它用图表表示期望的标记(黄金标准)与实际由标注器产生的标记: @@ -1063,7 +1063,7 @@ N-gram 标注器不应考虑跨越句子边界的上下文。因此,NLTK 的 基于这样的分析,我们可能会决定修改标记集。或许标记之间很难做出的区分可以被丢弃,因为它在一些较大的处理任务的上下文中并不重要。 -分析标注器准确性界限的另一种方式来自人类标注者之间并非 100%的意见一致。[更多] +分析标注器准确性界限的另一种方式来自人类标注者之间并非 100% 的意见一致。[更多] 一般情况下,标注过程会损坏区别:例如当所有的人称代词被标注为`PRP`时,词的特性通常会失去。与此同时,标注过程引入了新的区别从而去除了含糊之处:例如 deal 标注为`VB`或`NN`。这种消除某些区别并引入新的区别的特点是标注的一个重要的特征,有利于分类和预测。当我们引入一个标记集的更细的划分时,在 n-gram 标注器决定什么样的标记分配给一个特定的词时,可以获得关于左侧上下文的更详细的信息。然而,标注器同时也将需要做更多的工作来划分当前的词符,只是因为有更多可供选择的标记。相反,使用较少的区别(如简化的标记集),标注器有关上下文的信息会减少,为当前词符分类的选择范围也较小。 @@ -1211,8 +1211,8 @@ Statement User121 18/m pm me if u tryin to chat 42. ★ 使用布朗语料库开发标注器时,调查三种不同的方式来定义训练和测试数据之间的分割:genre (`category`)、source (`fileid`)和句子。比较它们的相对性能,并讨论哪种方法最合理。(你可能要使用 n-交叉验证,在3中讨论的,以提高评估的准确性。) 43. ★ 开发你自己的`NgramTagger`,从 NLTK 中的类继承,封装本章中所述的已标注的训练和测试数据的词汇表缩减方法。确保一元和默认回退标注器有机会获得全部词汇。 -关于本文档... +## 关于本文档... -UPDATED FOR NLTK 3.0\. 本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +UPDATED FOR NLTK 3.0\. 本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file diff --git a/6.md b/6.md index ac5c125..4be3b88 100644 --- a/6.md +++ b/6.md @@ -124,7 +124,7 @@ def gender_features2(name): return features ``` -然而,你要用于一个给定的学习算法的特征的数目是有限的——如果你提供太多的特征,那么该算法将高度依赖你的训练数据的特性,而一般化到新的例子的效果不会很好。这个问题被称为过拟合,当运作在小训练集上时尤其会有问题。例如,如果我们使用 1.2 中所示的特征提取器训练朴素贝叶斯分类器,将会过拟合这个相对较小的训练集,造成这个系统的精度比只考虑每个名字最后一个字母的分类器的精度低约 1%: +然而,你要用于一个给定的学习算法的特征的数目是有限的——如果你提供太多的特征,那么该算法将高度依赖你的训练数据的特性,而一般化到新的例子的效果不会很好。这个问题被称为过拟合,当运作在小训练集上时尤其会有问题。例如,如果我们使用 1.2 中所示的特征提取器训练朴素贝叶斯分类器,将会过拟合这个相对较小的训练集,造成这个系统的精度比只考虑每个名字最后一个字母的分类器的精度低约 1%: ```py >>> featuresets = [(gender_features2(n), gender) for (n, gender) in labeled_names] @@ -197,7 +197,7 @@ correct=male guess=female name=Rich ... 'suffix2': word[-2:]} ``` -使用新的特征提取器重建分类器,我们看到测试数据集上的性能提高了近 3 个百分点(从 76.5%到 78.2%): +使用新的特征提取器重建分类器,我们看到测试数据集上的性能提高了近 3 个百分点(从 76.5% 到 78.2%): ```py >>> train_set = [(gender_features(n), gender) for (n, gender) in train_names] @@ -545,7 +545,7 @@ set() 这些特征表明假设中所有重要的词都包含在文本中,因此有一些证据支持标记这个为 *True*。 -`nltk.classify.rte_classify`模块使用这些方法在合并的 RTE 测试数据上取得了刚刚超过 58%的准确率。这个数字并不是很令人印象深刻的,还需要大量的努力,更多的语言学处理,才能达到更好的结果。 +`nltk.classify.rte_classify`模块使用这些方法在合并的 RTE 测试数据上取得了刚刚超过 58% 的准确率。这个数字并不是很令人印象深刻的,还需要大量的努力,更多的语言学处理,才能达到更好的结果。 ## 2.4 扩展到大型数据集 @@ -561,7 +561,7 @@ Python 提供了一个良好的环境进行基本的文本处理和特征提取 大多数评估技术为模型计算一个得分,通过比较它在测试集(或评估集)中为输入生成的标签与那些输入的正确标签。该测试集通常与训练集具有相同的格式。然而,测试集与训练语料不同是非常重要的:如果我们简单地重复使用训练集作为测试集,那么一个只记住了它的输入而没有学会如何推广到新的例子的模型会得到误导人的高分。 -建立测试集时,往往是一个可用于测试的和可用于训练的数据量之间的权衡。对于有少量平衡的标签和一个多样化的测试集的分类任务,只要 100 个评估实例就可以进行有意义的评估。但是,如果一个分类任务有大量的标签或包括非常罕见的标签,那么选择的测试集的大小就要保证出现次数最少的标签至少出现 50 次。此外,如果测试集包含许多密切相关的实例——例如来自一个单独文档中的实例——那么测试集的大小应增加,以确保这种多样性的缺乏不会扭曲评估结果。当有大量已标注数据可用时,只使用整体数据的 10%进行评估常常会在安全方面犯错。 +建立测试集时,往往是一个可用于测试的和可用于训练的数据量之间的权衡。对于有少量平衡的标签和一个多样化的测试集的分类任务,只要 100 个评估实例就可以进行有意义的评估。但是,如果一个分类任务有大量的标签或包括非常罕见的标签,那么选择的测试集的大小就要保证出现次数最少的标签至少出现 50 次。此外,如果测试集包含许多密切相关的实例——例如来自一个单独文档中的实例——那么测试集的大小应增加,以确保这种多样性的缺乏不会扭曲评估结果。当有大量已标注数据可用时,只使用整体数据的 10% 进行评估常常会在安全方面犯错。 选择测试集时另一个需要考虑的是测试集中实例与开发集中的实例的相似程度。这两个数据集越相似,我们对将评估结果推广到其他数据集的信心就越小。例如,考虑词性标注任务。在一种极端情况,我们可以通过从一个反映单一的文体(如新闻)的数据源随机分配句子,创建训练集和测试集: @@ -594,7 +594,7 @@ Python 提供了一个良好的环境进行基本的文本处理和特征提取 ## 3.2 准确度 -用于评估一个分类最简单的度量是准确度,测量测试集上分类器正确标注的输入的比例。例如,一个名字性别分类器,在包含 80 个名字的测试集上预测正确的名字有 60 个,它有 60/80 = 75%的准确度。`nltk.classify.accuracy()`函数会在给定的测试集上计算分类器模型的准确度: +用于评估一个分类最简单的度量是准确度,测量测试集上分类器正确标注的输入的比例。例如,一个名字性别分类器,在包含 80 个名字的测试集上预测正确的名字有 60 个,它有 60/80 = 75% 的准确度。`nltk.classify.accuracy()`函数会在给定的测试集上计算分类器模型的准确度: ```py >>> classifier = nltk.NaiveBayesClassifier.train(train_set) @@ -602,11 +602,11 @@ Python 提供了一个良好的环境进行基本的文本处理和特征提取 0.75 ``` -解释一个分类器的准确性得分,考虑测试集中单个类标签的频率是很重要的。例如,考虑一个决定词 bank 每次出现的正确的词意的分类器。如果我们在金融新闻文本上评估分类器,那么我们可能会发现,`金融机构`的意思 20 个里面出现了 19 次。在这种情况下,95%的准确度也难以给人留下深刻印象,因为我们可以实现一个模型,它总是返回`金融机构`的意义。然而,如果我们在一个更加平衡的语料库上评估分类器,那里的最频繁的词意只占 40%,那么 95%的准确度得分将是一个更加积极的结果。(在2测量标注一致性程度时也会有类似的问题。) +解释一个分类器的准确性得分,考虑测试集中单个类标签的频率是很重要的。例如,考虑一个决定词 bank 每次出现的正确的词意的分类器。如果我们在金融新闻文本上评估分类器,那么我们可能会发现,`金融机构`的意思 20 个里面出现了 19 次。在这种情况下,95% 的准确度也难以给人留下深刻印象,因为我们可以实现一个模型,它总是返回`金融机构`的意义。然而,如果我们在一个更加平衡的语料库上评估分类器,那里的最频繁的词意只占 40%,那么 95% 的准确度得分将是一个更加积极的结果。(在2测量标注一致性程度时也会有类似的问题。) ## 3.3 精确度和召回率 -另一个准确度分数可能会产生误导的实例是在“搜索”任务中,如信息检索,我们试图找出与特定任务有关的文档。由于不相关的文档的数量远远多于相关文档的数量,一个将每一个文档都标记为无关的模型的准确度分数将非常接近 100%。 +另一个准确度分数可能会产生误导的实例是在“搜索”任务中,如信息检索,我们试图找出与特定任务有关的文档。由于不相关的文档的数量远远多于相关文档的数量,一个将每一个文档都标记为无关的模型的准确度分数将非常接近 100%。 ![Images/precision-recall.png](Images/e591e60c490795add5183c998132ebc0.jpg) @@ -714,7 +714,7 @@ def entropy(labels): 图 5.1:使用朴素贝叶斯分类器为文档选择主题的程序的抽象图解。在训练语料中,大多数文档是有关汽车的,所以分类器从接近“汽车”的标签的点上开始。但它会考虑每个特征的影响。在这个例子中,输入文档中包含的词"dark",它是谋杀之谜的一个不太强的指标,也包含词"football",它是体育文档的一个有力指标。每个特征都作出了贡献之后,分类器检查哪个标签最接近,并将该标签分配给输入。 -个别特征对整体决策作出自己的贡献,通过“投票反对”那些不经常出现的特征的标签。特别是,每个标签的似然得分由于与输入值具有此特征的标签的概率相乘而减小。例如,如果词 run 在 12%的体育文档中出现,在 10%的谋杀之谜的文档中出现,在 2%的汽车文档中出现,那么体育标签的似然得分将被乘以 0.12,谋杀之谜标签将被乘以 0.1,汽车标签将被乘以 0.02。整体效果是略高于体育标签的得分的谋杀之谜标签的得分会减少,而汽车标签相对于其他两个标签会显著减少。这个过程如 5.2 和 5.3 所示。 +个别特征对整体决策作出自己的贡献,通过“投票反对”那些不经常出现的特征的标签。特别是,每个标签的似然得分由于与输入值具有此特征的标签的概率相乘而减小。例如,如果词 run 在 12%的体育文档中出现,在 10%的谋杀之谜的文档中出现,在 2% 的汽车文档中出现,那么体育标签的似然得分将被乘以 0.12,谋杀之谜标签将被乘以 0.1,汽车标签将被乘以 0.02。整体效果是略高于体育标签的得分的谋杀之谜标签的得分会减少,而汽车标签相对于其他两个标签会显著减少。这个过程如 5.2 和 5.3 所示。 ![Images/naive_bayes_bargraph.png](Images/b502c97e1f935240559d38b397805b32.jpg) @@ -789,14 +789,13 @@ c. in the picture *versus* on the screen d. in Macbeth *versus* on Letterman ``` -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST -## Docutils System Messages -System Message: ERROR/3 (`ch06.rst2`, line 1264); [*backlink*](./ch06.html#id18) -Undefined substitution referenced: "ii". \ No newline at end of file + + diff --git a/7.md b/7.md index 7e8d2a3..254f2a7 100644 --- a/7.md +++ b/7.md @@ -42,7 +42,7 @@ 请记住我们的例子程序假设你以`import nltk, re, pprint`开始交互式会话或程序。 -接下来,命名实体识别中,我们分割和标注可能组成一个有趣关系的实体。通常情况下,这些将被定义为名词短语,例如 the knights who say "ni"或者适当的名称如 Monty Python。在一些任务中,同时考虑不明确的名词或名词块也是有用的,如<cite>every student</cite>或<cite>cats</cite>,这些不必要一定与确定的`NP`s 和适当名称一样的方式指示实体。 +接下来,命名实体识别中,我们分割和标注可能组成一个有趣关系的实体。通常情况下,这些将被定义为名词短语,例如 the knights who say "ni"或者适当的名称如 Monty Python。在一些任务中,同时考虑不明确的名词或名词块也是有用的,如`every student`或`cats`,这些不必要一定与确定的`NP`s 和适当名称一样的方式指示实体。 最后,在提取关系时,我们搜索对文本中出现在附近的实体对之间的特殊模式,并使用这些模式建立元组记录实体之间的关系。 @@ -306,7 +306,7 @@ ChunkParse score: F-Measure: 83.2% ``` -这个分块器相当不错,达到整体 F-度量 83%的得分。让我们来看一看通过使用一元标注器分配一个标记给每个语料库中出现的词性标记,它学到了什么: +这个分块器相当不错,达到整体 F-度量 83% 的得分。让我们来看一看通过使用一元标注器分配一个标记给每个语料库中出现的词性标记,它学到了什么: ```py >>> postags = sorted(set(pos for sent in train_sents @@ -412,7 +412,7 @@ ChunkParse score: F-Measure: 84.5% ``` -下一步,我们将尝试为当前词增加特征,因为我们假设这个词的内容应该对词块划有用。我们发现这个特征确实提高了词块划分器的表现,大约 1.5 个百分点(相应的错误率减少大约 10%)。 +下一步,我们将尝试为当前词增加特征,因为我们假设这个词的内容应该对词块划有用。我们发现这个特征确实提高了词块划分器的表现,大约 1.5 个百分点(相应的错误率减少大约 10%)。 ```py >>> def npchunk_features(sentence, i, history): @@ -741,7 +741,7 @@ IOB 格式(有时也称为 BIO 格式)由[(Ramshaw & Marcus, 1995)](./biblio 3. 与本章的评估部分讨论的基准词块划分器比较你的词块划分器的表现。 8. ◑ 使用基于正则表达式的词块语法`RegexpChunk`,为 CoNLL 语料库中词块类型中的一个开发一个词块划分器。使用词块、词缝、合并或拆分规则的任意组合。 9. ◑ 有时一个词的标注不正确,例如"12/CD or/CC so/RB cases/VBZ"中的中心名词。不用要求手工校正标注器的输出,好的词块划分器使用标注器的错误输出也能运作。查找使用不正确的标记正确为名词短语划分词块的其他例子。 -10. ◑ 二元词块划分器的准确性得分约为 90%。研究它的错误,并试图找出它为什么不能获得 100%的准确率。实验三元词块划分。你能够再提高准确性吗? +10. ◑ 二元词块划分器的准确性得分约为 90%。研究它的错误,并试图找出它为什么不能获得 100% 的准确率。实验三元词块划分。你能够再提高准确性吗? 11. ★ 在 IOB 词块标注上应用 n-gram 和 Brill 标注方法。不是给词分配词性标记,在这里我们给词性标记分配 IOB 标记。例如如果标记`DT`(限定符)经常出现在一个词块的开头,它会被标注为`B`(开始)。相对于本章中讲到的正则表达式词块划分方法,评估这些词块划分方法的表现。 12. ★ 在[5.](./ch05.html#chap-tag)中我们看到,通过查找有歧义的 n-grams 可以得到标注准确性的上限,即在训练数据中有多种可能的方式标注的 n-grams。应用同样的方法来确定一个 n-gram 词块划分器的上限。 13. ★ 挑选 CoNLL 语料库中三种词块类型之一。编写函数为你选择的类型做以下任务: @@ -756,8 +756,8 @@ IOB 格式(有时也称为 BIO 格式)由[(Ramshaw & Marcus, 1995)](./biblio 17. ★ 一个 n-gram 词块划分器可以使用除当前词性标记和 n-1 个前面的词块的标记以外其他信息。调查其他的上下文模型,如 n-1 个前面的词性标记,或一个写前面词块标记连同前面和后面的词性标记的组合。 18. ★ 思考一个 n-gram 标注器使用临近的标记的方式。现在观察一个词块划分器可能如何重新使用这个序列信息。例如:这两个任务将使用名词往往跟在形容词后面(英文中)的信息。这会出现相同的信息被保存在两个地方的情况。随着规则集规模增长,这会成为一个问题吗?如果是,推测可能会解决这个问题的任何方式。 -关于本文档... +## 关于本文档... -针对 NLTK 3.0 作出更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 作出更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file diff --git a/8.md b/8.md index 5c3c4b8..0d60fe9 100644 --- a/8.md +++ b/8.md @@ -323,7 +323,7 @@ TV -> 'chased' | 'saw' ## 6.1 树库和语法 -`corpus`模块定义了`treebank`语料的阅读器,其中包含了宾州树库语料的 10%的样本。 +`corpus`模块定义了`treebank`语料的阅读器,其中包含了宾州树库语料的 10% 的样本。 ```py >>> from nltk.corpus import treebank @@ -490,7 +490,7 @@ grammar = nltk.PCFG.fromstring(""" 2. ☼ 回想一下 Strunk 和 White 的禁止在句子开头使用 however 表示“although”的意思。在网上搜索句子开头使用的 however。这个成分使用的有多广泛? -3. ☼ 思考句子<cite>Kim arrived or Dana left and everyone cheered</cite>。用括号的形式表示 and 和 or 的相对范围。产生这两种解释对应的树结构。 +3. ☼ 思考句子`Kim arrived or Dana left and everyone cheered`。用括号的形式表示 and 和 or 的相对范围。产生这两种解释对应的树结构。 4. ☼ `Tree`类实现了各种其他有用的方法。请看`Tree`帮助文档查阅更多细节(如导入 Tree 类,然后输入`help(Tree)`)。 @@ -501,7 +501,7 @@ grammar = nltk.PCFG.fromstring(""" 3. 如(a) 中那样,为 The woman saw a man last Thursday 画一棵树。 6. ☼ 写一个递归函数,遍历一颗树,返回树的深度,一颗只有一个节点的树的深度应为 0。(提示:子树的深度是其子女的最大深度加 1。) -7. ☼ 分析 A.A. Milne 关于 Piglet 的句子,为它包含的所有句子画下划线,然后用`S`替换这些(如第一句话变为`S` <cite>when</cite>:lx` `S`)。为这种“压缩”的句子画一个树形结构。用于建立这样一个长句的主要的句法结构是什么? +7. ☼ 分析 A.A. Milne 关于 Piglet 的句子,为它包含的所有句子画下划线,然后用`S`替换这些(如第一句话变为`S` `when`:lx` `S`)。为这种“压缩”的句子画一个树形结构。用于建立这样一个长句的主要的句法结构是什么? 8. ☼ 在递归下降分析器的演示中,通过选择 *Edit* 菜单上的 *Edit Text* 改变实验句子。 @@ -542,14 +542,14 @@ grammar = nltk.PCFG.fromstring(""" 23. ◑ 在本节中,我们说过简单的用术语 n-grams 不能描述所有语言学规律。思考下面的句子,尤其是短语 in his turn 的位置。这是基于 n-grams 的方法的一个问题吗? - > <cite>What was more, the in his turn somewhat youngish Nikolay Parfenovich also turned out to be the only person in the entire world to acquire a sincere liking to our "discriminated-against" public procurator.</cite> (Dostoevsky: The Brothers Karamazov) + > `What was more, the in his turn somewhat youngish Nikolay Parfenovich also turned out to be the only person in the entire world to acquire a sincere liking to our "discriminated-against" public procurator.` (Dostoevsky: The Brothers Karamazov) 24. ◑ 编写一个递归函数产生嵌套的括号括起的形式的一棵树,显示去掉叶节点之后的子树的非终结符。于是上面的关于 Pierre Vinken 的例子会产生:`[[[NNP NNP]NP , [ADJP [CD NNS]NP JJ]ADJP ,]NP-SBJ MD [VB [DT NN]NP [IN [DT JJ NN]NP]PP-CLR [NNP CD]NP-TMP]VP .]S`。连续的类别应用空格分隔。 25. ◑ 从古登堡工程下载一些电子图书。写一个程序扫描这些文本中任何极长的句子。你能找到的最长的句子是什么?这么长的句子的句法结构是什么? 26. ◑ 修改函数`init_wfst()`和`complete_wfst()`,使 WFST 中每个单元的内容是一组非终端符而不是一个单独的非终结符。 -27. ◑ 思考 4.4 中的算法。你能解释为什么分析上下文无关语法是与<cite>n</cite><sup>3</sup>成正比的,其中 *n* 是输入句子的长度。 +27. ◑ 思考 4.4 中的算法。你能解释为什么分析上下文无关语法是与`n`<sup>3</sup>成正比的,其中 *n* 是输入句子的长度。 28. ◑ 处理宾州树库语料库样本`nltk.corpus.treebank`中的每棵树,在`Tree.productions()`的帮助下提取产生式。丢弃只出现一次的产生式。具有相同的左侧和类似的右侧的产生式可以被折叠,产生一个等价的却更紧凑的规则集。编写代码输出一个紧凑的语法。 diff --git a/9.md b/9.md index 8ffe468..f57243a 100644 --- a/9.md +++ b/9.md @@ -28,7 +28,7 @@ >>> chase['PAT'] = 'obj' ``` -如果我们现在处理句子<cite>Kim chased Lee</cite>,我们要“绑定”动词的施事角色和主语,受事角色和宾语。我们可以通过链接到相关的`NP`的`REF`特征做到这个。在下面的例子中,我们做一个简单的假设:在动词直接左侧和右侧的`NP`分别是主语和宾语。我们还在例子结尾为 Lee 添加了一个特征结构。 +如果我们现在处理句子`Kim chased Lee`,我们要“绑定”动词的施事角色和主语,受事角色和宾语。我们可以通过链接到相关的`NP`的`REF`特征做到这个。在下面的例子中,我们做一个简单的假设:在动词直接左侧和右侧的`NP`分别是主语和宾语。我们还在例子结尾为 Lee 添加了一个特征结构。 ```py >>> sent = "Kim chased Lee" @@ -377,7 +377,7 @@ VP -> TV NP 我们注意到,在上一节中,通过从主类别标签分解出子类别信息,我们可以表达有关动词属性的更多概括。类似的另一个属性如下:`V`类的表达式是`VP`类的短语的核心。同样,`N`是`NP`的核心词,`A`(即形容词)是`AP`的核心词,`P`(即介词)是`PP`的核心词。并非所有的短语都有核心词——例如,一般认为连词短语(如 the book and the bell)缺乏核心词——然而,我们希望我们的语法形式能表达它所持有的父母/核心子女关系。现在,`V`和`VP`只是原子符号,我们需要找到一种方法用特征将它们关联起来(就像我们以前关联`IV`和`TV`那样)。 -X-bar 句法通过抽象出短语级别的概念,解决了这个问题。它通常认为有三个这样的级别。如果`N`表示词汇级别,那么`N`'表示更高一层级别,对应较传统的级别<cite>Nom</cite>,`N`''表示短语级别,对应类别`NP`。[(34a)](./ch09.html#ex-xbar0)演示了这种表示结构,而[(34b)](./ch09.html#ex-xbar01)是更传统的对应。 +X-bar 句法通过抽象出短语级别的概念,解决了这个问题。它通常认为有三个这样的级别。如果`N`表示词汇级别,那么`N`'表示更高一层级别,对应较传统的级别`Nom`,`N`''表示短语级别,对应类别`NP`。[(34a)](./ch09.html#ex-xbar0)演示了这种表示结构,而[(34b)](./ch09.html#ex-xbar01)是更传统的对应。 ```py S -> N[BAR=2] V[BAR=2] @@ -559,7 +559,7 @@ Comp -> 'that' TV[OBJCASE=dat, AGR=[NUM=pl,PER=3]] -> 'folgen' | 'helfen' ``` -正如你可以看到的,特征<cite>objcase</cite>被用来指定动词支配它的对象的格。下一个例子演示了包含支配与格的动词的句子的分析树。 +正如你可以看到的,特征`objcase`被用来指定动词支配它的对象的格。下一个例子演示了包含支配与格的动词的句子的分析树。 ```py >>> tokens = 'ich folge den Katzen'.split() @@ -653,7 +653,7 @@ In the case of complex values, we say that feature structures are themselves typ 1. ☼ 需要什么样的限制才能正确分析词序列,如 I am happy 和 she is happy 而不是*you is happy 或*they am happy?实现英语中动词 be 的现在时态范例的两个解决方案,首先以语法[(6)](./ch09.html#ex-agcfg1)作为起点,然后以语法 [(18)](./ch09.html#ex-agr2)为起点。 -2. ☼ 开发 1.1 中语法的变体,使用特征<cite>count</cite>来区分下面显示的句子: +2. ☼ 开发 1.1 中语法的变体,使用特征`count`来区分下面显示的句子: ```py fs1 = nltk.FeatStruct("[A = ?x, B= [C = ?x]]") @@ -718,8 +718,8 @@ In the case of complex values, we say that feature structures are themselves typ 12. ★ 挑选一些[(Huddleston & Pullum, 2002)](./bibliography.html#huddleston2002cge)中描述的文法结构,建立一个基于特征的语法计算它们的比例。 -关于本文档... +## 关于本文档... -针对 NLTK 3.0 进行更新。本章来自于 *Natural Language Processing with Python*,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和[Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 *Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License* [[http://creativecommons.org/licenses/by-nc-nd/3.0/us/](http://creativecommons.org/licenses/by-nc-nd/3.0/us/)] 条款,与*自然语言工具包* [`http://nltk.org/`] 3.0 版一起发行。 +针对 NLTK 3.0 进行更新。本章来自于《Python 自然语言处理》,[Steven Bird](http://estive.net/), [Ewan Klein](http://homepages.inf.ed.ac.uk/ewan/) 和 [Edward Loper](http://ed.loper.org/),Copyright © 2014 作者所有。本章依据 [*Creative Commons Attribution-Noncommercial-No Derivative Works 3\.0 United States License*](http://creativecommons.org/licenses/by-nc-nd/3.0/us/) 条款,与[*自然语言工具包*](http://nltk.org/) 3.0 版一起发行。 本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST \ No newline at end of file -- GitLab