Python Excel 去重算法:使用 TF-IDF 和 Levenshtein 距离删除相似新闻
使用 Python 去重算法对 Excel 文件中新闻内容进行相似度计算并删除
本教程将展示如何使用 Python 脚本,利用 TF-IDF 和 Levenshtein 距离算法对 Excel 文件中新闻内容进行去重,并删除相似度高于 80% 的文本。
代码示例
import pandas as pd
from gensim import corpora, models, similarities
import Levenshtein
# 读取 Excel 文件
df = pd.read_excel('news.xlsx')
# 定义去重函数
def remove_duplicate(df, threshold=0.8):
# 将文本转换为词袋表示形式
texts = df['content'].apply(lambda x: x.split())
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
# 计算 tf-idf 值
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
# 计算相似度矩阵
index = similarities.MatrixSimilarity(corpus_tfidf)
sims = index[corpus_tfidf]
# 找到相似度高于阈值的文本对
duplicates = set()
for i, sim_row in enumerate(sims):
for j, sim in enumerate(sim_row):
if i != j and sim > threshold:
duplicates.add((i, j))
# 删除相似度高于阈值的文本
df_filtered = df.copy()
for i, j in duplicates:
if i in df_filtered.index and j in df_filtered.index:
text1 = df_filtered.loc[i, 'content']
text2 = df_filtered.loc[j, 'content']
# 使用 Levenshtein 距离计算文本相似度
similarity = Levenshtein.ratio(text1, text2)
if similarity > threshold:
df_filtered = df_filtered.drop(j)
return df_filtered
# 应用去重函数
df_filtered = remove_duplicate(df)
# 将结果保存为新的 Excel 文件
df_filtered.to_excel('news_filtered.xlsx', index=False)
代码解释
- 读取 Excel 文件: 使用
pandas库读取名为 'news.xlsx' 的 Excel 文件。 - 定义去重函数:
remove_duplicate函数接受 DataFrame 和阈值参数,并返回去重后的 DataFrame。 - 文本转换为词袋表示: 使用
gensim库将新闻内容转换为词袋表示形式,方便计算 TF-IDF 值。 - 计算 TF-IDF 值: 使用
gensim.models.TfidfModel计算每个新闻内容的 TF-IDF 值。 - 计算相似度矩阵: 使用
gensim.similarities.MatrixSimilarity计算所有新闻内容之间的相似度矩阵。 - 查找相似文本: 遍历相似度矩阵,找到相似度高于阈值的文本对。
- 使用 Levenshtein 距离计算相似度: 使用
Levenshtein.ratio函数计算文本对的 Levenshtein 距离,以判断其相似度。 - 删除相似文本: 如果文本对的相似度高于阈值,则删除其中一个文本。
- 保存结果: 将去重后的结果保存为新的 Excel 文件 'news_filtered.xlsx'。
总结
本教程介绍了使用 Python 脚本,利用 TF-IDF 和 Levenshtein 距离算法对 Excel 文件中新闻内容进行去重的方法。该方法可以有效地去除重复或相似度较高的新闻内容,提高数据质量。
原文地址: https://www.cveoy.top/t/topic/nD0x 著作权归作者所有。请勿转载和采集!