summaryrefslogtreecommitdiff
path: root/data_lib.py
diff options
context:
space:
mode:
Diffstat (limited to 'data_lib.py')
-rw-r--r--data_lib.py202
1 files changed, 202 insertions, 0 deletions
diff --git a/data_lib.py b/data_lib.py
new file mode 100644
index 0000000..7c7859a
--- /dev/null
+++ b/data_lib.py
@@ -0,0 +1,202 @@
+import os
+import json
+import re
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+
+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 \2', s)
+ #s = s.replace('/', ' ')
+ s = s.upper()
+
+ s = re.sub(r'\s+', ' ', s).strip()
+
+ junks = [
+ 'ВОЕННОЕ',
+ 'ВЫШЕСТОЯЩИХ',
+ 'ПРАВО',
+ 'ПРАВИЛАМ ВОЙНЫ',
+ 'ВЫПИСКА',
+ 'КОНТРОЛЬ',
+ 'ИХ',
+ 'ПО',
+ 'НАВЫКИ',
+ 'С ВЫШЕСТОЯЩИМИ',
+ #'ПРИСУТСТВИЕ',
+ #'ЛИНЕЙНО',
+ 'ЗАКОННО!',
+ 'ПОХЛЕБКА',
+ 'СВЯЗЕЙ',
+ 'ЖУЮЩЕГО ХРЯЩИ',
+ 'ИНДЕКСИРОВАН БЕЗУКОРИЗНЕННО',
+ 'ОТКЛАДЫВАЕТСЯ ЛИНЕЙНО',
+ '- ЕГО ВЕЛИЧЕСТВО',
+ 'ГУБЕРНИЯ',
+ 'С ВЫШЕСТОЯЩИМИ КОНТРОЛЬ',
+ 'С ЛОКАЦИИ',
+ #'КАЗНЬ',
+ 'ГУБЕРНИЯ',
+ 'ПРОВЕРКИ',
+ 'УСТАНОВЛЕНО',
+ 'ПОБЕДИТЕЛЕМ',
+ #'СТАЛЬНЫЕ',
+ 'НЕРВЫ',
+ 'ДАРОВАНО',
+ #'ТРАНСПОРТИРОВКА',
+ 'ОДОБРЕНО',
+ 'ПРОЯВЛЕНИЯ',
+ 'УЗАКОНЕНО',
+ 'ИМЕЕТСЯ',
+ 'ЗНАЛ',
+ 'НЕ ПРИМЕЧЕНО',
+ 'НА СЕВЕР',
+ 'ПРИГОВОРИТЬ',
+ 'ШЕСТВУЕМ',
+ 'ДАГОН',
+ 'ДА МЕРЗНУЩИЙ',
+ 'КОФЕ',
+ #'РЕАГИРОВАНИЕ',
+ 'УКАЗАНО',
+ '- ВЫСОКИЙ ТИТУЛ',
+ 'ЗАКАЗ',
+ 'ЧЕРТЫ ЛИЦА',
+
+ # english
+ 'SCHOOL ON THE RIGHT',
+ 'WILL NOT ALLOW',
+ 'FLYWHEEL',
+ 'TRIUMPHANTLY',
+ 'BEING USED',
+ 'NICE',
+ 'UMBRELLA',
+ #'BIOROBOT',
+ 'CONSERVATISM',
+ 'WAS ESTABLISHED',
+ 'WITH A PASSWORD',
+ 'ANT',
+ 'YEAR',
+ 'RECOGNIZED',
+ 'SEARCHED'
+ #'LEGAL',
+ #'FIGHTING'
+ ]
+
+ # только без пробелов
+ 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, is_url=False):
+ buf = ''
+ for word in s.split(' '):
+ word = word.strip()
+ if word == '':
+ continue
+
+ if re.match(r'^\d+', word):
+ buf += word
+ elif is_url and word.endswith('://'):
+ buf += word[0]
+ buf += '://'
+ else:
+ letter = word[0]
+ 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 decode3(s):
+ buf = ''
+ for s in re.split(r'[\?\.\!]+', s):
+ s = s.strip()
+ s = s.replace(' ', '')
+ s = s.replace('-', '')
+ if not s:
+ continue
+
+ print(s)
+ continue
+
+ s = s.upper()
+
+ if s[0] in ('Ш', 'Щ', 'И'):
+ buf += s[0]
+ elif s[4] == 'Й':
+ buf += s[4]
+ elif s[0] == 'И':
+ buf += 'И'
+ elif s[7] == 'М':
+ buf += 'М'
+ elif s[4] == 'А':
+ buf += 'А'
+ elif s[2] == 'Р':
+ buf += 'Р'
+ elif s[1] == 'У':
+ buf += 'У'
+ elif s[9] == 'Ю':
+ buf += 'Ю'
+ else:
+ buf += '?'
+
+ return buf
+
+
+
+
+
+# s: source
+# t: type
+def decode_auto(s, t, reverse_decoded=False, remove_junk=True):
+ if t == 1:
+ s = clean_string(s, remove_junk=remove_junk)
+ result = decode(s)
+
+ elif t == 2:
+ result = decode2(s)
+
+ elif t == 3:
+ result = decode3(s)
+
+ if reverse_decoded:
+ # reverse string
+ result = result[::-1]
+
+ return result