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

Python计算跨表列名相似度 如何实现跳过同表列的对比需求

调整方案

核心逻辑为从列名字符串中提取所属表名,仅对分属不同表的列名执行相似度计算,同表列直接返回0值或跳过计算。

基础兼容版(匹配原代码输出结构)

# 给定的基础列表
tbl_name = ['User', 'Band', 'Hall']
col_name = ['User.ID', 'User.Name', 'User.Address', 'Band.ID', 'Band.Name', 'Band.Country', 'Hall.ID', 'Hall.Name', 'Hall.Address']

# 修正jaro_distance函数参数,需传入两个待对比的字符串
def jaro_distance(s1, s2):
    # 此处保留你原有jaro距离的实现逻辑
    # ......
    return jaro_score # 替换为实际计算的相似度返回值

# 调整后的相似度计算逻辑
for x in col_name:
    # 提取x对应的表名(即.分隔的第一个字段)
    x_table = x.split('.')[0]
    for y in col_name:
        # 提取y对应的表名
        y_table = y.split('.')[0]
        if x_table == y_table:
            # 同表列直接输出0,不需要计算
            print(0)
        else:
            print(jaro_distance(x, y))

性能优化版(避免重复计算)

如果不需要输出所有两两组合的位置占位、仅需要保留有效跨表组合的相似度结果,可以用以下写法,自动排除重复计算和同表对比:

for i in range(len(col_name)):
    col_x = col_name[i]
    x_table = col_x.split('.')[0]
    # 仅和索引大于i的列对比,避免sim(a,b)和sim(b,a)重复计算
    for j in range(i+1, len(col_name)):
        col_y = col_name[j]
        y_table = col_y.split('.')[0]
        if x_table != y_table:
            sim_score = jaro_distance(col_x, col_y)
            # 可根据需求调整输出格式或存入结果列表
            print(f"sim({col_x}, {col_y}) = {sim_score}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:48:04