自然语言处理 ——Python 实现

摘要:本文介绍了使用Python进行自然语言处理(NLP)的基础知识。主要内容包括:1) Python语言特性及其安装方法;2) NLTK库的安装与配置;3) 文本处理基本技术:分词、词干提取、词形还原;4) 词性标注与组块分析方法。文章通过具体代码示例展示了如何使用NLTK工具包完成英文文本分析任务,如名词短语识别等。所需环境配置和依赖库安装方法也一并说明,为Python自然语言处理入门提供了实用指南。

目录

[自然语言处理 ------Python 实现](#自然语言处理 ——Python 实现)

准备工作

[NLTK 库快速上手](#NLTK 库快速上手)

[安装 NLTK 库](#安装 NLTK 库)

[下载 NLTK 数据集](#下载 NLTK 数据集)

其他必备包

gensim

pattern

分词

示例

[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 外,gensimpattern等 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()
相关推荐
Alex艾力的IT数字空间1 小时前
OCR 原理:从像素到文本的智能转换
数据结构·人工智能·python·神经网络·算法·cnn·ocr
FluxMelodySun1 小时前
机器学习(二十) 集成学习-Boosting与Bagging集成方法
人工智能·机器学习·集成学习
李同学Lino1 小时前
拒绝 500 元智商税!AutoClaw 零门槛安装教程,手把手教你低成本“喂龙虾”
人工智能·ai·github·openclaw·autoclaw
进击ing小白2 小时前
OpenCv之多通道的分离与合并
人工智能·opencv·计算机视觉
李建军2 小时前
OpenClaw 国内版快速安装指南 (2026 更新)
人工智能
菩提树下的凡夫2 小时前
千问VL2.5大模型+Pyside6目标检测-连载6
人工智能·目标检测·计算机视觉
星幻元宇VR2 小时前
VR生产安全学习机|开启智慧安全培训新时代
人工智能·科技·学习·安全·vr
程序媛小鱼2 小时前
神经网络基础
人工智能·深度学习·神经网络
每日学点SEO2 小时前
如何判断网站质量低 & 遭受机器人流量攻击
运维·人工智能·深度学习·机器学习·搜索引擎