用python中的去重算法对Excel文件中新闻内容content一列进行文本相似度计算并删除相似度高于08的文本
以下是一个可能的解决方案:
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)
该代码会读取名为“news.xlsx”的Excel文件,并对其中的“content”列进行去重处理。去重阈值可以通过调整“threshold”参数进行控制,默认值为0.8。去重时,将使用gensim库计算文本的tf-idf值和相似度矩阵,然后使用Levenshtein距离计算文本相似度。最后,将去重后的结果保存为名为“news_filtered.xlsx”的Excel文件
原文地址: https://gggwd.com/t/topic/diOG 著作权归作者所有。请勿转载和采集!