提取文字摘要写出算法的伪码和源码
算法:TextRank算法
伪码:
- 定义函数TextRank(text):
- 将文本text进行分词,去除停用词,得到词列表words
- 构建词图,将每个词作为节点,词与词之间的共现作为边,得到图G
- 初始化节点权重,将每个节点的权重设置为1
- 迭代计算节点权重,重复执行以下步骤n次或直到收敛:
- 对于每个节点i,计算其新的权重score_i: score_i = (1 - d) + d * sum(w_ij * score_j / sum(w_j)),其中d为阻尼系数(一般取0.85),w_ij为节点i和节点j之间的边的权重,sum(w_j)为节点j的所有出边的权重之和
- 对于每个节点i,更新其权重为新的权重score_i
- 对节点权重进行排序,得到关键词列表topK
- 返回topK作为文本的摘要
源码:
- 导入所需的库
import jieba
import jieba.analyse
import numpy as np
- 定义函数TextRank
def TextRank(text, topK=5, withWeight=False):
# 分词
words = [w for w in jieba.cut(text) if w not in stop_words]
# 构建词图
graph = np.zeros((len(words), len(words)))
for i, word1 in enumerate(words):
for j, word2 in enumerate(words):
if i != j:
graph[i][j] = graph[j][i] = words.count(word1 + word2)
# 初始化节点权重
weights = np.ones(len(words))
# 迭代计算节点权重
d = 0.85
for _ in range(10):
for i, _ in enumerate(words):
weights[i] = (1 - d) + d * sum([graph[i][j] / sum(graph[j]) * weights[j] for j in range(len(words))])
# 排序并返回topK
if withWeight:
return [(words[i], weights[i]) for i in weights.argsort()[::-1][:topK]]
else:
return [words[i] for i in weights.argsort()[::-1][:topK]]
- 调用TextRank函数
text = "这是一段文本,包含一些关键词。这些关键词可以用来生成摘要。"
stop_words = [] # 停用词表,可自行添加
keywords = TextRank(text, topK=5)
print(keywords)
原文地址: https://www.cveoy.top/t/topic/bYQt 著作权归作者所有。请勿转载和采集!