mirror of
https://github.com/QData/TextAttack.git
synced 2021-10-13 00:05:06 +03:00
support custom models; waiting on datasets integration
This commit is contained in:
90
textattack/shared/utils/strings.py
Normal file
90
textattack/shared/utils/strings.py
Normal file
@@ -0,0 +1,90 @@
|
||||
def has_letter(word):
|
||||
""" Returns true if `word` contains at least one character in [A-Za-z]. """
|
||||
for c in word:
|
||||
if c.isalpha(): return True
|
||||
return False
|
||||
|
||||
def add_indent(s_, numSpaces):
|
||||
s = s_.split('\n')
|
||||
# don't do anything for single-line stuff
|
||||
if len(s) == 1:
|
||||
return s_
|
||||
first = s.pop(0)
|
||||
s = [(numSpaces * ' ') + line for line in s]
|
||||
s = '\n'.join(s)
|
||||
s = first + '\n' + s
|
||||
return s
|
||||
|
||||
def words_from_text(s, words_to_ignore=[]):
|
||||
""" Lowercases a string, removes all non-alphanumeric characters,
|
||||
and splits into words. """
|
||||
words = []
|
||||
word = ''
|
||||
for c in ' '.join(s.split()):
|
||||
if c.isalpha():
|
||||
word += c
|
||||
elif word:
|
||||
if word not in words_to_ignore: words.append(word)
|
||||
word = ''
|
||||
if len(word) and (word not in words_to_ignore):
|
||||
words.append(word)
|
||||
return words
|
||||
|
||||
def default_class_repr(self):
|
||||
extra_params = []
|
||||
for key in self.extra_repr_keys():
|
||||
extra_params.append(' ('+key+')'+': {'+key+'}')
|
||||
if len(extra_params):
|
||||
extra_str = '\n' + '\n'.join(extra_params) + '\n'
|
||||
extra_str = f'({extra_str})'
|
||||
else:
|
||||
extra_str = ''
|
||||
extra_str = extra_str.format(**self.__dict__)
|
||||
return f'{self.__class__.__name__}{extra_str}'
|
||||
|
||||
LABEL_COLORS = [
|
||||
'red', 'green',
|
||||
'blue', 'purple',
|
||||
'yellow', 'orange',
|
||||
'pink', 'cyan',
|
||||
'gray', 'brown'
|
||||
]
|
||||
|
||||
def color_from_label(label_num):
|
||||
""" Colors for labels (arbitrary). """
|
||||
label_num %= len(LABEL_COLORS)
|
||||
return LABEL_COLORS[label_num]
|
||||
|
||||
class ANSI_ESCAPE_CODES:
|
||||
""" Escape codes for printing color to the terminal. """
|
||||
HEADER = '\033[95m'
|
||||
OKBLUE = '\033[94m'
|
||||
OKGREEN = '\033[92m'
|
||||
WARNING = '\033[93m'
|
||||
GRAY = '\033[37m'
|
||||
FAIL = '\033[91m'
|
||||
BOLD = '\033[1m'
|
||||
UNDERLINE = '\033[4m'
|
||||
""" This color stops the current color sequence. """
|
||||
STOP = '\033[0m'
|
||||
|
||||
def color_text(text, color=None, method=None):
|
||||
if method is None:
|
||||
return text
|
||||
if method == 'html':
|
||||
return f'<font color = {color}>{text}</font>'
|
||||
elif method == 'stdout':
|
||||
if color == 'green':
|
||||
color = ANSI_ESCAPE_CODES.OKGREEN
|
||||
elif color == 'red':
|
||||
color = ANSI_ESCAPE_CODES.FAIL
|
||||
elif color == 'blue':
|
||||
color = ANSI_ESCAPE_CODES.OKBLUE
|
||||
elif color == 'gray':
|
||||
color = ANSI_ESCAPE_CODES.GRAY
|
||||
else:
|
||||
color = ANSI_ESCAPE_CODES.BOLD
|
||||
|
||||
return color + text + ANSI_ESCAPE_CODES.STOP
|
||||
elif method == 'file':
|
||||
return '[[' + text + ']]'
|
||||
Reference in New Issue
Block a user