Dans le développement de données, utilisez la correspondance de similitude de texte court pour réaliser un mappage automatique des noms de champ

Introduction: les noms de champs sont automatiquement mappés. Lors du développement du modèle, lors de l'utilisation des données d'origine pour développer le modèle, une partie de la charge de travail consiste à mapper les champs des données au modèle, sans plus
regarder l'éblouissant ; principe: utiliser le Distance de Levinstein (floue) pour un texte court Correspondance de similitude, trouve automatiquement le champ "le plus" approprié, bien sûr, le dépistage final de la chair humaine est toujours essentiel.

# 简介:字段名自动映射,开发模型的时候,利用原始数据进行模型开发时,部分工作量是从数据到模型进行字段映射,不再看花眼
# 原理:利用莱文斯坦距离(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_fields_f.readlines()
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_fields_f.readlines()
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)
        continue
    orig_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;')

Je suppose que tu aimes

Origine blog.csdn.net/ManWZD/article/details/112427386
conseillé
Classement