from presidio_analyzer import AnalyzerEngine from presidio_anonymizer import AnonymizerEngine from presidio_anonymizer.entities import OperatorConfig from faker import Faker from faker.providers import internet def reverse_string(x): """Return string in reverse order.""" return x[::-1] def anonymize_reverse_lambda(analyzer_results, text_to_anonymize): """Anonymize using an example lambda.""" anonymized_results = anonymizer.anonymize( text=text_to_anonymize, analyzer_results=analyzer_results, operators={ "EMAIL_ADDRESS": OperatorConfig("custom", {"lambda": lambda x: x[::-1]}) }, ) return anonymized_results def anonymize_faker_lambda(analyzer_results, text_to_anonymize): """Anonymize using a faker provider.""" anonymized_results = anonymizer.anonymize( text=text_to_anonymize, analyzer_results=analyzer_results, operators={ "EMAIL_ADDRESS": OperatorConfig( "custom", {"lambda": lambda x: fake.safe_email()} ) }, ) return anonymized_results if __name__ == "__main__": fake = Faker("en_US") fake.add_provider(internet) analyzer = AnalyzerEngine() anonymizer = AnonymizerEngine() text = "The user has the following two emails: email1@contoso.com and email2@contoso.com" # noqa: E501 analyzer_results = analyzer.analyze( text=text, entities=["EMAIL_ADDRESS"], language="en" ) print(f"Original Text: {text}") print(f"Analyzer result: {analyzer_results}\n") print( f"Reverse lambda result: {anonymize_reverse_lambda(analyzer_results, text).text}" # noqa: E501 ) print(f"Faker lambda result: {anonymize_faker_lambda(analyzer_results, text).text}")