from typing import Dict, Union from epc_data.attributes.attribute_utils import extract_component_types, extract_thermal_transmittance class WallAttributes: WALL_TYPES = ['cavity wall', 'filled cavity', 'solid brick', 'system built', 'timber frame', 'granite or whinstone', 'as built', 'cob', 'assumed', 'sandstone or limestone'] def __init__(self, description: str): """ :param description: Description of the walls. """ self.description: str = description def process(self) -> Dict[str, Union[float, str, bool, None]]: result: Dict[str, Union[float, str, bool, None]] = {} description = self.description.lower() # thermal transmittance - it can be negative which is errneous however we'll still pull it out result, description = extract_thermal_transmittance(result, description) # wall type result, description = extract_component_types(result, description, list_of_components=self.WALL_TYPES) # insulation thickness - this is far from a perfect approach and we'd likely need to use nlp to do this # generally however this is sufficient for mvp thickness_map = { "external insulation": "average", "internal insulation": "average", "partial insulation": "below average", "no insulation": "none", "additional insulation": "above average", "insulated": "average" } for key, value in thickness_map.items(): if key in description: result['insulation_thickness'] = value break else: result['insulation_thickness'] = None # insulation type result['external_insulation'] = 'external insulation' in description result['internal_insulation'] = 'internal insulation' in description return result