本文目录导读:

我来介绍几种用脚本生成摘要的方法,从简单到复杂:
Python + NLTK(最常用)
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import sent_tokenize, word_tokenize
import heapq
def generate_summary(text, num_sentences=3):
# 文本预处理
sentences = sent_tokenize(text)
# 去除停用词
stop_words = set(stopwords.words('english'))
# 计算词频
word_frequencies = {}
for word in word_tokenize(text.lower()):
if word not in stop_words and word.isalnum():
if word not in word_frequencies:
word_frequencies[word] = 1
else:
word_frequencies[word] += 1
# 计算句子权重
sentence_scores = {}
for sent in sentences:
for word in word_tokenize(sent.lower()):
if word in word_frequencies:
if len(sent.split(' ')) < 30: # 忽略过长句子
if sent not in sentence_scores:
sentence_scores[sent] = word_frequencies[word]
else:
sentence_scores[sent] += word_frequencies[word]
# 选取权重最高的句子
summary = heapq.nlargest(num_sentences, sentence_scores, key=sentence_scores.get)
return ' '.join(summary)
# 使用示例
text = "这里输入你的文本..."
summary = generate_summary(text, 3)
print(summary)
使用TextRank算法(更智能)
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import networkx as nx
def textrank_summarize(text, num_sentences=3):
# 分割句子
sentences = text.split('. ')
# 计算TF-IDF向量
vectorizer = TfidfVectorizer(stop_words='english')
vectors = vectorizer.fit_transform(sentences)
# 计算句子间相似度
similarity_matrix = cosine_similarity(vectors)
# 构建图并应用PageRank
graph = nx.from_numpy_array(similarity_matrix)
scores = nx.pagerank(graph)
# 选取排名最高的句子
ranked = sorted(((scores[i], i) for i in range(len(sentences))),
reverse=True)[:num_sentences]
summary = []
for _, idx in sorted(ranked, key=lambda x: x[1]):
summary.append(sentences[idx])
return '. '.join(summary)
中文文本摘要(适合中文)
import jieba
import re
from collections import Counter
def chinese_summary(text, num_sentences=3):
# 中文分句
sentences = re.split('[!?。;]', text)
# 分词并统计词频
words = []
for sent in sentences:
words.extend(jieba.lcut(sent))
# 过滤停用词
stop_words = set(['的', '了', '在', '是', '我', '有'])
word_freq = Counter(word for word in words if word not in stop_words)
# 计算句子得分
sentence_scores = {}
for sent in sentences:
score = sum(word_freq[word] for word in jieba.lcut(sent)
if word in word_freq)
sentence_scores[sent] = score
# 排序并选取
ranked = sorted(sentence_scores.items(), key=lambda x: x[1], reverse=True)
summary = [sent for sent, _ in ranked[:num_sentences]]
return '。'.join(summary)
使用Transformers(最先进)
from transformers import pipeline
def transformer_summary(text):
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
summary = summarizer(text, max_length=150, min_length=30)
return summary[0]['summary_text']
# 中文模型
def chinese_transformer_summary(text):
summarizer = pipeline("summarization", model="mthorse/bart-large-chinese")
summary = summarizer(text, max_length=150, min_length=30)
return summary[0]['summary_text']
命令行工具(简单快速)
#!/usr/bin/env python3
import argparse
import sys
def main():
parser = argparse.ArgumentParser(description='Generate text summary')
parser.add_argument('-f', '--file', help='Input file')
parser.add_argument('-s', '--sentences', type=int, default=3,
help='Number of sentences in summary')
parser.add_argument('text', nargs='*', help='Text to summarize')
args = parser.parse_args()
if args.file:
with open(args.file, 'r') as f:
text = f.read()
else:
text = ' '.join(args.text)
# 调用摘要函数
summary = generate_summary(text, args.sentences) # 使用第一个方法
print(summary)
if __name__ == "__main__":
main()
使用命令行调用(无需写代码)
# 安装工具 pip install sumy # 使用命令行 sumy text-rank --length=3 your_file.txt # 或者使用lex-rank算法 sumy lex-rank --length=3 your_file.txt
使用建议:
- 快速测试:用NLTK方法
- :用jieba分词版本
- 高质量结果:用Transformers
- 大规模处理:用TextRank或TF-IDF
- 实时需求:用pipeline API
安装依赖:
pip install nltk scikit-learn networkx jieba transformers torch
选择哪种方法取决于你的需求:如果你是简单的测试,方法1就够了;如果是专业应用,建议用Transformers或TextRank。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播