摘要:本文介绍了使用Python进行自然语言处理(NLP)的基础知识。主要内容包括:1) Python语言特性及其安装方法;2) NLTK库的安装与配置;3) 文本处理基本技术:分词、词干提取、词形还原;4) 词性标注与组块分析方法。文章通过具体代码示例展示了如何使用NLTK工具包完成英文文本分析任务,如名词短语识别等。所需环境配置和依赖库安装方法也一并说明,为Python自然语言处理入门提供了实用指南。
目录
[自然语言处理 ------Python 实现](#自然语言处理 ——Python 实现)
[NLTK 库快速上手](#NLTK 库快速上手)
[安装 NLTK 库](#安装 NLTK 库)
[下载 NLTK 数据集](#下载 NLTK 数据集)
[sent_tokenize 包](#sent_tokenize 包)
[word_tokenize 包](#word_tokenize 包)
[WordPunctTokenizer 包](#WordPunctTokenizer 包)
[PorterStemmer 包](#PorterStemmer 包)
[LancasterStemmer 包](#LancasterStemmer 包)
[SnowballStemmer 包](#SnowballStemmer 包)
[WordNetLemmatizer 包](#WordNetLemmatizer 包)
自然语言处理 ------Python 实现
在本章中,我们将学习如何使用 Python 进行语言处理。
Python 具备以下特性,使其区别于其他编程语言:
- 解释型语言:运行 Python 程序前无需编译,解释器会在程序运行时实时处理代码。
- 交互式特性:可直接与解释器交互,编写 Python 程序。
- 面向对象:Python 原生支持面向对象编程,将代码封装在对象中,让程序编写更简便。
- 入门门槛低:Python 也被称作入门级编程语言,语法通俗易懂,且能支持各类应用的开发。
准备工作
Python 3 的最新发行版本为 Python 3.7.1,可在 Windows、Mac OS 及绝大多数 Linux 发行版中安装使用。
-
Windows 系统:可访问链接 [python.org/windows下载页] 下载并安装 Python。
-
Mac OS 系统:可通过链接 [python.org/mac-osx下载页] 进行安装。
-
Linux 系统:不同的 Linux 发行版需通过对应的包管理器安装新包。例如,在 Ubuntu Linux 中,可在终端执行以下命令安装 Python 3: plaintext
python$sudo apt-get install python3-minimal
想要深入学习 Python 编程,可阅读 [Python 3 基础教程]。
NLTK 库快速上手
我们将使用 Python 的 NLTK 库(自然语言工具包)进行英文文本分析。该工具包是一系列 Python 库的集合,专为识别和标注英语等自然语言文本中的词性而设计。
安装 NLTK 库
使用 NLTK 前需先完成安装,在 Python 环境中执行以下命令即可安装:
python
pip install nltk
若使用 Anaconda 环境,可通过以下命令构建 NLTK 的 Conda 安装包:
conda install -c anaconda nltk
下载 NLTK 数据集
安装完成后,另一项重要工作是下载其预设的文本资源库,以便后续便捷使用。首先需像导入其他 Python 模块一样导入 NLTK,执行以下命令即可:
import nltk
随后,执行以下命令下载 NLTK 数据集:
nltk.download()
下载并安装 NLTK 的所有可用包需要耗费一定时间。
其他必备包
除 NLTK 外,gensim和pattern等 Python 包也是借助 NLTK 进行文本分析、搭建自然语言处理应用的必备工具,可通过以下方式安装:
gensim
gensim 是一个功能强大的语义建模库,可应用于多个场景,安装命令如下:
pip install gensim
pattern
该包是 gensim 正常运行的依赖包,安装命令如下:
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 包
该包基于波特算法实现词汇词根的提取,导入命令:
from nltk.stem.porter import PorterStemmer
例如,输入词汇writing(写作),该词干提取器的输出结果为write(写)。
LancasterStemmer 包
该包基于兰开斯特算法实现词汇词根的提取,导入命令:
from nltk.stem.lancaster import LancasterStemmer
例如,输入词汇writing(写作),该词干提取器的输出结果为writ。
SnowballStemmer 包
该包基于雪球算法实现词汇词根的提取,导入命令:
from nltk.stem.snowball import SnowballStemmer
例如,输入词汇writing(写作),该词干提取器的输出结果为write(写)。
词形还原
词形还原是另一种提取词汇基础形式的方法,该方法通常借助词汇表和形态学分析,去除词汇的屈折词尾。经过词形还原后,词汇的基础形式被称为词元。
NLTK 模块提供了以下词形还原相关的包:
WordNetLemmatizer 包
该包会根据词汇在句中作名词或动词的不同词性,提取对应的基础形式,导入命令:
from nltk.stem import WordNetLemmatizer
词性标注统计与组块分析
组块分析可实现词性(POS)和简短短语的识别,是自然语言处理中的重要流程。我们已经了解分词是生成词元的过程,而组块分析实则是对这些词元进行标注的过程。换言之,通过组块分析,我们可以得到句子的结构。
示例
在以下示例中,我们将使用 Python 的 NLTK 模块实现名词短语组块分析 ------ 这是组块分析的一个类别,用于识别句子中的名词短语句块。
实现名词短语组块分析需遵循以下步骤:步骤 1:定义组块语法在此步骤中,需要定义组块分析的语法规则,后续分析将依照这些规则执行。
步骤 2:创建组块分析器接下来需要创建组块分析器,该分析器会解析定义好的语法并输出分析结果。
步骤 3:生成输出结果此步骤中,分析结果将以树形结构呈现。
运行自然语言处理脚本
首先导入 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()
