Source code for OpenAttack.utils.auto_lang
[docs]def get_language(obj_list):
lang_tag_cnt = {}
for it in obj_list:
for tag in it.TAGS:
if tag.type == "lang":
if tag not in lang_tag_cnt:
lang_tag_cnt[tag] = 0
lang_tag_cnt[tag] += 1
# argmax
lang_tag = None
for tag, cnt in lang_tag_cnt.items():
if lang_tag is None or cnt > lang_tag_cnt[lang_tag]:
lang_tag = tag
# no language
if lang_tag is None:
raise RuntimeError("No language support")
else:
if lang_tag_cnt[lang_tag] < len(obj_list):
unsupported_names = []
for it in obj_list:
if lang_tag not in it.TAGS:
unsupported_names.append( it.__class__.__name__ )
raise RuntimeError("Try to use language `%s`, but %s not support " % (lang_tag, unsupported_names))
else:
return lang_tag
[docs]def check_language(obj_list, lang_tag):
unsupported_names = []
for it in obj_list:
if lang_tag not in it.TAGS:
unsupported_names.append( it.__class__.__name__ )
if len(unsupported_names) > 0:
raise RuntimeError("using language `%s`, but %s not support " % (lang_tag, unsupported_names))
[docs]def language_by_name(name):
from ..tags import TAG_ALL_LANGUAGE, TAG_English
if name is None:
return TAG_English
for tag in TAG_ALL_LANGUAGE:
if tag.name == name:
return tag
return None