spacy教程–基础

安装

pip install spacy

训练模型

安装之后还要下载官方的训练模型, 不同的语言有不同的训练模型,这里只用对应中文的模型演示:

python -m spacy download zh_core_web_sm

代码中使用:

import spacy
nlp = spacy.load("zh_core_web_sm")

模型官方文档: https://spacy.io/models
每种语言也会有几种不同的模型,例如中文的模型除了刚才下载的 zh_core_web_sm 外,还有zh_core_web_trf、zh_core_web_md 等,它们的区别在于准确度和体积大小, zh_core_web_sm 体积小,准确度相比zh_core_web_trf差,zh_core_web_trf相对就体积大。这样可以适应不同场景。

LANGUAGE : 那种语言的模型
SIZE : 模型体积的大小
COMPONENTS(组件): 模型具备的功能:

  • tok2vec: 分词
  • tagger: 词性标注
  • parser: 依存分析
  • senter: 分句
  • ner: 命名实体识别
  • attribute_ruler: 更改属性映射(没有具体了解)

功能

import spacy
s = "小米董事长叶凡决定投资华为。在2002年,他还创作了<遮天>。"
nlp = spacy.load("zh_core_web_sm")
doc = nlp(s)

分句 (sentencizer)

# 1. 分句 (sentencizer)
for i in doc.sents:print(i)
"""
小米董事长叶凡决定投资华为。
在2002年,他还创作了<遮天>。
"""

分词 (Tokenization)

# 2. 分词 (Tokenization)
print([w.text for w in doc])
"""
['小米', '董事长', '叶凡', '决定', '投资', '华为', '。', '在', '2002年', ',', '他', '还', '创作', '了', '<遮天>', '。']
"""

词性标注 (Part-of-speech tagging)

细粒度

print([(w.text, w.tag_) for w in doc])
"""
[('小米', 'NR'), ('董事长', 'NN'), ('叶凡', 'NR'), ('决定', 'VV'), ('投资', 'VV'), ('华为', 'NR'), ('。', 'PU'), ('在', 'P'), ('2002年', 'NT'), (',', 'PU'), ('他', 'PN'), ('还', 'AD'), ('创作', 'VV'), ('了', 'AS'), ('<遮天>', 'NN'), ('。', 'PU')]
"""

粗粒度

print([(w.text, w.pos_) for w in doc])
"""
[('小米', 'PROPN'), ('董事长', 'NOUN'), ('叶凡', 'PROPN'), ('决定', 'VERB'), ('投资', 'VERB'), ('华为', 'PROPN'), ('。', 'PUNCT'), ('在', 'ADP'), ('2002年', 'NOUN'), (',', 'PUNCT'), ('他', 'PRON'), ('还', 'ADV'), ('创作', 'VERB'), ('了', 'PART'), ('<遮天>', 'NOUN'), ('。', 'PUNCT')]
"""

识别停用词 (Stop words)

print([(w.text, w.is_stop) for w in doc])
"""
[('小米', False), ('董事长', False), ('叶凡', False), ('决定', True), ('投资', False), ('华为', False), ('。', True), ('在', True), ('2002年', False), (',', True), ('他', True), ('还', True), ('创作', False), ('了', True), ('<遮天>', False), ('。', True)]
"""

命名实体识别 (Named Entity Recognization)

# 命名实体识别 (Named Entity Recognization)
print([(e.text, e.label_) for e in doc.ents])
"""
[('小米', 'PERSON'), ('叶凡', 'PERSON'), ('2002年', 'DATE')]
"""

依存分析 (Dependency Parsing)

print([(w.text, w.dep_) for w in doc])
"""
[('小米', 'nmod:assmod'), ('董事长', 'appos'), ('叶凡', 'nsubj'), ('决定', 'ROOT'), ('投资', 'ccomp'), ('华为', 'dobj'), ('。', 'punct'), ('在', 'case'), ('2002年', 'nmod:prep'), (',', 'punct'), ('他', 'nsubj'), ('还', 'advmod'), ('创作', 'ROOT'), ('了', 'aux:asp'), ('<遮天>', 'dobj'), ('。', 'punct')]
"""

词性还原 (Lemmatization)

这个模型没有这个功能,用英文模型演示下

找到单词的原型,即词性还原,将am, is, are, have been 还原成be,复数还原成单数(cats -> cat),过去时态还原成现在时态 (had -> have)。

import spacy
nlp = spacy.load('en_core_web_sm')
txt = "A magnetic monopole is a hypothetical elementary particle."
doc = nlp(txt)
lem = [token.lemma_ for token in doc]
print(lem)
"""
['a', 'magnetic', 'monopole', 'be', 'a', 'hypothetical', 'elementary', 'particle', '.']
"""

提取名词短语 (Noun Chunks)

noun_chunks = [nc for nc in doc.noun_chunks]
print(noun_chunks)
"""
[A magnetic monopole, a hypothetical elementary particle]
"""

指代消解 (Coreference Resolution)

指代消解 ,寻找句子中代词 he,she,it 所对应的实体。为了使用这个模块,需要使用神经网络预训练的指代消解系数,如果前面没有安装,可运行命令:pip install neuralcoref

这个模型没有这个功能,用英文模型演示下

txt = "My sister has a son and she loves him."# 将预训练的神经网络指代消解加入到spacy的管道中
import neuralcoref
neuralcoref.add_to_pipe(nlp)
doc = nlp(txt)
doc._.coref_clusters
"""
[My sister: [My sister, she], a son: [a son, him]]
"""

可视化

from spacy import displacy
# 可视化依存关系
html_str = displacy.render(doc, style="dep")
#可视化命名名称实体
# html_str = displacy.render(doc, style="ent")
with open("D:\\data\\ss.html", "w", encoding="utf8") as f:f.write(html_str)

html_str 是一个html格式的字符串, 保存到本地 ss.html文件,浏览器打开效果:
依存关系

命名实体

官方还有一个可视化的库: spacy-streamlit , 专门用于spacy相关的nlp可视化。
streamlit 也是一个专门可视化的库。
spacy-streamlit 有一个使用demo:
https://share.streamlit.io/ines/spacy-streamlit-demo/app.py
demo对应githup
GitHub - ines/spacy-streamlit-demo

spacy教程--基础相关推荐

  1. Xamarin XAML语言教程基础语法篇大学霸

    Xamarin XAML语言教程基础语法篇大学霸 前  言 Xamarin是一个跨平台开发框架.它可以用来开发iOS.Android.Windows Phone和Mac的应用程序.使用Xamarin框 ...

  2. iOS10 UI教程基础窗口的内容与设置起始窗口

    iOS10 UI教程基础窗口的内容与设置起始窗口 iOS10 UI教程基础窗口的内容与设置起始窗口,本章我们从iOS10开发中UI的基础知识开始讲解,其中包括了窗口.视图以及UI层次结构和Views的 ...

  3. Django 3.2.5博客开发教程:基础配置

    创建项目之后,我们需要对项目进行最基础的配置.这些配置是我们做项目的时候必须要配置的,所以我们先提前配置好. 我们打开myblog目录下的settings.py文件. 一.设置域名访问权限 myblo ...

  4. sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇

    SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLA ...

  5. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

    Midjourney|文心一格prompt教程[基础篇]:注册使用教程.风格设置.参数介绍.隐私模式等 开头讲一下为什么选择Midjourney和文心一格,首先Midjourney功能效果好不多阐述: ...

  6. 日系原画教程基础-张聪-专题视频课程

    日系原画教程基础-5072人已学习 课程介绍         通过整体课程让大家详细的了解美术风格之日系的制作手法 课程收益     让大家更加的了解美术在原画中的运用 讲师介绍     张聪 更多讲 ...

  7. 深度学习小白入门教程-基础环境篇

    深度学习小白入门教程-基础环境篇 如有图片显示失败,请回小主主页查看~ Anaconda 安装包下载方式一:官网(科学上网比较慢,不推荐) 安装包下载方式二:清华镜像(推荐) 具体安装步骤(跟着箭头来 ...

  8. 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明

    基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...

  9. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

最新文章

  1. 平板电脑怎么投屏到电视上_学而思网课怎么投屏到电视上
  2. 警告 1 warning C4996: ‘scanf‘: This function or variable may be unsafe.
  3. phpcount数组报错_PHPExcel把导入的excel表格转换为数组,然后运行,浏览器什么也不显示,也不报错...
  4. oracle相克军,Oracle视频课程在线观看与下载-甲骨论-172
  5. linux localhost发邮件失败,测试邮件系统:telnet localhost 25时的问题~
  6. 系统指定的路径不存在,怎么办
  7. centos7.5 gnome3的主题优化
  8. manjaro快捷键
  9. FPGA基础知识1(FPGA芯片结构)
  10. 告别切图标注-Sketch/PS+Zeplin
  11. html鼠标经过状态,HTML5 - 让Canvas内部元素实现鼠标移入、移出效果(Tooltip提示效果)...
  12. 调用系统safair 在模拟器下无法成功
  13. 双十一游戏发烧友都在推荐的电子竞技显示器
  14. 香港 - 寻找轻鬆攻略游(蒲台岛)
  15. 15年IT经验,如何从一无所有成为上市公司高层!
  16. Python之urlparse模块
  17. 2019 CCCC 天梯赛 杭州站 历程
  18. 成功解决TypeError: Value passed to parameter 'paddings' has DataType float32 not in list of allowed valu
  19. java class获取type_父类通过泛型获得子类Class类型 以及Type体系
  20. Android Studio 好用的插件

热门文章

  1. BAT大牛分享如何在最短的时间升职为阿里Java架构师
  2. 复旦大学python教程_安装python-复旦大学大数据学院.pdf
  3. 从零开始PyopenGL(2): 简单立体图形绘制
  4. useRoutes() may be used only in the context of a <Router> component.
  5. java ascii码大小写转换_使用「ASCII」转换大小写
  6. 微信小程序转码机器人----【在线实战】
  7. BTC地址不同格式的区别
  8. python中文社区-python
  9. Python中文社区官方群组
  10. MATLAB无线计算器