第5章 提取组块

本章将介绍以下内容。

  • 使用正则表达式组块和隔断。
  • 使用正则表达式合并和拆分组块。
  • 使用正则表达式扩展和删除组块。
  • 使用正则表达式进行部分解析。
  • 训练基于标注器的分块器。
  • 基于分类的分块。
  • 提取命名实体。
  • 提取专有名词组块。
  • 提取部位组块。
  • 训练命名实体组块器。
  • NLTK训练器训练组块器。

组块提取(或部分解析)是从词性标签语句中提取短语的过程。这不同于完全解析,因为我们感兴趣的是独立组块或短语,而不是完整的解析树(要了解关于解析树的更多知识,请参阅维基百科)。这背后的思想是,可以通过查找词性标签的特定模式,从句子中提取有意义的短语。

正如在第4章中,我们将使用宾州树库语料库进行基本训练,并测试组块提取。由于CoNLL2000语料库格式相对简单并且灵活,支持多种组块类型(请参阅该模块3.2节和3.5节,获得关于conll2000语料库和IOB标签的更多详细信息),因此我们也使用CoNLL2000语料库。

使用修改的正则表达式,可以定义组块的模式。这些是词性标签的模式,这些模式定义了何种单词组成了组块。也可以对哪类单词不应该在组块中定义模式。这些未分组的单词,称为隔断(chink)。

ChunkRule类指定了在组块中包含什么,而ChinkRule类指定了从组块中排除什么。换句话说,分块创建组块,而隔断打破这些组块。

首先,我们需要知道如何定义组块模式。这些修改的正则表达式用于匹配词性标签序列。使用尖括号指定单个标签,如使用<NN>匹配名词标签。可以组合多个标签,如<DT> <NN>匹配后面跟着名词的限定词。在尖括号内,使用正则表达式语法来匹配个别标签模式,因此,可以使用<NN *>匹配所有名词,包括NN和NNS。也可以在尖括号外使用正则表达式语法,匹配标签模式。<DT>?<NN.*> ...

Get Python和NLTK实现自然语言处理 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.