简介
产业级自然语言处理python包 https://spacy.io/
- 支持64+语言
- 针对19门语言的64流水线pipeline处理函数
- 多任务预训练transformers,如BERT
- 预训练词向量
- 支持命名实体识别
- 支持 POS词性标注
- 支持 句法依存
- 支持 文本分类
- 支持 词干化
- 内置可视化
安装
pip install spacy==3.2.0
预下载模型及权重
- 中文模型3.2.0版
- zh_core_web_sm https://github.com/explosion/spacy-models/releases/download/zh_core_web_sm-3.2.0/zh_core_web_sm-3.2.0-py3-none-any.whl
- zh_core_web_md https://github.com/explosion/spacy-models/releases/download/zh_core_web_md-3.2.0/zh_core_web_md-3.2.0-py3-none-any.whl
- zh_core_web_lg https://github.com/explosion/spacy-models/releases/download/zh_core_web_lg-3.2.0/zh_core_web_lg-3.2.0-py3-none-any.whl
- 英文模型3.2.0版
- en_core_web_sm https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.2.0/en_core_web_sm-3.2.0-py3-none-any.whl
- en_core_web_md https://github.com/explosion/spacy-models/releases/download/en_core_web_md-3.2.0/en_core_web_md-3.2.0-py3-none-any.whl
- en_core_web_lg https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-3.2.0/en_core_web_lg-3.2.0-py3-none-any.whl
注意:模型大小的区别主要体现在词向量维度数的差距,模型越大,词向量的维度越多。
spacy模型配置方法参考 建议收藏 | nltk和spacy配置方法
【快速安装】
这里简要说明一下配置过程,以“zh_core_web_sm-3.2.0-py3-none-any.whl”为例子。
下载完成后将其移动至桌面,方便安装,打开命令行,切换至桌面
cd desktop
打开conda命令行,切换至对应环境,使用pip安装模型
pip install zh_core_web_sm-3.2.0-py3-none-any.whl
测试模型是否可以使用
import spcay
nlp_model = spcay.load('zh_core_web_sm')
无任何报错,即可愉快使用spacy
使用教程
网上教程地址:
下面以单条句子为例子,首先导入模型,并加载文本数据
import spcay
nlp_model = spacy.load('zh_core_web_sm')
sentence = """国家卫生健康委疾控局二级巡视员崔钢介绍,近期,内蒙古呼伦贝尔市发生本土聚集性疫情。
截至昨天24时,本次疫情累计报告感染者42例,波及2省3市。其中内蒙古呼伦贝尔市39例、内蒙古通辽市
2例、黑龙江齐齐哈尔市1例。病毒基因组测序结果显示,本次疫情与既往本土疫情均无关联,是一起新的
境外输入源头引发的疫情。目前疫情在满洲里市已出现小范围的家庭、居民小区和学校聚集性病例,当地
疫情的社区传播风险较高,流出的风险人员排查工作正在进行中。(总台央视记者史迎春 杨弘杨)"""
doc = nlp_model(sentence)
分词
直接for循环
cutwords = [token for token in doc]
cutwords
实体抽取
直接调用.ents即可抽取实体,每个实体可以调用.label_
查看其属于那一类实体标签
此外,可以调用spacy.displacy.render()
在notebook中打印实体抽取的效果
entitys = doc.ents
entitys_dict = [(ent,ent.label_) for ent in doc.ents]
entitys_dict
spacy.displacy.render(doc, style='ent',jupyter=True)
词性标注
使用for循环会对doc自动分词,每个词可以调用.pos_
查看其属于那一种词性类型
pos_dict = [(token,token.pos_) for token in doc]
pos_dict
特征提取
特征提取有两个,一个是.vector
,另一个是.tensor
。注意这里的维度特质sm这个小模型,跟换模型维度会变。.vector
会返回一个(96,)shape的一维向量,可以简单理解为拼接词向量后的句子向量.tensor
会返回一个(分词数目,96)shape的二维向量,可以简单理解为词向量
doc.vector,doc.tensor