自然语言处理 - 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 软件包,如 gensim 和 pattern,对于文本分析以及使用 NLTK 构建自然语言处理应用程序也必不可少。这些软件包可以按如下所示安装:
gensim
gensim 是一个强大的语义建模库,可用于许多应用程序。我们可以通过以下命令安装它:
pip install gensim
pattern
它可以用来使 gensim 软件包正常工作。以下命令有助于安装 pattern:
pip install pattern
分词
分词可以定义为将给定的文本分解成称为标记的更小单元的过程。单词、数字或标点符号可以是标记。它也可以称为单词分割。
示例
输入 - 床和椅子是家具的类型。
NLTK 为我们提供了不同的分词软件包。我们可以根据我们的需求使用这些软件包。软件包及其安装详细信息如下:
sent_tokenize 软件包
此软件包可用于将输入文本划分为句子。我们可以使用以下命令导入它:
from nltk.tokenize import sent_tokenize
word_tokenize 软件包
此软件包可用于将输入文本划分为单词。我们可以使用以下命令导入它:
from nltk.tokenize import word_tokenize
WordPunctTokenizer 软件包
此软件包可用于将输入文本划分为单词和标点符号。我们可以使用以下命令导入它:
from nltk.tokenize import WordPuncttokenizer
词干提取
由于语法原因,语言包含大量变体。变体是指语言(英语和其他语言)具有一个单词的不同形式。例如,诸如 democracy、democratic 和 democratization 之类的单词。对于机器学习项目,机器理解这些不同的单词(如上所示)具有相同的词根形式非常重要。这就是为什么在分析文本时提取单词的词根形式非常有用的原因。
词干提取是一个启发式过程,它通过去除单词的结尾来帮助提取单词的词根形式。
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()