#!/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'\!([^\)])', r'! \1', s) s = s.replace('/', ' ') s = s.upper() s = re.sub(r'\s+', ' ', s).strip() junks = [ 'ВОЕННОЕ', 'ВЫШЕСТОЯЩИХ', 'ПРАВО', 'ПРАВИЛАМ ВОЙНЫ', 'ВЫПИСКА', 'КОНТРОЛЬ', 'ИХ', 'ПО', 'НАВЫКИ', 'С ВЫШЕСТОЯЩИМИ', #'ПРИСУТСТВИЕ', #'ЛИНЕЙНО', 'ЗАКОННО!', 'ПОХЛЕБКА', 'СВЯЗЕЙ', 'ЖУЮЩЕГО ХРЯЩИ', 'ИНДЕКСИРОВАН БЕЗУКОРИЗНЕННО', 'ОТКЛАДЫВАЕТСЯ ЛИНЕЙНО', '- ЕГО ВЕЛИЧЕСТВО', 'ГУБЕРНИЯ', 'С ВЫШЕСТОЯЩИМИ КОНТРОЛЬ', 'С ЛОКАЦИИ', #'КАЗНЬ', 'ГУБЕРНИЯ', ] # только без пробелов junks_words = list(filter(lambda w: ' ' not in w, junks)) # только с пробелами junks_nwords = list(filter(lambda w: w not in junks_words, junks)) if remove_junk: s = s.split(' ') s = list(filter(lambda l: re.sub(r'\.$', '', l) not in junks_words, s)) s = ' '.join(s) for j in junks_nwords: s = s.replace(j, '') # хортица - это буква Х 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[6:]: 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())