Source code for OpenAttack.attack_assist.substitute.word.english_hownet

from .base import WordSubstitute
from ....data_manager import DataManager
from ....exceptions import WordNotInDictionaryException
from ....tags import TAG_English
import pickle


[docs]class HowNetSubstitute(WordSubstitute): TAGS = { TAG_English }
[docs] def __init__(self, k = None): """ English Sememe-based word substitute based on OpenHowNet. `[pdf] <https://arxiv.org/pdf/1901.09957.pdf>`__ Args: k: Top-k results to return. If k is `None`, all results will be returned. :Data Requirements: :py:data:`.AttackAssist.HownetSubstituteDict` :Language: english """ with open(DataManager.load("AttackAssist.HownetSubstituteDict"),'rb') as fp: self.dict=pickle.load(fp) self.k = k
def substitute(self, word: str, pos: str): if word not in self.dict or pos not in self.dict[word]: raise WordNotInDictionaryException() word_candidate = self.dict[word][pos] ret = [] for wd in word_candidate: ret.append((wd, 1)) if self.k is not None: ret = ret[ : self.k] return ret