Source code for OpenAttack.attack_assist.substitute.char.english_eces

"""
    对26个字母(大小写),返回一个最相近字母,同时希望其引起最大影响
    进一步工作:对一段文本以概率p进行扰动
"""
from .base import CharSubstitute
from ....tags import *


H = {'a': 'â', 'b': 'ḃ', 'c': 'ĉ', 'd': 'ḑ', 'e': 'ê', 'f': 'ḟ', 'g': 'ǵ', 'h': 'ĥ', 'i': 'î',
     'j': 'ĵ', 'k': 'ǩ', 'l': 'ᶅ', 'm': 'ḿ', 'n': 'ň', 'o': 'ô', 'p': 'ṕ', 'q': 'ʠ', 'r': 'ř',
     's': 'ŝ', 't': 'ẗ', 'u': 'ǔ', 'v': 'ṽ', 'w': 'ẘ', 'x': 'ẍ', 'y': 'ŷ', 'z': 'ẑ',
     'A': 'Â', 'B': 'Ḃ', 'C': 'Ĉ', 'D': 'Ď', 'E': 'Ê', 'F': 'Ḟ', 'G': 'Ĝ', 'H': 'Ĥ', 'I': 'Î',
     'J': 'Ĵ', 'K': 'Ǩ', 'L': 'Ĺ', 'M': 'Ḿ', 'N': 'Ň', 'O': 'Ô', 'P': 'Ṕ', 'Q': 'Q', 'R': 'Ř',
     'S': 'Ŝ', 'T': 'Ť', 'U': 'Û', 'V': 'Ṽ', 'W': 'Ŵ', 'X': 'Ẍ', 'Y': 'Ŷ', 'Z': 'Ẑ'}


[docs]class ECESSubstitute(CharSubstitute): TAGS = { TAG_English }
[docs] def __init__(self): """ Returns the chars that is visually similar to the input. DCES substitute used in :py:class:`.VIPERAttacker`. :Data Requirements: :py:data:`.AttackAssist.SIM` :Language: english """ self.h = H
def substitute(self, char: str): """ :param word: the raw char, threshold: return top k chars. :return: The result is a list of tuples, *(substitute, 1)*. :rtype: list of tuple """ if char not in self.h: return [(char, 1)] return [(self.h[char], 1)]