自然语言处理 - 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 操作系统,我们可以使用链接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 是一个强大的语义建模库,可用于许多应用程序。我们可以通过以下命令安装它 -

pip install gensim

图案

它可以用来使gensim包正常工作。以下命令有助于安装模式 -

pip install pattern

代币化

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

例子

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

床和椅子

我们有 NLTK 提供的不同的标记化包。我们可以根据我们的要求使用这些包。软件包及其安装详细信息如下 -

发送令牌包

该包可用于将输入文本分成句子。我们可以使用以下命令导入它 -

from nltk.tokenize import sent_tokenize

word_tokenize 包

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

from nltk.tokenize import word_tokenize

WordPunctTokenizer 包

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

from nltk.tokenize import WordPuncttokenizer

词干提取

由于语法原因,语言包含许多变体。语言的变体,英语和其他语言,都有不同的单词形式。例如,民主民主民主化等词语。对于机器学习项目,机器理解这些不同的单词(如上面的单词)具有相同的基本形式非常重要。这就是为什么在分析文本时提取单词的基本形式非常有用。

词干提取是一种启发式过程,有助于通过切掉单词的结尾来提取单词的基本形式。

NLTK 模块提供的不同的词干提取包如下 -

波特斯特默包

该词干提取包使用波特算法来提取单词的基本形式。在以下命令的帮助下,我们可以导入这个包 -

from nltk.stem.porter import PorterStemmer

例如,“write”将是作为该词干分析器的输入给出的单词“writing”的输出。

兰卡斯特词干包

该词干提取包使用兰卡斯特算法来提取单词的基本形式。在以下命令的帮助下,我们可以导入这个包 -

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 标签计数 – 分块

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

例子

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

考虑以下步骤来实现名词短语分块 -

第 1 步:块语法定义

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

第 2 步:创建块解析器

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

第三步:输出

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

运行 NLP 脚本

首先导入 NLTK 包 -

import nltk

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

这里,

  • DT是决定因素

  • VBP是动词

  • JJ是形容词

  • IN 是介词

  • NNN是名词

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()
运行 NLP 脚本