简介

产业级自然语言处理python包 https://spacy.io/

  • 支持64+语言
  • 针对19门语言的64流水线pipeline处理函数
  • 多任务预训练transformers,如BERT
  • 预训练词向量
  • 支持命名实体识别
  • 支持 POS词性标注
  • 支持 句法依存
  • 支持 文本分类
  • 支持 词干化
  • 内置可视化

    安装

    1. pip install spacy==3.2.0

预下载模型及权重

注意:模型大小的区别主要体现在词向量维度数的差距,模型越大,词向量的维度越多。
spacy模型配置方法参考 建议收藏 | nltk和spacy配置方法
【快速安装】
这里简要说明一下配置过程,以“zh_core_web_sm-3.2.0-py3-none-any.whl”为例子。
下载完成后将其移动至桌面,方便安装,打开命令行,切换至桌面

  1. cd desktop

打开conda命令行,切换至对应环境,使用pip安装模型

  1. pip install zh_core_web_sm-3.2.0-py3-none-any.whl

测试模型是否可以使用

  1. import spcay
  2. nlp_model = spcay.load('zh_core_web_sm')

无任何报错,即可愉快使用spacy

使用教程

网上教程地址:

下面以单条句子为例子,首先导入模型,并加载文本数据

  1. import spcay
  2. nlp_model = spacy.load('zh_core_web_sm')
  3. sentence = """国家卫生健康委疾控局二级巡视员崔钢介绍,近期,内蒙古呼伦贝尔市发生本土聚集性疫情。
  4. 截至昨天24时,本次疫情累计报告感染者42例,波及2省3市。其中内蒙古呼伦贝尔市39例、内蒙古通辽市
  5. 2例、黑龙江齐齐哈尔市1例。病毒基因组测序结果显示,本次疫情与既往本土疫情均无关联,是一起新的
  6. 境外输入源头引发的疫情。目前疫情在满洲里市已出现小范围的家庭、居民小区和学校聚集性病例,当地
  7. 疫情的社区传播风险较高,流出的风险人员排查工作正在进行中。(总台央视记者史迎春 杨弘杨)"""
  8. doc = nlp_model(sentence)

分词

直接for循环

  1. cutwords = [token for token in doc]
  2. cutwords

实体抽取

直接调用.ents即可抽取实体,每个实体可以调用.label_查看其属于那一类实体标签
此外,可以调用spacy.displacy.render()在notebook中打印实体抽取的效果

  1. entitys = doc.ents
  2. entitys_dict = [(ent,ent.label_) for ent in doc.ents]
  3. entitys_dict
  4. spacy.displacy.render(doc, style='ent',jupyter=True)

image.png

词性标注

使用for循环会对doc自动分词,每个词可以调用.pos_查看其属于那一种词性类型

  1. pos_dict = [(token,token.pos_) for token in doc]
  2. pos_dict

特征提取

特征提取有两个,一个是.vector ,另一个是.tensor。注意这里的维度特质sm这个小模型,跟换模型维度会变。
.vector会返回一个(96,)shape的一维向量,可以简单理解为拼接词向量后的句子向量
.tensor会返回一个(分词数目,96)shape的二维向量,可以简单理解为词向量

  1. doc.vector,doc.tensor