# 文本关键词抽取:批量文本处理与并发调用建议
- **接口 / 接入点**:文本关键词抽取(apiCode 941)· 接入点 `941-1`
- **是否免费**:是(有使用档次限制)| **请求方式**:POST / GET | **返回格式**:JSON
- **适用人群**:中大型平台工程师、数据处理
- **阅读时间**:约 9 分钟
## 核心要点
- 本接口**无原生批量**:单文本单次调用,文档未提供批量订阅 / 回调。
- 小批量直接循环;大批量走消息队列削峰 + 异步写结果。
- 务必配合缓存(见[缓存与限流策略](https://www.showapi.com/guides/text-keyword-cache-cost-941))与退避重试。
## Why:大批量不能硬刷
要处理十万条评论、上万篇文章时,直接并发猛调会撞上使用档次限制,甚至被限流。本文给出「循环 / 队列」两种务实替代方案——注意:这是基于本接口能力的现实方案,不是接口自带批量。
## What:能力边界(先说清)
| 能力 | 本接口是否支持 | 说明 |
|------|------|------|
| 原生批量查询 | ❌ 不支持 | 单文本单次调用 |
| 订阅推送 / 回调 | ❌ 不支持 | 同步请求-响应 |
| 并发调用 | ✅ 可自实现 | 受档位限流约束 |
> 文档仅提供 MCP 与 OpenAPI 集成能力,未提及批量或订阅,故批量需自行编排。
## How:两种方案
### 方案 A · 小批量直接循环(带并发上限)
```python
import requests, hashlib, redis, time
from concurrent.futures import ThreadPoolExecutor
rds = redis.Redis(host="localhost", port=6379, db=0)
def one(text, appkey, num=10):
key = "kw:" + hashlib.md5(text.encode()).hexdigest()
c = rds.get(key)
if c: return c.decode().split("\n")
try:
r = requests.post("https://route.showapi.com/941-1",
data={"appKey": appkey, "text": text, "num": str(num)}, timeout=10)
body = r.json().get("showapi_res_body", {})
if str(body.get("ret_code")) == "0":
kws = body.get("list", [])
rds.set(key, "\n".join(kws), ex=86400*7)
return kws
except requests.exceptions.RequestException:
time.sleep(1)
return []
def batch(texts, appkey, workers=4):
with ThreadPoolExecutor(max_workers=workers) as ex:
return list(ex.map(lambda t: one(t, appkey), texts))
```
### 方案 B · 大批量走消息队列削峰
```
[文本源] -> [MQ: keyword_jobs] -> [Worker 池,每 worker 带令牌桶限流] -> [抽取 -> 写 DB/缓存]
|-> 失败消息回队,指数退避重试
```
要点:Worker 并发数受档位限制约束;用令牌桶控制 QPS;失败消息回队重试,避免丢数据。
## 返回示例与解析
每条文本返回 `list` 关键词数组,批量结果按原顺序收集即可。
## 进阶 / 边界
- 并发数:文档未给限流具体数值,以官方档位为准;建议从小并发起步压测,逐步上调。
- 幂等:以正文哈希为键,重复入队也只调一次(缓存兜底)。
- 失败处理:网络/限流失败必须重试,别静默丢弃。
## FAQ
**Q1:接口有批量接口吗?**
A1:没有。文档只列单接入点 `941-1` 的同步调用,未提供批量订阅或批量入参;批量需自行循环或队列编排。
**Q2:能不能一次传多段文本?**
A2:不能,参数 `text` 为单段文字。多段需逐条调用(或队列分发)。
**Q3:并发开多大合适?**
A3:取决于你的使用档位。文档未给具体阈值,建议先小并发压测,观察限流再上调;同时做缓存减少总量。
**Q4:失败了数据会丢吗?**
A4:若用队列方案,失败消息回队重试即可不丢;纯循环方案需自行记录失败项重试。
**Q5:和缓存篇怎么配合?**
A5:本篇负责「怎么编排批量」,缓存篇负责「相同文本只调一次」,二者必须一起用才省档位。
## 相关能力 / 下一步阅读
- [文本关键词抽取:免费接口下的缓存与限流策略(节省调用档位)](https://www.showapi.com/guides/text-keyword-cache-cost-941) —— 批量前必看
- [文本关键词抽取:通过 MCP 在 Cherry Studio / ChatBox 中直接调用](https://www.showapi.com/guides/text-keyword-mcp-941) —— 轻量调用另选 MCP
- **本系列共 10 篇**:查看[文本关键词抽取指南总目录](https://www.showapi.com/guides/text-keyword-guides-941)