Python脚本使用文本语义重复模型

处理文本,有大量语义重复,表达含意相同,处理的方式有很多,可以通过以下几种方法实现,具体取决于你的数据量、工具和需求:

一、手动去重(适合小数据量)

如果你的数据量较小,可以直接通过人工判断哪些词是语义重复的,然后手动删除重复项。

操作步骤:

  • 在 Excel 或 Google Sheets 中,选中关键词列。
  • 使用“排序”功能,将相似的内容排在一起。
  • 人工浏览并删除重复内容,仅保留一个。

二、使用 Excel / WPS / Google Sheets 自动去重(部分适用)

虽然 Excel 的“删除重复项”功能只能识别完全相同的文本,但你可以结合以下技巧进行初步处理:

方法 1:标准化写法

先对关键词做标准化处理,例如:

原始关键词 标准化关键词
人工智能 人工智能
AI 人工智能
Artificial Intel. 人工智能
大模型 大模型
Large Model 大模型

实现方式:

  • 使用 IF + SEARCH 或 VLOOKUP 函数统一映射为标准词汇。
  • 示例公式(假设 A 列是原始数据):
=IF(ISNUMBER(SEARCH("AI",A1)),"人工智能",
IF(ISNUMBER(SEARCH("Artificial",A1)),"人工智能",
IF(ISNUMBER(SEARCH("大模型",A1)),"大模型",
A1)))

方法 2:使用 Excel 内置函数模糊匹配

可以尝试使用 Fuzzy Lookup 插件(微软提供),它支持模糊匹配字符串,能自动找出拼写不同但含义相近的内容。

下载地址:Microsoft Fuzzy Lookup Add-In for Excel

三、使用 Python 自动去重(适合大数据量)

如果数据量较大,推荐使用 Python 编程语言,结合 NLP 技术进行语义去重。

推荐工具包:

  • pandas:用于数据处理
  • sentence-transformers:用于语义相似度计算
  • scikit-learn:可选,用于聚类

 四、使用在线工具辅助(适合非技术用户)

如果你不想编程,可以使用一些在线工具辅助去重:

  1. Text Mechanic – https://textmechanic.com/
    • 提供“Remove Duplicates”、“Fuzzy Duplicate Finder”等功能。
  2. OnlineOCR + 文本处理工具
    • 将 PDF 表格转为文本后,上传到文本去重网站。

五、总结对比

方法 优点 缺点 推荐人群
手动去重 精确 耗时、不适合大数据 数据量小者
Excel 标准化处理 简单易用 需要提前定义规则 办公软件用户
Fuzzy Lookup插件 支持模糊匹配 安装插件麻烦 Excel高级用户
Python脚本 精准、自动化、适合大批量 需要一定编程基础 开发人员、分析师
在线工具 快速、无需安装 可能有隐私风险、功能有限 非技术人员

以上方式,小量数据都可以,大量数据还是用Python脚本方便。


Python脚本去重教程:

通过自然语言处理(NLP)技术,我们可以计算文本之间的语义相似度,并基于相似度来决定哪些条目是重复的,从而只保留一个代表性的条目。

方法 准确性 实现难度 是否推荐
TF-IDF + 余弦相似度 中等 简单  初步可用
降低相似度阈值 中等 极简 可试,但容易误判
使用 Sentence-BERT / BERT 模型 中等 强烈推荐
规则 + 语义模型混合 较高 最佳实践

使用sentence-transformers库中的模型(精准度比较高)

使用sentence-transformers库来加载预训练的语言模型,计算句子之间的语义相似度,并基于设定的阈值进行去重。

1、输入以下命令来安装sentence-transformers和其他必要的库:

pip install sentence-transformers pandas openpyxl

这行命令会自动下载并安装sentence-transformers、pandas以及openpyxl库,后者用于读取Excel文件。

2、接下来,你可以创建一个新的文本文件,将扩展名改为.py(例如deduplicate.py),然后把之前给出的Python脚本复制进去。确保修改脚本中的文件路径为你实际的Excel文件位置。

from sentence_transformers import SentenceTransformer, util
import pandas as pd

model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 修改这里的路径为你的Excel文件路径
df = pd.read_excel('处理文件名.xlsx')
titles = df.iloc[:,0].tolist()

embeddings = model.encode(titles, convert_to_tensor=True)
cosine_scores = util.pytorch_cos_sim(embeddings, embeddings)

threshold = 0.85

final_titles = []
for i in range(len(titles)):
    if all(cosine_scores[i][j] < threshold or j == i for j in range(i)):
        final_titles.append(titles[i])

df_out = pd.DataFrame(final_titles, columns=["Unique Titles"])
# 输出去重后的结果到新的Excel文件
df_out.to_excel('deduplicated_keywords.xlsx', index=False)

print("去重完成,请检查'deduplicated_keywords.xlsx'文件")

运行脚本,就可以得到结果。

注意Python环境与sentence_transformers库的安装,如果使用IDE或编辑器检查工具配置是否正确,如果有错误提示,百度一下。


如果你不想处理过于精准,可以使用另一个模型:TF-IDF,我也测试过。

使用TF-IDF + 余弦相似度模型(精准度一般,对要求不要高使用)

使用了TfidfVectorizer计算文本向量,并通过余弦相似度来判断条目是否语义重复。根据设定的阈值,可以决定哪些条目被认为是重复的并予以去除。

1、安装scikit-learn库

pip install pandas scikit-learn openpyxl

2、脚本

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np


def remove_semantic_duplicates(df, text_column=0, threshold=0.75):
    # 提取文本列,并删除空值以避免错误
    keywords = df[text_column].dropna().tolist()

    # 使用TF-IDF将文本转换为向量
    vectorizer = TfidfVectorizer()
    tfidf_matrix = vectorizer.fit_transform(keywords)

    # 计算相似度矩阵
    similarity_matrix = cosine_similarity(tfidf_matrix)

    # 填充对角线以忽略自身比较
    np.fill_diagonal(similarity_matrix, 0)

    # 找出需要移除的索引
    to_remove = set()
    for i in range(len(keywords)):
        if i in to_remove:
            continue
        similar_indices = np.where(similarity_matrix[i] > threshold)[0]
        for j in similar_indices:
            if j > i:  # 只保留第一个出现的项,移除后续相似的项
                to_remove.add(j)

    # 根据to_remove集合过滤原始DataFrame
    mask = df[text_column].notna()  # 创建一个掩码,表示非空值的位置
    filtered_indices = [i for i in range(len(mask)) if mask[i] and i not in to_remove]
    cleaned_df = df.iloc[filtered_indices]

    return cleaned_df


# 文件名(因为文件和脚本在同一个文件夹)
input_file_name = 'input_file.xlsx'  # 替换为你的输入文件名
output_file_name = 'cleaned_file.xlsx'  # 替换为你想要保存的结果文件名
sheet_name = 'Sheet1'  # 如果有多个表单,请指定正确的表单名称

# 读取Excel文件
df = pd.read_excel(input_file_name, sheet_name=sheet_name, header=None)  # 注意这里添加了header=None

# 应用去重函数
cleaned_df = remove_semantic_duplicates(df, text_column=0)  # 使用列索引0来指定A列

# 输出结果到新的Excel文件
cleaned_df.to_excel(output_file_name, index=False)

print(f"去重完成,结果已保存到 {output_file_name}")

注意文件名,表名,修改后就可以运行。

阈值调整,根据你的具体需求,可能需要微调threshold参数(默认是0.75),以获得最佳的去重效果。


任何工具都不是绝对准确,参考使用就好,具体照个人需求选择。

Excel技巧

使用VBA代码将excel表格批量转换格式csv

2021-3-18 11:28:26

VPS技巧

VPS交互式控制台单模式root密码重置

2018-4-9 1:03:35

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索