"""
Word Swap Transformation by swapping the order of words
==========================================================
"""
import random
from textattack.transformations import Transformation
[docs]class WordInnerSwapRandom(Transformation):
"""Transformation that randomly swaps the order of words in a sequence."""
def _get_transformations(self, current_text, indices_to_modify):
transformed_texts = []
words = current_text.words
for idx in indices_to_modify:
word = words[idx]
swap_idxs = list(set(range(len(words))) - {idx})
if swap_idxs:
swap_idx = random.choice(swap_idxs)
swapped_text = current_text.replace_word_at_index(
idx, words[swap_idx]
).replace_word_at_index(swap_idx, word)
transformed_texts.append(swapped_text)
return transformed_texts
@property
def deterministic(self):
return False