实现这个功能,需要用到以下 python 库:

  • pandas:用于读取和处理 Excel 文件
  • jieba:中文分词库
  • gensim:用于计算文本相似度的库

具体实现步骤如下:

  1. 导入需要的库
import pandas as pd
import jieba
from gensim import corpora, models, similarities
  1. 读取 Excel 文件,并选择需要进行去重的列
df = pd.read_excel('news.xlsx')
docs = df['正文'].tolist()
  1. 对每一篇新闻正文进行分词,并将分词后的结果保存到列表中
doc_list = []
for doc in docs:
    seg_list = jieba.cut(doc)
    doc_list.append(' '.join(seg_list))
  1. 使用 gensim 库中的 LdaModel 对文档进行主题建模,并计算文本相似度
# 将文档转换成词袋模型
texts = [[word for word in doc.split()] for doc in doc_list]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]

# 计算文档相似度
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
lda = models.LdaModel(corpus_tfidf, id2word=dictionary, num_topics=10)
index = similarities.MatrixSimilarity(lda[corpus_tfidf])
sims = index[lda[corpus_tfidf]]
  1. 删除相似度高于 0.8 的文本,并将去重后的结果保存到新的 Excel 文件中
# 删除相似度高于 0.8 的文本
for i in range(len(sims)):
    for j in range(i + 1, len(sims)):
        if sims[i][j] > 0.8:
            df = df.drop(j)
            sims = index[lda[corpus_tfidf]]

# 将去重后的结果保存到新的 Excel 文件中
df.to_excel('news_new.xlsx', index=False)

完整代码如下:

import pandas as pd
import jieba
from gensim import corpora, models, similarities

# 读取 Excel 文件,并选择需要进行去重的列
df = pd.read_excel('news.xlsx')
docs = df['正文'].tolist()

# 对每一篇新闻正文进行分词,并将分词后的结果保存到列表中
doc_list = []
for doc in docs:
    seg_list = jieba.cut(doc)
    doc_list.append(' '.join(seg_list))

# 使用 gensim 库中的 LdaModel 对文档进行主题建模,并计算文本相似度
texts = [[word for word in doc.split()] for doc in doc_list]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
lda = models.LdaModel(corpus_tfidf, id2word=dictionary, num_topics=10)
index = similarities.MatrixSimilarity(lda[corpus_tfidf])
sims = index[lda[corpus_tfidf]]

# 删除相似度高于 0.8 的文本
for i in range(len(sims)):
    for j in range(i + 1, len(sims)):
        if sims[i][j] > 0.8:
            df = df.drop(j)
            sims = index[lda[corpus_tfidf]]

# 将去重后的结果保存到新的 Excel 文件中
df.to_excel('news_new.xlsx', index=False)
``
使用python对Excel文件的指定一列的中文新闻正文进行文本相似度计算和去重删除相似度高于08的文本

原文地址: https://www.cveoy.top/t/topic/diJ4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录