《创世纪》有 44764 个词和标点符号或者叫“词符”。词符 表示一个我们想要整体对待的字符序列 —— 例如`hairy`,`his`或`:)`。当我们计数文本如 to be or not to be 这个短语中词符的个数时,我们计数这些序列出现的次数。因此,我们的例句中出现了 to 和 be 各两次,or 和 not 各一次。然而在例句中只有 4 个不同的词。《创世纪》中有多少不同的词?要用 Python 来回答这个问题,我们处理问题的方法将稍有改变。一个文本词汇表只是它用到的词符的*集合*,因为在集合中所有重复的元素都只算一个。Python 中我们可以使用命令:`set(text3)`获得`text3`的词汇表。当你这样做时,屏幕上的很多词会掠过。现在尝试以下操作:
《创世纪》有 44764 个词和标点符号或者叫“词符”。词符 表示一个我们想要整体对待的字符序列 —— 例如`hairy`,`his`或`:)`。当我们计数文本如`to be or not to be`这个短语中词符的个数时,我们计数这些序列出现的次数。因此,我们的例句中出现了`to`和`be`各两次,`or`和`not`各一次。然而在例句中只有 4 个不同的词。《创世纪》中有多少不同的词?要用 Python 来回答这个问题,我们处理问题的方法将稍有改变。一个文本词汇表只是它用到的词符的*集合*,因为在集合中所有重复的元素都只算一个。Python 中我们可以使用命令:`set(text3)`获得`text3`的词汇表。当你这样做时,屏幕上的很多词会掠过。现在尝试以下操作:
总结一下,我们已经定义了一个任务:计算机对自然语言查询做出反应,返回有用的数据。我们通过将英语的一个小的子集翻译成 SQL 来实现这个任务们可以说,我们的 NLTK 代码已经“理解”SQL,只要 Python 能够对数据库执行 SQL 查询,通过扩展,它也“理解”如 What cities are located in China 这样的查询。这相当于自然语言理解的例子能够从荷兰语翻译成英语。假设你是一个英语为母语的人,已经开始学习荷兰语。你的老师问你是否理解[(3)](./ch10.html#ex-sem1)的意思:
在[3](./ch01.html#sec-computing-with-language-simple-statistics)中,我们指出数学集合符号对于制定我们想从文档中选择的词的属性 P 很有用。我们用[(31)](./ch10.html#ex-set-comprehension-math2)说明这个,它是“所有 w 的集合,其中 w 是 V(词汇表)的元素且 w 有属性 P”的表示。
在3中,我们指出数学集合符号对于制定我们想从文档中选择的词的属性 P 很有用。我们用[(31)](./ch10.html#ex-set-comprehension-math2)说明这个,它是“所有 w 的集合,其中 w 是 V(词汇表)的元素且 w 有属性 P”的表示。
我们将使用 XML 格式的莎士比亚戏剧集来说明 ElementTree 的使用方法。让我们加载 XML 文件并检查原始数据,首先在文件的顶部[❶](./ch11.html#top-of-file),在那里我们看到一些 XML 头和一个名为`play.dtd`的模式,接着是根元素`PLAY`。我们从 Act 1[❷](./ch11.html#start-act-one)再次获得数据。(输出中省略了一些空白行。)
我们将使用 XML 格式的莎士比亚戏剧集来说明 ElementTree 的使用方法。让我们加载 XML 文件并检查原始数据,首先在文件的顶部❶,在那里我们看到一些 XML 头和一个名为`play.dtd`的模式,接着是根元素`PLAY`。我们从 Act 1❷再次获得数据。(输出中省略了一些空白行。)
@@ -394,7 +394,7 @@ Python 的 ElementTree 模块提供了一种方便的方式访问存储在 XML
我们刚刚访问了作为一个字符串的 XML 数据。正如我们看到的,在 Act 1 开始处的字符串包含 XML 标记 title、scene、stage directions 等。
下一步是作为结构化的 XML 数据使用`ElementTree`处理文件的内容。我们正在处理一个文件(一个多行字符串),并建立一棵树,所以方法的名称是`parse`[❶](./ch11.html#xml-parse)并不奇怪。变量`merchant`包含一个 XML 元素`PLAY`[❷](./ch11.html#element-play)。此元素有内部结构;我们可以使用一个索引来得到它的第一个孩子,一个`TITLE`元素[❸](./ch11.html#element-title)。我们还可以看到该元素的文本内容:戏剧的标题[❹](./ch11.html#element-text)。要得到所有的子元素的列表,我们使用`getchildren()`方法[❺](./ch11.html#getchildren-method)。
下一步是作为结构化的 XML 数据使用`ElementTree`处理文件的内容。我们正在处理一个文件(一个多行字符串),并建立一棵树,所以方法的名称是`parse`❶并不奇怪。变量`merchant`包含一个 XML 元素`PLAY`❷。此元素有内部结构;我们可以使用一个索引来得到它的第一个孩子,一个`TITLE`元素❸。我们还可以看到该元素的文本内容:戏剧的标题❹。要得到所有的子元素的列表,我们使用`getchildren()`方法❺。
```py
>>>fromxml.etree.ElementTreeimportElementTree
...
...
@@ -475,7 +475,7 @@ Act 5 Scene 1 Speech 32: No better a musician than the wren.
ó U+00f3 LATIN SMALL LETTER O WITH ACUTEś U+015b LATIN SMALL LETTER S WITH ACUTEŚ U+015a LATIN CAPITAL LETTER S WITH ACUTEą U+0105 LATIN SMALL LETTER A WITH OGONEKł U+0142 LATIN SMALL LETTER L WITH STROKE
你可以使用一种特殊的正则表达式搜索一个文本中多个词(这里的文本是一个词符列表)。例如,`"<a> <man>"`找出文本中所有 a man 的实例。尖括号用于标记词符的边界,尖括号之间的所有空白都被忽略(这只对 NLTK 中的`findall()`方法处理文本有效)。在下面的例子中,我们使用`<.*>`[❶](./ch03.html#single-token-wildcard),它将匹配所有单个词符,将它括在括号里,于是只匹配词(例如 monied)而不匹配短语(例如,a monied man)会生成。第二个例子找出以词 bro 结尾的三个词组成的短语[❷](./ch03.html#three-word-phrases)。最后一个例子找出以字母 l 开始的三个或更多词组成的序列[❸](./ch03.html#letter-l)。
你可以使用一种特殊的正则表达式搜索一个文本中多个词(这里的文本是一个词符列表)。例如,`"<a> <man>"`找出文本中所有 a man 的实例。尖括号用于标记词符的边界,尖括号之间的所有空白都被忽略(这只对 NLTK 中的`findall()`方法处理文本有效)。在下面的例子中,我们使用`<.*>`❶,它将匹配所有单个词符,将它括在括号里,于是只匹配词(例如 monied)而不匹配短语(例如,a monied man)会生成。第二个例子找出以词 bro 结尾的三个词组成的短语❷。最后一个例子找出以字母 l 开始的三个或更多词组成的序列❸。
```py
>>>fromnltk.corpusimportgutenberg,nps_chat
...
...
@@ -985,7 +985,7 @@ la la; lovely lol lol love; lol lol lol.; la la la; la la la
接下来,让我们看一些较大范围的上下文,找出涉及特定标记和词序列的词(在这种情况下,`"<Verb> to <Verb>"`)。在 code-three-word-phrase 中,我们考虑句子中的每个三词窗口[❶](./ch05.html#three-word),检查它们是否符合我们的标准[❷](./ch05.html#verb-to-verb)。如果标记匹配,我们输出对应的词[❸](./ch05.html#print-words)。
接下来,让我们看一些较大范围的上下文,找出涉及特定标记和词序列的词(在这种情况下,`"<Verb> to <Verb>"`)。在 code-three-word-phrase 中,我们考虑句子中的每个三词窗口❶,检查它们是否符合我们的标准❷。如果标记匹配,我们输出对应的词❸。
一元标注器基于一个简单的统计算法:对每个标识符分配这个独特的标识符最有可能的标记。例如,它将分配标记`JJ`给词 frequent 的所有出现,因为 frequent 用作一个形容词(例如 a frequent word)比用作一个动词(例如 I frequent this cafe)更常见。一个一元标注器的行为就像一个查找标注器([4](./ch05.html#sec-automatic-tagging)),除了有一个更方便的建立它的技术,称为训练。在下面的代码例子中,我们训练一个一元标注器,用它来标注一个句子,然后评估:
一元标注器基于一个简单的统计算法:对每个标识符分配这个独特的标识符最有可能的标记。例如,它将分配标记`JJ`给词 frequent 的所有出现,因为 frequent 用作一个形容词(例如 a frequent word)比用作一个动词(例如 I frequent this cafe)更常见。一个一元标注器的行为就像一个查找标注器(4),除了有一个更方便的建立它的技术,称为训练。在下面的代码例子中,我们训练一个一元标注器,用它来标注一个句子,然后评估:
模式识别是自然语言处理的一个核心部分。以-ed 结尾的词往往是过去时态动词([5.](./ch05.html#chap-tag))。频繁使用 will 是新闻文本的暗示([3](./ch03.html#chap-words))。这些可观察到的模式——词的结构和词频——恰好与特定方面的含义关联,如时态和主题。但我们怎么知道从哪里开始寻找,形式的哪一方面关联含义的哪一方面?
模式识别是自然语言处理的一个核心部分。以-ed 结尾的词往往是过去时态动词([5.](./ch05.html#chap-tag))。频繁使用 will 是新闻文本的暗示(3)。这些可观察到的模式——词的结构和词频——恰好与特定方面的含义关联,如时态和主题。但我们怎么知道从哪里开始寻找,形式的哪一方面关联含义的哪一方面?
本章的目的是要回答下列问题:
...
...
@@ -30,7 +30,7 @@
## 1.1 性别鉴定
在[4](./ch02.html#sec-lexical-resources)中,我们看到,男性和女性的名字有一些鲜明的特点。以 a,e 和 i 结尾的很可能是女性,而以 k,o,r,s 和 t 结尾的很可能是男性。让我们建立一个分类器更精确地模拟这些差异。
在4中,我们看到,男性和女性的名字有一些鲜明的特点。以 a,e 和 i 结尾的很可能是女性,而以 k,o,r,s 和 t 结尾的很可能是男性。让我们建立一个分类器更精确地模拟这些差异。
处理对话时,将对话看作说话者执行的*行为*是很有用的。对于表述行为的陈述句这种解释是最直白的,例如"I forgive you"或"I bet you can't climb that hill"。但是问候、问题、回答、断言和说明都可以被认为是基于语言的行为类型。识别对话中言语下的对话行为是理解谈话的重要的第一步。
NPS 聊天语料库,在[1](./ch02.html#sec-extracting-text-from-corpora)中的展示过,包括超过 10,000 个来自即时消息会话的帖子。这些帖子都已经被贴上 15 种对话行为类型中的一种标签,例如“陈述”,“情感”,“yn 问题”和“Continuer”。因此,我们可以利用这些数据建立一个分类器,识别新的即时消息帖子的对话行为类型。第一步是提取基本的消息数据。我们将调用`xml_posts()`来得到一个数据结构,表示每个帖子的 XML 注释:
NPS 聊天语料库,在1中的展示过,包括超过 10,000 个来自即时消息会话的帖子。这些帖子都已经被贴上 15 种对话行为类型中的一种标签,例如“陈述”,“情感”,“yn 问题”和“Continuer”。因此,我们可以利用这些数据建立一个分类器,识别新的即时消息帖子的对话行为类型。第一步是提取基本的消息数据。我们将调用`xml_posts()`来得到一个数据结构,表示每个帖子的 XML 注释:
前面的章节中已经为你讲述了如何处理和分析的文本语料库,我们一直强调处理大量的每天都在增加的电子语言数据是 NLP 的挑战。让我们更加细致的思考这些数据,做一个思想上的实验,我们有一个巨大的语料库,包括在过去 50 年中英文表达或写成的一切。我们称这个语料库为“现代英语”合理吗?有许多为什么我们的回答可能是否定的的原因。回想一下,在[3](./ch03.html#chap-words)中,我们让你搜索网络查找 the of 模式的实例。虽然很容易在网上找到包含这个词序列的例子,例如 New man at the of IMG (见`http://www.telegraph.co.uk/sport/2387900/New-man-at-the-of-IMG.html`),说英语的人会说大多数这样的例子是错误的,因此它们根本不是英语。
前面的章节中已经为你讲述了如何处理和分析的文本语料库,我们一直强调处理大量的每天都在增加的电子语言数据是 NLP 的挑战。让我们更加细致的思考这些数据,做一个思想上的实验,我们有一个巨大的语料库,包括在过去 50 年中英文表达或写成的一切。我们称这个语料库为“现代英语”合理吗?有许多为什么我们的回答可能是否定的的原因。回想一下,在3中,我们让你搜索网络查找 the of 模式的实例。虽然很容易在网上找到包含这个词序列的例子,例如 New man at the of IMG (见`http://www.telegraph.co.uk/sport/2387900/New-man-at-the-of-IMG.html`),说英语的人会说大多数这样的例子是错误的,因此它们根本不是英语。