Add error handling for postprocessing
This commit is contained in:
committed by
Michael McGuinness
parent
d160441365
commit
6889101f6b
+4
-1
@@ -34,13 +34,16 @@ RUN_FS = True
|
||||
RUN_EXCEPTION = True
|
||||
RUN_CODES = True
|
||||
|
||||
# Postprocessing Settings
|
||||
FUZZY_MATCH_THRESHOLD = 0.8
|
||||
|
||||
# AWS Keys
|
||||
AWS_ACCESS_KEY_ID="ASIAZTMXAXNXAI7RYNWW"
|
||||
AWS_SECRET_ACCESS_KEY="fPm3Rn3cde8AOVj0hP/n3u1MwSrQU17qxDPRK7ar"
|
||||
AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEGYaCXVzLWVhc3QtMiJHMEUCIEFjYLb1fysSczLo2Ae7zUOD61H0YhfYPtrzlwXGw6TxAiEAnPVt3UX0UGGxJrAS3T14mVud26zn8i2qIbgjUZAkQmIqjAMI7///////////ARAAGgw2NjAxMzEwNjg3ODIiDH2L5zRJcBcGAXDxMSrgAhoB9QUZFydQiXFS7YUNrYBwSRX3fxPM6dml/WETf9qesJ7tkuOlXJIa7ZZLjJreuMCRfS4eUis0mMDZg+8pb1lLYQAAwuCe6JHN757NH7lwOXSdLY/pzqHc+w4atcGfKNsexj6BIGCyOKbqjbA0wcMgz1y5DqEY8lBeU+E/FTMBa6r9SKYH2hyD41KZQrtUAbKeOWrw2lMjxsr4TzlkdHXw8uQJC4WY7uC6iAzZoR+WDQvfOFu1ltzeJlMiJZA74V1pStK0s/f+QtlwmT6KLu8gVafepohAFs4tuWlz5Ohmn0T/hGQURD8Em1dU22Ljj0qfcGejEUFw8HQDI5kYtwFBDU4XLnDh5Z01Dyxidted8xV3DNI6Ok79cAT950jXXSipBuHKxNv9qMAbrgrAir5GUPhs04XnocjIw7FpOoYzglURU+Y/R+wHeOtXRou4VcDLdoOtlrnrKX9/WR5eOI8woZ+MswY6pgG+tl5kEnjwJJDMCErNLFBnAmBHaC+0oBFRPOaX7ZYHY7ryIfo21kqLEkgXD54XY6xRIyfpEMjBIled+AUOJC17BEjZUq3tUUMi1FEo4KFwANQntvQVDHQ+nwmtNQ4NWeCBfBOqqEArsXjG3SROTQOBKr75NHlPFYtsTr2vK03xCe6dVF/Uq0giyXvoEMyT9eCJTFW1Bzs9HUpUhG9h0lgO2q4LKaLd"
|
||||
|
||||
# File Paths
|
||||
LOCAL_PATH = 'data/priority_health/' # Replace with local
|
||||
LOCAL_PATH = 'data/test/' # Replace with local
|
||||
|
||||
# S3 Settings
|
||||
S3_CLIENT = boto3.client('s3',
|
||||
|
||||
+21
-17
@@ -93,45 +93,49 @@ def merge_results(td_results, bu_results, text_dict):
|
||||
|
||||
|
||||
def process_file(file_object):
|
||||
|
||||
# Start Processing
|
||||
filename, contract_text = file_object
|
||||
if config.VERBOSE: print(f"Processing {filename}...")
|
||||
|
||||
# Create directories
|
||||
base_filename = os.path.splitext(filename)[0].strip()
|
||||
output_dir = os.path.join(config.OUTPUT_FOLDER, base_filename)
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
|
||||
#### PREPROCESS ####
|
||||
contract_text = preprocess.clean_newlines(contract_text)
|
||||
text_dict = preprocess.split_text(contract_text)
|
||||
text_dict = table_funcs.align_and_format_tables(text_dict)
|
||||
text_dict = preprocess.highlight_rates(text_dict)
|
||||
|
||||
# Run Top Down
|
||||
#### Run Top Down ####
|
||||
td_results = prompt_funcs.run_top_down(filename, text_dict) # Returns list of dictionaries for each page
|
||||
print(f"Top Down Complete - {filename} ")
|
||||
# Write TD results
|
||||
pd.DataFrame(td_results).to_csv(os.path.join(output_dir, 'td_results.csv'), index=False)
|
||||
print(f"Top Down Complete - {filename}")
|
||||
|
||||
# Run Bottom Up
|
||||
#### Run Bottom Up ####
|
||||
bu_results = prompt_funcs.run_bottom_up(filename, text_dict) # Returns list of dictionaries
|
||||
# Write BU results
|
||||
pd.DataFrame(bu_results).to_csv(os.path.join(output_dir, 'bu_results.csv'), index=False)
|
||||
print(f"Bottom Up Complete - {filename}")
|
||||
|
||||
# Combine
|
||||
#### Combine ####
|
||||
combined_results = merge_results(clean_td(td_results), bu_results, text_dict)
|
||||
print(f"TD/BU Merge Complete - {filename} ")
|
||||
|
||||
#### Write unprocessed output ####
|
||||
# Convert to DataFrame
|
||||
combined_df = pd.DataFrame(combined_results)
|
||||
combined_df.to_csv(os.path.join(output_dir, 'combined_results_unprocessed.csv'), index=False)
|
||||
|
||||
# Post-process combined results
|
||||
#### POSTPROCESSING ####
|
||||
combined_df = combined_df.applymap(postprocessingfuncs.sanitize_value)
|
||||
post_processed_combined_df = postprocess.postprocess_results(combined_df)
|
||||
print(f"Postprocessing Complete - {filename} ")
|
||||
|
||||
# Create directories
|
||||
base_filename = os.path.splitext(filename)[0]
|
||||
output_dir = os.path.join(config.OUTPUT_FOLDER, base_filename)
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
# Save results
|
||||
pd.DataFrame(td_results).to_csv(os.path.join(output_dir, 'td_results.csv'), index=False)
|
||||
pd.DataFrame(bu_results).to_csv(os.path.join(output_dir, 'bu_results.csv'), index=False)
|
||||
combined_df.to_csv(os.path.join(output_dir, 'combined_results_unprocessed.csv'), index=False)
|
||||
post_processed_combined_df.to_csv(os.path.join(output_dir, 'combined_results_post_processed.csv'), index=False)
|
||||
|
||||
print(f"Postprocessing Complete - {filename} ")
|
||||
|
||||
print(f"Output Complete - {filename} ")
|
||||
|
||||
+58
-15
@@ -1,4 +1,5 @@
|
||||
import pandas as pd
|
||||
import config
|
||||
import re
|
||||
import postprocessingfuncs
|
||||
|
||||
@@ -62,31 +63,73 @@ def post_process_combined(df):
|
||||
df = sanitize_combined(df)
|
||||
|
||||
# Clean specific columns for exact matches
|
||||
postprocessingfuncs.clean_columns_combined(df, 'CONTRACT_LOB', VALID_LOBS, 'Corrected_LOB')
|
||||
postprocessingfuncs.clean_columns_combined(df, 'CONTRACT_PROGRAM', VALID_PROGRAMS, 'Corrected_PROGRAM')
|
||||
postprocessingfuncs.clean_columns_combined(df, 'CONTRACT_NETWORK', VALID_NETWORKS, 'Corrected_NETWORK')
|
||||
for field_list in [['CONTRACT_LOB', 'Corrected_LOB', VALID_LOBS], ['CONTRACT_PROGRAM', 'Corrected_PROGRAM', VALID_PROGRAMS], ['CONTRACT_NETWORK', 'Corrected_NETWORK', VALID_NETWORKS]]:
|
||||
try:
|
||||
postprocessingfuncs.clean_columns_combined(df, field_list[0], field_list[2], field_list[1])
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
postprocessingfuncs.clean_columns_combined_fuzzy(df, field_list[0], field_list[2], config.FUZZY_MATCH_THRESHOLD)
|
||||
except:
|
||||
pass
|
||||
|
||||
# postprocessingfuncs.clean_columns_combined(df, 'CONTRACT_LOB', VALID_LOBS, 'Corrected_LOB')
|
||||
|
||||
# Apply fuzzy matching to the columns
|
||||
postprocessingfuncs.clean_columns_combined_fuzzy(df, 'CONTRACT_LOB', VALID_LOBS, 0.8)
|
||||
postprocessingfuncs.clean_columns_combined_fuzzy(df, 'CONTRACT_PROGRAM', VALID_PROGRAMS, 0.8)
|
||||
postprocessingfuncs.clean_columns_combined_fuzzy(df, 'CONTRACT_NETWORK', VALID_NETWORKS, 0.8)
|
||||
# postprocessingfuncs.clean_columns_combined(df, 'CONTRACT_PROGRAM', VALID_PROGRAMS, 'Corrected_PROGRAM')
|
||||
# postprocessingfuncs.clean_columns_combined(df, 'CONTRACT_NETWORK', VALID_NETWORKS, 'Corrected_NETWORK')
|
||||
|
||||
# # Apply fuzzy matching to the columns
|
||||
# try:
|
||||
# postprocessingfuncs.clean_columns_combined_fuzzy(df, 'CONTRACT_LOB', VALID_LOBS, 0.8)
|
||||
# except:
|
||||
# pass
|
||||
# postprocessingfuncs.clean_columns_combined_fuzzy(df, 'CONTRACT_PROGRAM', VALID_PROGRAMS, 0.8)
|
||||
# postprocessingfuncs.clean_columns_combined_fuzzy(df, 'CONTRACT_NETWORK', VALID_NETWORKS, 0.8)
|
||||
|
||||
# Correct misplaced values across columns
|
||||
df = postprocessingfuncs.correct_misplaced_values(df, ['CONTRACT_LOB', 'CONTRACT_PROGRAM', 'CONTRACT_NETWORK'], valid_values_dict)
|
||||
try:
|
||||
df = postprocessingfuncs.correct_misplaced_values(df, ['CONTRACT_LOB', 'CONTRACT_PROGRAM', 'CONTRACT_NETWORK'], valid_values_dict)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Clean the specified code columns
|
||||
df = clean_code_column(df, 'REIMBURSEMENT_PROC_CODES', extract_codes_CPT)
|
||||
df = clean_code_column(df, 'REIMBURSEMENT_DIAG_CODES', extract_codes_Diagnosis)
|
||||
df = clean_code_column(df, 'REIMBURSEMENT_REVENUE_CODES', extract_codes_Revenue)
|
||||
try:
|
||||
df = clean_code_column(df, 'REIMBURSEMENT_PROC_CODES', extract_codes_CPT)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
try:
|
||||
df = clean_code_column(df, 'REIMBURSEMENT_DIAG_CODES', extract_codes_Diagnosis)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
try:
|
||||
df = clean_code_column(df, 'REIMBURSEMENT_REVENUE_CODES', extract_codes_Revenue)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
# Filter out specific SERVICE rows
|
||||
df = postprocessingfuncs.filter_service_column(df)
|
||||
try:
|
||||
df = postprocessingfuncs.filter_service_column(df)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
# Move percentages and large numbers to correct columns
|
||||
df = postprocessingfuncs.move_percentage_to_rate(df)
|
||||
df = postprocessingfuncs.move_large_numbers_to_flat_fee(df)
|
||||
try:
|
||||
df = postprocessingfuncs.move_percentage_to_rate(df)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
try:
|
||||
df = postprocessingfuncs.move_large_numbers_to_flat_fee(df)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
clean_df = postprocessingfuncs.clean_pagenumbers(df)
|
||||
try:
|
||||
clean_df = postprocessingfuncs.clean_pagenumbers(df)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
clean_df = df
|
||||
|
||||
return clean_df
|
||||
|
||||
def postprocess_results(combined_df):
|
||||
|
||||
@@ -32,7 +32,7 @@ def clean_columns_combined(df, column_name, valid_values, new_column_name):
|
||||
if match:
|
||||
return match
|
||||
return None
|
||||
|
||||
|
||||
df[new_column_name] = df[column_name].apply(update_column)
|
||||
cleaned_values = df[new_column_name].unique()
|
||||
return original_values, cleaned_values, changes
|
||||
|
||||
Reference in New Issue
Block a user