def _insert_punctuation()

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)