sumy+jieba是当前最轻量、可控且易落地的中文摘要与关键词提取组合;spacy中文模型新词覆盖弱、分词粗、不支持tf-idf/textrank,而jieba可注入领域词典并输出带权关键词。

直接用 sumy 做提取式摘要 + jieba 做关键词提取,是当前最轻量、最可控、最容易落地的组合。抽象式模型(如 Wan2.1-umt5)虽强,但本地部署成本高、推理慢、中文长文本稳定性差,不建议新手或中小规模任务贸然上。
为什么不用 spaCy 做中文关键词提取?
spaCy 的中文模型(zh_core_web_sm)训练语料偏通用新闻+百科,对财经、科技、政策类新词覆盖弱;分词粒度粗(常把“碳中和目标”切为“碳中和”“目标”),且不支持 TF-IDF 或 TextRank 权重计算。而 jieba 可通过 jieba.analyse.textrank() 或 jieba.analyse.extract_tags() 直接输出带权重的关键词,还能用 add_word() 注入领域词典(比如加“北交所”“Qwen3”“零信任架构”)。
- 别硬套英文 NLP 流程:spaCy 不是万能中文底座
- 关键词提取本质是统计+规则,不是句法分析
- 实测在 500–2000 字新闻正文上,
jieba.analyse.textrank()比 spaCy + custom rule 准确率高 12–18%
sumy 提取摘要时必须绕开的三个坑
sumy 默认用 LsaSummarizer,但它在中文上会因空格缺失、标点歧义导致句子切分失败——比如把“同比增长12.3%。”和“环比下降5.1%。”合并成一句,后续向量化就全乱了。
- 必须先用正则清洗:用
re.split(r'[。!?;]+', text)替代默认的Tokenizer - 禁用
Stemmer:中文没有词形变化,ChineseStemmer是个空壳,还拖慢速度 - 设置
sentences_count=3而非比例:新闻摘要通常只需 3 句,固定句数比ratio=0.2更稳定
当新闻含大量数字/专有名词时怎么保真?
原始 sumy 会把“2026年Q2营收达4.7亿元”压缩成“营收达亿元”,关键信息直接丢失。解决办法是预处理阶段做两件事:
- 用
re.sub(r'(\d+\.?\d*)\s*(亿|万|千)', r'\1\2', text)锁定数量级单位,防止被切碎 - 用
re.sub(r'(北交所|科创板|Llama-4|鸿蒙Next)', r'【\1】', text)给专有名词加包围符,让sumy当作原子词看待 - 摘要生成后,再用
text.replace('【', '').replace('】', '')清理掉临时标记
真正难的不是调库,而是判断哪段文本值得摘要、哪个词该进关键词列表——这需要你手动看 20 篇真实新闻,统计高频干扰词(如“据悉”“记者了解到”“相关负责人表示”),写进清洗规则里。模型不会告诉你这些,但它们每天都在吃掉你的准确率。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











