Source code for OpenAttack.attack_assist.substitute.word.chinese_cilin
from typing import Optional
from .base import WordSubstitute
from ....data_manager import DataManager
from ....exceptions import WordNotInDictionaryException
from ....tags import *
[docs]class ChineseCiLinSubstitute(WordSubstitute):
TAGS = { TAG_Chinese }
[docs] def __init__(self, k : Optional[int] = None):
"""
Chinese Sememe-based word substitute based CiLin.
Args:
k: Top-k results to return. If k is `None`, all results will be returned.
:Data Requirements: :py:data:`.AttackAssist.CiLin`
:Language: chinese
"""
self.k = k
self.cilin_dict = DataManager.load("AttackAssist.CiLin")
def substitute(self, word, pos_tag):
if word not in self.cilin_dict:
raise WordNotInDictionaryException()
sym_words = self.cilin_dict[word]
ret = []
for sym_word in sym_words:
ret.append((sym_word, 1))
if self.k is not None:
ret = ret[:self.k]
return ret