4 Commits

6 changed files with 65 additions and 125 deletions

View File

@@ -6,7 +6,7 @@ on:
image_tag: image_tag:
description: '2. Tag für das Docker-Image (außer latest) (z.B. v1.0.0)' description: '2. Tag für das Docker-Image (außer latest) (z.B. v1.0.0)'
required: true required: true
default: '0.6.0' default: '0.7.0'
env: env:
image_name: mysteryhelfer image_name: mysteryhelfer

View File

@@ -4,7 +4,7 @@ import streamlit as st
import base64 import base64
import tools import tools
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from helper import show_map_folium import helper
standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion mit leerem' standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion mit leerem'
' Eingabefeld aufrufen.') ' Eingabefeld aufrufen.')
@@ -224,6 +224,7 @@ if 'input_text' not in st.session_state:
st.session_state.input_text = "" st.session_state.input_text = ""
if 'output_text' not in st.session_state: if 'output_text' not in st.session_state:
st.session_state.output_text = standard_output st.session_state.output_text = standard_output
st.session_state.output_text += helper.generate_special_files()
if 'map_data' not in st.session_state: if 'map_data' not in st.session_state:
st.session_state.map_data = None st.session_state.map_data = None
if 'graph_data' not in st.session_state: if 'graph_data' not in st.session_state:
@@ -361,7 +362,7 @@ st.markdown(st.session_state.output_text)
# Karte anzeigen, falls aktiviert # Karte anzeigen, falls aktiviert
if st.session_state.map_data is not None: if st.session_state.map_data is not None:
st.subheader("Kartenansicht") st.subheader("Kartenansicht")
show_map_folium(st.session_state.map_data) helper.show_map_folium(st.session_state.map_data)
if st.session_state.graph_data is not None: if st.session_state.graph_data is not None:

View File

@@ -5,6 +5,7 @@ from re import match # für unkennify
import streamlit as st import streamlit as st
from streamlit_folium import st_folium from streamlit_folium import st_folium
import folium import folium
import os
# ***recursive quersummenfunktion*** # ***recursive quersummenfunktion***
@@ -175,6 +176,20 @@ def unkennify(text):
decoded = decoded + text[i:] decoded = decoded + text[i:]
return decoded return decoded
def generate_special_files():
out="\n\n\n"
if os.path.exists("./data/morse-de.dic"):
pass
else:
remorse_generate_morsede()
out+=":blue[deutsches Re-Morse-Wörterbuch wurde generiert] \n"
if os.path.exists("./data/t9-de.dic"):
pass
else:
t9_generate_t9de()
out+=":blue[deutsches T9-Wörterbuch wurde generiert] \n"
return out
def remorse_generate_morsede(): def remorse_generate_morsede():
alphabet = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', alphabet = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.',
'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.',
@@ -225,62 +240,6 @@ def t9_generate_t9de():
file.close() file.close()
ofile.close() ofile.close()
def remorse_germandic(eingabetext):
alphabet = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.',
'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.',
'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-',
'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..', '1': '.----',
'2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...',
'8': '---..', '9': '----.', '0': '-----', 'Ñ': '--.--', 'É': '..-..', 'È': '.-..-',
'À': '.--.-', 'Ü': '..--', 'Ö': '---.', 'Ä': '.-.-', '_': '..--.-', '@': '.--.-.',
'?': '..--..', '=': '-...-', ';': '-.-.-.', ':': '---...', '/': '-..-.',
'.': '.-.-.-', '-': '-....-', ',': '--..--', '+': '.-.-.', ')': '-.--.-',
'(': '-.--.', "'": '.----.', 'SS': '...--..'}
ualphabet = {v: k for k, v in alphabet.items()}
ualphabet["...--.."] = "ß"
eingabetext = eingabetext.rstrip()
wbfile = open("./data/german.dic", "r", encoding="iso-8859-15")
ausgabetext = ":blue[der eingegebene Morsecode kann für folgendes stehen:] \n"
if eingabetext in ualphabet:
ausgabetext += ualphabet[eingabetext] + " \n"
for zeile in wbfile:
zeile = zeile.strip(" \t\n\r")
mzeile = ""
try:
for char in zeile:
mzeile += alphabet[char.upper()]
except KeyError:
continue
if eingabetext == mzeile:
ausgabetext += zeile + " \n"
wbfile.close()
return ausgabetext
def t9_germandic(eingabetext):
alphabet = {'A': '2', 'B': '2', 'C': '2', 'D': '3', 'E': '3', 'F': '3', 'G': '4',
'H': '4', 'I': '4', 'J': '5', 'K': '5', 'L': '5', 'M': '6', 'N': '6',
'O': '6', 'P': '7', 'Q': '7', 'R': '7', 'S': '7', 'T': '8', 'U': '8',
'V': '8', 'W': '9', 'X': '9', 'Y': '9', 'Z': '9', '1': '1', '2': '2',
'3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9',
'0': '0', 'Ñ': '6', 'É': '3', 'È': '3', 'À': '2', 'Ü': '8', 'Ö': '6',
'Ä': '2', '@': '1', '?': '1', '=': '0', ':': '1', '/': '1', '.': '1',
'-': '1', ',': '1', '+': '0', ')': '1', '(': '1', 'SS': '7'}
eingabetext = eingabetext.rstrip()
wbfile = open("./data/german.dic", "r", encoding="iso-8859-15")
ausgabetext = ":blue[der eingegebene T9-Code kann für folgendes stehen:] \n"
for zeile in wbfile:
zeile = zeile.strip(" \t\n\r")
mzeile = ""
try:
for char in zeile:
mzeile += alphabet[char.upper()]
except KeyError:
continue
if eingabetext == mzeile:
ausgabetext += zeile + " \n"
wbfile.close()
return ausgabetext
def rail_encrypt(plain_text: str, rails: int): def rail_encrypt(plain_text: str, rails: int):
arr = [["" for _ in range(len(plain_text))] for _ in range(rails)] arr = [["" for _ in range(len(plain_text))] for _ in range(rails)]
r = 0 r = 0

View File

@@ -299,13 +299,9 @@ wortsuche_en = ("### Wortsuche mit Wörterbuch EN\n"
remorse_de = ("### RE-Morse DE\n" remorse_de = ("### RE-Morse DE\n"
"Es gibt ja so Leute, die finden es lustig einen Morsecode so aufzuschreiben, daß zwar Wort für Wort " "Es gibt ja so Leute, die finden es lustig einen Morsecode so aufzuschreiben, daß zwar Wort für Wort "
"getrennt wird, aber ansonsten einfach mal die Leerzeichen weggelassen werden. Bei genau solchen " "getrennt wird, aber ansonsten einfach mal die Leerzeichen weggelassen werden. Bei genau solchen "
"fiesen Gemeinheiten hilft diese Funktion. Diese Funktion benutzt die deutsche Wörterbuchdatei vom " "fiesen Gemeinheiten hilft diese Funktion. Für diese Funktion wurde basierend auf der deutschen "
"Project https://sourceforge.net/projects/germandict \n" "Wörterbuchdatei vom Project https://sourceforge.net/projects/germandict eine "
"Da eine Abfrage relativ lange dauert gibt es die Möglichkeit ein ca. 100 MB großes remorse-de.dic " "spezielle Wörterbuchdatei generiert, um eine beschleunigte Abfrage zu ermöglichen.")
"generieren zu lassen, welches ab der nächsten Abfrage dann genutzt wird und wodurch dann nur noch "
"ca. 20% der Zeit pro Abfrage benötigt wird. Um die Erstellung zu starten muß das Wort GENERATE "
"(Großschreibung beachten!) ins Eingabefeld eingetragen werden und der Funktionsknopf betätigt "
"werden.")
remorse_en = ("### RE-Morse EN\n" remorse_en = ("### RE-Morse EN\n"
"Es gibt ja so Leute, die finden es lustig einen Morsecode so aufzuschreiben, daß zwar Wort für Wort " "Es gibt ja so Leute, die finden es lustig einen Morsecode so aufzuschreiben, daß zwar Wort für Wort "
@@ -320,11 +316,9 @@ t9_de = ("### T9-DE\n"
"enthaltenen Wörter die zu der eingegebenen T9-kodierten Ziffernfolge passen und gibt " "enthaltenen Wörter die zu der eingegebenen T9-kodierten Ziffernfolge passen und gibt "
"diese aus. \n" "diese aus. \n"
"Bsp. 56673462836 liefert das Wort Koordinaten \n" "Bsp. 56673462836 liefert das Wort Koordinaten \n"
"Da eine Abfrage relativ lange dauert gibt es die Möglichkeit ein spezielles t9-Wörterbuch " "Für diese Funktion wurde basierend auf der deutschen Wörterbuchdatei vom Project "
"generieren zu lassen, welches ab der nächsten Abfrage dann genutzt wird und wodurch dann nur noch ca. " "https://sourceforge.net/projects/germandict eine spezielle Wörterbuchdatei generiert, um eine beschleunigte "
"15% der Zeit pro Abfrage benötigt wird. Um die Erstellung des t9-de.dic zu starten muß das Wort " "Abfrage zu ermöglichen.")
"GENERATE (Großschreibung beachten!) ins Eingabefeld eingetragen werden und der Funktionsknopf "
"betätigt werden.")
t9_en = ("### T9-EN\n" t9_en = ("### T9-EN\n"
"Mit Hilfe der englischen Wörterliste en_US-large.txt vom Project " "Mit Hilfe der englischen Wörterliste en_US-large.txt vom Project "

View File

@@ -1461,34 +1461,19 @@ def remorse_de(eingabetext):
if eingabetext == "": if eingabetext == "":
return hilfetexte.remorse_de return hilfetexte.remorse_de
else: else:
try: wbfile = open("./data/morse-de.dic", "r", encoding="iso-8859-15")
wbfile = open("./data/morse-de.dic", "r",
encoding="iso-8859-15") # german.dic von https://sourceforge.net/projects/germandict/
except FileNotFoundError:
try:
testfile = open("./data/german.dic", "r")
testfile.close()
if eingabetext == "GENERATE":
helper.remorse_generate_morsede()
return (":green[Remorse-Wörterbuch wurde erzeugt und wird ab dem nächsten Aufruf der Funktion "
"benutzt.]")
else:
ausgabetext = (":green[Da das Remorse-Wörterbuch noch nicht generiert wurde, wurde das normale "
"Wörterbuch für die Suche benutzt, das dauert zwar ca. 5x so lange, aber geht "
"auch. \n"
"Um das Remorse-Wörterbuch zu erzeugen bitte das Wort:] :orange[GENERATE] "
":green[ins Eingabefeld eingeben und die Funktion starten.] \n \n")
return ausgabetext + helper.remorse_germandic(eingabetext)
except FileNotFoundError:
return ":red[Leider konnte die Wörterbuchdatei nicht geladen werden.]"
else:
ausgabetext = ":blue[der eingegebene Morsecode kann für folgendes stehen:] \n" ausgabetext = ":blue[der eingegebene Morsecode kann für folgendes stehen:] \n"
count = 0
for zeile in wbfile: for zeile in wbfile:
zeile = zeile.strip(" \t\n\r") zeile = zeile.strip(" \t\n\r")
mline = zeile.split(",") mline = zeile.split(",")
if eingabetext == mline[0]: if eingabetext == mline[0]:
ausgabetext += mline[1] + " \n" ausgabetext += mline[1] + " \n"
count += 1
wbfile.close() wbfile.close()
if count == 0:
return ":red[leider nichts gefunden :disappointed:]"
else:
return ausgabetext return ausgabetext
def remorse_en(eingabetext): def remorse_en(eingabetext):
@@ -1516,6 +1501,7 @@ def remorse_en(eingabetext):
ausgabetext = ":blue[der eingegebene Morsecode kann für folgendes stehen:] \n" ausgabetext = ":blue[der eingegebene Morsecode kann für folgendes stehen:] \n"
if eingabetext in ualphabet: if eingabetext in ualphabet:
ausgabetext += ualphabet[eingabetext] + " \n" ausgabetext += ualphabet[eingabetext] + " \n"
count = 0
for zeile in wbfile: for zeile in wbfile:
zeile = zeile.strip(" \t\n\r") zeile = zeile.strip(" \t\n\r")
mzeile = "" mzeile = ""
@@ -1526,7 +1512,11 @@ def remorse_en(eingabetext):
continue continue
if eingabetext == mzeile: if eingabetext == mzeile:
ausgabetext += zeile + " \n" ausgabetext += zeile + " \n"
count += 1
wbfile.close() wbfile.close()
if count == 0:
return ":red[leider nichts gefunden :disappointed:]"
else:
return ausgabetext return ausgabetext
def t9_de(eingabetext): def t9_de(eingabetext):
@@ -1534,31 +1524,19 @@ def t9_de(eingabetext):
if eingabetext == "": if eingabetext == "":
return hilfetexte.t9_de return hilfetexte.t9_de
else: else:
try:
wbfile = open("./data/t9-de.dic", "r", encoding="iso-8859-15") wbfile = open("./data/t9-de.dic", "r", encoding="iso-8859-15")
except FileNotFoundError:
try:
testfile = open("./data/german.dic", "r")
testfile.close()
if eingabetext == "GENERATE":
helper.t9_generate_t9de()
return ":green[t9-Wörterbuch wurde erzeugt und wird ab dem nächsten Aufruf der Funktion benutzt.]"
else:
ausgabetext = (":green[Da das T9-Wörterbuch nicht vorhanden ist, wurde das normale Wörterbuch für "
"die Suche benutzt. Das dauert zwar ca. 7x so lange, aber geht auch. \n"
"Um das spezielle T9-Wörterbuch zu erzeugen bitte das Wort:] :orange[GENERATE] "
":green[ins Eingabefeld eingeben und die Funktion starten.] \n \n")
return ausgabetext + helper.t9_germandic(eingabetext)
except FileNotFoundError:
return ":red[Leider konnte die Wörterbuchdatei nicht geladen werden.]"
else:
ausgabetext = ":blue[der eingegebene T9-Code kann für folgendes stehen:] \n" ausgabetext = ":blue[der eingegebene T9-Code kann für folgendes stehen:] \n"
count = 0
for zeile in wbfile: for zeile in wbfile:
zeile = zeile.strip(" \t\n\r") zeile = zeile.strip(" \t\n\r")
mline = zeile.split(",") mline = zeile.split(",")
if eingabetext == mline[0]: if eingabetext == mline[0]:
ausgabetext += mline[1] + " \n" ausgabetext += mline[1] + " \n"
count += 1
wbfile.close() wbfile.close()
if count == 0:
return ":red[leider nichts gefunden :disappointed:]"
else:
return ausgabetext return ausgabetext
def t9_en(eingabetext): def t9_en(eingabetext):
@@ -1580,6 +1558,7 @@ def t9_en(eingabetext):
return ":red[Leider konnte die Wörterbuchdatei nicht geladen werden.]" return ":red[Leider konnte die Wörterbuchdatei nicht geladen werden.]"
else: else:
ausgabetext = ":blue[der eingegebene T9-Code kann für folgendes stehen:] \n" ausgabetext = ":blue[der eingegebene T9-Code kann für folgendes stehen:] \n"
count = 0
for zeile in wbfile: for zeile in wbfile:
zeile = zeile.strip(" \t\n\r") zeile = zeile.strip(" \t\n\r")
mzeile = "" mzeile = ""
@@ -1590,7 +1569,11 @@ def t9_en(eingabetext):
continue continue
if eingabetext == mzeile: if eingabetext == mzeile:
ausgabetext += zeile + " \n" ausgabetext += zeile + " \n"
count += 1
wbfile.close() wbfile.close()
if count == 0:
return ":red[leider nichts gefunden :disappointed:]"
else:
return ausgabetext return ausgabetext
def vigenere(eingabetext, pw): def vigenere(eingabetext, pw):

View File

@@ -26,3 +26,6 @@ Der einfachst Weg, um die App lokal laufen zu lassen, ist mit Docker, wobei ich
- `docker compose up` - `docker compose up`
bei allen 3 Varianten ist die App anschließend im Browser unter http://127.0.0.1:8501/ aufrufbar bei allen 3 Varianten ist die App anschließend im Browser unter http://127.0.0.1:8501/ aufrufbar
__HINWEIS: Beim ersten Aufruf der Adresse werden Special-Wörterbücher für RE-Morse und T9 generiert,
was ca. 15-30s in Anspruch nimmt und dadurch das Laden der Seite einmalig verzögert.__