当前位置: 首页 > news >正文

cookiecutter-spacy-fastapi API 完全参考:/entities 与 /entities_by_type 两个 NER 接口详解

cookiecutter-spacy-fastapi API 完全参考:/entities 与 /entities_by_type 两个 NER 接口详解

【免费下载链接】cookiecutter-spacy-fastapiCookiecutter API for creating Custom Skills for Azure Search using Python and Docker项目地址: https://gitcode.com/gh_mirrors/co/cookiecutter-spacy-fastapi

📌cookiecutter-spacy-fastapi是一个基于 Cookiecutter 的项目模板,帮你一键生成基于spaCy + FastAPI的命名实体识别(NER)API 服务,并支持 Docker 部署。它内置/entities/entities_by_type两个 NER 接口,输出格式兼容 Azure Search 自定义认知技能(Cognitive Skill),是快速搭建命名实体抽取服务的实用脚手架。

上图:生成项目后访问/docs即可看到的 NER 接口在线文档与调试页面

一键生成你的 NER 服务:什么是 cookiecutter-spacy-fastapi

这个项目把三样东西打包成了一个模板:

组件作用
Cookiecutter项目生成器,一条命令产出完整工程目录
spaCy工业级 NLP 工具,负责真正的实体识别
FastAPI高性能 Web 框架,自动生成/docs交互文档

它解决的核心痛点是:不用手写项目结构,直接得到带 Dockerfile、测试用例、示例请求、自动文档的完整服务。

快速上手步骤

  1. 安装 Cookiecutter(需 1.4.0 或更高版本):
pip install --user cookiecutter
  1. 生成项目:
cookiecutter https://gitcode.com/gh_mirrors/co/cookiecutter-spacy-fastapi

生成后进入项目目录(路径名为{{cookiecutter.project_slug}}/),按模板提示填入 spaCy 默认模型名(如英文常用en_core_web_sm),即可运行。

两个接口共用的请求结构

理解请求体是调用两个接口的前提。请求由RecordsRequest模型定义(位于{{cookiecutter.project_slug}}/app/models.py),结构如下:

{ "values": [ { "recordId": "a1", "data": { "text": "Japan is a country. Washington is a state where most people speak English.", "language": "en" } } ] }
  • values:文档列表,天然支持批量处理,一次请求可传多条文本;
  • recordId:每条文档的唯一标识,响应中会原样带回,方便和原始数据对齐;
  • data.text:待识别文本;
  • data.language:语言代码,默认en

这个values + recordId的设计正是 Azure Search 认知技能的标准入参约定,模板在{{cookiecutter.project_slug}}/app/data/example_request.json中内置了示例请求,/docs页面可直接填入试用。

/entities 接口详解:返回原始实体列表

POST /entities是最直接的 NER 接口:把一批文本送入 spaCy 模型,返回每条文档识别到的全部命名实体。

路由实现在{{cookiecutter.project_slug}}/app/api.py中,核心逻辑委托给{{cookiecutter.project_slug}}/app/spacy_extractor.py里的SpacyExtractor类,它通过nlp.pipe()批量处理文本,比逐条调用更快。

响应结构

{ "values": [ { "recordId": "a1", "data": { "entities": [ { "name": "Washington", "label": "GPE", "matches": [ {"start": 25, "end": 35, "text": "Washington"} ] } ] } } ] }

每个实体对象包含三个字段:

字段说明
name实体名称(全小写时会自动首字母大写,如googleGoogle
labelspaCy 实体标签,如ORGPERSONGPE
matches该实体在原文中的所有出现位置,含 start / end 偏移和原文片段

一个值得注意的细节:同一实体在文中出现多次时会被合并为一条记录,所有位置收进matches数组,而不是重复输出多条实体,响应更干净。

/entities_by_type 接口详解:按类型分组返回

POST /entities_by_type的请求体与/entities完全相同,区别在输出:它把每条文档的实体按标签分组,直接返回「类型 → 实体名列表」的结构:

{ "values": [ { "recordId": "a1", "data": { "organizations": ["Google", "Apple", "Amazon"], "products": ["Siri", "Alexa", "Echo and Dot"], "gpes": ["Japan", "Washington"] } } ] }

支持的 17 种实体类型

分组映射由ENT_PROP_MAP定义(位于{{cookiecutter.project_slug}}/app/models.py),覆盖 spaCy 默认模型的全部标签:

标签返回字段含义
ORGorganizations组织、机构
PERSONpeople人物
GPEgpes国家、州、城市
LOClocations非政区地名
FACfacilities设施(机场、桥梁等)
PRODUCTproducts产品、作品
WORK_OF_ARTworksOfArt书籍、影视等
EVENTevents事件
LAWlaws法律法规
LANGUAGElanguages语言
NORPnorps民族、宗教等
DATEdates日期
TIMEtimes时间
PERCENTpercentages百分比
MONEYmoney货币金额
QUANTITYquanities数量
CARDINAL / ORDINALcardinals / ordinals基数词 / 序数词

💡 这个接口可以直接作为Azure Search 自定义认知技能使用——响应中的字段名就是 Azure 侧可直接引用的属性名,无需二次转换。

两个接口怎么选?对比一览

对比项/entities/entities_by_type
输出形态实体列表(含 label、位置)类型 → 实体名列表
是否有位置信息✅ start / end 偏移❌ 只有名称
重复实体合并为一条 + matches自动去重合并
典型场景需要标注、高亮、溯源按类型汇总、喂给搜索系统

经验法则:需要知道实体在原文哪个位置、或需要原始标签时,用/entities;只需要「这段文本里有哪些人、哪些公司」这种按类型归拢的结果时,用/entities_by_type

本地运行与部署:从调试到 Docker

  1. 进入生成的项目目录,创建虚拟环境并启动:
cd ./你的项目目录 bash ./create_virtualenv.sh uvicorn app.api:app --reload
  1. 浏览器打开http://localhost:8000/docs即可看到上图所示的 NER 接口文档页;也可访问/redoc查看另一种文档样式。
  2. 项目自带测试用例({{cookiecutter.project_slug}}/app/tests/test_api.py),覆盖文档重定向和 NER 调用,可验证服务是否正常。
  3. 部署时直接使用仓库内的{{cookiecutter.project_slug}}/Dockerfile:它基于 uvicorn-gunicorn-fastapi 基础镜像,自动执行spacy download拉取你在模板中指定的模型,容器监听 8080 端口,适合直接对接 Azure Search 或容器编排平台。

总结

cookiecutter-spacy-fastapi 用一条命令帮你搭好了一个生产可用的 NER 服务骨架:/entities给你带位置信息的原始实体,/entities_by_type给你按 17 种类型分组的整洁结果,两者入参相同、格式兼容 Azure Search 认知技能。对于想快速把 spaCy 实体识别能力暴露为 API 的团队,这套模板能省掉绝大部分脚手架工作,让你把精力留给模型选择和调优。

【免费下载链接】cookiecutter-spacy-fastapiCookiecutter API for creating Custom Skills for Azure Search using Python and Docker项目地址: https://gitcode.com/gh_mirrors/co/cookiecutter-spacy-fastapi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4228752.html

相关文章:

  • 从M2M-100到AI4Bharat:开源项目Indic NLP Library如何赋能印度语言NLP生态
  • PingFangSC 字体包:3 步把苹果苹方装进你的网页(6 种字重,2 种格式)
  • 免费完整导出微信聊天记录:WeChatMsg教程与年度报告功能指南
  • Repo Chat快速上手教程:10分钟从零搭建你的GitHub仓库AI代码问答系统
  • 基于SpringBoot+Vue 2的高校失物招领系统的设计与实现
  • 数据库链路追踪深度实践:如何为SQL Server和Entity Framework Core启用opentelemetry-dotnet-contrib遥测
  • colofilter.css核心技术详解:luminosity、hue、hard-light等mix-blend-mode混合模式完全解析
  • InternVL3.5-4B架构深潜:InternViT+Qwen3的ViT-MLP-LLM多模态范式逐层拆解
  • 2026毕业避坑[特殊字符]别乱买论文工具!这一个免费全能款就够了
  • 微信4.0改名weixin.dll导致补丁失效?3步用RevokeMsgPatcher找回防撤回
  • 大型量产固件的工程实践(十一):健壮的网络状态机——链路监控与指数退避重连
  • django-csp 4.0破坏性变更迁移指南:一条manage.py check命令自动生成新配置
  • .well-known/graph-api 背后的玄机:fb-instant-articles 的 OAuth 令牌与 RSA 签名安全设计完全解析
  • AI 时代营销正在变天,很多企业还在沿用搜索时代的旧思路
  • 项目制GEO与在线订阅平台:从系统边界看两种实现方式
  • 别再盲目买国产手操器!弄懂这点,工业调试少走弯路
  • HoRain云--RSS 阅读器
  • 新能源车辆车型大全API:从品牌列表到车型配置
  • Java 基础|变量、数据类型、类型转换、表达式与运算符
  • [光学原理与应用-549]:用光量子的三重底层特征(粒子性、波动性、随机性)阐述线性光学特征和非线性光学特征,以及介质自身的特征如何影响光量子与介质的相互作用,以及展现出宏观特征。
  • 代码里实际能看到的路径 + 注释里的设计意图
  • Kimi苹果版导出表格的终极解法:当“AI导出鸭”重新定义效率边界
  • ChatGPT的LaTeX生成PDF文件复制后数学公式乱码,怎样修改?苹果用户的底层逻辑与优雅解法
  • 操作教程丨WorkBuddy 接入企业数据MCP流程与应用示例
  • 【超详细】搞懂tar、tgz、zip、rar、7z归档压缩格式,理清跨平台踩坑根源
  • MySQL基础语法解析及其在Python爬虫中的应用
  • 上线千舟报修云前后,迈得医疗工业设备股份有限公司后勤工作发生了什么?
  • Vllm LINUX部署Qwen3.8-27B多模态支持视频图片模型全流程(8张L20卡)
  • 地面站软件常用功能及页面介绍(一)
  • `import win32api`是Python调用Windows系统原生API的前置操作,依托pywin32模块可以实现各类Windows底层功能开发