Spaces:
Running
Running
| """ | |
| WordInsertion Class | |
| ------------------------------- | |
| Word Insertion transformations act by inserting a new word at a specific word index. | |
| For example, if we insert "new" in position 3 in the text "I like the movie", we get "I like the new movie". | |
| Subclasses can implement the abstract ``WordInsertion`` class by overriding ``self._get_new_words``. | |
| """ | |
| from textattack.transformations import Transformation | |
| class WordInsertion(Transformation): | |
| """A base class for word insertions.""" | |
| def _get_new_words(self, current_text, index): | |
| """Returns a set of new words we can insert at position `index` of `current_text` | |
| Args: | |
| current_text (AttackedText): Current text to modify. | |
| index (int): Position in which to insert a new word | |
| Returns: | |
| list[str]: List of new words to insert. | |
| """ | |
| raise NotImplementedError() | |
| def _get_transformations(self, current_text, indices_to_modify): | |
| """ | |
| Return a set of transformed texts obtained by insertion a new word in `indices_to_modify` | |
| Args: | |
| current_text (AttackedText): Current text to modify. | |
| indices_to_modify (list[int]): List of positions in which to insert a new word. | |
| Returns: | |
| list[AttackedText]: List of transformed texts | |
| """ | |
| transformed_texts = [] | |
| for i in indices_to_modify: | |
| new_words = self._get_new_words(current_text, i) | |
| new_transformted_texts = [] | |
| for w in new_words: | |
| new_transformted_texts.append( | |
| current_text.insert_text_before_word_index(i, w) | |
| ) | |
| transformed_texts.extend(new_transformted_texts) | |
| return transformed_texts | |