You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pyTextRank summary方法limit_phrases最优值及长短文档参数选择咨询

优化SpaCy TextRank中limit_phrases参数的实用方案

问题背景

需要用SpaCy的TextRank pipeline同时处理长、短文档的摘要生成,当前通过句子数比例计算limit_phrases的方法仍有优化空间,希望找到更适配不同文档长度的参数选择方案。

当前实现方法

import spacy
import pytextrank

nlp = spacy.load(spacy_model)
nlp.add_pipe("textrank", last=True)

# 处理输入文本
doc = nlp(text)

doc_sentences = len(list(doc.sents))
print(f'文档句子数量 = {doc_sentences}')
limit_sentences = int(doc_sentences * percentage)
limit_phrases = int(limit_sentences * 2)

top_sentences = doc._.textrank.summary(limit_phrases=limit_phrases, limit_sentences=limit_sentences, preserve_order=True)

改进方案

1. 分档动态调整法(适配长短文档)

针对不同长度的文档设置差异化参数规则,避免短文档短语数量不足、长文档短语数量过载的问题:

import spacy
import pytextrank

nlp = spacy.load(spacy_model)
nlp.add_pipe("textrank", last=True)

doc = nlp(text)
doc_sentences = len(list(doc.sents))
percentage = 0.2  # 可根据需求调整摘要句子占比

# 分档定义参数
if doc_sentences <= 5:
    # 极短文档:固定摘要句子数,保证关键短语覆盖
    limit_sentences = min(2, doc_sentences)
    limit_phrases = 10
elif doc_sentences <= 20:
    # 短文档:适度提高短语比例,捕捉更多核心信息
    limit_sentences = max(3, int(doc_sentences * percentage))
    limit_phrases = int(limit_sentences * 2.5)
else:
    # 长文档:限制短语数量上限,平衡计算效率与摘要质量
    limit_sentences = int(doc_sentences * percentage)
    limit_phrases = min(int(limit_sentences * 2), 50)  # 上限设为50,可按需调整

top_sentences = doc._.textrank.summary(limit_phrases=limit_phrases, limit_sentences=limit_sentences, preserve_order=True)

2. 基于短语权重的自适应过滤法

不依赖固定比例,而是根据短语的实际重要性(TextRank评分)筛选有效短语,更精准匹配文档核心信息:

import spacy
import pytextrank

nlp = spacy.load(spacy_model)
nlp.add_pipe("textrank", last=True)

doc = nlp(text)
doc_sentences = len(list(doc.sents))
percentage = 0.2
limit_sentences = max(1, int(doc_sentences * percentage))

# 获取所有短语并按权重降序排序
phrases = sorted(doc._.textrank.phrases, key=lambda x: x.rank, reverse=True)
# 过滤低权重短语(阈值可根据实际效果调整)
min_rank_threshold = 0.03
filtered_phrases = [p for p in phrases if p.rank >= min_rank_threshold]
# 取过滤后的短语,同时结合摘要句子数限制数量
limit_phrases = min(len(filtered_phrases), limit_sentences * 3)

top_sentences = doc._.textrank.summary(limit_phrases=limit_phrases, limit_sentences=limit_sentences, preserve_order=True)

3. 经验基准值+动态增量法

设置基础短语数量,再根据文档长度动态增加,兼顾通用性与灵活性:

import spacy
import pytextrank

nlp = spacy.load(spacy_model)
nlp.add_pipe("textrank", last=True)

doc = nlp(text)
doc_sentences = len(list(doc.sents))
percentage = 0.2
limit_sentences = max(1, int(doc_sentences * percentage))

# 基础短语数+按句子数增量调整,同时限制上限
base_phrases = 8
additional_phrases = min(int(doc_sentences / 5), 42)  # 每5句加1个短语,最多加42个
limit_phrases = base_phrases + additional_phrases

top_sentences = doc._.textrank.summary(limit_phrases=limit_phrases, limit_sentences=limit_sentences, preserve_order=True)

方案选择建议

  • 若追求简单易维护,优先选择分档动态调整法;
  • 若对摘要精准度要求高,推荐基于短语权重的自适应过滤法;
  • 若需要快速适配多数场景,可采用经验基准值+动态增量法。

内容的提问来源于stack exchange,提问作者Ire00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:35:00