Project Icon

spacy-stanza

多语言自然语言处理工具,结合SpaCy和Stanza的强大功能

spacy-stanza 是一个包装 Stanza 库的软件,使得在 SpaCy 管道中使用斯坦福模型变得更加容易。其功能包括多语言词性标注、形态分析、词干提取和依存解析,支持68种语言,还为部分语言提供命名实体识别功能。用户可以通过下载预训练的 Stanza 模型,通过 spacy_stanza.load_pipeline() 加载并处理文本。这个工具还允许添加自定义组件,结合 SpaCy 的词汇属性、规则匹配和可视化功能,提供了强大的自然语言处理解决方案。

spaCy + Stanza(前身为StanfordNLP)

该包封装了Stanza(前身为StanfordNLP)库,因此你可以在spaCy管道中使用Stanford的模型。Stanford模型在CoNLL 2017和2018共享任务中取得了顶级精度,该任务涉及68种语言的分词、词性标注、形态分析、词形还原和标注依存分析。从v1.0开始,Stanza还支持选定语言的命名实体识别。

⚠️ 以前版本的此包名为spacy-stanfordnlp

tests PyPi GitHub Code style: black

使用这个封装,你将能使用由预训练的stanza模型计算的以下注释:

  • 统计分词(反映在Doc及其tokens中)
  • 词形还原(token.lemmatoken.lemma_
  • 词性标注(token.tagtoken.tag_token.postoken.pos_
  • 形态分析(token.morph
  • 依存分析(token.deptoken.dep_token.head
  • 命名实体识别(doc.entstoken.ent_typetoken.ent_type_token.ent_iobtoken.ent_iob_
  • 句子分段(doc.sents

️️️⌛️ 安装

从v1.0.0开始,spacy-stanza仅与spaCy v3.x兼容。安装最新版本:

pip install spacy-stanza

对于spaCy v2,安装v0.2.x并参考 v0.2.x使用文档

pip install "spacy-stanza<0.3.0"

请确保还 下载其中一个 预训练的Stanza模型

📖 使用及示例

⚠️ 重要提示: 该包已重构以利用 spaCy v3.0。以前为 spaCy v2.x构建的版本工作方式有很大不同。请参阅以前版本的README以了解文档。

使用spacy_stanza.load_pipeline()创建一个nlp对象,你可以用它处理含Stanza管道的文本并创建spaCy Doc对象。默认情况下,spaCy管道和Stanza管道将使用相同的lang初始化,例如“en”:

import stanza
import spacy_stanza

# 如有必要,下载stanza模型
stanza.download("en")

# 初始化管道
nlp = spacy_stanza.load_pipeline("en")

doc = nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")
for token in doc:
    print(token.text, token.lemma_, token.pos_, token.dep_, token.ent_type_)
print(doc.ents)

如果spaCy中提供了给定语言的数据,相关语言类可以用作nlp对象的基础,比如English()。这样你就可以使用spaCy的词汇属性,比如is_stoplike_num。该nlp对象遵循与其他spaCyLanguage类相同的API,因此你可以使用displaCy可视化Doc对象,向管道添加自定义组件,使用基于规则的匹配器,并执行通常在spaCy中执行的所有操作。

# 访问spaCy的词汇属性
print([token.is_stop for token in doc])
print([token.like_num for token in doc])

# 可视化依存关系
from spacy import displacy
displacy.serve(doc)  # 如果在Jupyter notebook中使用displacy.render

# 用nlp.pipe处理文本
for doc in nlp.pipe(["大量文本", "更多文本", "..."]):
    print(doc.text)

# 结合你自己的自定义管道组件
from spacy import Language
@Language.component("custom_component")
def custom_component(doc):
    # 在此对doc做点什么
    print(f"调用了自定义组件: {doc.text}")
    return doc

nlp.add_pipe("custom_component")
doc = nlp("一些文本")

# 将属性序列化为numpy数组
np_array = doc.to_array(['ORTH', 'LEMMA', 'POS'])

Stanza管道选项

可以按照Pipeline API提供的参数以关键字形式提供Stanza Pipeline 的其他选项:

  • 提供Stanza语言作为lang。对于不支持spaCy的Stanza语言,请使用“xx”作为spaCy语言设置:

    # 为科普特语初始化一个管道
    nlp = spacy_stanza.load_pipeline("xx", lang="cop")
    
  • 遵循Pipeline API提供Stanza管道设置:

    # 使用`hdt`包初始化德语管道
    nlp = spacy_stanza.load_pipeline("de", package="hdt")
    
  • 使用spaCy进行分词而非统计分词(仅限英语):

    nlp = spacy_stanza.load_pipeline("en", processors= {"tokenize": "spacy"})
    
  • 按照其他关键字参数提供的额外处理器设置:

    # 提供预先分词文本(空格分词)
    nlp = spacy_stanza.load_pipeline("de", tokenize_pretokenized=True)
    

spaCy配置在[nlp.tokenizer]块中指定所有Pipeline选项。例如,以上例子中预分词文本的德语管道配置:

[nlp.tokenizer]
@tokenizers = "spacy_stanza.PipelineAsTokenizer.v1"
lang = "de"
dir = null
package = "default"
logging_level = null
verbose = null
use_gpu = true

[nlp.tokenizer.kwargs]
tokenize_pretokenized = true

[nlp.tokenizer.processors]

序列化

完整的Stanza管道配置保存在spaCy管道 config 中,因此你可以像其他nlp管道一样保存和加载该管道:

# 保存到本地目录
nlp.to_disk("./stanza-spacy-model")

# 重新加载该管道
nlp = spacy.load("./stanza-spacy-model")

注意,这默认不保存任何Stanza模型数据。Stanza模型非常大,因此目前的包期望你通过stanza.download()单独下载这些模型,并使它们在默认模型目录中或配置中的[nlp.tokenizer.dir]路径下可用。

添加额外的spaCy管道组件

默认情况下,由spacy_stanza.load_pipeline()返回的nlp对象中的spaCy管道将为空,因为所有stanza属性都在自定义分词器StanzaTokenizer 中计算并设置。但是由于它是一个常规的nlp对象,你可以向管道中添加自己的组件。例如,你可以添加 你自己的自定义文本分类组件 通过nlp.add_pipe("textcat", source=source_nlp),或使用EntityRuler组件 通过自己的基于规则的模式增强命名实体。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号