简介:字段名自动映射,开发模型的时候,利用原始数据进行模型开发时,部分工作量是从数据到模型进行字段映射,不再看花眼;
原理:利用莱文斯坦距离(fuzzywuzzy)进行短文本相似度匹配,自动找到"最"合适的字段;当然,最后人肉筛查还是必不可少的。
# 简介:字段名自动映射,开发模型的时候,利用原始数据进行模型开发时,部分工作量是从数据到模型进行字段映射,不再看花眼
# 原理:利用莱文斯坦距离(fuzzywuzzy)进行短文本相似度匹配,自动找到"最"合适的字段;当然,最后人肉筛查还是必不可少的。
# 作者:王振东
# 日期:2021-01-07"""
依赖:
pip install python-Levenshtein
pip install fuzzywuzzy
约束:
字段必须有注释,且注释不能重复
"""
from fuzzywuzzy import fuzz"""
准备字段信息文件:
1、模型的字段文件(model_fields_f),文件中每一行的格式为: 字段名称 字段注释
2、原始表的字段文件(orig_fields_f),文件中每一行的格式为: 字段名称 字段注释
"""
# 字段文件,文件中每一行的格式为: field_name 中文注释
model_fields_f = open('model_fields', 'r')
orig_fields_f = open('b_basy_xy', 'r')model_str_list = model_adlines()
model_list = [model_str.split() for model_str in model_str_list]
model_dict = {i[1]: i[0] for i in model_list}
orig_str_list = orig_adlines()
orig_list = [orig_str.split() for orig_str in orig_str_list]
orig_dict = {i[1]: i[0] for i in orig_list}# 通过遍历找到相似度最高的字段
result = dict()
for k in model_dict.keys():max_match = (0, '')for ok in orig_dict.keys():r = fuzz.ratio(k, ok)if r > max_match[0]:max_match = (r, ok)result[k] = max_match# 生成字段映射
print('映射结果:')
print('SELECT ')
for k in result.keys():match = result[k]if match[1] == '':print('-- not match', k)continueorig_field_name = orig_dict[match[1]]print('t%s, -- %s,对应模型字段(%s %s),匹配度(%d)' %(orig_dict[match[1]], match[1], model_dict[k], k,match[0]))print('FROM ORIG_TABLE_NAME nWHERE PARTITION_CONDITION;')
本文发布于:2024-01-31 01:47:46,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170663686924451.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |