第三章(3):深入理解Spacy库基本使用方法

news2024/12/23 6:25:18

第三章(3):深入理解Spacy库基本使用方法

本章主要介绍了Spacy库的基本使用方法,包括安装、加载语言模型、分句、分词、词性标注、停用词识别、命名实体识别、依存分析和词性还原等内容。重点介绍了每个步骤的具体实现方式和应用场景,并给出了相关代码示例,(ง •_•)ง。

如果感觉有用,不妨给博主来个一键三连,白天科研,深夜肝文,实属不易~ ~ 拜托了!

在这里插入图片描述

目录

  • 第三章(3):深入理解Spacy库基本使用方法
  • 前言
  • 1. Spacy简介
    • 1.1 背景
    • 1.2 优势
    • 1.3 应用领域
  • 2 基本使用方法
    • 2.1 安装
      • 2.1.1 安装Spacy库
      • 2.1.2 加载语言模型
    • 2.2 分句
    • 2.3 分词 (Tokenization)
    • 2.4 词性标注
    • 2.5 识别停用词
    • 2.6 命名实体识别
    • 2.7 依存分析
      • 2.7.1 依存分析语义表达
      • 2.7.2 依存关系可视化
    • 2.8 词性还原
  • 4. 总结

前言

Spacy是一个Python自然语言处理库,它被广泛应用于文本分类、命名实体识别、信息抽取、聊天机器人和垃圾邮件分类器等各种自然语言处理任务中。Spacy库以其高性能、易用性和可定制性而闻名,并已成为自然语言处理领域的领导者之一。本篇博客主要介绍Spacy库的基础使用方法,帮助读者了解Spacy的基本功能和使用方法。

1. Spacy简介

1.1 背景

Spacy是2014年由Matthew Honnibal创建的一个Python自然语言处理库。该库最初的目的是为了解决现有自然语言处理库的性能问题。目前,Spacy成为了业界受欢迎的自然语言处理库之一。

在这里插入图片描述

1.2 优势

  1. 高性能:Spacy是一个使用Cython编写的Python库,因此它的速度非常快。Spacy拥有多个组件,它们都是专门为高性能设计和优化的。
  2. 易用性:Spacy的API设计得非常简单明了,使得开发者可以轻松地使用Spacy进行自然语言处理。
  3. 可定制性:Spacy允许用户自定义模型,添加自己的语言模型和规则。这使得Spacy非常灵活。

1.3 应用领域

  1. 自然语言处理:Spacy是一种在自然语言处理领域中广泛使用的工具,能够自动完成例如分词、词性标注、依存解析、命名实体识别、情感分析、句法分析等各种基本的NLP任务。
  2. 实时文本分析:Spacy支持实时文本分析,并且可以快速地处理大量的文本数据。
  3. 语言学研究:Spacy还可以帮助语言学家解决语言学问题。

2 基本使用方法

2.1 安装

2.1.1 安装Spacy库

安装Spacy可以使用pip,在命令行中输入以下命令即可安装:

pip install -U spacy

在这里插入图片描述

2.1.2 加载语言模型

Spacy支持近50种不同的自然语言。要使用Spacy对特定语言进行处理,需要加载语言模型来指定其特征和属性。

Spacy提供了几个英文语言模型,其中最受欢迎的是en_core_web_sm模型。要加载该模型,请使用以下代码:

import spacy

nlp = spacy.load('en_core_web_sm')

不出意外的话,很多人会出现如下错误:

OSError: [E050] Can't find model 'en_core_web_sm'. It doesn't seem to be a Python package or a valid path to a data directory

解决方法,见文章:成功解决OSError: [E050] Can’t find model ‘en_core_web_sm’._安静到无声的博客-CSDN博客

2.2 分句

在SpaCy中,句子分割操作是由nlp对象的方法sentencizer完成的。默认情况下,nlp对象已经包含了sentencizer,因此我们只需要对文本使用nlp方法即可完成句子分割。下面是一个简单的示例:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("This is a sentence. This is another sentence.")  
for sent in doc.sents:  
    print(sent.text)

实验结果:

This is a sentence.
This is another sentence.

可以看到,我们将两个句子作为一个字符串传递给nlp方法,然后迭代处理后的doc.sents属性,就可以得到两个独立的句子了。

tips:SpaCy的sentencizer不支持自定义句子分割规则。如果您需要使用特殊的分割规则,比如自己编写正则表达式进行分割,则需要使用其他库。

2.3 分词 (Tokenization)

在SpaCy中,分词是由nlp对象的核心组件中的tokenizer完成的。默认情况下,nlp对象已经包含了tokenizer,因此我们只需要对文本使用nlp方法即可完成分词。下面是一个简单的示例:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("This is a sentence.")  
for token in doc:  
    print(token.text)

实验结果:

This
is
a
sentence
.

从输出结果中可以看到,我们将一个字符串传递给nlp方法,然后迭代处理后的doc属性,就可以得到文本的分词结果了。每个单词、标点符号等被表示为一个Token对象,其中Token.text属性表示该对象对应的文本内容。

tips:SpaCy的分词器并不是简单地根据空格或者标点符号来进行分割。相反地,SpaCy使用更复杂的规则进行分割,例如处理缩写、连接后缀以及形成词组等。这种方法可以提高分词的准确性,避免许多常见错误。

2.4 词性标注

在SpaCy中,词性标注是由nlp对象的核心组件中的tagger完成的。默认情况下,nlp对象已经包含了tagger,因此我们只需要对文本使用nlp方法即可完成词性标注。下面是一个简单的示例:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("This is a sentence.")  
for token in doc:  
    print(token.text, token.pos_)

实验 结果:

This DET
is AUX
a DET
sentence NOUN
. PUNCT

从输出结果中可以看到,我们将一个字符串传递给nlp方法,然后迭代处理后的doc属性,就可以得到文本的词性标注结果了。每个单词都被表示为一个Token对象,其中Token.pos_属性表示该对象对应的词性。

tips:SpaCy的词性标注器是根据句法结构来进行标注的。具体来说,它使用上下文信息、词汇表以及一些规则来确定每个单词的词性。这种方法可以提高词性标注的准确性,避免许多常见错误。

2.5 识别停用词

SpaCy提供了一个默认的停用词列表,可以通过调用nlp.vocab属性来获取。我们可以使用is_stop方法检查一个特定的单词是否是停用词,例如:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("I want to publish a lot of SCI papers.")  
for token in doc:  
    if token.is_stop:  
        print(token.text)

实验结果:

I
to
a
of

tips:停用词列表可能因语言而异。在使用SpaCy进行非英文文本处理时,需要手动指定相应的停用词列表或自己构建停用词列表。

在某些情况下,我们需要添加或删除停用词以满足特定的文本处理任务需求。我们可以通过修改nlp.vocab属性中的词汇表来自定义停用词列表。例如,我们可以通过以下代码将“hello”添加到停用词列表中:

nlp.vocab["hello"].is_stop = True

修改后的停用词列表在当前会话中有效,并不会影响SpaCy的全局配置。如果需要使用自定义停用词列表,则需要在每次使用SpaCy时手动加载相应的配置。

2.6 命名实体识别

命名实体识别(Named Entity Recognition,简称NER)是自然语言处理中的一个重要任务,它的目标是从文本中识别出具有特定意义的单词或短语,并将它们分类为预定义的实体类别,例如人名、地名、组织机构名等。命名实体识别在许多NLP应用中都有着广泛的应用,例如信息抽取、问答系统、机器翻译等。

SpaCy提供了高效准确的命名实体识别功能。在SpaCy中,命名实体识别是由nlp对象的核心组件中的ner进行的。默认情况下,nlp对象已经包括了ner组件,因此只需要对文本使用nlp方法即可完成命名实体识别。示例如下:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")  
for ent in doc.ents:  
    print(ent.text, ent.label_)

实验结果:

Apple ORG
U.K. GPE
$1 billion MONEY

从输出结果中可以看到,我们将一个字符串传递给nlp方法,然后迭代处理后的doc属性,就可以得到文本中的命名实体结果了。每个命名实体都被表示为一个Span对象,其中Span.label_属性表示该实体对应的类别(例如ORG代表组织机构名,GPE代表地域名,MONEY代表货币量)。

2.7 依存分析

依存分析(Dependency Parsing)是自然语言处理中的一项任务,其目的是解析句子中单词之间的依存关系。依存关系描述的是在一个句子中,每个单词与其他单词之间的语法关系,例如主谓关系、动宾关系等等。依存分析是NLP中许多任务的基础,例如实体识别、句法分析、语义角色标注等。

2.7.1 依存分析语义表达

SpaCy提供了快速和可靠的依存分析功能。在SpaCy中,依存分析是由nlp对象的核心组件中的parser进行的。默认情况下,nlp对象已经包括了parser组件,因此只需要对文本使用nlp方法即可完成依存分析。示例如下:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")  
for token in doc:  
    print(token.text, token.dep_, token.head.text, token.head.pos_)

实验结果:

Apple nsubj looking VERB
is aux looking VERB
looking ROOT looking VERB
at prep looking VERB
buying pcomp at ADP
U.K. compound startup NOUN
startup dobj buying VERB
for prep buying VERB
$ quantmod billion NUM
1 compound billion NUM
billion pobj for ADP

2.7.2 依存关系可视化

可以使用SpaCy的displacy模块来生成句子的依存关系可视化。示例如下:

import spacy  
from spacy import displacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")  
  
svg = displacy.render(doc, style="dep", jupyter=False)  
with open("./dependency_parse.svg", "w", encoding="utf-8") as f:  
    f.write(svg)

实验结果:

在这里插入图片描述

2.8 词性还原

SpaCy中的词性还原(Lemmatization)是将单词还原为它的基本形式(即词根或词干)的过程。相比于简单地去除单词的词缀,词性还原可以更准确地还原单词的原始含义,并帮助机器理解单词之间的关系。

SpaCy中的词性还原是通过使用词典和规则来实现的。具体来说,当SpaCy处理文本时,它会查找一个内置的词典,该词典包含了大量单词及其对应的基本形式。如果要还原的单词位于词典中,则SpaCy会直接返回它的基本形式;否则,它会根据一些规则来尝试将单词还原为基本形式。

例如,考虑句子"The dogs are barking outside."。在这个句子中,“dogs"和"barking"都是需要进行词性还原的单词。其中,“dogs"这个名词的基本形式就是"dog”,而"barking"这个动词的基本形式则是"bark”。SpaCy会通过查找词典和应用规则来得到这些基本形式。

使用SpaCy进行词性还原非常简单,只需要调用token.lemma_属性即可,示例如下:

import spacy  
  
nlp = spacy.load("en_core_web_sm")  
doc = nlp("The dogs are barking outside.")  
  
for token in doc:  
    print(token.text, token.lemma_)

实验结果:

The the
dogs dog
are be
barking bark
outside outside
. .

4. 总结

本章主要介绍了Spacy库的基本使用方法,包括安装、加载语言模型、分句、分词、词性标注、停用词识别、命名实体识别、依存分析和词性还原等内容。重点介绍了每个步骤的具体实现方式和应用场景,并给出了相关代码示例。


参考:
spacy简单使用-CSDN博客
成功解决OSError: [E050] Can’t find model ‘en_core_web_sm’._安静到无声的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/450509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TortoiseGit】安装和配置

转自 【TortoiseGit】TortoiseGit安装和配置详细说明_No8g攻城狮的博客-CSDN博客 一、TortoiseGit 简介 TortoiseGit 是基于 TortoiseSVN 的 Git 版本的 Windows Shell 界面。它是开源的,可以完全使用免费软件构建。 TortoiseGit 支持你执行常规任务,…

出道即封神的ChatGPT,现在怎么样了?ChatGPT想干掉测试人员,做梦去吧

从互联网的普及到智能手机,都让广袤的世界触手而及,如今身在浪潮中的我们,已深知其力。 前阵子爆火的ChatGPT,不少人保持观望态度。现如今,国内关于ChatGPT的各大社群讨论,似乎沉寂了不少,现在…

Mosquitto vs NanoMQ | 2023 MQTT Broker 对比

引言 Mosquitto 和 NanoMQ 都是用 C/C 开发的快速轻量的开源 MQTT Broker,完全支持 MQTT 3.1.1 和 5.0。 虽然 Mosquitto 和 NanoMQ 都具有轻量级和低资源消耗的特点,但它们的架构设计却截然不同。Mosquitto 采用单线程模式,而 NanoMQ 则基…

数据结构:单向链表(无头非循环)

朋友们、伙计们,我们又见面了,本期来给大家解读一下数据结构方面有关链表的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C语言专栏:C语言:从入门到…

【云原生】prometheus监控告警之安装部署alertmanager实战

前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人 &#xff0c…

Python基础知识:绝对/相对路径等

1 Python处理相对/绝对路径 由于本人在导入数据时,十分喜欢相对路径(在数据的上一级文件中,新建文件夹保存处理整个代码处理过程),因此,将首先简单介绍下Python中相对/绝对路径的处理。 1.1 绝对路径 一…

状态压缩DP-蒙德里安的梦想

题意 求把 NM 的棋盘分割成若干个 12 的长方形,有多少种方案。 例如当 N2,M4 时,共有 5 种方案。当 N2,M3 时,共有 3 种方案。 如下图所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行&#xff0…

Jupyter notebook安装教程

文章目录 前言一、安装步骤1、安装 Python 编译器2、安装 jupyter3、运行 Jupyter notebook 二、 更改打开文件位置和快捷启动方式1、更改打开文件位置2、创建快捷启动方式 前言 Jupyter Notebook 是以网页的形式打开,可以在网页页面中直接编写代码和运行代码&…

20230421 | 203. 移除链表元素、707. 设计链表、206. 反转链表

1、203. 移除链表元素 方法1:不添加虚拟节点方式,但是要注意处理删除头部的数据 时间复杂度 O(n) 空间复杂度 O(1) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* List…

婚恋交友app开发中需要注意的安全问题

前言 随着移动设备的普及,婚恋交友app已经成为了人们生活中重要的一部分。但是,这些应用的开发者需要确保应用的安全性,以保护用户的隐私和数据免受攻击。本文将介绍在婚恋交友app开发中需要注意的安全问题。 在当今数字化时代,…

狗屁不通文章生成器下载-狗屁不通生成器网址

狗屁不通文章生成器 狗屁不通文章生成器(也称为“吹牛生成器”)是使用自然语言处理技术和机器学习算法生成随机文章的工具。这些文章往往没有意义,因为它们是从各种不相关的话语中随机组合而成的。 虽然这些文章看起来毫无意义,…

显卡GPU与CUDA

文章目录 1 什么是GPU1.1 独立显卡1.2 核心显卡 2 驱动3 深度学习显卡CUDA4 GPU VS CPU5 深度学习环境配置中各软件的关系windows下判断有无NVIDIA GPU16G512G8核14核 1 什么是GPU GPU就是显卡Graphics Processing Unit 图像处理单元显卡主要用于在屏幕上显示图像,…

ROS学习第二十六节——机器人仿真相关组件

1.URDF URDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C 内置的解释器…

服务(第十篇)Nginx和tomcat反向代理(动静分离)

正向代理: 当用户想访问某一网址时,用户先访问代理服务器,然后由代理服务器向目标网址发送请求最终将数据返回代理服务器,最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 反向代理:基本流程是与正向代理…

毕业-单片机-嵌入式~三年经历回顾

入行嵌入式软件开发 20年6月疫情第一次缓和、实操51单片机;20年9月郑州实习、温湿度采集类低功耗产品、初次接触ARM Cortex M0/M3 单片机;21年5月毕业来到杭州、不懂应届生的宝贵青春!匆匆忙忙进厂~人生中第一个项目:…

使用vscode、cmake配置c++开发环境

使用vscode、cmake配置c开发环境 下载软件安装包VS codegcc编译器cmake 设置环境变量VS code插件安装 下载软件安装包 VS code 根据自己电脑选择合适版本下载安装即可。 官网链接:https://code.visualstudio.com/download gcc编译器 我使用的是mingw-w64编译器…

kong(2):docker搭建kong环境

Kong 安装有两种方式一种是没有数据库依赖的DB-less 模式,另一种是with a Database 模式。我们这里使用第二种带Database的模式,因为这种模式功能更全。 1 docker安装Kong 1.1构建Kong的容器网络 首先我们创建一个Docker自定义网络,以允许容…

022:Mapbox GL 加载geojson数据,形成热力图,自定义样式

第022个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载geojson数据,形成热力图. paint设置的参数:heatmap-color,heatmap-intensity,heatmap-opacity,heatmap-radius,heatmap-weight,visibility,具体请参考下面的api链接。 直接复制下面的 vue+mapbox源代…

如何实现网络安全的无缝衔接

随着信息技术的飞速发展,数字化转型已成为企业发展的必经之路。然而,随着技术进步带来的便利,网络安全问题也日益凸显。那么,在数字化转型的过程中,企业如何实现网络安全的无缝衔接呢? 一、网络安全与数字化…

功能分析临时参考

App 组件中注释 Menu, 去除顶部菜单 MenuWrapper SubMenuComponent 请求/chart/add ,直接展示绘图页 此过程,浏览器只加载静态资源,没有api的数据请求。 取消登录限制: api: GET, POST /chart/add view: SliceModel…