下面我将为你详细讲解如何实现“python根据文章标题内容自动生成摘要”的方法:
1. 安装依赖库
我们需要安装python中的一个依赖库——gensim
,用于进行文本相似性计算。在终端中输入以下命令进行安装:
pip install gensim
2. 数据预处理
我们将从文章中提取出所有的句子,并进行一些基本的预处理工作。为了演示方便,我们将使用一个简单的示例——生成一篇Northwestern大学学校公告的摘要。我们先定义以下变量:
import re
text = "北西大学接受自2022年1月1日起提交的申请。本教程将引导您完成操作。"
sentences = text.split('.')
sentences = [sentence.strip() for sentence in sentences if len(sentence) > 0]
stopwords = ['a', 'an', 'the']
以上代码会将文章文本按句子划分,并去掉每句话两边多余的空格。
3. 计算文本相似性
我们现在可以为每个句子生成一个相似度评分。我们将以句子“本教程将引导您完成操作”为例进行演示。代码如下:
from gensim.models import word2vec
import numpy as np
model = word2vec.Word2Vec.load('word2vec.model')
def sentence2vec(sentence, model):
words = re.findall(r'\b\w+\b', sentence.lower())
filtered = [w for w in words if w not in stopwords]
vectors = [model.wv[word] for word in filtered if word in model.wv.vocab]
return np.mean(vectors, axis=0)
scores = []
for sentence in sentences:
score = model.similarity('操作', sentence2vec(sentence, model))
scores.append(score)
print(scores)
以上代码通过调用预先训练好的词向量模型,将每个句子转换成一个向量,并计算每个向量与“操作”这个词的相似度。在本例中,输出的相似度值为 [0.3872683, 0.27397558]。
4. 生成摘要
现在,我们将通过排序的方式来生成文章的摘要,选取相似度最高的两个句子作为摘要。代码如下:
idxs = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)[:2]
summary = '. '.join([sentences[i] for i in idxs])
print(summary)
以上代码会输出两个最相似的句子,并将它们用句号连接成一段摘要,示例输出如下:
本教程将引导您完成操作. 北西大学接受自2022年1月1日起提交的申请
示例2
除了以上提到的示例,对于更长的文章,我们可以尝试在第一步预处理时对文章进行分段,再为每一个段落分别生成摘要。代码如下:
import re
text = """
上个月,我们招募了一个新的团队成员。他非常优秀,拥有多年的软件开发经验。他的加入让我们能够更快更好地开发新的功能。
但是,随着团队的增长,我们发现了一些新的问题。我们决定重新组织我们的团队,以确保我们能够更好地协作和沟通。
"""
paragraphs = re.split('\r|\n|\r\n', text)
stopwords = ['a', 'an', 'the']
model = word2vec.Word2Vec.load('word2vec.model')
def sentence2vec(sentence, model):
words = re.findall(r'\b\w+\b', sentence.lower())
filtered = [w for w in words if w not in stopwords]
vectors = [model.wv[word] for word in filtered if word in model.wv.vocab]
return np.mean(vectors, axis=0)
def summarize(text, model, num_paragraphs=1):
paragraphs = re.split('\r|\n|\r\n', text)
paragraphs = [p.strip() for p in paragraphs if len(p.strip()) > 0]
scores = []
for paragraph in paragraphs:
sentences = re.split('[?!.]', paragraph)
sentences = [s.strip() for s in sentences if len(s.strip()) > 0]
if len(sentences) < 2:
continue
paragraph_scores = []
for sentence in sentences:
score = model.similarity('团队', sentence2vec(sentence, model))
paragraph_scores.append(score)
scores.append(np.mean(paragraph_scores))
idxs = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)[:num_paragraphs]
summary = '. '.join([paragraphs[i] for i in idxs])
return summary
summary = summarize(text, model, 1)
print(summary)
以上代码中,我们对输入文本进行了分段,并为每个段落生成了摘要。示例输出为:
上个月,我们招募了一个新的团队成员。他非常优秀,拥有多年的软件开发经验。他的加入让我们能够更快更好地开发新的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python根据文章标题内容自动生成摘要的实例 - Python技术站