自然语言处理 - Python



在本章中,我们将学习使用 Python 进行语言处理。

以下特性使 Python 不同于其他语言:

  • Python 是解释型语言 - 我们不需要在执行 Python 程序之前编译它,因为解释器在运行时处理 Python。

  • 交互式 - 我们可以直接与解释器交互来编写 Python 程序。

  • 面向对象 - Python 本质上是面向对象的,这使得编写程序更容易,因为它利用这种编程技术将代码封装在对象中。

  • 初学者易于学习 - Python 也被称为初学者的语言,因为它非常易于理解,并且支持开发各种应用程序。

先决条件

最新发布的 Python 3 版本是 Python 3.7.1,适用于 Windows、Mac OS 和大多数 Linux 操作系统版本。

  • 对于 Windows,我们可以访问链接 www.python.org/downloads/windows/ 下载并安装 Python。

  • 对于 MAC OS,我们可以使用链接 www.python.org/downloads/mac-osx/

  • 在 Linux 的情况下,不同的 Linux 版本使用不同的包管理器来安装新软件包。

    • 例如,要在 Ubuntu Linux 上安装 Python 3,我们可以从终端使用以下命令:

$sudo apt-get install python3-minimal

要了解更多关于 Python 编程的信息,请阅读 Python 3 基础教程 - Python 3

NLTK 入门

我们将使用 Python 库 NLTK(自然语言工具包)来进行英语文本分析。自然语言工具包 (NLTK) 是一个 Python 库集合,专门用于识别和标记自然语言(如英语)文本中发现的词性。

安装 NLTK

在开始使用 NLTK 之前,我们需要安装它。我们可以使用以下命令在我们的 Python 环境中安装它:

pip install nltk

如果我们使用的是 Anaconda,则可以使用以下命令构建 NLTK 的 Conda 包:

conda install -c anaconda nltk

下载 NLTK 的数据

安装 NLTK 后,另一个重要的任务是下载其预设的文本库,以便可以轻松使用。但是,在此之前,我们需要像导入任何其他 Python 模块一样导入 NLTK。以下命令将帮助我们导入 NLTK:

import nltk

现在,使用以下命令下载 NLTK 数据:

nltk.download()

安装所有可用的 NLTK 软件包需要一些时间。

其他必要的软件包

一些其他 Python 软件包,如 gensimpattern,对于文本分析以及使用 NLTK 构建自然语言处理应用程序也必不可少。这些软件包可以按如下所示安装:

gensim

gensim 是一个强大的语义建模库,可用于许多应用程序。我们可以通过以下命令安装它:

pip install gensim

pattern

它可以用来使 gensim 软件包正常工作。以下命令有助于安装 pattern:

pip install pattern

分词

分词可以定义为将给定的文本分解成称为标记的更小单元的过程。单词、数字或标点符号可以是标记。它也可以称为单词分割。

示例

输入 - 床和椅子是家具的类型。

Bed and Chair

NLTK 为我们提供了不同的分词软件包。我们可以根据我们的需求使用这些软件包。软件包及其安装详细信息如下:

sent_tokenize 软件包

此软件包可用于将输入文本划分为句子。我们可以使用以下命令导入它:

from nltk.tokenize import sent_tokenize

word_tokenize 软件包

此软件包可用于将输入文本划分为单词。我们可以使用以下命令导入它:

from nltk.tokenize import word_tokenize

WordPunctTokenizer 软件包

此软件包可用于将输入文本划分为单词和标点符号。我们可以使用以下命令导入它:

from nltk.tokenize import WordPuncttokenizer

词干提取

由于语法原因,语言包含大量变体。变体是指语言(英语和其他语言)具有一个单词的不同形式。例如,诸如 democracydemocraticdemocratization 之类的单词。对于机器学习项目,机器理解这些不同的单词(如上所示)具有相同的词根形式非常重要。这就是为什么在分析文本时提取单词的词根形式非常有用的原因。

词干提取是一个启发式过程,它通过去除单词的结尾来帮助提取单词的词根形式。

NLTK 模块提供的不同词干提取软件包如下:

PorterStemmer 软件包

此词干提取软件包使用 Porter 算法来提取单词的词根形式。我们可以使用以下命令导入此软件包:

from nltk.stem.porter import PorterStemmer

例如,‘write’ 将是将 ‘writing’ 作为输入提供给此词干提取器时的输出。

LancasterStemmer 软件包

此词干提取软件包使用 Lancaster 算法来提取单词的词根形式。我们可以使用以下命令导入此软件包:

from nltk.stem.lancaster import LancasterStemmer

例如,‘writ’ 将是将 ‘writing’ 作为输入提供给此词干提取器时的输出。

SnowballStemmer 软件包

此词干提取软件包使用 Snowball 算法来提取单词的词根形式。我们可以使用以下命令导入此软件包:

from nltk.stem.snowball import SnowballStemmer

例如,‘write’ 将是将 ‘writing’ 作为输入提供给此词干提取器时的输出。

词形还原

这是另一种提取单词词根形式的方法,通常旨在通过使用词汇和形态分析来去除屈折词尾。词形还原后,任何单词的词根形式称为词形。

NLTK 模块为词形还原提供以下软件包:

WordNetLemmatizer 软件包

此软件包将根据单词用作名词还是动词来提取单词的词根形式。以下命令可用于导入此软件包:

from nltk.stem import WordNetLemmatizer

词性标注计数 - 组块分析

可以使用组块分析来识别词性 (POS) 和短语。它是自然语言处理中的重要过程之一。正如我们了解用于创建标记的分词过程一样,组块分析实际上是对这些标记进行标记。换句话说,我们可以说我们可以通过组块分析过程获得句子的结构。

示例

在下面的示例中,我们将实现名词短语组块分析(一种组块分析类别),它将使用 NLTK Python 模块在句子中查找名词短语组块。

请考虑以下步骤来实现名词短语组块分析:

步骤 1:组块语法定义

在此步骤中,我们需要定义组块的语法。它将包含我们需要遵循的规则。

步骤 2:创建组块分析器

接下来,我们需要创建一个组块分析器。它将解析语法并给出输出。

步骤 3:输出

在此步骤中,我们将以树状格式获得输出。

运行 NLP 脚本

首先导入 NLTK 软件包:

import nltk

现在,我们需要定义句子。

这里,

  • DT 是限定词

  • VBP 是动词

  • JJ 是形容词

  • IN 是介词

  • NN 是名词

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
   ("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

接下来,语法应该以正则表达式的形式给出。

grammar = "NP:{<DT>?<JJ>*<NN>}"

现在,我们需要定义一个用于解析语法的分析器。

parser_chunking = nltk.RegexpParser(grammar)

现在,分析器将如下解析句子:

parser_chunking.parse(sentence)

接下来,输出将存储在以下变量中:

Output = parser_chunking.parse(sentence)

现在,以下代码将帮助您以树状形式绘制输出。

output.draw()
Running the NLP Script
广告