数据挖掘——自动摘要
摘要:是全面准确地反应某一文献中心内容的简单连贯的短文。
同样使用余弦相似度获取自动摘要。
算法步骤:
- 获取需要摘要的文章
- 对该文章进行词频统计
- 对该文章进行分句(根据中文的标点符号,一般采用‘。’、‘?’、‘!’等进行分句)
- 计算分句与文章之间的余弦相似度
- 获取相似度最高的分据作为文章摘要。
代码步骤:
#构建语料库与词频统计
####自动摘要的获取
#先创建需要的3个数组:文章内容、摘要、文件路径
filecontents = []
summarys = []
filepaths =[]
#遍历语料库,得到每篇文章的子语料库(按标点符号分割的短句)
for index, row in corpos.iterrows():
filepath = row['filePath']
filecontent = row['fileContent']
#建立子语料库,以该文档的子句组成
subcorpos = [filecontent] + re.split(r'[。?!\n]\s*', filecontent)
#根据子语料库中的子句进行分词,得到每个子句的分词集合
segments = []
suitcorpos = []
for a in subcorpos:
segs = jieba.cut(a)
segment = ' '.join(segs)
if len(segment.strip())>10: #只选区长度大于10 的短句
segments.append(segment)
suitcorpos.append(a)
#将子句的分词集合向量化
textVector = countVectorizer.fit_transform(segments)
#根据余弦值计算距离
distance_matrix = pairwise_distances(textVector,metric='cosine')
#按距离进行排序
sort = np.argsort(distance_matrix,axis=1)
summary = pd.Index(suitcorpos)[sort[0]].values[1] #获得距离最近的子句作为摘要
summarys.append(summary)
filepaths.append(filepath)
filecontents.append(filecontent)
最后得到含有文章摘要的数据框
summaryDF = pd.DataFrame({ '文件路径':filepaths, '文件内容':filecontents, '摘要':summarys})