petrsovadina commited on
Commit
0072d0e
1 Parent(s): 394cba1

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +586 -0
app.py ADDED
@@ -0,0 +1,586 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
4
+ print("Python version:", sys.version)
5
+ print("Python path:", sys.path)
6
+ import site
7
+ print("Site packages:", site.getsitepackages())
8
+
9
+ import streamlit as st
10
+ # Odstraňte nebo zakomentujte tento řádek
11
+ # from streamlit_option_menu import option_menu
12
+ import re
13
+ from faker import Faker
14
+ import json
15
+ import pandas as pd
16
+
17
+ # Odstraňte nebo zakomentujte tyto řádky
18
+ # from src.czech_anonymization.analyzers import custom_recognizers
19
+ # from src.czech_anonymization.processors import document_processors
20
+
21
+ # Initialize Faker for Czech
22
+ fake = Faker('cs_CZ')
23
+
24
+ # Enhanced PII patterns (simplified for brevity)
25
+ PII_PATTERNS = {
26
+ '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',
27
+ 'RODNÉ_ČÍSLO': r'\b\d{6}/\d{3,4}\b',
28
+ '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',
29
+ 'TELEFON': r'\b(?:\+420 ?)?(?:(?:\d{3} ?){3}|\d{9})\b',
30
+ 'EMAIL': r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b',
31
+ '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',
32
+ 'ČÍSLO_OP': r'\b(?:\d{9}|\d{6} ?\d{3})\b',
33
+ 'ČÍSLO_PASU': r'\b[A-Z]{2}\d{7}\b',
34
+ 'BANKOVNÍ_ÚČET': r'\b\d{1,6}-?\d{2,10}/\d{4}\b',
35
+ 'IČO': r'\b\d{8}\b',
36
+ 'DIČ': r'\bCZ\d{8,10}\b',
37
+ 'DATOVÁ_SCHRÁNKA': r'\b[a-zA-Z0-9]{7}\b'
38
+ }
39
+
40
+ def detect_and_anonymize_pii(text, selected_pii_types, anonymization_method):
41
+ entities = []
42
+ anonymized_text = text
43
+
44
+ for entity_type, pattern in PII_PATTERNS.items():
45
+ if entity_type in selected_pii_types:
46
+ for match in re.finditer(pattern, text):
47
+ entities.append({
48
+ 'start': match.start(),
49
+ 'end': match.end(),
50
+ 'text': match.group(),
51
+ 'type': entity_type
52
+ })
53
+
54
+ # Sort entities in reverse order to avoid index issues when replacing
55
+ entities.sort(key=lambda x: x['start'], reverse=True)
56
+
57
+ for entity in entities:
58
+ anonymized_value = anonymize_entity(entity, anonymization_method)
59
+ anonymized_text = anonymized_text[:entity['start']] + anonymized_value + anonymized_text[entity['end']:]
60
+
61
+ return {'original_text': text, 'anonymized_text': anonymized_text, 'entities': entities}
62
+
63
+ def anonymize_entity(entity, method):
64
+ if method == 'Nahradit X':
65
+ return 'X' * len(entity['text'])
66
+ elif method == 'Nahradit [TYP_ÚDAJE]':
67
+ return f"[{entity['type']}]"
68
+ elif method == 'Použít falešná data':
69
+ if entity['type'] == 'JMÉNO':
70
+ return fake.name()
71
+ elif entity['type'] == 'RODNÉ_ČÍSLO':
72
+ return fake.ssn()
73
+ elif entity['type'] == 'DATUM_NAROZENÍ':
74
+ return fake.date(pattern='%d.%m.%Y')
75
+ elif entity['type'] == 'TELEFON':
76
+ return fake.phone_number()
77
+ elif entity['type'] == 'EMAIL':
78
+ return fake.email()
79
+ elif entity['type'] == 'ADRESA':
80
+ return fake.address()
81
+ else:
82
+ return fake.word()
83
+ return entity['text']
84
+
85
+ def main():
86
+ st.set_page_config(page_title="Český PII Anotátor a Anonymizátor", layout="wide")
87
+
88
+ st.sidebar.title("Navigace")
89
+ selected = st.sidebar.selectbox(
90
+ "Vyberte sekci",
91
+ ["Hlavní aplikace", "O projektu", "Budoucí vývoj", "Specifikace využití", "Testovací data"]
92
+ )
93
+
94
+ st.sidebar.markdown("---")
95
+ st.sidebar.markdown("[GitHub repozitář](https://github.com/petrsovadina/Anonymiza-n-platforma)")
96
+
97
+ if selected == "Hlavní aplikace":
98
+ show_main_app()
99
+ elif selected == "O projektu":
100
+ show_about_project()
101
+ elif selected == "Budoucí vývoj":
102
+ show_future_development()
103
+ elif selected == "Specifikace využití":
104
+ show_usage_specifications()
105
+ elif selected == "Testovací data":
106
+ show_test_data()
107
+
108
+ def show_main_app():
109
+ st.title("Pokročilý Český PII Anotátor a Anonymizátor")
110
+
111
+ text_input = st.text_area("Zadejte český text k analýze:", height=200)
112
+
113
+ selected_pii_types = st.multiselect(
114
+ "Vyberte typy PII k detekci:",
115
+ list(PII_PATTERNS.keys()),
116
+ default=list(PII_PATTERNS.keys())
117
+ )
118
+
119
+ anonymization_method = st.selectbox(
120
+ "Vyberte metodu anonymizace:",
121
+ ["Nahradit X", "Nahradit [TYP_ÚDAJE]", "Použít falešná data"]
122
+ )
123
+
124
+ if st.button("Analyzovat a Anonymizovat"):
125
+ if not text_input:
126
+ st.error("Prosím, zadejte nějaký text k analýze.")
127
+ elif not selected_pii_types:
128
+ st.error("Prosím, vyberte alespoň jeden typ PII k detekci.")
129
+ else:
130
+ result = detect_and_anonymize_pii(text_input, selected_pii_types, anonymization_method)
131
+
132
+ st.subheader("Výsledky anonymizace")
133
+ st.write(f"Anonymizace proběhla úspěšně, bylo detekováno a anonymizováno {len(result['entities'])} osobních údajů.")
134
+
135
+ col1, col2 = st.columns(2)
136
+ with col1:
137
+ st.subheader("Původní text")
138
+ st.text_area("", result['original_text'], height=300)
139
+ with col2:
140
+ st.subheader("Anonymizovaný text")
141
+ st.text_area("", result['anonymized_text'], height=300)
142
+
143
+ st.subheader("Detekované PII:")
144
+ pii_summary = {}
145
+ for entity in result['entities']:
146
+ if entity['type'] not in pii_summary:
147
+ pii_summary[entity['type']] = 1
148
+ else:
149
+ pii_summary[entity['type']] += 1
150
+
151
+ summary_data = [{"Typ PII": k, "Počet instancí": v, "Úspěšnost": "✅"} for k, v in pii_summary.items()]
152
+ st.table(pd.DataFrame(summary_data))
153
+
154
+ if st.button("Stáhnout zprávu"):
155
+ report = {
156
+ "original_text": result['original_text'],
157
+ "anonymized_text": result['anonymized_text'],
158
+ "pii_summary": pii_summary
159
+ }
160
+ st.download_button(
161
+ label="Stáhnout JSON zprávu",
162
+ data=json.dumps(report, ensure_ascii=False, indent=2),
163
+ file_name="anonymization_report.json",
164
+ mime="application/json"
165
+ )
166
+
167
+ st.subheader("Zpětná vazba")
168
+ feedback = st.radio("Jste spokojeni s výsledkem anonymizace?", ("Ano", "Ne"))
169
+ comments = st.text_area("Další komentáře:")
170
+ if st.button("Odeslat zpětnou vazbu"):
171
+ st.success("Děkujeme za vaši zpětnou vazbu!")
172
+
173
+ def show_about_project():
174
+ st.title("O projektu")
175
+ st.write("""
176
+ ## Cíl projektu
177
+
178
+ 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ů.
179
+
180
+ ## Časová osa vývoje
181
+
182
+ ### Dosavadní vývoj (3 dny):
183
+
184
+ 1. **Den 1: Analýza a návrh**
185
+ - Průzkum existujících řešení
186
+ - Definice požadavků a rozsahu projektu
187
+ - Návrh architektury systému
188
+
189
+ 2. **Den 2: Implementace základní funkcionality**
190
+ - Vývoj modulů pro detekci PII pomocí regulárních výrazů
191
+ - Implementace metod anonymizace
192
+ - Začátek vývoje uživatelského rozhraní
193
+
194
+ 3. **Den 3: Dokončení prototypu a testování**
195
+ - Dokončení uživatelského rozhraní
196
+ - Implementace generování reportů
197
+ - Základní testování a ladění
198
+
199
+ ### Plán budoucího vývoje:
200
+
201
+ 4. **Dny 4-5: Rozšíření funkcionality**
202
+ - Implementace pokročilých metod anonymizace
203
+ - Rozšíření podpory pro další typy dokumentů
204
+ - Vylepšení uživatelského rozhraní
205
+
206
+ 5. **Dny 6-8: Implementace NLP modelů**
207
+ - Výběr vhodných NLP modelů pro detekci českých PII
208
+ - Příprava trénovacích dat
209
+ - Implementace a integrace NLP modelů do systému
210
+
211
+ 6. **Dny 9-11: Trénink a ladění NLP modelů**
212
+ - Trénování NLP modelů na českých datech
213
+ - Fine-tuning modelů pro přesnou detekci PII
214
+ - Testování a vyhodnocení přesnosti modelů
215
+
216
+ 7. **Dny 12-13: Optimalizace a škálování**
217
+ - Optimalizace výkonu systému
218
+ - Implementace škálovatelného řešení pro zpracování velkých objemů dat
219
+ - Integrace s externími systémy
220
+
221
+ 8. **Dny 14-15: Finální testování a dokumentace**
222
+ - Komplexní testování celého systému
223
+ - Příprava uživatelské a technické dokumentace
224
+ - Vytvoření demonstračních materiálů
225
+
226
+ 9. **Den 16: Nasazení a školení**
227
+ - Nasazení systému do produkčního prostředí
228
+ - Školení uživatelů a administrátorů
229
+ - Zahájení podpory a údržby
230
+
231
+ Celková odhadovaná pracnost: 16 pracovních dnů
232
+
233
+ ## Klíčové aspekty mého řešení
234
+
235
+ 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.
236
+
237
+ 2. **Flexibilní anonymizace**: Navrhl jsem tři metody anonymizace přizpůsobitelné různým potřebám ochrany soukromí.
238
+
239
+ 3. **Interaktivní rozhraní**: Využil jsem Streamlit pro vytvoření uživatelsky přívětivého webového rozhraní.
240
+
241
+ 4. **Customizace**: Implementoval jsem možnost výběru konkrétních typů PII k detekci a anonymizaci.
242
+
243
+ 5. **Reporting**: Vytvořil jsem systém pro generování přehledných statistik o detekovaných a anonymizovaných údajích.
244
+
245
+ ## Algoritmus flow
246
+
247
+ Pro lepší pochopení procesu detekce a anonymizace PII jsem vytvořil následující diagram, který ilustruje tok dat a klíčové kroky algoritmu:
248
+ """)
249
+
250
+ st.image("https://utfs.io/f/z2Za8Zqs0Nofbl54P61Phgi3WHO4xLUXal01qvcmesjT8KJp", caption="Diagram algoritmu flow pro detekci a anonymizaci PII")
251
+
252
+ st.write("""
253
+ 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.
254
+
255
+ ## Technologie a nástroje
256
+
257
+ Při vývoji tohoto projektu jsem využil následující technologie a knihovny:
258
+
259
+ - **Python**: Hlavní programovací jazyk pro implementaci logiky.
260
+ - **Streamlit**: Pro vytvoření interaktivního webového rozhraní.
261
+ - **Regex**: Využití pokročilých regulárních výrazů pro přesnou detekci PII.
262
+ - **Faker**: Generování realistických falešných dat pro anonymizaci.
263
+ - **Pandas**: Zpracování a vizualizace statistik o detekovaných PII.
264
+
265
+ 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.
266
+
267
+ ## Využití pro přípravu dat
268
+
269
+ Tento systém hraje klíčovou roli v procesu přípravy dat pro různé účely, včetně:
270
+
271
+ 1. **Ochrana soukromí**: Anonymizace osobních údajů v dokumentech před jejich dalším zpracováním nebo sdílením.
272
+ 2. **Příprava trénovacích dat**: Bezpečná příprava textových dat pro trénování jazykových modelů nebo chatbotů.
273
+ 3. **Compliance**: Pomoc při dodržování předpisů o ochraně osobních údajů, jako je GDPR.
274
+ 4. **Analýza dat**: Umožnění bezpečné analýzy textových dat bez rizika úniku citlivých informací.
275
+
276
+ 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.
277
+ """)
278
+
279
+ def show_future_development():
280
+ st.title("Plán vývoje a nasazení")
281
+ st.write("""
282
+ ## Integrace s chatbotem pomocí FastAPI a LangChain
283
+
284
+ Pro efektivní využití našeho anonymizačního nástroje v systému chatbota implementujeme následující:
285
+
286
+ 1. **FastAPI Endpoints**:
287
+ - `/anonymize`: POST endpoint pro anonymizaci jednotlivých textů
288
+ - `/batch-anonymize`: POST endpoint pro dávkové zpracování většího množství dokumentů
289
+ - `/update-rules`: PUT endpoint pro aktualizaci pravidel anonymizace
290
+ - `/get-stats`: GET endpoint pro získání statistik o zpracovaných datech
291
+
292
+ 2. **API Dokumentace**:
293
+ - Využití Swagger UI pro interaktivní API dokumentaci
294
+ - Detailní popis všech endpointů, včetně vstupních a výstupních schémat
295
+ - Příklady použití pro každý endpoint
296
+
297
+ 3. **Integrace s LangChain**:
298
+ - Vytvoření custom LangChain tool pro anonymizaci dat
299
+ - Implementace LangChain agent, který bude využívat náš anonymizační nástroj
300
+ - Nastavení workflow pro automatické zpracování dokumentů před jejich použitím v chatbotu
301
+
302
+ 4. **Příklad využití v LangChain**:
303
+ ```python
304
+ from langchain.agents import Tool
305
+ from langchain.agents import initialize_agent
306
+ from langchain.llms import OpenAI
307
+
308
+ # Definice našeho anonymizačního nástroje
309
+ anonymization_tool = Tool(
310
+ name="Anonymization",
311
+ func=lambda x: requests.post("http://our-api.com/anonymize", json={"text": x}).json()["anonymized_text"],
312
+ description="Useful for anonymizing text containing personal information"
313
+ )
314
+
315
+ # Inicializace agenta
316
+ llm = OpenAI(temperature=0)
317
+ agent = initialize_agent([anonymization_tool], llm, agent="zero-shot-react-description", verbose=True)
318
+
319
+ # Použití agenta
320
+ agent.run("Anonymize this text and then summarize it: 'Jan Novák, born on 15.3.1985, lives at Hlavní 123, Prague.'")
321
+ ```
322
+
323
+ ## AI a NLP modely pro detekci PII
324
+
325
+ 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ů:
326
+
327
+ ### Výhody NER modelů pro náš projekt:
328
+
329
+ 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.
330
+
331
+ ### Plánované využití NLP a NER modelů:
332
+
333
+ 1. **Přesnější detekce PII**: Využití pre-trénovaných modelů pro identifikaci širšího spektra osobních údajů.
334
+ 2. **Kontextová analýza**: Schopnost rozpoznat PII i v méně zřejmých kontextech.
335
+ 3. **Multijazyčná podpora**: Rozšíření detekce PII na více jazyků.
336
+ 4. **Adaptivní učení**: Možnost doučování modelů na specifických datech klienta.
337
+
338
+ ### Vhodné modely pro detekci PII:
339
+
340
+ - FacebookAI/xlm-roberta-large-finetuned-conll03-english: Pro multijazyčnou detekci entit.
341
+ - iiiorg/piiranha-v1-detect-personal-information: Specializovaný model pro detekci osobních informací.
342
+ - Microsoft Presidio: Framework pro detekci a anonymizaci, který můžeme integrovat do našeho řešení.
343
+
344
+ ### Implementace:
345
+
346
+ 1. Využití Transformers knihovny pro integraci a fine-tuning modelů.
347
+ 2. Vytvoření pipeline pro kombinaci rule-based přístupu s NER modely.
348
+ 3. Implementace mechanismu pro pravidelné aktualizace a doučování modelů.
349
+
350
+ 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ů.
351
+ """)
352
+
353
+ def show_usage_specifications():
354
+ st.title("Specifikace využití")
355
+ st.write("""
356
+ ## Způsoby anonymizace
357
+
358
+ Systém nabízí tři hlavní metody anonymizace osobních údajů:
359
+
360
+ 1. **Nahrazení zástupnými znaky**: Osobní údaje jsou nahrazeny řetězcem 'X' stejné délky.
361
+ 2. **Nahrazení obecnými pojmy**: Osobní údaje jsou nahrazeny obecným označením typu údaje (např. [JMÉNO], [ADRESA]).
362
+ 3. **Použití falešných dat**: Osobní údaje jsou nahrazeny realisticky vypadajícími, ale fiktivními daty.
363
+
364
+ ## Testování a ověření
365
+
366
+ Pro zajištění správnosti a úplnosti anonymizace systém zahrnuje:
367
+
368
+ 1. **Generování testovacích dat**: Možnost vytvářet fiktivní dokumenty s osobními údaji pro testování.
369
+ 2. **Statistiky detekce**: Přehled detekovaných a anonymizovaných údajů pro každý dokument.
370
+ 3. **Vizuální porovnání**: Možnost porovnat původní a anonymizovaný text pro kontrolu.
371
+
372
+ ## Vstupní data
373
+
374
+ Systém je navržen pro zpracování:
375
+
376
+ 1. Libovolného textu zadaného uživatelem.
377
+ 2. Generovaných falešných dat pro testovací účely.
378
+ 3. (V budoucnu) Různých formátů dokumentů (TXT, PDF, DOC).
379
+
380
+ ## Zdůvodnění výběru nástrojů
381
+
382
+ 1. **Python**: Široká podpora pro NLP a zpracování textu, rozsáhlý ekosystém knihoven.
383
+ 2. **Streamlit**: Rychlé vytvoření interaktivního rozhraní pro demonstraci funkčnosti.
384
+ 3. **Regex**: Efektivní a flexibilní nástroj pro detekci vzorů v textu.
385
+ 4. **Faker**: Generování realistických falešných dat pro testování a anonymizaci.
386
+
387
+ Tato kombinace nástrojů umožňuje rychlý vývoj, snadnou údržbu a potenciál pro budoucí rozšíření systému.
388
+ """)
389
+
390
+ def show_test_data():
391
+ st.title("Testovací data pro anonymizační platformu")
392
+
393
+ st.header("1. Osobní profily")
394
+
395
+ st.subheader("Profil 1: Jan Novák")
396
+ st.write("""
397
+ - Jméno: Jan Novák
398
+ - Datum narození: 15.3.1985
399
+ - Rodné číslo: 850315/1234
400
+ - Adresa: Hlavní 123, 110 00 Praha 1
401
+ - E-mail: jan.novak@email.cz
402
+ - Telefon: +420 601 234 567
403
+ - Číslo OP: 123456789
404
+ - Číslo účtu: 1234567890/0800
405
+ """)
406
+
407
+ st.subheader("Profil 2: Marie Svobodová")
408
+ st.write("""
409
+ - Jméno: Ing. Marie Svobodová, Ph.D.
410
+ - Datum narození: 22.7.1990
411
+ - Rodné číslo: 905722/9876
412
+ - Adresa: Nová 456, 602 00 Brno
413
+ - E-mail: marie.svobodova@gmail.com
414
+ - Telefon: 00420777888999
415
+ - Číslo pasu: 98765432
416
+ - IBAN: CZ65 0800 0000 0012 3456 7890
417
+ """)
418
+
419
+ st.subheader("Profil 3: Petr Dvořák")
420
+ st.write("""
421
+ - Jméno: MUDr. Petr Dvořák
422
+ - Datum narození: 1. ledna 1970
423
+ - Rodné číslo: 700101/3333
424
+ - Adresa: Dlouhá 789, 301 00 Plzeň
425
+ - E-mail: petr.dvorak@seznam.cz
426
+ - Telefon: 420 602 111 222
427
+ - DIČ: CZ7001013333
428
+ - Číslo pojištěnce: 700101/3333
429
+ """)
430
+
431
+ st.header("2. Dokumenty")
432
+
433
+ st.subheader("2.1 Životopis - Jan Novák")
434
+ st.code("""
435
+ Jan Novák
436
+ Hlavní 123, 110 00 Praha 1
437
+ Tel: +420 601 234 567
438
+ E-mail: jan.novak@email.cz
439
+
440
+ Datum narození: 15.3.1985
441
+ Stav: ženatý
442
+
443
+ Vzdělání:
444
+ 2004-2009: Vysoká škola ekonomická v Praze, obor Finance
445
+
446
+ Pracovní zkušenosti:
447
+ 2010-současnost: Finanční analytik, ABC Bank, a.s.
448
+ - Zpracování finančních reportů
449
+ - Analýza investičních příležitostí
450
+
451
+ 2009-2010: Junior účetní, XYZ s.r.o.
452
+ - Vedení účetnictví malých a středních podniků
453
+
454
+ Jazykové znalosti:
455
+ Angličtina - pokročilá úroveň
456
+ Němčina - středně pokročilá úroveň
457
+
458
+ Reference:
459
+ Ing. Jiří Zelený, vedoucí oddělení, ABC Bank, a.s.
460
+ Tel: 420 234 567 890
461
+ """)
462
+
463
+ st.subheader("2.2 Lékařská zpráva - Marie Svobodová")
464
+ st.code("""
465
+ Fakultní nemocnice Brno
466
+ Jihlavská 20, 625 00 Brno
467
+ IČO: 65269705
468
+
469
+ LÉKAŘSKÁ ZPRÁVA
470
+
471
+ Pacient: Ing. Marie Svobodová, Ph.D.
472
+ Datum narození: 22.7.1990
473
+ Rodné číslo: 905722/9876
474
+ Bydliště: Nová 456, 602 00 Brno
475
+ Pojišťovna: 111
476
+
477
+ Anamnéza:
478
+ 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.
479
+
480
+ Fyzikální vyšetření:
481
+ TK: 130/80, P: 72/min, TT: 36.8°C
482
+ Břicho měkké, palpačně citlivé v pravém podžebří, Murphy negativní.
483
+
484
+ Závěr:
485
+ Suspektní cholecystitis. Doporučeno ultrazvukové vyšetření břicha.
486
+
487
+ Vypracoval: MUDr. Jan Veselý
488
+ Dne: 15.5.2023
489
+ """)
490
+
491
+ st.subheader("2.3 Faktura - Petr Dvořák")
492
+ st.code("""
493
+ XYZ Servis s.r.o.
494
+ Technická 10, 301 00 Plzeň
495
+ IČO: 12345678
496
+ DIČ: CZ12345678
497
+
498
+ FAKTURA č. 2023001
499
+
500
+ Odběratel:
501
+ MUDr. Petr Dvořák
502
+ Dlouhá 789
503
+ 301 00 Plzeň
504
+ DIČ: CZ7001013333
505
+
506
+ Datum vystavení: 1.6.2023
507
+ Datum splatnosti: 15.6.2023
508
+ Forma úhrady: bankovní převod
509
+
510
+ Položka Množství Cena/ks Celkem
511
+ ---------------------------------------------------------
512
+ Servis zdravotnického
513
+ zařízení XY 1 10000 Kč 10000 Kč
514
+ Náhradní díly 2 2500 Kč 5000 Kč
515
+ ---------------------------------------------------------
516
+ Celkem bez DPH 15000 Kč
517
+ DPH 21% 3150 Kč
518
+ Celkem s DPH 18150 Kč
519
+
520
+ Číslo účtu pro platbu: 1234567890/0300
521
+ Variabilní symbol: 2023001
522
+
523
+ Děkujeme za Vaši důvěru a těšíme se na další spolupráci.
524
+ """)
525
+
526
+ st.header("3. E-mailová komunikace")
527
+
528
+ st.subheader("3.1 E-mail od Jana Nováka")
529
+ st.code("""
530
+ Od: jan.novak@email.cz
531
+ Komu: podpora@banka.cz
532
+ Předmět: Žádost o změnu osobních údajů
533
+
534
+ Vážení,
535
+
536
+ prosím o změnu mých kontaktních údajů ve Vašem systému. Nové údaje jsou následující:
537
+
538
+ Jméno: Jan Novák
539
+ Nová adresa: Krátká 456, 120 00 Praha 2
540
+ Nový telefon: 702 345 678
541
+
542
+ Moje identifikační údaje:
543
+ Datum narození: 15.3.1985
544
+ Číslo účtu: 1234567890/0800
545
+
546
+ Děkuji za vyřízení mé žádosti.
547
+
548
+ S pozdravem,
549
+ Jan Novák
550
+ """)
551
+
552
+ st.subheader("3.2 E-mail od Marie Svobodové")
553
+ st.code("""
554
+ Od: marie.svobodova@gmail.com
555
+ Komu: hr@firma.cz
556
+ Předmět: Žádost o pracovní pozici
557
+
558
+ Vážená paní / Vážený pane,
559
+
560
+ reaguji na Váš inzerát na pozici "Datový analytik" zveřejněný na pracovním portálu Jobs.cz.
561
+
562
+ 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.
563
+
564
+ Moje kontaktní údaje:
565
+ Telefon: 777888999
566
+ E-mail: marie.svobodova@gmail.com
567
+ LinkedIn: linkedin.com/in/marie-svobodova
568
+
569
+ 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.
570
+
571
+ S pozdravem,
572
+ Marie Svobodová
573
+ """)
574
+
575
+ st.header("4. Příspěvek na sociální síti")
576
+
577
+ st.subheader("4.1 Příspěvek Petra Dvořáka na Facebooku")
578
+ st.code("""
579
+ Petr Dvořák
580
+ 1. června 2023 v 10:15
581
+
582
+ 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 petr.dvorak@seznam.cz. Pojede: Ivan Máchal, Pavel Miško, Rutha Tomanová, Zdislava Novotná
583
+ """)
584
+
585
+ if __name__ == "__main__":
586
+ main()