|
""" |
|
Word Swap Transformation by swapping the order of words |
|
========================================================== |
|
""" |
|
|
|
|
|
import random |
|
|
|
from textattack.transformations import Transformation |
|
|
|
|
|
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 |
|
|