#!/usr/bin/env python3 import argparse, sys, json, os, re try: from termcolor import cprint colors_supported = True except ImportError: colors_supported = False CWD = os.path.dirname(os.path.realpath(__file__)) def print_colored(s, color, fallback_prefix=''): if colors_supported: cprint(s, color) else: print(fallback_prefix + s) def load_data(): with open(os.path.join(CWD, "data.json")) as f: data = json.loads(f.read()) # ignore placeholders data = list(filter(lambda i: i['text'] != '', data)) return data def clean_string(s, remove_junk=False): s = s.replace(')', ') ') s = re.sub(r'\!([^\)])', '!\1 ', s) s = s.replace('/', ' ') s = s.upper() if remove_junk: # сделаем из этого одну букву В s = s.replace('ВОЕННОЕ ВМЕШАТЕЛЬСТВО', 'ВОЕННОЕ_ВМЕШАТЕЛЬСТВО') # это просто мусор for junk in [ 'ВЫШЕСТОЯЩИХ ПО ПРАВО', 'ВОЕННОЕ ПО ПРАВО', 'ПО ПРАВИЛАМ ВОЙНЫ', 'ПО ВЫПИСКА', 'СВЯЗЕЙ', 'ИНДЕКСИРОВАН БЕЗУКОРИЗНЕННО', 'ПОХЛЕБКА ЗАКОННО!', 'СУХОГРУЗ ОТКЛАДЫВАЕТСЯ ЛИНЕЙНО', '- ЕГО ВЕЛИЧЕСТВО', 'ГУБЕРНИЯ', 'С ВЫШЕСТОЯЩИМИ КОНТРОЛЬ', 'С ЛОКАЦИИ', 'КАЗНЬ ПО ВЫШЕСТОЯЩ']: s = s.replace(junk, '') # хортица - это буква Х s = s.replace('Х О Р Т И Ц А', 'Х_О_Р_Т_И_Ц_А') s = re.sub(r'\s+', ' ', s).strip() return s def decode(s, optimize=False): buf = '' for word in s.split(' '): word = word.strip() if word == '': continue if re.match(r'^\d+\%$', word): buf += word else: letter = word[0] buf += letter if optimize: buf = re.sub(r'ппв', '', buf, flags=re.I) return buf def main(): parser = argparse.ArgumentParser() parser.add_argument('--remove-junk', action='store_true') parser.add_argument('cmd', type=str) args = parser.parse_args() data = load_data() if args.cmd == 'decode': # ignore type2 data = list(filter(lambda i: 'type' not in i, data)) # sort by text length data = sorted(data, key=lambda i: len(i['text'])) for obj in data: text = obj['text'] text = clean_string(text, remove_junk=args.remove_junk) print(obj['text']) print_colored(text, 'green', fallback_prefix='[CLEANED] ') print_colored(decode(text, optimize=False), 'cyan', fallback_prefix='[DECODED] ') if 'pic' in obj: pic = obj['pic'] if isinstance(obj['pic'], list) else [obj['pic']] print_colored(', '.join(pic), 'red', fallback_prefix='[PICS] ') print("\n") elif args.cmd == 'stats': count = len(data) print("Total texts: %s" % count) if __name__ == '__main__': sys.exit(main())