处理文本,有大量语义重复,表达含意相同,处理的方式有很多,可以通过以下几种方法实现,具体取决于你的数据量、工具和需求:
一、手动去重(适合小数据量)
如果你的数据量较小,可以直接通过人工判断哪些词是语义重复的,然后手动删除重复项。
操作步骤:
- 在 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:可选,用于聚类
四、使用在线工具辅助(适合非技术用户)
如果你不想编程,可以使用一些在线工具辅助去重:
- Text Mechanic – https://textmechanic.com/
- 提供“Remove Duplicates”、“Fuzzy Duplicate Finder”等功能。
- 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),以获得最佳的去重效果。
任何工具都不是绝对准确,参考使用就好,具体照个人需求选择。