python | spacy,一个神奇的 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。

原文链接:spacy,一个神奇的 Python 库!

大家好,今天为大家分享一个神奇的 Python 库 - spacy。

Github地址:https://github.com/explosion/spaCy

自然语言处理(NLP)是人工智能和数据科学中快速发展的领域。Python的spaCy库是一个现代化的、工业级的NLP库,提供了快速、高效和易于使用的API,适用于构建各种NLP应用。spaCy不仅支持多种语言,还包含丰富的预训练模型和工具,能够处理从分词、词性标注、命名实体识别到依存分析等任务。本文将详细介绍spaCy库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

1 安装

要使用spaCy库,首先需要安装它。可以通过pip工具方便地进行安装。

以下是安装步骤:

pip install spacy

安装完成后,还需要下载预训练模型。以下是下载英文模型的命令:

python -m spacy download en_core_web_sm

安装完成后,可以通过导入spaCy库来验证是否安装成功:

import spacy
print("spaCy库安装成功!")

2 特性

  1. 高效的分词和词性标注:提供快速准确的分词和词性标注功能。

  2. 命名实体识别:内置命名实体识别(NER)模型,支持多种实体类型。

  3. 依存句法分析:支持依存句法分析,帮助理解句子结构。

  4. 词向量支持:内置预训练词向量,支持词嵌入和相似度计算。

  5. 多语言支持:支持多种语言,提供相应的预训练模型。

3 基本功能

3.1 分词和词性标注

使用spaCy库,可以方便地进行分词和词性标注。

以下是一个简单的示例:

import spacy# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 处理文本
doc = nlp("SpaCy is an amazing NLP library.")# 分词和词性标注
for token in doc:print(f"Token: {token.text}, POS: {token.pos_}")

3.2 命名实体识别

spaCy库提供了强大的命名实体识别功能。

以下是一个示例:

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(f"Entity: {ent.text}, Label: {ent.label_}")

3.3 依存句法分析

spaCy库支持依存句法分析,以下是一个示例:

import spacy# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 处理文本
doc = nlp("SpaCy is an amazing NLP library.")# 依存句法分析
for token in doc:print(f"Token: {token.text}, Dependency: {token.dep_}, Head: {token.head.text}")

3.4 词向量

spaCy库内置了预训练的词向量,支持词嵌入和相似度计算。

以下是一个示例:

import spacy# 加载预训练模型
nlp = spacy.load("en_core_web_md")# 获取词向量
token1 = nlp("apple")
token2 = nlp("orange")# 计算相似度
similarity = token1.similarity(token2)
print(f"相似度: {similarity}")

4 高级功能

4.1 自定义分词规则

spaCy允许用户自定义分词规则。

以下是一个示例:

import spacy
from spacy.tokenizer import Tokenizer# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 自定义分词规则
def custom_tokenizer(nlp):return Tokenizer(nlp.vocab, rules={"appleorange": [{"ORTH": "appleorange"}]})nlp.tokenizer = custom_tokenizer(nlp)# 处理文本
doc = nlp("I have an appleorange and a banana.")
for token in doc:print(f"Token: {token.text}")

4.2 自定义命名实体

spaCy支持添加自定义命名实体。

以下是一个示例:

import spacy
from spacy.tokens import Span# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 添加自定义命名实体
doc = nlp("Elon Musk is the CEO of SpaceX.")
org = Span(doc, 4, 5, label="ORG")
doc.ents = list(doc.ents) + [org]for ent in doc.ents:print(f"Entity: {ent.text}, Label: {ent.label_}")

4.3 训练自定义模型

spaCy支持训练自定义的NLP模型。

以下是一个示例,演示如何训练自定义命名实体识别模型:

import spacy
from spacy.training.example import Example
from spacy.util import minibatch, compounding# 创建空白模型
nlp = spacy.blank("en")# 创建命名实体识别组件并添加到管道中
ner = nlp.add_pipe("ner")# 添加标签
ner.add_label("ORG")# 准备训练数据
TRAIN_DATA = [("SpaceX is a company.", {"entities": [(0, 6, "ORG")]}),("Google is another company.", {"entities": [(0, 6, "ORG")]})
]# 训练模型
optimizer = nlp.begin_training()
for itn in range(10):losses = {}batches = minibatch(TRAIN_DATA, size=compounding(4.0, 32.0, 1.001))for batch in batches:for text, annotations in batch:doc = nlp.make_doc(text)example = Example.from_dict(doc, annotations)nlp.update([example], drop=0.5, sgd=optimizer, losses=losses)print(losses)# 测试模型
doc = nlp("SpaceX is an amazing company.")
for ent in doc.ents:print(f"Entity: {ent.text}, Label: {ent.label_}")

5 实际应用场景

5.1 文本分类

假设开发一个文本分类系统,用于将客户反馈分类为不同的主题,可以使用spaCy库实现这一功能。

import spacy
from spacy.training.example import Example# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 添加文本分类器
textcat = nlp.add_pipe("textcat", last=True)
textcat.add_label("POSITIVE")
textcat.add_label("NEGATIVE")# 准备训练数据
TRAIN_DATA = [("I love this product!", {"cats": {"POSITIVE": 1, "NEGATIVE": 0}}),("This is the worst experience ever.", {"cats": {"POSITIVE": 0, "NEGATIVE": 1}})
]# 训练模型
optimizer = nlp.begin_training()
for itn in range(10):losses = {}for text, cats in TRAIN_DATA:doc = nlp.make_doc(text)example = Example.from_dict(doc, cats)nlp.update([example], drop=0.5, sgd=optimizer, losses=losses)print(losses)# 测试模型
doc = nlp("I hate this!")
print(doc.cats)

5.2 情感分析

假设开发一个情感分析系统,用于分析社交媒体上的用户情感,可以使用spaCy库实现这一功能。

import spacy
from spacy.training.example import Example# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 添加文本分类器
textcat = nlp.add_pipe("textcat", last=True)
textcat.add_label("POSITIVE")
textcat.add_label("NEGATIVE")# 准备训练数据
TRAIN_DATA = [("I am very happy today!", {"cats": {"POSITIVE": 1, "NEGATIVE": 0}}),("I feel so sad and depressed.", {"cats": {"POSITIVE": 0, "NEGATIVE": 1}})
]# 训练模型
optimizer = nlp.begin_training()
for itn in range(10):losses = {}for text, cats in TRAIN_DATA:doc = nlp.make_doc(text)example = Example.from_dict(doc, cats)nlp.update([example], drop=0.5, sgd=optimizer, losses=losses)print(losses)# 测试模型
doc = nlp("This is an amazing day!")
print(doc.cats)

5.3 实体识别与信息抽取

假设开发一个信息抽取系统,需要从新闻文章中提取公司名称和产品名称,可以使用spaCy库实现这一功能。

import spacy# 加载预训练模型
nlp = spacy.load("en_core_web_sm")# 处理文本
doc = nlp("Apple announced the release of the new iPhone 13 in their latest event.")# 命名实体识别
for ent in doc.ents:if ent.label_ in ["ORG", "PRODUCT"]:print(f"Entity: {ent.text}, Label: {ent.label_}")

6 总结

spaCy库是一个功能强大且易于使用的自然语言处理工具,能够帮助开发者高效地处理各种NLP任务。通过支持高效的分词和词性标注、命名实体识别、依存句法分析、词向量、多语言处理等特性,spaCy库能够满足各种自然语言处理需求。本文详细介绍了spaCy库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握spaCy库的使用,并在实际项目中发挥其优势。

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

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

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

相关文章

一个全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核详解》(可下载)

随着摩尔定律的逐渐放缓,传统的芯片设计方法面临着越来越多的挑战。而FPGA以其并行处理能力和可编程性,为解决复杂问题提供了新的途径。它允许设计者在同一个芯片上实现多种不同的功能模块,极大地提高了资源的利用率和系统的综合性能。 FPGA…

领域数据模型建设步骤

领域数据模型建设步骤 以某音乐app为例: 1.数据调研和业务调研,识别业务过程,实体,关键指标 业务过程:播放,收藏,下载,点击,购买,支付 实体:音乐&#xff0c…

HCIA-ARP

ARP的由来 ARP这一种协议它会是在我们HCIA中第一个需要完全掌握的一个协议,不然对于数据通讯来说大家都会一直觉得很绕圈 协议栈,网线,网卡,它们组成了我们最小的数据通信的小脉络注:可以了解ARP攻击(冒充访…

使用Java和MyBatis获取表头与数据

使用Java和MyBatis获取表头与数据 在数据处理与展示中,经常需要将数据库查询结果中的表头(列名)与实际数据提取出来。本文将介绍如何通过Java的JDBC和MyBatis来实现这一需求。 1. 使用JDBC获取表头与数据 在JDBC中,可以使用Res…

文献解读-群体基因组第二期|《中国人群中PAX2新生突变的检测及表型分析:一项单中心研究》

关键词:应用遗传流行病学;群体测序;群体基因组;基因组变异检测; 文献简介 标题(英文):Detection of De Novo PAX2 Variants and Phenotypes in Chinese Population: A Single-Cente…

new CCDIKSolver( OOI.kira, iks ); // 创建逆运动学求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某个特定的库或框架来创建一个逆运动学(Inverse Kinematics, IK)求解器实例。逆运动学在机器人学、动画和计算机图形学等领域中非常重要,它用于根据期望的末端执行器(如机器人的…

Compose第四弹 Compose项目

目标: 1.可供学习的Compose项目 一、官方提供项目 谷歌官方提供的Compose项目: GitHub - android/compose-samples: Official Jetpack Compose samples. 项目及主要页面展现 1.1 Reply项目 1.首页底部TAB栏 2.侧边栏菜单:拖动滑出和收起…

建设现代智能工业-智能化、数字化、自动化节能减排

建设现代智能工业-智能化节能减排 遵循“一体化”能源管理(Integrated Energy Management)的设计宗旨,集成城市各领域(如工业.交通、建筑等)的能源生产和消费信息,面向城市政府、企业、公众三类实体,提供“一体化”的综合能源管理…

uniapp h5项目切换导航栏及动态渲染按钮颜色

1.效果图 2.html,动态渲染按钮样式---三元判断 <!-- 切换栏 --><view class"statusList"><block v-for"(item,index) in list" :key"index"><view class"swiper-tab-list" :class"current item.id?activ…

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型继续加入 组合预测模型全家桶 中&#xff0c;之前购买的同学请及时更新下载! 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模…

静态加速和动态加速是啥区别

以下是两者之间的主要区别&#xff1a; 加速对象与内容&#xff1a; 静态加速&#xff1a;主要针对网页中的静态资源&#xff0c;如HTML文件、CSS文件、JavaScript文件、图片、Flash动画等。这些资源的特点是更新频率较低&#xff0c;适合通过缓存技术加速。 动态加速&#xf…

网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践

文章目录 客户端缓存与服务器缓存的区别客户端缓存浏览器缓存应用程序缓存优点缺点 服务器缓存优点缺点 HTTP缓存控制头字段Cache-ControlExpiresLast-ModifiedETag 缓存策略的优化与实践经验分享1. 使用合适的缓存头字段2. 结合使用Last-Modified和ETag3. 利用CDN进行缓存4. 实…

【JAVA WEB实用与优化技巧】如何自己封装一个自定义UI的Swagger组件,包含Swagger如何处理JWT无状态鉴权自动TOKEN获取

目录 一、Swagger 简介1. 什么是 Swagger&#xff1f;2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安装2. java配置 二、Swagger UI存在的缺点1.不够方便直观2.请求的参数没有缓存3.不够美观4.如果是JWT 无状态登录&#xff0c;Swagger使用起来就没有那…

STL-stack的使用及其模拟实现

在C标准库中&#xff0c;stack是一种容器适配器&#xff0c;它以后进先出的方式组织数据&#xff0c;其删除只能从容器的栈顶进行元素的插入与取出操作。 stack的使用 stack的构造函数 stack的成员函数 empty&#xff1a;判断栈是否为空back&#xff1a;返回当前栈中元素的数量…

docker之自制django镜像

一&#xff0c;安装docker&#xff08;本作者往期文章有docker安装 &#xff0c;或者更详细的有关docker安装&#xff09; 二&#xff0c;拉取centos7镜像 docker pull centos:7 三&#xff0c;创建容器 docker run -id -v /root/docker/soft:/soft -p 8000:8000 --name djang…

Redis实践记录与总结

最近生产环境缓存数据库数据过大&#xff08;如何搭建单服务redis缓存数据库&#xff1f;以及可视化工具Another Redis Desktop Manager使用&#xff09;&#xff0c;导致在对数据库做rdb快照备份时消耗内存过大&#xff0c;缓存数据库宕机一小时。基础运维通过增加虚拟机内存暂…

spark相关知识

1.Spark的特点 Spark的设计遵循“一个软件栈满足不同应用场景”的理念&#xff0c;逐渐形成了一套完整的生态系统&#xff0c;既能够提供内存计算框架&#xff0c;也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。 运行速度快&#xff0c;易使用&#xff0c;强大的技…

kube-prometheus-stack 识别 k8s 集群内所有的 ServiceMonitor 和 PrometheusRule

默认情况下&#xff0c;kube-prometheus-stack 只自己创建的 ServiceMonitor&#xff0c;如果 k8s 集群内有多个非 kube-prometheus-stack 创建的 ServiceMonitor&#xff0c;不会被识别到。PrometheusRule 同理。 要识别所有的 ServiceMonitor 和 PrometheusRule &#xff0c;…

推荐一个 Java 开源企业级新能源汽车智能共享充电桩管理平台

文末可获取 Orise 平台源码 01 Orise 智能充电桩管理平台 奥升( Orise ) 新能源汽车充电桩管理 Saas 云平台是一个集充电设备管理、用户充电管理、线上小程序内容管理于一体的综合管理平台。Orise充电桩平台支持高并发业务、业务动态伸缩、桩通信负载均衡&#xff0c;通过Docke…

关于 kubernetes 的9个核心问题解答

本文通过提问题的方式对在 Kubernetes 集群建设中&#xff0c;不同的网络组件、存储方案、CI/CD工具、监控系统、网关服务以及服务网格&#xff08;如 Istio&#xff09;等选择给出一定的参考解答&#xff1b;但在实际工作中需要紧密结合业务规模、系统性能需求、安全性要求以及…