Package: schema-matching
Python Schema Matching by XGboost and Sentence-TransformersA python tool using XGboost and sentence-transformers to perform schema matching task on tables. Support multi-language column names and instances matching and can be used without column names. Both csv and json file type are supported.What is schema matching?Schema matching is the problem of finding potential associations between elements (most often attributes or relations) of two schemas.sourceDependenciesnumpy==1.19.5pandas==1.1.5nltk==3.6.5python-dateutil==2.8.2sentence-transformers==2.1.0xgboost==1.5.2strsimpy==0.2.1Package usageInstallpip install schema-matchingConduct schema matchingfrom schema_matching import schema_matching

df_pred,df_pred_labels,predicted_pairs = schema_matching("Test Data/QA/Table1.json","Test Data/QA/Table2.json")
print(df_pred)
print(df_pred_labels)
for pair_tuple in predicted_pairs:
    print(pair_tuple)Return:df_pred: Predict value matrix, pd.DataFrame.df_pred_labels: Predict label matrix, pd.DataFrame.predicted_pairs: Predict label == 1 column pairs, in tuple format.Parameters:table1_pth: Path to your firstcsv, json or jsonl file.table2_pth: Path to your secondcsv, json or jsonl file.threshold: Threshold, you can use this parameter to specify threshold value, suggest 0.9 for easy matching(column name very similar). Default value is calculated from training data, which is around 0.15-0.2. This value is used for difficult matching(column name masked or very different).strategy: Strategy, there are three options: "one-to-one", "one-to-many" and "many-to-many". "one-to-one" means that one column can only be matched to one column. "one-to-many" means that columns in Table1 can only be matched to one column in Table2. "many-to-many" means that there is no restrictions. Default is "many-to-many".model_pth: Path to trained model folder, which must contain at least one pair of ".model" file and ".threshold" file. You don't need to specify this parameter.Raw code usage: TrainingDataSee Data format in Training Data and Test Data folders. You need to put mapping.txt, Table1.csv and Table2.csv in new folders under Training Data. For Test Data, mapping.txt is not needed.1.Construct featurespython relation_features.py2.Train xgboost modelspython train.py3.Calculate similarity matrix (inference)Example: 
python cal_column_similarity.py -p Test\ Data/self -m /model/2022-04-12-12-06-32 -s one-to-one
python cal_column_similarity.py -p Test\ Data/authors -m /model/2022-04-12-12-06-32-11 -t 0.9Parameters:-p: Path to test data folder, must contain"Table1.csv" and "Table2.csv" or "Table1.json" and "Table2.json".-m: Path to trained model folder, which must contain at least one pair of ".model" file and ".threshold" file.-t: Threshold, you can use this parameter to specify threshold value, suggest 0.9 for easy matching(column name very similar). Default value is calculated from training data, which is around 0.15-0.2. This value is used for difficult matching(column name masked or very different).-s: Strategy, there are three options: "one-to-one", "one-to-many" and "many-to-many". "one-to-one" means that one column can only be matched to one column. "one-to-many" means that columns in Table1 can only be matched to one column in Table2. "many-to-many" means that there is no restrictions. Default is "many-to-many".Output:similarity_matrix_label.csv: Labels(0,1) for each column pairs.similarity_matrix_value.csv: Average of raw values computed by all the xgboost models.Feature EngineeringFeatures: "is_url","is_numeric","is_date","is_string","numeric:mean", "numeric:min", "numeric:max", "numeric:variance","numeric:cv", "numeric:unique/len(data_list)", "length:mean", "length:min", "length:max", "length:variance","length:cv", "length:unique/len(data_list)", "whitespace_ratios:mean","punctuation_ratios:mean","special_character_ratios:mean","numeric_ratios:mean", "whitespace_ratios:cv","punctuation_ratios:cv","special_character_ratios:cv","numeric_ratios:cv", "colname:bleu_score", "colname:edit_distance","colname:lcs","colname:tsm_cosine", "colname:one_in_one", "instance_similarity:cosine"tsm_cosine: Cosine similarity of column names computed by sentence-transformers using "paraphrase-multilingual-mpnet-base-v2". Support multi-language column names matching.instance_similarity:cosine: Select 20 instances each string column and compute its mean embedding using sentence-transformers. Cosine similarity is computed by each pairs.PerformanceCross Validation on Training Data(Each pair to be used as test data)Average Precision: 0.755Average Recall: 0.829Average F1: 0.766Average Confusion Matrix:Negative(Truth)Positive(Truth)Negative(pred)0.943431110.05656889Positive(pred)0.171354170.82864583Inference on Test Data (Give confusing column names)Data:https://github.com/fireindark707/Schema_Matching_XGboost/tree/main/Test%20Data/selftitletextsummarykeywordsurlcountrylanguagedomainnametimestampcol11(FN)000000000col201(TP)00000000col3001(TP)0000000words0001(TP)000000link00001(TP)00000col6000001(TP)0000lang0000001(TP)000col800000001(TP)00website000000000(FN)0col100000000001(TP)F1 score: 0.889Cite@software{fireinfark707_Schema_Matching_by_2022,  
author = {fireinfark707},  
license = {MIT},  
month = {4},  
title = {{Schema Matching by XGboost}},  
url = {https://github.com/fireindark707/Schema_Matching_XGboost},  
year = {2022}  
}