用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 著作权归作者所有。请勿转载和采集!