[python]spacy安装和简单使用教程

我使用的是python3.8版本,当然你也可以>=python3.9版本但是后面语言模型都要有相应调整。下面我都是按照python3.8版本安装的。

首先我们得安装anaconda3,cuda11.8.0和cudnn8.9.7这些都是比较简单安装本文教程略过。

首先我们创建一个python3.8环境

conda create -n py38 python=3.8 

进入环境:conda activate py38

如果您是安装cpu版本spacy可以直接使用:

pip install spacy==3.7.5

这里最好指定这个版本。因为不同版本对后面语言模型版本有要求。

如果您是安装cuda11.x版本spacy您可以使用

pip install spacy[cuda11x]==3.7.5

如果您是安装cuda12.x版本spacy您可以使用

pip install spacy[cuda12x]==3.7.5

安装后即可正常使用spacy模块了,但是上面anaconda3,cuda等安装下载都很耗时,所以spacy安装并不是安装难度大而是耗时上面。

spacy支持多种语言模型,可以通过windows的命令来下载安装。以英语和汉语为例,下载模型的命令如下:

英语模型:

spacy download en_core_web_sm 

或者

python -m spacy download en_core_web_sm

汉语模型:

spacy download zh_core_web_sm 

或者

python -m spacy download zh_core_web_sm

但由于网络问题,我们用上述命令下载语言模型多数时候会下载失败,这个时候就需要手动下载语言模型。下面才是最难部分,因为spacy中英文模型文件有8个,累计占用2GB以上空间。如果您要直接下载估计很难下载。不过还得学习下下载过程。

【注意】不同版本的语言模型需要匹配适合的Python版本:

Python 3.8可安装spacy 3.7.5 版本的扩展库,对应的语言模型可以安装3.7.0版。

Python 3.9及以上可以安装spacy 3.8.0版本的扩展库,对应的语言模型也可以安装3.8.0版本。

下开始手动下载模型:首先spacy.io/usage/models页面的“Language support”找到所需语言模型链接,以中文语言模型为例:

进入对应的下载页面后,选择需要的汉语模型:

zh_core_web_sm

zh_core_web_md

zh_core_web_lg

zh_core_web_trf

以zh_core_web_sm为例,点击“RELEASE DETAILS”:

加载出3.8.0版本模型,网页如下图所示。

3.8.0版本需要Python3.9以上,否则只能安装较低版本的语言模型,如果想要寻找其他版本,点击“Releases”:

此时上面网址可以清楚看到3.8.0,我们只需要改成3.7.0网址重新访问即可下载对应版本

注意:如果上面文件由于网络无法下载可以去国内下载spacy中英文语言模型3.7.0版本:aistudio.baidu.com/datasetdetail/315178
spacy中英文语言模型3.8.0版本:aistudio.baidu.com/datasetdetail/315183

下载完成后,会得到一个wheel文件,例如3.7.0版本中文模型zh_core_web_sm的文件名为:

zh_core_web_sm-3.87.0-py3-none-any.whl

在命令行窗口中把当前目录切换到语言模型文件所在目录,再执行如下的安装命令:

pip install 语言模型文件全名

例如:

pip install zh_core_web_sm-3.7.0-py3-none-any.whl

或者直接找到文件,选中右键“复制文件地址”,然后在命令行执行如下安装命令:

pip install  [whl文件路径]

例如:

pip install "C:\Users\Administrator\Downloads\zh_core_web_sm-3.7.0-py3-none-any.whl"

按照上面步骤我们可以照葫芦画瓢下载其他语言模型。这里我下载了以下几个语言模型

en_core_web_lg-3.7.0-py3-none-any.whl
en_core_web_md-3.7.0-py3-none-any.whl
en_core_web_sm-3.7.0-py3-none-any.whl
en_core_web_trf-3.7.0-py3-none-any.whl
zh_core_web_lg-3.7.0-py3-none-any.whl
zh_core_web_md-3.7.0-py3-none-any.whl
zh_core_web_sm-3.7.0-py3-none-any.whl
zh_core_web_trf-3.7.0-py3-none-any.whl

其中有4个文件超过300M,超过2GB这个下载我花费了40分钟完成!

下面是简单使用案例:

属性总结

属性1.分词 spacy在导入nlp语料时已经默认变成token
属性2.分句 使用doc.sents
属性3.打印词性 使用token.pos_
属性4.命名体识别 使用doc.ents

属性1.分词、属性2.分句

import spacy

def print_hi():
    nlp = spacy.load('en_core_web_sm')
    #a导入英文模型
    doc = nlp('Weather is good, very windy and sunny. We have no classes in afternoon')
    #a读进语料,默认已经完成分词存入doc中
    
    #a分词
    for token in doc:
        print(token)
    print('***************')
    #b分句.sents
    for sent in doc.sents:
        print(sent)

 补充:一般导入语料都有nlp表示;由于导入语料的时候spacy已经完成分词功能直接调用;在分句时候需要加上’.sents’即可。
输出结果:

属性3.打印词性

import spacy

def print_hi():
    nlp = spacy.load('en_core_web_sm')#导入英文模型
    doc = nlp('Weather is good, very windy and sunny. We have no classes in afternoon')#读进语料,默认已经完成分词存入doc中
    #c打印词性token.pos_
    for token in doc:
        print('{}-{}'.format(token,token.pos_))

if __name__ == '__main__':
    print_hi()

 

属性4.命名体识别

import spacy

def print_hi():
    nlp = spacy.load('en_core_web_sm')#导入英文模型
    doc = nlp('I went to Paris where I met my old friend Jack from uni.')#读进语料,默认已经完成分词存入doc中
    #d打印实体ents,以及实体类型.label_
    for ent in doc.ents:
        print('{}-{}'.format(ent,ent.label_))

if __name__ == '__main__':
    print_hi()

 

最后如何判断spacy是否可以使用GPU

import spacy
print(spacy.prefer_gpu())

作者:FL1623863129

物联沃分享整理
物联沃-IOTWORD物联网 » [python]spacy安装和简单使用教程

发表回复