mcpField
T
text-summarizer

text-summarizer

github.com/dkyazzentwatwa文档处理124693 次安装29 周前更新
代码仓库

关于 text-summarizer

text-summarizer 是一款用于文档抽取式摘要的 Python 工具和命令行工具。它提供多种算法,并支持控制摘要长度、提取要点及批量处理。

主要功能

  1. 01抽取式摘要
  2. 02TextRank、LSA 和词频算法
  3. 03按比例、句数或词数控制长度
  4. 04提取要点
  5. 05批量处理文本和文件

适用场景

  1. 01按指定句数浓缩新闻文章
  2. 02为研究论文生成摘要长度的内容
  3. 03从会议记录中提取要点

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dkyazzentwatwa/chatgpt-skills --skill text-summarizer

安装后在 Claude Code 中输入/text-summarizer确认已加载。

附带文件scripts/requirements.txtscripts/text_summarizer.py

详细介绍

文本摘要器

使用抽取式摘要从长篇文档中生成简洁摘要。识别并提取最重要的句子,同时保留原意。

快速入门

from scripts.text_summarizer import TextSummarizer

# Summarize text
summarizer = TextSummarizer()
summary = summarizer.summarize(long_text, ratio=0.2)  # 20% of original
print(summary)

# Summarize file
summary = summarizer.summarize_file("article.txt", num_sentences=5)

功能

  • 抽取式摘要:从原文中选取关键句子
  • 长度控制:可按比例、句子数量或词数控制
  • 多种算法:TextRank、LSA、基于词频的算法
  • 要点:提取项目符号形式的摘要
  • 批量处理:为多个文档生成摘要
  • 保留结构:提供保持句子顺序的选项

API 参考

初始化
summarizer = TextSummarizer(
    method="textrank",    # textrank, lsa, frequency
    language="english"
)
摘要生成
# By ratio (20% of original length)
summary = summarizer.summarize(text, ratio=0.2)

# By sentence count
summary = summarizer.summarize(text, num_sentences=5)

# By word count
summary = summarizer.summarize(text, max_words=100)
要点提取
# Get bullet points
points = summarizer.extract_key_points(text, num_points=5)
for point in points:
    print(f"• {point}")
批量处理
# Summarize multiple texts
texts = [text1, text2, text3]
summaries = summarizer.summarize_batch(texts, ratio=0.2)

# Summarize files in directory
summaries = summarizer.summarize_directory("./articles/", ratio=0.3)
选项
# Preserve original sentence order
summary = summarizer.summarize(text, preserve_order=True)

# Include title/first sentence
summary = summarizer.summarize(text, include_first=True)

# Minimum sentence length filter
summarizer.min_sentence_length = 10

CLI 用法

# Summarize text file
python text_summarizer.py --input article.txt --ratio 0.2

# Specific sentence count
python text_summarizer.py --input article.txt --sentences 5

# Extract key points
python text_summarizer.py --input article.txt --points 5

# Batch process
python text_summarizer.py --input-dir ./docs --output-dir ./summaries --ratio 0.3

# Output to file
python text_summarizer.py --input article.txt --output summary.txt --ratio 0.2
CLI 参数
参数描述默认值
--input输入文件路径必填
--output输出文件路径stdout
--input-dir文件所在目录-
--output-dir输出目录-
--ratio摘要比例(0.0-1.0)0.2
--sentences句子数量-
--words最大词数-
--points提取 N 个要点-
--method要使用的算法textrank
--preserve-order保持句子顺序False

示例

新闻文章摘要
summarizer = TextSummarizer()

article = """
[Long news article text...]
"""

# Get a 3-sentence summary
summary = summarizer.summarize(article, num_sentences=3)
print("Summary:")
print(summary)

# Get key points
points = summarizer.extract_key_points(article, num_points=5)
print("\nKey Points:")
for i, point in enumerate(points, 1):
    print(f"{i}. {point}")
研究论文摘要
summarizer = TextSummarizer(method="lsa")

paper = open("research_paper.txt").read()

# Create abstract-length summary
abstract = summarizer.summarize(paper, max_words=250)
print(abstract)
会议记录摘要
summarizer = TextSummarizer()

notes = """
Meeting started at 2pm. John presented Q3 results showing 15% growth.
Sarah raised concerns about supply chain delays affecting Q4 projections.
The team discussed mitigation strategies including dual-sourcing.
Budget allocation for marketing was approved at $50k.
Next steps include vendor outreach by Friday.
Follow-up meeting scheduled for next Tuesday.
"""

summary = summarizer.summarize(notes, num_sentences=3)
points = summarizer.extract_key_points(notes, num_points=4)

print("Summary:", summary)
print("\nAction Items:")
for point in points:
    print(f"• {point}")
批量文档摘要
summarizer = TextSummarizer()

import os
for filename in os.listdir("./documents"):
    if filename.endswith(".txt"):
        text = open(f"./documents/{filename}").read()
        summary = summarizer.summarize(text, ratio=0.2)

        with open(f"./summaries/{filename}", "w") as f:
            f.write(summary)

        print(f"Summarized: {filename}")

算法对比

算法速度质量最适用场景
TextRank中等高通用文本
LSA快良好技术文档
Frequency快中等快速生成摘要

依赖项

nltk>=3.8.0
numpy>=1.24.0
scikit-learn>=1.2.0

局限性

  • 仅支持抽取式摘要(不会改写或生成新文本)
  • 最适用于结构清晰的文本(段落和明确的句子)
  • 过短的文本可能无法生成良好摘要
  • 无法深入理解上下文(可能会遗漏细微差别)

评论

支持 Markdown