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

为基于余弦相似度匹配的公司名组合分配跨列统一组号

为成对匹配的公司名称分配全局组号(覆盖所有关联项)

这个问题本质是连通组件识别:所有直接/间接匹配的公司应归为同一组,不能仅依赖单一列分组。以下是具体实现方案,附样本数据与对应输出。


样本输入数据

| item1       | item2         | similarity |
|-------------|---------------|------------|
| 科技有限公司A | 科技A有限公司 | 0.95       |
| 科技A有限公司 | 科技有限A公司 | 0.92       |
| 商贸有限公司B | 商贸B有限公司 | 0.98       |
| 科技有限公司A | 科技有限A公司 | 0.90       |
| 制造有限公司C | 制造C有限公司 | 0.96       |

期望输出数据

| item1       | item2         | similarity | group_id |
|-------------|---------------|------------|----------|
| 科技有限公司A | 科技A有限公司 | 0.95       | 1        |
| 科技A有限公司 | 科技有限A公司 | 0.92       | 1        |
| 商贸有限公司B | 商贸B有限公司 | 0.98       | 2        |
| 科技有限公司A | 科技有限A公司 | 0.90       | 1        |
| 制造有限公司C | 制造C有限公司 | 0.96       | 3        |

R 实现方案

使用igraph包处理连通组件,自动关联所有匹配的公司:

  1. 安装并加载依赖包
install.packages("igraph")
library(igraph)
library(dplyr)
  1. 生成全局组号
# 假设你的数据框名为df
# 提取所有唯一公司节点
nodes <- unique(c(df$item1, df$item2))
# 构建匹配关系的边列表
edges <- df %>% select(item1, item2)
# 创建无向图
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
# 获取每个节点的连通组件ID
component_ids <- membership(clusters(g))
# 将组号映射回原数据框
df$group_id <- component_ids[match(df$item1, names(component_ids))]

Python 实现方案

使用networkx包处理连通组件:

  1. 安装并导入依赖包
pip install networkx pandas
import networkx as nx
import pandas as pd
  1. 生成全局组号
# 假设你的数据框名为df
# 创建无向图,构建匹配关系
G = nx.from_pandas_edgelist(df, source='item1', target='item2', create_using=nx.Graph())
# 遍历所有连通组件,分配组号
group_mapping = {}
current_group = 1
for component in nx.connected_components(G):
    for node in component:
        group_mapping[node] = current_group
    current_group += 1
# 为原数据框添加组号列
df['group_id'] = df['item1'].map(group_mapping)

方案说明

两种方案均基于图论的连通组件逻辑:所有直接/间接匹配的公司会被归为同一连通组,无论它出现在item1还是item2列,彻底解决单一列分组的覆盖不全问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:33:25