python库(10):SpaCy库实现NLP处理

news2024/9/24 9:23:24

1 SpaCy简介

自然语言处理(NLP)是人工智能领域中一个重要的分支。它旨在使计算机能够理解、解释和生成人类语言。Python中的SpaCy库提供了丰富的功能和工具,SpaCy是一个开源的软件库,用于处理和操作自然语言文本,可以帮助我们轻松进行各种NLP任务。相比于其他NLP库,SpaCy的特点在于其高效性和易用性。它专为处理大规模文本数据而设计,拥有快速的管道处理能力,使得它在实际项目中非常实用。

2 SpaCy安装

首先通过pip来安装SpaCy。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple spacy

结果如下:

安装完成后,还需要下载SpaCy模型。模型包含了词汇表、语料库以及各种必需的数据资源。在这里,我们下载一个最常用的英语模型en_core_web_sm:

python -m spacy download en_core_web_sm

但是国内下载会失败,建议手动安装,下载地址如下:

Releases · explosion/spacy-models · GitHub

我这边下载的是en_core_web_lg-3.7.1

下载后到使用命令进行安装:

pip install F:/en_core_web_lg-3.7.1-py3-none-any.whl

注意:

模型后缀有sm/md/lg,sm/md/lg为描述大小的缩写:small(小)、medium(中)、large(大)。

也就是说en_core_web_sm、en_core_web_md、en_core_web_lg分别对应三种不同大小的nlp模型。主要差别在于准确率和加载时间

3 导入并加载模型

import spacy

# 记在英文模型
nlp = spacy.load('en_core_web_lg')

4 基本功能

接下来,我们来看一些SpaCy的基本功能。

4.1 文本处理和标记化

SpaCy可以将一个文本分割成独立的标记(tokens),包括单词、标点符号等。

import spacy

# 记在英文模型
nlp = spacy.load('en_core_web_lg')

# 处理文本
text = "Hello, welcome to the world of natural language processing."
doc = nlp(text)

# 打印标记化结果
for token in doc:
    print(token.text)

结果如下:

4.2 词性标注

SpaCy能够识别每个词的词性(如名词、动词、形容词等)。

import spacy

# 记在英文模型
nlp = spacy.load('en_core_web_lg')

# 处理文本
text = "Hello, welcome to the world of natural language processing."
doc = nlp(text)

# 打印标记化结果
# for token in doc:
#     print(token.text)


for token in doc:
    print(f'{token.text}: {token.pos_}')

结果如下:

4.3 命名实体识别

命名实体识别(NER)是指识别文本中具有特定意义的实体,如人名、地名、组织机构等。

import spacy

# 记在英文模型
nlp = spacy.load('en_core_web_lg')

# 处理文本
text = "Long live China"
doc = nlp(text)

for ent in doc.ents:
    print(f'{ent.text}: {ent.label_}')

结果如下:

4.4 依存解析

SpaCy能够进行句法依存解析,以理解每个词在句子中的语法关系。

import spacy

# 记在英文模型
nlp = spacy.load('en_core_web_lg')

# 处理文本
text = "Hello, welcome to the world of natural language processing."
doc = nlp(text)

for token in doc:
    print(f'{token.text}: {token.dep_} -> {token.head.text}')

结果如下:

5 高级功能

5.1 词向量

词向量(Word Vectors)是用于表示单词的高维向量,能够捕捉单词间的语义关系。SpaCy支持预训练的词向量,可以直接加载和使用。

这边我换了一个模型en_core_web_md,各位可以按照上面的步骤自行安装。

import spacy

# 加载包含词向量的更大模型
nlp_large = spacy.load('en_core_web_md')

# 获取词向量
doc_large = nlp_large("king queen man woman")
for token in doc_large:
    print(f'{token.text}: {token.vector[:5]}')

结果如下:

5.2 文本相似度

文本相似度计算是NLP中的常见任务之一,用于判断两个文本之间的相似程度。SpaCy的词向量可以用来计算句子或文档的相似度。

import spacy

# 加载包含词向量的更大模型
nlp_large = spacy.load('en_core_web_md')

doc1 = nlp_large("I love machine learning.")
doc2 = nlp_large("I enjoy artificial intelligence.")

similarity = doc1.similarity(doc2)
print(f'Similarity: {similarity}')

结果如下:

5.3 自定义管道组件

SpaCy允许在其处理管道中添加自定义组件,以实现更个性化的处理。这对于特定任务非常有用。

import spacy
from spacy.language import Language

@Language.component("my_component")
def my_component(doc):
    # Do something to the doc here
    print(f"Custom component processed:{doc}")
    return doc

nlp = spacy.load('en_core_web_lg')
nlp.add_pipe("my_component", name="print_info", last=True)
print(nlp.pipe_names)
doc = nlp("This is a sentence.")

结果如下:

5.4 训练自定义模型

SpaCy还允许用户训练自己的自定义NER模型。这对于处理特定领域的文本非常有用。以下是一个简单的示例,展示了如何训练一个自定义NER模型。

import spacy
import random
from spacy.training.example import Example

# 创建空白模型
nlp = spacy.blank("en")

# 添加NER管道
ner = nlp.add_pipe("ner")

# 添加自定义实体标签
ner.add_label("GADGET")

# 定义训练数据
TRAIN_DATA = [
    ("Apple releases new iPhone.", {"entities": [(14, 20, "GADGET")]}),
    ("Google launches new Pixel phone.", {"entities": [(21, 26, "GADGET")]})
]

# 开始训练
nlp.begin_training()
for i in range(10):
    random.shuffle(TRAIN_DATA)
    losses = {}
    for text, annotations in TRAIN_DATA:
        doc = nlp.make_doc(text)
        example = Example.from_dict(doc, annotations)
        nlp.update([example], losses=losses)
    print(losses)

# 测试自定义模型
doc = nlp("Amazon announces new Kindle.")
for ent in doc.ents:
    print(ent.text, ent.label_)

结果如下:

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

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

相关文章

渗透测试-nmap常用的漏扫命令

nmap常用的漏扫命令 1、扫描单个目标地址: Nmap 192.168.128.30 2、扫描多个目标地: Nmap 192.168.128.130 192.168.128.129 3、扫描一个范围内的目标地址: Nmap 192.168.128.129-130 4、扫描目标地址所在的某个网段 Nmap 192.168.12…

2024年高职大数据实验室建设及大数据实训平台整体解决方案

随着大数据技术的迅猛发展,高职院校的大数据实验室建设与实训平台打造正逐渐成为推动教育现代化的关键环节。为了培养出符合未来社会需求的高素质技术技能型人才,2024年的高职大数据实验室建设方案需从以下几个方面着手: 首先,实…

Docker镜像和容器的管理

1 Docker镜像管理操作 开启镜像加速 根据关键字查询镜像 下载查看镜像 详细镜像信息 查看latest版本 上传镜像到阿里云仓库 2 Docker容器操作 关于容器根据第一个pid进程是否能正常在前台运行

硬件开发笔记(二十五):AD21导入电解电容原理图库、封装库和3D模型

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140344547 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Math/System/Runtime/Object

1、Math (1)常用方法 类型方法名说明public static intabs (int a)返回整数的绝对值public static doublepow (double a,double b)计算a的b次幂的值public static int max (int a,int b) 获取两个int值中的较大值public static intmin (int a,int…

【吊打面试官系列-ZooKeeper面试题】简述 Zookeeper 文件系统?

大家好,我是锋哥。今天分享关于 【简述 Zookeeper 文件系统?】面试题,希望对大家有帮助; 简述 Zookeeper 文件系统? Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不同的是,这些节…

“南征北战”| 卓翼飞思技术领航,助力人工智能大赛上海赛区选拔赛圆满落幕

卓翼飞思继6月支持辽宁赛区选拔赛圆满收官后,近日再次技术助力,为上海赛区的比赛画上圆满句号。值得一提的是,在此次比赛中来自上海工程技术大学、同济大学、上海商学院、上海农林职业技术学院,使用卓翼飞思设备的5支参赛队伍&…

【Java EE】统一功能返回

一、拦截器 1.1 拦截器的作用 在对于数据库进行增删查改的时候,如果当前页面不检查用户是否登录,然后就能操作成功是不合理的,解决方法有两个: 对于已经写好的每个接口都加上一个判断,从Session中获取用户信息&…

嵌入式开发过程中,常见报错以及解决方法

编写不易,仅供学习,参考谢谢,还望理解。 #常见报错 文件最后一行没有新行 翻译:文件的最后一行结束时没有新行 解决方法:定位到,提示报错的 .h 文件 报错行 ,加上一个新行 函数定义时与官方提…

体育资讯小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,球员管理,教练管理,赛事日程管理,赛事类型管理,联赛积分榜管理 开发系统:Windows 架构模式:SSM JDK版本&a…

(超简单)如何将heic格式转化成jpg,试试这6个heic转jpg小技巧

如何将heic格式转化成jpg?喜欢拍摄照片的小伙伴们可能对heic格式图片比较熟悉,heic格式是一种比较高效的图片格式,图片质量高,并且体积小。但heic种格式也存在一些问题,首先,由于它的其兼容性较差&#xff…

软考高项论文一次过经验分享

软考高项考试改革后一年考一次,有多少人的备考计划被打乱,相比较起来,去年我考的时候刚刚赶上机考,那是一个吐血~猝不及防,清楚的记得那会儿考完出来听到耳边哀声一片,虽然我过了,但是真的紧张的…

PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南

小编特将PostgreSQL证书申报个税退税流程,编辑成文,供大家申报参考哦~ 1.申报专项附加扣除 第一步:打开个人所得税APP,选择“专项附加扣除填报”: 第二步:“扣除年度”选择您要申报的年度,并…

【RHCE】计划任务的练习题

1. 使⽤ at 命令计划从现在起三分钟后运⾏⼀项作业。该作业必须将 date 命令的输出保存 ⾄ /root/myjob.txt [rootlocalhost ~]# at now 3 min warning: commands will be executed using /bin/sh at> date > /root/myjob.txt at> <EOT>2. 使⽤ at 命令以交互…

2024【大模型的实战应用深入解析】(非常详细)零基础入门到精通,收藏这一篇就够了

ChatGPT从年初炸裂的诞生&#xff0c;引领了新一轮AI的浪潮——大模型。说来惭愧&#xff0c;其实从去年开始就有人提大模型&#xff0c;那时候大厂都在内部做&#xff0c;谷歌facebook腾讯阿里等等&#xff0c;我当时其实持反对意见的&#xff0c;每家都烧这么多钱&#xff0c…

Laravel :如何将Excel文件导入数据库

文章目录 一、前提二、使用2.1、新建一个导入文件2.2、新建一个控制器和方法,调用导入文件2.3、 新建一个页面&#xff0c;支持文件上传 一、前提 想要将excel内容入库&#xff0c;laravel有扩展可以使用,常用的扩展是maatwebsite/excel&#xff0c;安装步骤参考上一篇&#x…

FastGPT+OneAI接入网络模型

文章目录 FastGPT连接OneAI接入网络模型1.准备工作2.开始部署2.1下载 docker-compose.yml2.2修改docker-compose.yml里的参数 3.打开FastGPT添加模型3.1打开OneAPI3.2接入网络模型3.3重启服务 FastGPT连接OneAI接入网络模型 1.准备工作 本文档参考FastGPT的官方文档 主机ip接…

SAS:标记CRF时是否持续用ENRF还是ENRTPT?

背景&#xff1a; 在QC ACRF时发现针对是否持续有不同的标记方式&#xff0c;比如在不良事件中用AEENRF&#xff0c;在病史中用MHENRTPT&#xff0c;想知道为何会有此差别&#xff1f; 结论&#xff1a; 根据“是否持续”的时间是一个确定的时间点还是一个持续的时间段&#xf…