pjn-2024-cw/02_wyrazenia_regularne.ipynb
2024-10-16 16:56:24 +02:00

160 lines
5.3 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zajęcia 2: Wyrażenia regularne\n",
"\n",
"Wszystkie zadania ćwiczeniowe należy rozwiązywać w języku Python w kopii Jupyter Notebook'a dla danych zajęć w wyznaczonych miejscach (komórki z komentarzem `# Solution`).\n",
"\n",
"Nie należy usuwać komórek z treścią zadań.\n",
"\n",
"Należy wyświetlać outputy przy pomocy `print`\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Istnieją 2 moduły do wykorzystania wyrażeń regularnych w Pythonie: `re` oraz `regex`\n",
"\n",
"Moduł `re` jest częścią standardowej biblioteki języka Python, natomiast `regex` stanowi osobny moduł, który należy zainstalować, by móc z niego korzystać. Moduł `re` jest prostszy i będzie wykorzystywany na potrzeby tych zajęć.\n",
"\n",
"Dokumentacja: https://docs.python.org/3/library/re.html\n",
"\n",
"Dla chętnych: wyzwanie uczenia maszynowego, w którym można było zastosować wyrażenia regularne https://www.kaggle.com/c/pii-detection-removal-from-educational-data "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zadanie 1\n",
"Napisz funkcje wykorzystujące wyrażenia regularne do walidacji danych osobowych. Funkcje muszą zwrócić wartość `True`, gdy walidacja przejdzie pomyślnie, a w przeciwnym wypadku wartość `False`. Uwaga: funkcja nie ma sprawdzać, czy w danym tekście znajduje się dany rodzaj danych, tylko czy w pełni stanowi dany obiekt (np. tekst \"Imię: Adam\" albo \"Adam to szef\" nie powinien przejść walidacji). Funkcje do napisania:\n",
"* Funkcja walidująca imię (minimum 2 litery, zaczyna się wielką literą, pozostałe litery są małe, nie zawiera innych znaków oprócz liter)\n",
"* Funkcja walidująca nr telefonu w formacie (XX) XXX-XX-XX (np. (61) 222-45-56)\n",
"* Funkcja walidująca kod pocztowy XX-XXX (np. 61-620)\n",
"* Funkcja walidująca adres email (uproszczone założenia: pierwsza część składa się z liter i cyfr, potem mamy symbol \"@\", następnie domenę składającą się z liter, dalej symbol \".\" i na końcu ciąg liter od 2 do 6 znaków)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"import re"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Solution 1\n",
"\n",
"def validate_name(text):\n",
" pass\n",
"\n",
"\n",
"def validate_phone_number(phone_number):\n",
" pass\n",
"\n",
"\n",
"def validate_zip_code(zip_code):\n",
" pass\n",
"\n",
"\n",
"def validate_email(email):\n",
" pass\n",
"\n",
"\n",
"names = [\"Adam\", \"Ewa\", \"adam\", \"maciek15pl\", \"y\", \"ka$ia\"]\n",
"phone_numbers = [\"(61) 222-45-56\", \"telefon: (61) 222-45-56\", \"23 123-25-64\", \"(61) 5312-53-1\", \"(00 1110022)\"]\n",
"zip_codes = [\"61-620\", \"63-125 \", \"12345\", \"125-21\"]\n",
"emails = [\"sigmaboy@sigma.pl\", \"superbohater2008@gmail.com\", \"bieg@cz@gmail.com\", \".slodkipiesek.@pieskowo.eu\", \"@do.it\"]\n",
"\n",
"\n",
"print(\"NAMES\")\n",
"for name in names:\n",
" print(validate_name(name))\n",
"\n",
"print(\"PHONE NUMBERS\")\n",
"for phone_number in phone_numbers:\n",
" print(validate_phone_number(phone_number))\n",
"\n",
"print(\"ZIP CODES\")\n",
"for code in zip_codes:\n",
" print(validate_zip_code(code))\n",
"\n",
"print(\"EMAILS\")\n",
"for email in emails:\n",
" print(validate_email(email))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zadanie 2\n",
"Napisz funkcję, która podzieli tekst na zdania. Zdanie kończy się kropką, znakiem zapytania lub wykrzyknikiem. Wykorzystaj pojedynczy pattern z wyrażeń regularnych. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Solution 2\n",
"\n",
"def split_sentences(text):\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zadanie 3\n",
"Napisz funkcję, który znajdzie w tekście jak największą liczbę wulgaryzmów i zastąpi je ciągiem znaków \"---\" (i zwróci tekst bez wulgaryzmów). Użyj wyrażeń regularnych. Pamiętaj, że wulgaryzmy odmieniają się przez przypadki oraz tworzy się z nich czasowniki, które również można uznać za wulgaryzmy. Przetestuj program na prawdziwym tekście (minimum 500 znaków) zawierającym różne wulgaryzmy (np. jakaś wypowiedź z forum internetowego)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Solution 3\n",
"\n",
"def censor_text(text):\n",
" pass"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}