免费中文分词(文本处理):中文搜索/站内检索场景——用索引分词 + 关键词构建倒排索引
免费中文分词文本处理中文NLPAPI教程ShowAPI # 免费中文分词(文本处理):中文搜索/站内检索场景——用索引分词 + 关键词构建倒排索引
> 接口:中文分词(2663-1, type=index) / 关键词抽取(2663-6)|是否免费:是(含档位限制)|适用人群:搜索/检索系统开发者|阅读时间:约 7 分钟
## 核心要点
- 建中文搜索引擎,第一步是把文档切成词项(term),这一步用中文分词的 `index` 类型最合适(细粒度、利于召回)。
- 把「文档 → 词项」映射反转,就得到倒排索引(词项 → 出现过的文档 id 列表)。
- 关键词抽取(2663-6)可额外作为文档的「标签词」,辅助排序与高亮。
## Why
中文没有空格分词,直接拿整句去匹配会漏掉大量结果。搜索引擎的标准做法:先分词、再建倒排索引。ShowAPI 的 `index` 分词类型就是为这种场景设计的——你喂文档、拿词项,自己维护一张「词→文档」的表,查询时同样分词再去表里查,召回率和速度都上来。中小站内搜索、帮助中心检索,用这套免费接口就能起步。
## What
**接口速览**
| 接入点 | 路径 | 用途 |
|------|------|------|
| 索引分词 | 2663-1(`type=index`) | 把文档切成细粒度词项 |
| 关键词抽取 | 2663-6 | 抽文档标签词,辅助排序 |
## How
建索引 + 查询的最小实现:
```python
import requests
APPKEY = "YOUR_APPKEY"
def seg_index(text):
resp = requests.post("https://route.showapi.com/2663-1",
params={"appKey": APPKEY},
data={"text": text, "type": "index"}, timeout=10).json()
body = resp["showapi_res_body"]
if body.get("ret_code") != 0:
raise RuntimeError(body.get("remark"))
return [w["word"] for w in body.get("words", [])]
# 建倒排索引
docs = {
1: "北京大学创立于1898年",
2: "复旦大学位于上海",
}
inverted = {}
for doc_id, text in docs.items():
for term in seg_index(text):
inverted.setdefault(term, []).append(doc_id)
# 查询:同样用 index 分词,再去索引查
query = seg_index("北京大学")
hits = set()
for term in query:
hits.update(inverted.get(term, []))
print("命中文档:", hits) # {1}
```
> 注意:默认免费档位下 `words` 可能为空,建索引前先确认账号额度(见 [免费档位与调用策略](https://www.showapi.com/guides/cnseg-free-tier-2663))。
## 返回示例与解析
索引分词(2663-1, `type=index`)示例:
```json
{
"showapi_res_body": {
"ret_code": 0,
"remark": "成功",
"words": [ { "word": "北京" }, { "word": "大学" }, { "word": "创立" } ]
}
}
```
- 细粒度切分让「北京大学」拆成「北京 / 大学」,查询「北京」也能命中。
- 倒排索引就是把每个词项指向包含它的文档集合。
## 进阶 / 边界
- **建索引与查询用同一种 `type`**:检索系统的写入分词和查询分词必须一致(都用 `index`),否则词项对不齐、召回错乱。
- **去重与归一**:建索引前对词项做去停用词、小写/简繁归一,效果更佳(简繁转换见 [汉字转拼音与简繁转换实战](https://www.showapi.com/guides/cnseg-convert-2663))。
- **规模与档位**:文档量大时调用次数随之增长,注意免费档位额度;高吞吐需升级权益档。
## FAQ
**Q1:为什么用 index 而不是 standard?**
`index` 更细粒度,利于倒排索引召回;`standard` 偏通用,可能把专有名词整词保留而漏召回。
**Q2:建索引和查询的分词类型必须一致吗?**
必须一致,否则词项空间不同,查询命中会出错。
**Q3:倒排索引存在哪?**
由你自己维护(内存字典/Redis/ES 等),接口只负责分词。
**Q4:免费档返回空 words 影响建索引吗?**
会,空结果导致索引缺失;先解决额度问题。
**Q5:关键词抽取能替代分词建索引吗?**
不能,关键词是少量标签词,适合排序/高亮,建索引仍需全文分词。
## 相关能力 / 下一步阅读
- [免费中文分词(文本处理):6 种分词类型怎么选?](https://www.showapi.com/guides/cnseg-types-2663)
- [免费中文分词(文本处理):自动提取文章关键词与摘要](https://www.showapi.com/guides/cnseg-keywords-summary-2663)
- [免费中文分词(文本处理):免费档位到底能调多少?](https://www.showapi.com/guides/cnseg-free-tier-2663)
> 本系列共 14 篇:查看[免费中文分词(文本处理)API 指南总目录](https://www.showapi.com/guides/cnseg-guides-2663)