Spaces:
Sleeping
Sleeping
import os | |
import sys | |
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
print("Python version:", sys.version) | |
print("Python path:", sys.path) | |
import site | |
print("Site packages:", site.getsitepackages()) | |
import streamlit as st | |
# Odstraňte nebo zakomentujte tento řádek | |
# from streamlit_option_menu import option_menu | |
import re | |
from faker import Faker | |
import json | |
import pandas as pd | |
# Odstraňte nebo zakomentujte tyto řádky | |
# from src.czech_anonymization.analyzers import custom_recognizers | |
# from src.czech_anonymization.processors import document_processors | |
# Initialize Faker for Czech | |
fake = Faker('cs_CZ') | |
# Enhanced PII patterns (simplified for brevity) | |
PII_PATTERNS = { | |
'JMÉNO': r'\b(?:(?:Ing\.|Mgr\.|JUDr\.|MUDr\.|PhDr\.|RNDr\.|doc\.|prof\.|Dr\.) )?[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ][a-záčďéěíňóřšťúůýž]+(?:[ -][A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ][a-záčďéěíňóřšťúůýž]+)*(?:(,? (?:CSc\.|DrSc\.|Ph\.D\.))?)\b', | |
'RODNÉ_ČÍSLO': r'\b\d{6}/\d{3,4}\b', | |
'DATUM_NAROZENÍ': r'\b(?:\d{1,2}\.? )?(?:\d{1,2}\.? )?(?:\d{4}|(?:led(?:na|en)|únor(?:a)?|břez(?:na|en)|dub(?:na|en)|květ(?:na|en)|červ(?:na|en)(?:ec)?|srp(?:na|en)|září|říj(?:na|en)|listopa(?:du|d)|prosine(?:c|e)) ?\d{4})\b', | |
'TELEFON': r'\b(?:\+420 ?)?(?:(?:\d{3} ?){3}|\d{9})\b', | |
'EMAIL': r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b', | |
'ADRESA': r'\b[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ][a-záčďéěíňóřšťúůýž]+(?:[ -][A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ][a-záčďéěíňóřšťúůýž]+)* \d+(?:/\d+[a-zA-Z]?)?,?\s*\d{3} ?\d{2} [A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ][a-záčďéěíňóřšťúůýž]+(?:[ -][A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ][a-záčďéěíňóřšťúůýž]+)*\b', | |
'ČÍSLO_OP': r'\b(?:\d{9}|\d{6} ?\d{3})\b', | |
'ČÍSLO_PASU': r'\b[A-Z]{2}\d{7}\b', | |
'BANKOVNÍ_ÚČET': r'\b\d{1,6}-?\d{2,10}/\d{4}\b', | |
'IČO': r'\b\d{8}\b', | |
'DIČ': r'\bCZ\d{8,10}\b', | |
'DATOVÁ_SCHRÁNKA': r'\b[a-zA-Z0-9]{7}\b' | |
} | |
def detect_and_anonymize_pii(text, selected_pii_types, anonymization_method): | |
entities = [] | |
anonymized_text = text | |
for entity_type, pattern in PII_PATTERNS.items(): | |
if entity_type in selected_pii_types: | |
for match in re.finditer(pattern, text): | |
entities.append({ | |
'start': match.start(), | |
'end': match.end(), | |
'text': match.group(), | |
'type': entity_type | |
}) | |
# Sort entities in reverse order to avoid index issues when replacing | |
entities.sort(key=lambda x: x['start'], reverse=True) | |
for entity in entities: | |
anonymized_value = anonymize_entity(entity, anonymization_method) | |
anonymized_text = anonymized_text[:entity['start']] + anonymized_value + anonymized_text[entity['end']:] | |
return {'original_text': text, 'anonymized_text': anonymized_text, 'entities': entities} | |
def anonymize_entity(entity, method): | |
if method == 'Nahradit X': | |
return 'X' * len(entity['text']) | |
elif method == 'Nahradit [TYP_ÚDAJE]': | |
return f"[{entity['type']}]" | |
elif method == 'Použít falešná data': | |
if entity['type'] == 'JMÉNO': | |
return fake.name() | |
elif entity['type'] == 'RODNÉ_ČÍSLO': | |
return fake.ssn() | |
elif entity['type'] == 'DATUM_NAROZENÍ': | |
return fake.date(pattern='%d.%m.%Y') | |
elif entity['type'] == 'TELEFON': | |
return fake.phone_number() | |
elif entity['type'] == 'EMAIL': | |
return fake.email() | |
elif entity['type'] == 'ADRESA': | |
return fake.address() | |
else: | |
return fake.word() | |
return entity['text'] | |
def main(): | |
st.set_page_config(page_title="Český PII Anotátor a Anonymizátor", layout="wide") | |
st.sidebar.title("Navigace") | |
selected = st.sidebar.selectbox( | |
"Vyberte sekci", | |
["Hlavní aplikace", "O projektu", "Budoucí vývoj", "Specifikace využití", "Testovací data"] | |
) | |
st.sidebar.markdown("---") | |
st.sidebar.markdown("[GitHub repozitář](https://github.com/petrsovadina/Anonymiza-n-platforma)") | |
if selected == "Hlavní aplikace": | |
show_main_app() | |
elif selected == "O projektu": | |
show_about_project() | |
elif selected == "Budoucí vývoj": | |
show_future_development() | |
elif selected == "Specifikace využití": | |
show_usage_specifications() | |
elif selected == "Testovací data": | |
show_test_data() | |
def show_main_app(): | |
st.title("Pokročilý Český PII Anotátor a Anonymizátor") | |
text_input = st.text_area("Zadejte český text k analýze:", height=200) | |
selected_pii_types = st.multiselect( | |
"Vyberte typy PII k detekci:", | |
list(PII_PATTERNS.keys()), | |
default=list(PII_PATTERNS.keys()) | |
) | |
anonymization_method = st.selectbox( | |
"Vyberte metodu anonymizace:", | |
["Nahradit X", "Nahradit [TYP_ÚDAJE]", "Použít falešná data"] | |
) | |
if st.button("Analyzovat a Anonymizovat"): | |
if not text_input: | |
st.error("Prosím, zadejte nějaký text k analýze.") | |
elif not selected_pii_types: | |
st.error("Prosím, vyberte alespoň jeden typ PII k detekci.") | |
else: | |
result = detect_and_anonymize_pii(text_input, selected_pii_types, anonymization_method) | |
st.subheader("Výsledky anonymizace") | |
st.write(f"Anonymizace proběhla úspěšně, bylo detekováno a anonymizováno {len(result['entities'])} osobních údajů.") | |
col1, col2 = st.columns(2) | |
with col1: | |
st.subheader("Původní text") | |
st.text_area("", result['original_text'], height=300) | |
with col2: | |
st.subheader("Anonymizovaný text") | |
st.text_area("", result['anonymized_text'], height=300) | |
st.subheader("Detekované PII:") | |
pii_summary = {} | |
for entity in result['entities']: | |
if entity['type'] not in pii_summary: | |
pii_summary[entity['type']] = 1 | |
else: | |
pii_summary[entity['type']] += 1 | |
summary_data = [{"Typ PII": k, "Počet instancí": v, "Úspěšnost": "✅"} for k, v in pii_summary.items()] | |
st.table(pd.DataFrame(summary_data)) | |
if st.button("Stáhnout zprávu"): | |
report = { | |
"original_text": result['original_text'], | |
"anonymized_text": result['anonymized_text'], | |
"pii_summary": pii_summary | |
} | |
st.download_button( | |
label="Stáhnout JSON zprávu", | |
data=json.dumps(report, ensure_ascii=False, indent=2), | |
file_name="anonymization_report.json", | |
mime="application/json" | |
) | |
st.subheader("Zpětná vazba") | |
feedback = st.radio("Jste spokojeni s výsledkem anonymizace?", ("Ano", "Ne")) | |
comments = st.text_area("Další komentáře:") | |
if st.button("Odeslat zpětnou vazbu"): | |
st.success("Děkujeme za vaši zpětnou vazbu!") | |
def show_about_project(): | |
st.title("O projektu") | |
st.write(""" | |
## Cíl projektu | |
Jako AI Developer jsem navrhl a implementoval systém pro automatickou detekci a anonymizaci osobních údajů (PII) v českém textu. Tento nástroj jsem vytvořil s cílem pomoci organizacím chránit soukromí jednotlivců při zpracování textových dat, což je klíčové při přípravě dat pro trénování jazykových modelů nebo chatbotů. | |
## Časová osa vývoje | |
### Dosavadní vývoj (3 dny): | |
1. **Den 1: Analýza a návrh** | |
- Průzkum existujících řešení | |
- Definice požadavků a rozsahu projektu | |
- Návrh architektury systému | |
2. **Den 2: Implementace základní funkcionality** | |
- Vývoj modulů pro detekci PII pomocí regulárních výrazů | |
- Implementace metod anonymizace | |
- Začátek vývoje uživatelského rozhraní | |
3. **Den 3: Dokončení prototypu a testování** | |
- Dokončení uživatelského rozhraní | |
- Implementace generování reportů | |
- Základní testování a ladění | |
### Plán budoucího vývoje: | |
4. **Dny 4-5: Rozšíření funkcionality** | |
- Implementace pokročilých metod anonymizace | |
- Rozšíření podpory pro další typy dokumentů | |
- Vylepšení uživatelského rozhraní | |
5. **Dny 6-8: Implementace NLP modelů** | |
- Výběr vhodných NLP modelů pro detekci českých PII | |
- Příprava trénovacích dat | |
- Implementace a integrace NLP modelů do systému | |
6. **Dny 9-11: Trénink a ladění NLP modelů** | |
- Trénování NLP modelů na českých datech | |
- Fine-tuning modelů pro přesnou detekci PII | |
- Testování a vyhodnocení přesnosti modelů | |
7. **Dny 12-13: Optimalizace a škálování** | |
- Optimalizace výkonu systému | |
- Implementace škálovatelného řešení pro zpracování velkých objemů dat | |
- Integrace s externími systémy | |
8. **Dny 14-15: Finální testování a dokumentace** | |
- Komplexní testování celého systému | |
- Příprava uživatelské a technické dokumentace | |
- Vytvoření demonstračních materiálů | |
9. **Den 16: Nasazení a školení** | |
- Nasazení systému do produkčního prostředí | |
- Školení uživatelů a administrátorů | |
- Zahájení podpory a údržby | |
Celková odhadovaná pracnost: 16 pracovních dnů | |
## Klíčové aspekty mého řešení | |
1. **Pokročilá detekce PII**: Implementoval jsem sofistikované regulární výrazy pro detekci různých typů osobních údajů specifických pro český kontext. | |
2. **Flexibilní anonymizace**: Navrhl jsem tři metody anonymizace přizpůsobitelné různým potřebám ochrany soukromí. | |
3. **Interaktivní rozhraní**: Využil jsem Streamlit pro vytvoření uživatelsky přívětivého webového rozhraní. | |
4. **Customizace**: Implementoval jsem možnost výběru konkrétních typů PII k detekci a anonymizaci. | |
5. **Reporting**: Vytvořil jsem systém pro generování přehledných statistik o detekovaných a anonymizovaných údajích. | |
## Algoritmus flow | |
Pro lepší pochopení procesu detekce a anonymizace PII jsem vytvořil následující diagram, který ilustruje tok dat a klíčové kroky algoritmu: | |
""") | |
st.image("https://utfs.io/f/z2Za8Zqs0Nofbl54P61Phgi3WHO4xLUXal01qvcmesjT8KJp", caption="Diagram algoritmu flow pro detekci a anonymizaci PII") | |
st.write(""" | |
Tento diagram ukazuje hlavní komponenty systému a jejich vzájemné interakce, od vstupu textu přes detekci PII až po výstup anonymizovaného textu a generování reportu. | |
## Technologie a nástroje | |
Při vývoji tohoto projektu jsem využil následující technologie a knihovny: | |
- **Python**: Hlavní programovací jazyk pro implementaci logiky. | |
- **Streamlit**: Pro vytvoření interaktivního webového rozhraní. | |
- **Regex**: Využití pokročilých regulárních výrazů pro přesnou detekci PII. | |
- **Faker**: Generování realistických falešných dat pro anonymizaci. | |
- **Pandas**: Zpracování a vizualizace statistik o detekovaných PII. | |
V budoucích fázích projektu plánuji integraci pokročilých NLP modelů pro ještě přesnější detekci českých PII. | |
## Využití pro přípravu dat | |
Tento systém hraje klíčovou roli v procesu přípravy dat pro různé účely, včetně: | |
1. **Ochrana soukromí**: Anonymizace osobních údajů v dokumentech před jejich dalším zpracováním nebo sdílením. | |
2. **Příprava trénovacích dat**: Bezpečná příprava textových dat pro trénování jazykových modelů nebo chatbotů. | |
3. **Compliance**: Pomoc při dodržování předpisů o ochraně osobních údajů, jako je GDPR. | |
4. **Analýza dat**: Umožnění bezpečné analýzy textových dat bez rizika úniku citlivých informací. | |
Tento projekt demonstruje mou schopnost navrhnout a implementovat komplexní řešení pro ochranu osobních údajů s důrazem na praktické využití v reálném světě, zejména v kontextu zpracování a analýzy textových dat v českém jazyce. | |
""") | |
def show_future_development(): | |
st.title("Plán vývoje a nasazení") | |
st.write(""" | |
## Integrace s chatbotem pomocí FastAPI a LangChain | |
Pro efektivní využití našeho anonymizačního nástroje v systému chatbota implementujeme následující: | |
1. **FastAPI Endpoints**: | |
- `/anonymize`: POST endpoint pro anonymizaci jednotlivých textů | |
- `/batch-anonymize`: POST endpoint pro dávkové zpracování většího množství dokumentů | |
- `/update-rules`: PUT endpoint pro aktualizaci pravidel anonymizace | |
- `/get-stats`: GET endpoint pro získání statistik o zpracovaných datech | |
2. **API Dokumentace**: | |
- Využití Swagger UI pro interaktivní API dokumentaci | |
- Detailní popis všech endpointů, včetně vstupních a výstupních schémat | |
- Příklady použití pro každý endpoint | |
3. **Integrace s LangChain**: | |
- Vytvoření custom LangChain tool pro anonymizaci dat | |
- Implementace LangChain agent, který bude využívat náš anonymizační nástroj | |
- Nastavení workflow pro automatické zpracování dokumentů před jejich použitím v chatbotu | |
4. **Příklad využití v LangChain**: | |
```python | |
from langchain.agents import Tool | |
from langchain.agents import initialize_agent | |
from langchain.llms import OpenAI | |
# Definice našeho anonymizačního nástroje | |
anonymization_tool = Tool( | |
name="Anonymization", | |
func=lambda x: requests.post("http://our-api.com/anonymize", json={"text": x}).json()["anonymized_text"], | |
description="Useful for anonymizing text containing personal information" | |
) | |
# Inicializace agenta | |
llm = OpenAI(temperature=0) | |
agent = initialize_agent([anonymization_tool], llm, agent="zero-shot-react-description", verbose=True) | |
# Použití agenta | |
agent.run("Anonymize this text and then summarize it: 'Jan Novák, born on 15.3.1985, lives at Hlavní 123, Prague.'") | |
``` | |
## AI a NLP modely pro detekci PII | |
V budoucím vývoji plánujeme integraci pokročilých NLP a NER (Named Entity Recognition) modelů pro zlepšení detekce osobních údajů: | |
### Výhody NER modelů pro náš projekt: | |
NER modely jsou ideální pro klasifikaci a anonymizaci textu díky své schopnosti přesně identifikovat pojmenované entity a strukturovaně kategorizovat citlivé údaje. Oproti jiným AI modelům poskytují přesnější výsledky při detekci citlivých informací, což je zásadní pro zajištění ochrany osobních údajů a správnou kategorizaci textů podle jejich obsahu. | |
### Plánované využití NLP a NER modelů: | |
1. **Přesnější detekce PII**: Využití pre-trénovaných modelů pro identifikaci širšího spektra osobních údajů. | |
2. **Kontextová analýza**: Schopnost rozpoznat PII i v méně zřejmých kontextech. | |
3. **Multijazyčná podpora**: Rozšíření detekce PII na více jazyků. | |
4. **Adaptivní učení**: Možnost doučování modelů na specifických datech klienta. | |
### Vhodné modely pro detekci PII: | |
- FacebookAI/xlm-roberta-large-finetuned-conll03-english: Pro multijazyčnou detekci entit. | |
- iiiorg/piiranha-v1-detect-personal-information: Specializovaný model pro detekci osobních informací. | |
- Microsoft Presidio: Framework pro detekci a anonymizaci, který můžeme integrovat do našeho řešení. | |
### Implementace: | |
1. Využití Transformers knihovny pro integraci a fine-tuning modelů. | |
2. Vytvoření pipeline pro kombinaci rule-based přístupu s NER modely. | |
3. Implementace mechanismu pro pravidelné aktualizace a doučování modelů. | |
Integrace těchto pokročilých NLP a NER modelů významně zvýší přesnost a robustnost našeho anonymizačního nástroje, což umožní jeho využití i v náročnějších scénářích a pro komplexnější typy dokumentů. | |
""") | |
def show_usage_specifications(): | |
st.title("Specifikace využití") | |
st.write(""" | |
## Způsoby anonymizace | |
Systém nabízí tři hlavní metody anonymizace osobních údajů: | |
1. **Nahrazení zástupnými znaky**: Osobní údaje jsou nahrazeny řetězcem 'X' stejné délky. | |
2. **Nahrazení obecnými pojmy**: Osobní údaje jsou nahrazeny obecným označením typu údaje (např. [JMÉNO], [ADRESA]). | |
3. **Použití falešných dat**: Osobní údaje jsou nahrazeny realisticky vypadajícími, ale fiktivními daty. | |
## Testování a ověření | |
Pro zajištění správnosti a úplnosti anonymizace systém zahrnuje: | |
1. **Generování testovacích dat**: Možnost vytvářet fiktivní dokumenty s osobními údaji pro testování. | |
2. **Statistiky detekce**: Přehled detekovaných a anonymizovaných údajů pro každý dokument. | |
3. **Vizuální porovnání**: Možnost porovnat původní a anonymizovaný text pro kontrolu. | |
## Vstupní data | |
Systém je navržen pro zpracování: | |
1. Libovolného textu zadaného uživatelem. | |
2. Generovaných falešných dat pro testovací účely. | |
3. (V budoucnu) Různých formátů dokumentů (TXT, PDF, DOC). | |
## Zdůvodnění výběru nástrojů | |
1. **Python**: Široká podpora pro NLP a zpracování textu, rozsáhlý ekosystém knihoven. | |
2. **Streamlit**: Rychlé vytvoření interaktivního rozhraní pro demonstraci funkčnosti. | |
3. **Regex**: Efektivní a flexibilní nástroj pro detekci vzorů v textu. | |
4. **Faker**: Generování realistických falešných dat pro testování a anonymizaci. | |
Tato kombinace nástrojů umožňuje rychlý vývoj, snadnou údržbu a potenciál pro budoucí rozšíření systému. | |
""") | |
def show_test_data(): | |
st.title("Testovací data pro anonymizační platformu") | |
st.header("1. Osobní profily") | |
st.subheader("Profil 1: Jan Novák") | |
st.write(""" | |
- Jméno: Jan Novák | |
- Datum narození: 15.3.1985 | |
- Rodné číslo: 850315/1234 | |
- Adresa: Hlavní 123, 110 00 Praha 1 | |
- E-mail: [email protected] | |
- Telefon: +420 601 234 567 | |
- Číslo OP: 123456789 | |
- Číslo účtu: 1234567890/0800 | |
""") | |
st.subheader("Profil 2: Marie Svobodová") | |
st.write(""" | |
- Jméno: Ing. Marie Svobodová, Ph.D. | |
- Datum narození: 22.7.1990 | |
- Rodné číslo: 905722/9876 | |
- Adresa: Nová 456, 602 00 Brno | |
- E-mail: [email protected] | |
- Telefon: 00420777888999 | |
- Číslo pasu: 98765432 | |
- IBAN: CZ65 0800 0000 0012 3456 7890 | |
""") | |
st.subheader("Profil 3: Petr Dvořák") | |
st.write(""" | |
- Jméno: MUDr. Petr Dvořák | |
- Datum narození: 1. ledna 1970 | |
- Rodné číslo: 700101/3333 | |
- Adresa: Dlouhá 789, 301 00 Plzeň | |
- E-mail: [email protected] | |
- Telefon: 420 602 111 222 | |
- DIČ: CZ7001013333 | |
- Číslo pojištěnce: 700101/3333 | |
""") | |
st.header("2. Dokumenty") | |
st.subheader("2.1 Životopis - Jan Novák") | |
st.code(""" | |
Jan Novák | |
Hlavní 123, 110 00 Praha 1 | |
Tel: +420 601 234 567 | |
E-mail: [email protected] | |
Datum narození: 15.3.1985 | |
Stav: ženatý | |
Vzdělání: | |
2004-2009: Vysoká škola ekonomická v Praze, obor Finance | |
Pracovní zkušenosti: | |
2010-současnost: Finanční analytik, ABC Bank, a.s. | |
- Zpracování finančních reportů | |
- Analýza investičních příležitostí | |
2009-2010: Junior účetní, XYZ s.r.o. | |
- Vedení účetnictví malých a středních podniků | |
Jazykové znalosti: | |
Angličtina - pokročilá úroveň | |
Němčina - středně pokročilá úroveň | |
Reference: | |
Ing. Jiří Zelený, vedoucí oddělení, ABC Bank, a.s. | |
Tel: 420 234 567 890 | |
""") | |
st.subheader("2.2 Lékařská zpráva - Marie Svobodová") | |
st.code(""" | |
Fakultní nemocnice Brno | |
Jihlavská 20, 625 00 Brno | |
IČO: 65269705 | |
LÉKAŘSKÁ ZPRÁVA | |
Pacient: Ing. Marie Svobodová, Ph.D. | |
Datum narození: 22.7.1990 | |
Rodné číslo: 905722/9876 | |
Bydliště: Nová 456, 602 00 Brno | |
Pojišťovna: 111 | |
Anamnéza: | |
Pacientka přichází s bolestí v pravém podžebří trvající 3 dny. Neudává horečku ani zvracení. V osobní anamnéze hypertenze na medikaci. | |
Fyzikální vyšetření: | |
TK: 130/80, P: 72/min, TT: 36.8°C | |
Břicho měkké, palpačně citlivé v pravém podžebří, Murphy negativní. | |
Závěr: | |
Suspektní cholecystitis. Doporučeno ultrazvukové vyšetření břicha. | |
Vypracoval: MUDr. Jan Veselý | |
Dne: 15.5.2023 | |
""") | |
st.subheader("2.3 Faktura - Petr Dvořák") | |
st.code(""" | |
XYZ Servis s.r.o. | |
Technická 10, 301 00 Plzeň | |
IČO: 12345678 | |
DIČ: CZ12345678 | |
FAKTURA č. 2023001 | |
Odběratel: | |
MUDr. Petr Dvořák | |
Dlouhá 789 | |
301 00 Plzeň | |
DIČ: CZ7001013333 | |
Datum vystavení: 1.6.2023 | |
Datum splatnosti: 15.6.2023 | |
Forma úhrady: bankovní převod | |
Položka Množství Cena/ks Celkem | |
--------------------------------------------------------- | |
Servis zdravotnického | |
zařízení XY 1 10000 Kč 10000 Kč | |
Náhradní díly 2 2500 Kč 5000 Kč | |
--------------------------------------------------------- | |
Celkem bez DPH 15000 Kč | |
DPH 21% 3150 Kč | |
Celkem s DPH 18150 Kč | |
Číslo účtu pro platbu: 1234567890/0300 | |
Variabilní symbol: 2023001 | |
Děkujeme za Vaši důvěru a těšíme se na další spolupráci. | |
""") | |
st.header("3. E-mailová komunikace") | |
st.subheader("3.1 E-mail od Jana Nováka") | |
st.code(""" | |
Od: [email protected] | |
Komu: [email protected] | |
Předmět: Žádost o změnu osobních údajů | |
Vážení, | |
prosím o změnu mých kontaktních údajů ve Vašem systému. Nové údaje jsou následující: | |
Jméno: Jan Novák | |
Nová adresa: Krátká 456, 120 00 Praha 2 | |
Nový telefon: 702 345 678 | |
Moje identifikační údaje: | |
Datum narození: 15.3.1985 | |
Číslo účtu: 1234567890/0800 | |
Děkuji za vyřízení mé žádosti. | |
S pozdravem, | |
Jan Novák | |
""") | |
st.subheader("3.2 E-mail od Marie Svobodové") | |
st.code(""" | |
Od: [email protected] | |
Komu: [email protected] | |
Předmět: Žádost o pracovní pozici | |
Vážená paní / Vážený pane, | |
reaguji na Váš inzerát na pozici "Datový analytik" zveřejněný na pracovním portálu Jobs.cz. | |
Jmenuji se Ing. Marie Svobodová, Ph.D. a mám pětiletou zkušenost v oblasti datové analýzy. Absolvovala jsem doktorské studium na Masarykově univerzitě v Brně, obor Aplikovaná informatika. | |
Moje kontaktní údaje: | |
Telefon: 777888999 | |
E-mail: [email protected] | |
LinkedIn: linkedin.com/in/marie-svobodova | |
V příloze naleznete můj životopis a motivační dopis. Budu ráda za zpětnou vazbu a případné pozvání na osobní pohovor. | |
S pozdravem, | |
Marie Svobodová | |
""") | |
st.header("4. Příspěvek na sociální síti") | |
st.subheader("4.1 Příspěvek Petra Dvořáka na Facebooku") | |
st.code(""" | |
Petr Dvořák | |
1. června 2023 v 10:15 | |
Ahoj přátelé! Právě jsem se vrátil z úžasné dovolené v Chorvatsku. Pokud budete chtít nějaké tipy na ubytování nebo restaurace v oblasti Splitu, dejte vědět. Můžete mi zavolat na 602 111 222 nebo napsat na [email protected]. Pojede: Ivan Máchal, Pavel Miško, Rutha Tomanová, Zdislava Novotná | |
""") | |
if __name__ == "__main__": | |
main() |