处理文本,有大量语义重复,表达含意相同,处理的方式有很多,可以通过以下几种方法实现,具体取决于你的数据量、工具和需求:
一、手动去重(适合小数据量)
如果你的数据量较小,可以直接通过人工判断哪些词是语义重复的,然后手动删除重复项。
操作步骤:
- 在 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),以获得最佳的去重效果。
任何工具都不是绝对准确,参考使用就好,具体照个人需求选择。