spacy的安装与使用


一、安装

下载spacy:conda install spacy

下载英文model:sm、md、lg分别表示三种大小的nlp模型,en_core_web_lg更精确,一般en_core_web_sm即可

conda install -c conda-forge spacy-model-en_core_web_sm
conda install -c conda-forge spacy-model-en_core_web_md
conda install -c conda-forge spacy-model-en_core_web_lg

各类spacy模型的网址:https://github.com/explosion/spacy-models/tags
官方文档:https://spacy.io/api/doc

二、使用教程

spacy的统计模型和处理管道是其核心内容。

统计模型使spacy能够执行一些nlp任务,如词性标记、命名实体识别、依存关系解析
导入模型:import spacy之后,执行spacy.load('model_name')导入模型

import spacy
nlp = spacy.load('en_core_web_sm')

处理管道:使用spacy时第一步是将文本字符串传递给nlp对象,这个对象本质上是由几个文本预处理操作组成的管道(如标记生成器、标签器、解析器、ner等)
在这里插入图片描述

import spacy
nlp = spacy.load('en_core_web_sm')

# 创建nlp对象
doc = nlp("he want to be alone")
# 输出活动的管道组件
print(nlp.pipe_names)
# 禁用部分管道组件
# 当只需要标记文本时,可禁用整个管道,此时标记化过程会变得非常快
nlp.disable_pipes('tagger','parser')
print(nlp.pipe_names)

三 、使用spacy执行各种nlp任务

3.1、词性标注

自动将词性标注分配给句子中所有单词,该任务有助于nlp的各种下游任务(如特征工程、语言理解、信息提取等)

doc2 = nlp("when that comes, all the things will be solved.")
# 遍历token,输出每个token的pos标记,
# 若不明白标记的含义,可使用spacy.explain("PART")来确定
for token in doc2:
    print(token.text,"--->",token.pos_)

在这里插入图片描述

3.2、依存分析

通过依存句法分析提取出句子的语法结构,也可看做是一个有向图,图中的节点对应于句子中的单词,图中的边对应于单词间的对应依赖关系

doc3 = nlp("I wish nothing but the best for you too.")
for token in doc3:
    print(token.text,"--->",token.dep_)

在这里插入图片描述

3.3、命名实体识别

实体是表示诸如个人、地点、组织等常见事物的信息的词或词组,即具有专有名称

doc4 = nlp("Indians spent over $71 billion on clothes in 2018")
for ent in doc4.ents:
    print(ent.text, ent.label_)

在这里插入图片描述

3.4、基于规则的spacy匹配

使用spacy匹配器,可以以用户定义的规则在文本中匹配到单词或短语

  • 类似于正则表达式,正则表达式使用文本模式来查找单词和短语,
  • spacy匹配器不仅使用文本模式还使用单词的词汇属性(如pos标记、依赖标记、词根等)
# 4. 基于规则的spacy匹配
from spacy.matcher import Matcher
#用spaCy词汇表初始化Matcher对象
matcher = Matcher(nlp.vocab)
# 向nlp对象传递输入文本内容
doc4 = nlp("HELLO WORLD on Google Maps.")

# 定义内容提取规则
patterns = [
   [{"LOWER": "hello"}, {"LOWER": "world"}],
   [{"ORTH": "Google"}, {"ORTH": "Maps"}]
]
# 定义打印函数
def on_match(matcher, doc, id, matches):
    print('Matched!', matches)  #输出:[匹配ID,匹配标记的起始位置,结束位置]
    for match_id, start, end in matches:
        # 获得匹配的宽度
        matched_span = doc4[start:end]
        print(matched_span.text)
# 将规则、函数添加到matcher对象
matcher.add("TEST_PATTERNS", patterns, on_match=on_match)

# 用自定义的提取规则提取文本
matches = matcher(doc4)

在这里插入图片描述
matcher.add(match_id, patterns[, on_match] [, greedy])

向匹配器添加一条规则,以对匹配项进行操作

# 5. spaCy matcher的另一个用例
doc51 = nlp("You read this book")
doc52 = nlp("I will book my ticket")
matcher2 = Matcher(nlp.vocab)
pattern = [{'TEXT': 'book', 'POS': 'NOUN'}]
matcher2.add('rule_2', [pattern])
matches1 = matcher2(doc51)
matches2 = matcher2(doc52)
print(matches1)
print(matches2)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值