diff --git a/model_data/epc_attributes/WallAttributes.py b/model_data/epc_attributes/WallAttributes.py index a0601029..df66cf65 100644 --- a/model_data/epc_attributes/WallAttributes.py +++ b/model_data/epc_attributes/WallAttributes.py @@ -1,6 +1,10 @@ +import re from typing import Dict, Union from model_data.BaseUtility import Definitions -from model_data.epc_attributes.attribute_utils import extract_component_types, extract_thermal_transmittance +from model_data.epc_attributes.attribute_utils import ( + extract_component_types, + extract_thermal_transmittance +) class WallAttributes(Definitions): @@ -10,6 +14,58 @@ class WallAttributes(Definitions): WELSH_TEXT = { "Briciau solet, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)": "Solid brick, as built, no insulation (assumed)", + 'Waliau ceudod, fel yGÇÖu hadeiladwyd, inswleiddio rhannol (rhagdybiaeth)': + 'Cavity wall, as built, partial insulation (assumed)', + 'Waliau ceudod, fel yGÇÖu hadeiladwyd, inswleiddio rhannol': + 'Cavity wall, as built, partial insulation', + 'Waliau ceudod, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)': + 'Cavity wall, as built, no insulation (assumed)', + 'Waliau ceudod, fel yGÇÖu hadeiladwyd, dim inswleiddio': + 'Cavity wall, as built, no insulation', + 'Tywodfaen, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)': + 'Sandstone or limestone, as built, no insulation (assumed)', + 'Tywodfaen, fel yGÇÖu hadeiladwyd, dim inswleiddio': + 'Sandstone or limestone, as built, no insulation', + 'Waliau ceudod, ceudod wediGÇÖi lenwi': 'Cavity wall, filled cavity', + 'Waliau ceudod, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio (rhagdybiaeth)': + 'Cavity wall, as built, insulated (assumed)', + 'Waliau ceudod, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio': + 'Cavity wall, as built, insulated', + 'Gwenithfaen neu risgraig, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)': + 'Granite or whinstone, as built, no insulation (assumed)', + 'Waliau ceudod,': 'Cavity wall', + 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio (rhagdybiaeth)': + 'Timber frame, as built, insulated (assumed)', + 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio': + 'Timber frame, as built, insulated', + 'Gwenithfaen neu risgraig, gydag inswleiddio allanol': 'Granite or whinstone, with external insulation', + 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)': + 'System built, as built, no insulation (assumed)', + 'Tywodfaen, gydag inswleiddio mewnol': 'Sandstone or limestone, with internal insulation', + 'Waliau ceudod, ynysydd allanol a llenwi ceudod': 'Cavity wall, filled cavity and external insulation', + 'Gwenithfaen neu risgraig, gydag inswleiddio mewnol': 'Granite or whinstone, with internal insulation', + 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, inswleiddio rhannol (rhagdybiaeth)': + 'Timber frame, as built, partial insulation (assumed)', + 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio (rhagdybiaeth)': + 'System built, as built, insulated (assumed)', + 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio': + 'System built, as built, insulated', + 'WediGÇÖu hadeiladu yn +¦l system, gydag inswleiddio allanol': 'System built, with external insulation', + 'Briciau solet, gydag inswleiddio mewnol': 'Solid brick, with internal insulation', + 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, inswleiddio rhannol (rhagdybiaeth)': + 'System built, as built, partial insulation (assumed)', + 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, inswleiddio rhannol': + 'System built, as built, partial insulation', + 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)': + 'Timber frame, as built, no insulation (assumed)', + 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, dim inswleiddio': + 'Timber frame, as built, no insulation', + 'Tywodfaen, gydag inswleiddio allanol': 'Sandstone or limestone, with external insulation', + 'Waliau ceudod, gydag inswleiddio allanol': 'Cavity wall, with external insulation', + 'Briciau solet, gydag inswleiddio allanol': 'Solid brick, with external insulation', + # Add in some corrections: + 'Co with external insulation': 'Cob with external insulation', + 'Cowith external insulation': 'Cob with external insulation', } def __init__(self, description: str): @@ -18,13 +74,27 @@ class WallAttributes(Definitions): """ self.description: str = description - translation = self.WELSH_TEXT.get(self.description) - if translation: - self.nodata = False - self.description = translation + self.welsh_translation_search() self.nodata = not description or description in self.DATA_ANOMALY_MATCHES + def welsh_translation_search(self): + """ + For some descriptions, we need to translate from Welsh to English + :return: + """ + + uvalue_search = re.search(r"Trawsyriannedd thermol cyfartalog (\d+\.?\d*)", self.description) + + if uvalue_search: + uvalue = uvalue_search.group(1) + self.description = f"Average thermal transmittance {uvalue} W/m-¦K" + else: + translation = self.WELSH_TEXT.get(self.description) + if translation: + self.nodata = False + self.description = translation + def process(self) -> Dict[str, Union[float, str, bool, None]]: result: Dict[str, Union[float, str, bool, None]] = {} if self.nodata: diff --git a/model_data/epc_attributes/attribute_utils.py b/model_data/epc_attributes/attribute_utils.py index e560f8b0..b5fc590d 100644 --- a/model_data/epc_attributes/attribute_utils.py +++ b/model_data/epc_attributes/attribute_utils.py @@ -2,7 +2,7 @@ import re import string from typing import Tuple, Union, Dict, List -THERMAL_TRANSMITTANCE_STR = r"average thermal transmittance (-?\d+\.\d+)\s(w/m\S+k)" +THERMAL_TRANSMITTANCE_STR = r"average thermal transmittance (-?\d+(\.\d+)?)\s(w/m\S+k)" THERMAL_TRANSMITTANCE_REGEX = re.compile(THERMAL_TRANSMITTANCE_STR) DOUBLE_SPACE_PATTERN = re.compile(r"\s+") @@ -24,7 +24,7 @@ def extract_thermal_transmittance(result: dict, description: str) -> Tuple[ if match: result['thermal_transmittance'] = float(match.group(1)) - result['thermal_transmittance_unit'] = match.group(2) + result['thermal_transmittance_unit'] = match.group(3) # Remove the match from the description description = re.sub(THERMAL_TRANSMITTANCE_STR, "", description) else: diff --git a/model_data/tests/test_data/test_wall_attributes_cases.py b/model_data/tests/test_data/test_wall_attributes_cases.py index 54b37c39..7028a53e 100644 --- a/model_data/tests/test_data/test_wall_attributes_cases.py +++ b/model_data/tests/test_data/test_wall_attributes_cases.py @@ -696,5 +696,169 @@ wall_cases = [ 'is_filled_cavity': False, 'is_solid_brick': False, 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': None, 'external_insulation': False, - 'internal_insulation': False} + 'internal_insulation': False}, + {'original_description': 'Waliau ceudod, fel yGÇÖu hadeiladwyd, inswleiddio rhannol (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': True, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'below average', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Waliau ceudod, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': True, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'none', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Tywodfaen, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': True, 'insulation_thickness': 'none', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Average thermal transmittance 1 W/m-¦K', 'thermal_transmittance': 1, + 'thermal_transmittance_unit': 'w/m-¦k', 'is_cavity_wall': False, 'is_filled_cavity': False, + 'is_solid_brick': False, 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, + 'is_as_built': False, 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, + 'insulation_thickness': None, 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Waliau ceudod, ceudod wediGÇÖi lenwi', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': True, 'is_filled_cavity': True, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': None, + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Waliau ceudod, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': True, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Gwenithfaen neu risgraig, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': True, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'none', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Waliau ceudod,', 'thermal_transmittance': None, 'thermal_transmittance_unit': None, + 'is_cavity_wall': True, + 'is_filled_cavity': False, 'is_solid_brick': False, 'is_system_built': False, 'is_timber_frame': False, + 'is_granite_or_whinstone': False, 'is_as_built': False, 'is_cob': False, 'is_assumed': False, + 'is_sandstone_or_limestone': False, 'insulation_thickness': None, 'external_insulation': False, + 'internal_insulation': False}, + {'original_description': 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': True, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Granite or whinstone, with external insulation', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': True, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Gwenithfaen neu risgraig, gydag inswleiddio allanol', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': True, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': True, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'none', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Sandstone or limestone, with internal insulation', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': True, 'insulation_thickness': 'average', + 'external_insulation': False, 'internal_insulation': True}, + {'original_description': 'Sandstone or limestone, with external insulation', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': True, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Waliau ceudod, ynysydd allanol a llenwi ceudod', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': True, 'is_filled_cavity': True, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Gwenithfaen neu risgraig, gydag inswleiddio mewnol', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': True, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': False, 'internal_insulation': True}, + {'original_description': 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, inswleiddio rhannol (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': True, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'below average', + 'external_insulation': False, 'internal_insulation': False}, + { + 'original_description': 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, wediGÇÖu hinswleiddio (' + 'rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': True, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'WediGÇÖu hadeiladu yn +¦l system, gydag inswleiddio allanol', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': True, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Briciau solet, gydag inswleiddio mewnol', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': True, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': False, 'internal_insulation': True}, + { + 'original_description': 'WediGÇÖu hadeiladu yn +¦l system, fel yGÇÖu hadeiladwyd, inswleiddio rhannol (' + 'rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': True, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, + 'insulation_thickness': 'below average', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Ffr+óm bren, fel yGÇÖu hadeiladwyd, dim inswleiddio (rhagdybiaeth)', + 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': True, 'is_granite_or_whinstone': False, 'is_as_built': True, + 'is_cob': False, 'is_assumed': True, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'none', + 'external_insulation': False, 'internal_insulation': False}, + {'original_description': 'Tywodfaen, gydag inswleiddio allanol', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': True, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Waliau ceudod, gydag inswleiddio allanol', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': True, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Briciau solet, gydag inswleiddio allanol', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': True, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, + 'is_cob': False, 'is_assumed': False, 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', + 'external_insulation': True, 'internal_insulation': False}, + {'original_description': 'Cob, with external insulation', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, + 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, 'is_system_built': False, + 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, 'is_cob': True, + 'is_assumed': False, + 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', 'external_insulation': True, + 'internal_insulation': False}, + {'original_description': 'Co with external insulation', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, + 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, 'is_system_built': False, + 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, 'is_cob': True, + 'is_assumed': False, + 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', 'external_insulation': True, + 'internal_insulation': False}, + {'original_description': 'Cowith external insulation', 'thermal_transmittance': None, + 'thermal_transmittance_unit': None, + 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, 'is_system_built': False, + 'is_timber_frame': False, 'is_granite_or_whinstone': False, 'is_as_built': False, 'is_cob': True, + 'is_assumed': False, + 'is_sandstone_or_limestone': False, 'insulation_thickness': 'average', 'external_insulation': True, + 'internal_insulation': False}, ]