def perturb()

in src/fmeval/transforms/semantic_perturbations.py [0:0]


    def perturb(self, text: str) -> List[str]:
        """Return a list where each element is a copy of the original text after undergoing perturbations.

        The perturbations mimic keyboard-induced typos and are applied (with a certain probability)
        to each character in `text`.

        :param text: The input text to be perturbed.
        :returns: A list of perturbed text outputs.
        """
        perturbed_texts = []
        for _ in range(self.num_perturbations):
            butter_finger_text = []
            for letter in text:
                lowercase_letter = letter.lower()
                if lowercase_letter not in ButterFinger.QUERTY_KEY_APPROX.keys():
                    new_letter = lowercase_letter
                else:
                    if self.rng.random() <= self.perturbation_prob:
                        new_letter = self.rng.choice(
                            [char for char in ButterFinger.QUERTY_KEY_APPROX[lowercase_letter]]
                        )
                    else:
                        new_letter = lowercase_letter
                # go back to original case
                if lowercase_letter != letter:
                    new_letter = new_letter.upper()
                butter_finger_text.append(new_letter)
            perturbed_texts.append("".join(butter_finger_text))
        return perturbed_texts