使用Simhash算法去除Excel中新闻内容重复文本
以下是实现该功能的Python代码:
import pandas as pd
import jieba
from simhash import Simhash
# 对文本进行分词
def cut_text(text):
seg_list = jieba.cut(text)
return ' '.join(seg_list)
# 计算Simhash值
def get_simhash(text):
tokens = cut_text(text).split()
return Simhash(tokens)
# 计算文本相似度
def get_similarity(text1, text2):
hash1 = get_simhash(text1)
hash2 = get_simhash(text2)
return hash1.similarity(hash2)
# 读取Excel文件
df = pd.read_excel('news.xlsx')
content_list = df['content'].tolist()
# 去重
dup_list = []
new_content_list = []
for content in content_list:
if content not in dup_list:
dup_list.append(content)
new_content_list.append(content)
# 删除相似度高于0.8的文本
delete_list = []
for i, content1 in enumerate(new_content_list):
for j, content2 in enumerate(new_content_list[i+1:]):
sim = get_similarity(content1, content2)
if sim > 0.8:
delete_list.append(content2)
# 保存结果到新的Excel表
df_new = pd.DataFrame({'content': new_content_list})
df_new.to_excel('news_new.xlsx', index=False)
# 打印删除的文本数量
print('删除的文本数量:', len(delete_list))
其中,需要安装以下库:
- pandas:用于读取和保存Excel文件
- jieba:用于中文分词
- simhash:用于计算Simhash值和文本相似度
在运行代码前,需要将Excel文件(news.xlsx)放在代码所在的目录中,并保证该文件中有一列名为“content”的列,表示新闻内容。运行代码后,会生成一个新的Excel文件(news_new.xlsx),其中已经去重并删除了相似度高于0.8的文本。同时,会在控制台打印删除的文本数量。
原文地址: https://www.cveoy.top/t/topic/nESy 著作权归作者所有。请勿转载和采集!