in pyrit/prompt_converter/insert_punctuation_converter.py [0:0]
def _insert_punctuation(self, prompt: str, punctuation_list: List[str]) -> str:
"""
Insert punctuation into the prompt.
Args:
prompt (str): The text to modify.
punctuation_list (List[str]): List of punctuations for insertion.
Returns:
str: The modified prompt with inserted punctuation from helper method.
"""
# Words list contains single spaces, single word without punctuations, single punctuations
words = re.findall(r"\w+|[^\w\s]|\s", prompt)
# Maintains indices for actual "words", i.e. letters and numbers not divided by punctuations
word_indices = [i for i in range(0, len(words)) if not re.match(r"\W", words[i])]
# Calculate the number of insertions
num_insertions = max(
1, round(len(word_indices) * self._word_swap_ratio)
) # Ensure at least one punctuation is inserted
# If there's no actual word without punctuations in the list, insert random punctuation at position 0
if not word_indices:
return random.choice(punctuation_list) + prompt
if self._between_words:
return self._insert_between_words(words, word_indices, num_insertions, punctuation_list)
else:
return self._insert_within_words(prompt, num_insertions, punctuation_list)