Natural Language Processing 简明教程

Natural Language Processing - Python

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

以下功能使 Python 与其他语言不同:

  1. Python is interpreted − 在运行 Python 程序之前,无需对其进行编译,因为解释器在运行时处理 Python。

  2. Interactive − 我们可以直接与解释器交互来编写 Python 程序。

  3. Object-oriented − Python 本质上是面向对象的,它使用程序设计中的此技术将代码封装在对象中,因此用这种语言可以更轻松地编写程序。

  4. Beginner can easily learn − Python 也被称为初学者语言,因为它非常容易理解,并且支持开发广泛的应用程序。

Prerequisites

Python 3 的最新版本是 Python 3.7.1,可用于 Windows、Mac OS 和大多数 Linux OS。

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

  2. 对于 Mac OS,可以使用链接 www.python.org/downloads/mac-osx/

  3. 对于 Linux,不同的 Linux 版本使用不同的软件包管理器来安装新软件包。例如,要在 Ubuntu Linux 上安装 Python 3,我们可以从终端使用以下命令:

$sudo apt-get install python3-minimal

为更深入地学习 Python 编程,请阅读 Python 3 基本教程 – Python 3

Getting Started with NLTK

我们将使用 Python 库 NLTK(自然语言工具包)对英语文本进行文本分析。自然语言工具包 (NLTK) 是一组 Python 库,专门设计用于识别和标记在自然语言(如英语)文本中找到的词性。

Installing NLTK

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

pip install nltk

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

conda install -c anaconda nltk

Downloading NLTK’s Data

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

import nltk

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

nltk.download()

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

Other Necessary Packages

其他一些 Python 软件包(如 gensimpattern )对于文本分析以及通过使用 NLTK 构建自然语言处理应用程序也是非常必要的。软件包可以按如下所示安装:

gensim

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

pip install gensim

pattern

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

pip install pattern

Tokenization

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

Example

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

bed and chair

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

sent_tokenize package

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

from nltk.tokenize import sent_tokenize

word_tokenize package

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

from nltk.tokenize import word_tokenize

WordPunctTokenizer package

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

from nltk.tokenize import WordPuncttokenizer

Stemming

由于语法原因,语言包含很多变异。语言(包括英语和其他语言)的变异在于它们具有不同的单词形式。例如,像 democracydemocraticdemocratization 这样的单词。对于机器学习项目而言,对于机器而言非常重要的是理解上面这样的这些不同的单词具有相同的词根。这就是在分析文本时提取单词词根非常有用的原因。

词干提取是一个启发式过程,它通过切断词尾来帮助提取单词的词根。

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

PorterStemmer package

这个词干提取包使用波特算法来提取单词的词根。借助以下命令,我们可以导入这个包 -

from nltk.stem.porter import PorterStemmer

例如, ‘writing’ 输入到这个词干提取器后, ‘write’ 将是输出。

LancasterStemmer package

这个词干提取包使用兰开斯特算法来提取单词的词根。借助以下命令,我们可以导入这个包 -

from nltk.stem.lancaster import LancasterStemmer

例如, ‘writing’ 输入到这个词干提取器后, ‘writing’ 将是输出。

SnowballStemmer package

这个词干提取包使用 Snowball 算法来提取单词的词根。借助以下命令,我们可以导入这个包 -

from nltk.stem.snowball import SnowballStemmer

例如, ‘writing’ 输入到这个词干提取器后, ‘write’ 将是输出。

Lemmatization

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

NLTK 模块提供了用于词形还原的以下包 -

WordNetLemmatizer package

这个包将根据单词是用作名词还是动词来提取词根。可以使用以下命令导入这个包 -

from nltk.stem import WordNetLemmatizer

Counting POS Tags–Chunking

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

Example

在以下示例中,我们将通过使用 NLTK Python 模块实现名词短语切分,它是一种切分类别,它将在句子中找到名词短语块。

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

Step 1: Chunk grammar definition

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

Step 2: Chunk parser creation

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

Step 3: The Output

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

Running the NLP Script

首先从导入 NLTK 包开始 −

import nltk

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

在此,

  1. DT is the determinant

  2. VBP is the verb

  3. JJ is the adjective

  4. IN is the preposition

  5. NN is the noun

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