Source code for OpenAttack.attack_assist.substitute.char.chinese_fyh_char
from typing import Optional
from .base import CharSubstitute
from ....data_manager import DataManager
from ....tags import *
[docs]class ChineseFYHCharSubstitute(CharSubstitute):
TAGS = { TAG_Chinese }
[docs] def __init__(self, k : Optional[int] = None):
"""
Returns traditional, variant and Martian characters of the input character.
Args:
k: Top-k results to return. If k is `None`, all results will be returned.
:Data Requirements: :py:data:`.AttackAssist.FYH`
:Language: chinese
"""
super().__init__()
self.tra_dict, self.var_dict, self.hot_dict = DataManager.load("AttackAssist.FYH")
self.k = k
def substitute(self, char: str):
ret = []
if char in self.tra_dict or char in self.var_dict or char in self.hot_dict:
fanyihuo_result = set()
if char in self.tra_dict:
fanyihuo_result = fanyihuo_result.union(self.tra_dict[char])
if char in self.var_dict:
fanyihuo_result = fanyihuo_result.union(self.var_dict[char])
if char in self.hot_dict:
fanyihuo_result = fanyihuo_result.union(self.hot_dict[char])
for ch in fanyihuo_result:
ret.append((ch, 1))
if self.k is not None:
ret = ret[:self.k]
return ret