From 78d30dc45507c0877d0896160be5feb7409d39bb Mon Sep 17 00:00:00 2001 From: rusinthread Date: Fri, 23 Dec 2016 16:08:46 +0300 Subject: decode type2 ciphers --- README.md | 4 ++++ data.json | 17 +++++++++-------- main.py | 42 ++++++++++++++++++++++++++++++++++-------- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index e70ec6d..26f59c3 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ Опция `--with-junk` пропускает удаление мусорных слов (бывает полезно, чтобы посмотреть как будет без удаления, на случай если удаляется что-то лишнее). +Через `--type` можно задать тип шифровок (`1` или `2`). 1 это обычные, составленные из слов, 2 появился позднее, он составлен из предложений. + +### Другое ### + В файле `data.json` лежат тексты и метаинформация, собранные с архивов двача и фейсбука. Кроме `pic` там ничего полезного нет. В папке `img` лежат связанные с текстами изображения. Работает на Python 3, рекомендуется установить модуль `termcolor` чтобы вывод был цветным. diff --git a/data.json b/data.json index 0c8ce6a..22232f5 100644 --- a/data.json +++ b/data.json @@ -216,16 +216,17 @@ "source": "2ch" }, { - "text": "", - "pic": "", - "date": "0/0/16", - "source": "" + "text": "Казнь по Вышестоящих Контроль ТРИУМФАЛЬНО! Отмечено! - ТРИУМФАЛЬНО! Отмечено! Имения Вышестоящих По Право закадычно[паррома] Номер Индексирован Безукоризненно Имения Вышестоящих По Право Х О Р Т И Ц А УКДВРК закадычно[паррома] Номер Индексирован Безукоризненно Акробатическое По Правилам Войны Линейно с Локации Отмечено! ТРИУМФАЛЬНО! Отмечено! МЕСТА(!), Чечевичная похлебка ЗАКОННО! ТРИУМФАЛЬНО! Отмечено! Имения Вышестоящих По Право Номер Индексирован Безукоризненнно Фехтовальные Навыки Отмечено! РОБОТИЧЕСКИ МЕСТА(!) Акробатическое По Правилам Войны Цепочка Связей Имения Вышестоящих По Право Ярославская Губерния УКДВРК ТРИУМФАЛЬНО! Екатерина Казнь по Вышестоящих Контроль Линейно с Локации Акробатическое По Правилам Войны.", + "pic": ["марш.jpg", "мовсаев.jpg"], + "date": "23/12/16", + "source": "fb" }, { - "text": "", - "pic": "", - "date": "0/0/16", - "source": "" + "text": "А машина-то солидная у него. Вы Арман? И решился на это... Она шипела на него всякий раз. Машина и бутылка виски. И решился на это... И у нее серьги видел я. Потом юркнул за угол... И щелочи там следы... Машина и бутылка виски. Кстати, йодом была обработана рана. Вот сволочь же. Мешки лежали под этим. Он ей сказал сделать это. Я дочитывал почти до середины в тот момент. Машина и бутылка виски. А так с виду не негодяй вроде. Тряпки завернуты в газету были. Вы Арман? Машина и бутылка виски. И не скажешь ведь ничего такого. А так с виду не негодяй вроде. Он ей сказал сделать это. И решился на это... И не скажешь ведь ничего такого. Он ей сказал сделать это. А так с виду не негодяй вроде. Не оглянулась даже. А машина-то солидная у него. Машина и бутылка виски. И не скажешь ведь ничего такого. Не оглянулась даже. Почему вы интересуетесь этим? Не оглянулась даже. Вот сволочь же. А так с виду не негодяй вроде. И не скажешь ведь ничего такого. Про Ынтымак что-то там было написано. А машина-то солидная у него. Машина и бутылка виски. Вот сволочь же. Почему вы интересуетесь этим? Не оглянулась даже. Я дочитывал почти до середины в тот момент. А как Элиза Лэм? Вы Арман? А машина-то солидная у него. Машина и бутылка виски.", + "pic": "марш.jpg", + "date": "23/12/16", + "source": "fb", + "type": 2 }, { "text": "", diff --git a/main.py b/main.py index b493296..ed0d793 100755 --- a/main.py +++ b/main.py @@ -55,7 +55,6 @@ def clean_string(s, remove_junk=False): 'ГУБЕРНИЯ', 'С ВЫШЕСТОЯЩИМИ КОНТРОЛЬ', 'С ЛОКАЦИИ', - 'SEARCHED', #'КАЗНЬ', 'ГУБЕРНИЯ', 'ПРОВЕРКИ', @@ -88,7 +87,6 @@ def clean_string(s, remove_junk=False): 'WILL NOT ALLOW', 'FLYWHEEL', 'TRIUMPHANTLY', - #'UNACCEPTABLE', 'BEING USED', 'NICE', 'UMBRELLA', @@ -99,7 +97,7 @@ def clean_string(s, remove_junk=False): 'ANT', 'YEAR', 'RECOGNIZED', - #'SEARCHED' + 'SEARCHED' #'LEGAL', #'FIGHTING' ] @@ -124,7 +122,6 @@ def clean_string(s, remove_junk=False): s = re.sub(r'\s+', ' ', s).strip() return s - def decode(s, is_url=False): buf = '' for word in s.split(' '): @@ -142,6 +139,20 @@ def decode(s, is_url=False): buf += letter return buf + +def decode2(s): + buf = '' + for s in re.split(r'[\?\.\!]+', s): + s = s.strip() + if s == '': + continue + + words = s.split(' ') + + letter = words[1][0] + buf += letter + + return buf def main(): parser = argparse.ArgumentParser() @@ -150,24 +161,39 @@ def main(): parser.add_argument('--decode-string') parser.add_argument('--with-junk', action='store_true') parser.add_argument('--is-url', action='store_true') + parser.add_argument('--type', type=int, choices=[1, 2], default=1) + parser.add_argument('--reverse-decoded', action='store_true') args = parser.parse_args() data = load_data() if args.decode: - # ignore type2 - data = list(filter(lambda i: 'type' not in i, data)) + # filter by type + if args.type == 2: + data = list(filter(lambda i: 'type' in i and i['type'] == 2, data)) + else: + 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=(not args.with_junk)) + + if args.type == 1: + text = clean_string(text, remove_junk=(not args.with_junk)) + text_decoded = decode(text) + + elif args.type == 2: + text_decoded = decode2(text) + + if args.reverse_decoded: + # reverse string + text_decoded = text_decoded[::-1] print(obj['text']) print_colored(text, 'green', fallback_prefix='[CLEANED] ') - print_colored(decode(text), 'cyan', fallback_prefix='[DECODED] ') + print_colored(text_decoded, 'cyan', fallback_prefix='[DECODED] ') if 'pic' in obj: pic = obj['pic'] if isinstance(obj['pic'], list) else [obj['pic']] -- cgit v1.2.3