Skip to content
Snippets Groups Projects
email_replacer.py 1.17 KiB
Newer Older
Michał Pogoda's avatar
Michał Pogoda committed
from typing import List, Tuple
from src.detections import (
    Detection,
    EmailDetection,
Michał Pogoda's avatar
Michał Pogoda committed
)
from src.string_replacements import replace_and_update
from src.replacers.interface import ReplacerInterface
import random
import string

Michał Pogoda's avatar
Michał Pogoda committed
def random_char(char_num):
Michał Pogoda's avatar
Michał Pogoda committed
    return "".join(random.choice(string.ascii_letters) for _ in range(char_num))

Michał Pogoda's avatar
Michał Pogoda committed

def random_email():
Michał Pogoda's avatar
Michał Pogoda committed
    return random_char(7) + "@gmail.com"

Michał Pogoda's avatar
Michał Pogoda committed

class EmailReplacer(ReplacerInterface):
    def __init__(self):
        pass
Michał Pogoda's avatar
Michał Pogoda committed

    def replace(
        self, text: str, detections: List[Tuple[int, int, Detection]]
    ) -> Tuple[str, List[Tuple[int, int, Detection]]]:
Michał Pogoda's avatar
Michał Pogoda committed
        replacements = []
        not_processed = []
Michał Pogoda's avatar
Michał Pogoda committed
        already_replaced = dict()
Michał Pogoda's avatar
Michał Pogoda committed
        for item in detections:
            start, end, detection = item
            if isinstance(detection, EmailDetection):
Michał Pogoda's avatar
Michał Pogoda committed
                if text[start:end] not in already_replaced:
                    already_replaced[text[start:end]] = random_email()
Michał Pogoda's avatar
Michał Pogoda committed
                replacements.append((start, end, already_replaced[text[start:end]]))
            else:
                not_processed.append(item)
Michał Pogoda's avatar
Michał Pogoda committed

        return replace_and_update(text, replacements, not_processed)