文本关键词抽取:TextRank 算法原理与 num 参数调优
# 文本关键词抽取:TextRank 算法原理与 num 参数调优
- **接口 / 接入点**:文本关键词抽取(apiCode 941)· 接入点 `941-1`
- **是否免费**:是 | **请求方式**:POST / GET | **返回格式**:JSON
- **适用人群**:中高级开发者、对算法好奇的工程师
- **阅读时间**:约 9 分钟
## 核心要点
- TextRank 把「词」当图节点,靠共现关系反复投票,重要的词被更多重要词指向。
- `num` 决定返回关键词个数;长文可增大,但靠后词相关性通常更低。
- 调用前做停用词清理与长文切片,能提升关键词质量。
## Why:别把接口当黑盒
知道关键词「为什么」被抽出来,你才能调好 `num`、写好预处理,并在结果不理想时知道改哪。本文用大白话讲清 TextRank,并给出可调优点。
## What:TextRank 一句话原理
把正文分词后得到一系列候选词,构建一张「词共现图」:两个词在滑动窗口内相邻,就连一条边。然后像 PageRank 一样迭代投票——被很多词(尤其重要词)指向的词,得分更高,最终得分高的词就是关键词。
```
词 A ──共现──> 词 B
词 B ──共现──> 词 C
词 C ──共现──> 词 A (形成互相推荐的「重要词圈」)
```
所以它不是简单数频率,而是看「谁被重要的词提到」,这正是 TextRank 比纯词频更稳的原因。
## How:num 与预处理调优
### 步骤 1 · 调 num
`num` 控制返回个数(默认 10)。短文本取小、长文本取大:
```python
import requests
def kw(text, appkey, num=10):
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", {})
return body.get("list", []) if str(body.get("ret_code")) == "0" else []
```
### 步骤 2 · 调用前清理停用词(提升质量)
```python
STOP = {"的","了","是","在","和","也","我","你","他","就","都","很","与","及"}
def clean_words(text):
# 简化:实际用分词库(jieba 等)效果更好
return "".join(ch for ch in text if ch not in STOP)
```
### 步骤 3 · 长文切片
超长正文按段落切片分别抽取再合并去重,降低单段噪声:
```python
def kw_long(text, appkey, num=10, limit=500):
parts = [text[i:i+limit] for i in range(0, len(text), limit)]
out = []
for p in parts:
out += kw(p, appkey, num)
# 去重保序
seen, res = set(), []
for w in out:
if w not in seen:
seen.add(w); res.append(w)
return res[:num]
```
## 返回示例与解析
返回 `list` 即按重要性排序的关键词数组;靠前词权重更高、更代表主题。
## 进阶 / 边界
- `num` 越大,覆盖越广但尾部词越可能是噪声,生产建议取前 5~10 个高质量词。
- 停用词前置是锦上添花,接口内部已做词频处理;是否做取决于你的文本质量。
- 切片注意:窗口过小会割裂语义,建议按自然段落而不是硬字符数切。
## FAQ
**Q1:TextRank 和纯词频有什么区别?**
A1:纯词频只看出现次数;TextRank 还看词与词的关系,被重要词共现的词得分更高,更能反映主题。
**Q2:num 最大能传多少?**
A2:文档未给出上限数值,默认 10。按业务需要取,过大意义有限;具体以官方档位/说明为准。
**Q3:为什么有时抽出的词不像关键词?**
A3:可能是短文本、噪声大或未去停用词;尝试清理停用词、长文切片,或调大 num 后取头部。
**Q4:接口内部用的就是 TextRank 吗?**
A4:官方描述为本接口运用 TextRank 词频算法,具体实现以官方为准;本文原理用于帮助理解与调参。
**Q5:num 调大后顺序会变吗?**
A5:通常头部稳定、尾部变化更明显;关键主题词一般靠前,不受 num 小幅波动影响。
## 相关能力 / 下一步阅读
- [文本关键词抽取:新闻摘要与热点提取实战](https://www.showapi.com/guides/text-keyword-news-summary-941) —— 调好 num 直接用于生产
- [文本关键词抽取:5 分钟快速接入指南(Python / cURL / JS)](https://www.showapi.com/guides/text-keyword-quickstart-941) —— 先跑通再调参
- **本系列共 10 篇**:查看[文本关键词抽取指南总目录](https://www.showapi.com/guides/text-keyword-guides-941)