import random from typing import Dict import pandas as pd from processing.ner.formats import BaseNameFormatter class ConnectorFormatter(BaseNameFormatter): def transform(self, row: pd.Series) -> Dict: native_parts = self.parse_native_components(row["probable_native"]) surname = row["probable_surname"] if pd.notna(row["probable_surname"]) else "" connector = random.choice(self.connectors) # Connect native parts with a random connector if len(native_parts) > 1: connected_native = f" {connector} ".join(native_parts) full_name = f"{connected_native} {surname}".strip() else: connected_native = ( f"{row['probable_native']} {connector} {row['probable_native']}".strip() ) full_name = f"{connected_native} {surname}".strip() return { "name": full_name, "probable_native": connected_native, "identified_name": connected_native, "probable_surname": surname, "identified_surname": surname, "ner_entities": str(self.create_ner_tags(full_name, native_parts, surname)), "transformation_type": self.transformation_type, **self.compute_numeric_features(full_name), } @property def transformation_type(self) -> str: return "connector_added"