You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于相似度匹配实现字符串列表的自动分组

文本相似度自动分组方案

实现思路

整个流程不需要提前指定分组数量,能自动识别文本里的重复核心模式,步骤如下:

  • 文本预处理:统一文本格式,过滤无实际语义的停用词、标点,减少无关内容对相似度计算的干扰
  • 相似度计算:通用场景用TF-IDF提取文本特征,计算两两文本的余弦相似度,轻量高效;需要识别近义语义的场景替换为句向量模型即可
  • 自动聚类:用DBSCAN密度聚类算法,根据设定的相似度阈值自动划分类别,不需要提前预设分组数
  • 结果排序:聚类完成后按每个分组包含的文本数量从多到少排序输出

可直接运行的代码实现

先安装依赖:
pip install scikit-learn numpy

对应实现代码:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.cluster import DBSCAN

# 输入待分组的字符串列表
text_list = [
    "Anna loves to speak to Mary",
    "Joey like to work with Jefferson",
    "Michael loves to speak to John when he's on the shelf",
    "Karen hates crying at her son"
]

# 向量化文本,自动过滤英文停用词
vectorizer = TfidfVectorizer(stop_words="english")
tfidf_vec = vectorizer.fit_transform(text_list)

# 计算文本间的余弦相似度,转换为距离矩阵供聚类使用
sim_matrix = cosine_similarity(tfidf_vec)
dist_matrix = 1 - sim_matrix

# 聚类,eps为距离阈值,值越大越容易把不同文本归为同一组,可根据实际效果调整
cluster_model = DBSCAN(eps=0.7, min_samples=1, metric="precomputed")
labels = cluster_model.fit_predict(dist_matrix)

# 整理分组结果,按组内文本数量降序排列
group_res = {}
for text, lab in zip(text_list, labels):
    group_res.setdefault(lab, []).append(text)
sorted_groups = sorted(group_res.values(), key=lambda x: len(x), reverse=True)

# 打印输出
for idx, content in enumerate(sorted_groups, 1):
    print(f"分组{idx}:")
    for line in content:
        print(line)
    print()

效果说明

针对给出的示例输入,上述代码运行后输出结果和参考分组完全一致:

分组1:
Anna loves to speak to Mary
Michael loves to speak to John when he's on the shelf

分组2:
Joey like to work with Jefferson

分组3:
Karen hates crying at her son

参数调整技巧

  • 若分组过粗、不相关文本被分到同一组:把eps参数调小(比如降到0.5),提高相似度判定门槛
  • 若分组过碎、相似文本被拆到不同组:把eps参数调大(比如升到0.8),放宽相似度判定要求
  • 若需要处理中文文本,把TfidfVectorizer的停用词换成中文停用词表即可;需要识别近义表述的场景,把TF-IDF向量化部分替换为轻量句向量模型,后续聚类逻辑无需改动。

内容的提问来源于stack exchange,提问作者aac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:18:14