技术博客
中文文本相似度检测接口批量匹配:单文本 vs 候选库如何定位最相似项

中文文本相似度检测接口批量匹配:单文本 vs 候选库如何定位最相似项

作者: 万维易源
2026-09-01
批量检测最相似匹配接入点2
# 中文文本相似度检测接口批量匹配:单文本 vs 候选库如何定位最相似项 > 元信息:接口/接入点 批量检测接口(294/2)· 免费 · 请求方式 POST/GET · 返回格式 JSON · 适用人群 开发者、算法/数据工程师 · 阅读时间 约 7 分钟 ## 核心要点 - 接入点 2(294/2)是**同步批量**:一次请求传 1 个 `t1` 与一组候选 `t2` 数组,返回**最匹配项的数组下标 `mostLike`** 与相似度 `likeValue`。 - 与接入点 1 不同,接入点 2 不返回 `like`,而是 `likeValue`;`mostLike` 是下标不是分值。 - 它是单次请求内的同步匹配,并非"提交任务 + 异步回调"的批量订阅模型。 ## Why:什么时候用批量而不是两两比 当你要把"一条新内容"去和"一个候选库"找最像的那条(标问匹配、知识库查重、意图归类),如果每两条调一次接入点 1,调用次数是 N;用接入点 2 一次请求就能拿到最匹配项,调用次数降到 1,既省额度又省延迟。 ## What:批量接口速览 | 项 | 说明 | |----|------| | 接口地址 | `https://route.showapi.com/294-2?appKey={your_appKey}` | | 接入点说明 | 目前暂不支持英文及数字的相似度检测 | | 必填参数 | `t1`(String,第 1 个文本)、`t2`(**数组**,候选文本列表) | | 返回字段 | `mostLike`(最匹配下标)、`likeValue`(相似度)、`ret_code` | | 单文本上限 | 最大 2M 字节 | ## How:一次定位最相似项 ### 步骤 1:准备候选数组 `t2` 传 JSON 数组字符串,例如 `['这是测试文本','天天向上']`。下标从 0 开始,`mostLike` 即最匹配项在数组中的位置。 ### 步骤 2:调用并解析 **Python** ```python import requests, json def batch_most_similar(text, candidates): r = requests.post( "https://route.showapi.com/294-2", params={"appKey": "YOUR_APPKEY"}, data={"t1": text, "t2": json.dumps(candidates, ensure_ascii=False)}, timeout=10, ).json() b = r["showapi_res_body"] if b.get("ret_code") != 0: raise RuntimeError(r.get("showapi_res_error")) return b["mostLike"], b["likeValue"] cands = ["如何重置密码", "怎么修改绑定手机", "忘记登录密码怎么办"] idx, score = batch_most_similar("密码忘了怎么找回", cands) print("最匹配:", cands[idx], "相似度:", score) ``` **cURL** ```bash curl -X POST "https://route.showapi.com/294-2?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d 't1=密码忘了怎么找回&t2=["如何重置密码","怎么修改绑定手机","忘记登录密码怎么办"]' ``` **Node.js(fetch)** ```javascript const cands = ["如何重置密码", "怎么修改绑定手机", "忘记登录密码怎么办"]; const url = "https://route.showapi.com/294-2?appKey=YOUR_APPKEY"; const body = new URLSearchParams({ t1: "密码忘了怎么找回", t2: JSON.stringify(cands), }); fetch(url, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body, signal: AbortSignal.timeout(10000), }) .then((r) => r.json()) .then((res) => { const b = res.showapi_res_body; if (b.ret_code === 0) console.log("最匹配下标", b.mostLike, "相似度", b.likeValue); else console.error("失败", res.showapi_res_error); }) .catch((e) => console.error("请求异常", e)); ``` ## 返回示例与解析 ```json { "showapi_res_body": { "mostLike": 0, "ret_code": 0, "likeValue": 1 } } ``` - `mostLike: 0` → 候选数组第 0 项(`"如何重置密码"`)与 `t1` 最相似。 - `likeValue: 1` → 对应相似度满分。 > 字段完整定义见[《返回字段全解》](https://www.showapi.com/guides/text-similarity-response-fields-294)。 ## 进阶 / 边界 - **候选集别无限大**:虽然单文本上限 2M 字节,但候选数组越长,单次请求体越大、耗时越高。建议按业务维度裁剪候选集(同意图域、同频道)后再比。 - **只给最相似一项**:接口返回的是"最匹配的一个下标 + 其相似度",不会返回所有候选的排序列表。若要 Top-K,需要把候选分批或自行二次筛选。 - **同步模型**:一次 HTTP 请求内完成匹配并返回,没有回调/订阅;大批量请分批并发并遵守档位 QPS。 ## FAQ **Q1:mostLike 和 likeValue 分别是什么?** `mostLike` 是最匹配文本在 `t2` 数组中的**下标**;`likeValue` 是 `t1` 与该最匹配项的相似度(0~1)。 **Q2:批量接口是异步的吗?有回调吗?** 不是异步。接入点 2 是同步请求-响应:一次请求传 t1 与 t2 数组,立即返回最匹配下标与相似度,无订阅推送/回调。 **Q3:能返回所有候选的相似度排序吗?** 不能。接口只返回最匹配的一项(mostLike + likeValue)。需要 Top-K 排序时,需分批或自行处理候选集。 **Q4:t2 数组最大能放多少条?** 文档规定单文本最大 2M 字节(适用于 t1、t2 整体请求体级别),未给出数组条数硬上限;实践中建议控制候选集规模以获得稳定时延。 ## 下一步阅读 - [中文文本相似度检测接口返回字段全解:like / likeValue / mostLike / ret_code 一文读懂](https://www.showapi.com/guides/text-similarity-response-fields-294) - [中文文本相似度检测接口实战:UGC 评论 / 文章去重从采集到判重的全链路设计](https://www.showapi.com/guides/text-similarity-dedup-294) - [免费档位下如何设计缓存节省调用?L0~L4 档位与 QPS 限制下的优化](https://www.showapi.com/guides/text-similarity-cache-cost-294) - **本系列共 12 篇**:查看[中文文本相似度检测接口指南总目录](https://www.showapi.com/guides/text-similarity-guides-294)