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