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
相关产品推荐
相关产品推荐

