From d4a36474239998c69ba1a928f506d6dd39ca95b0 Mon Sep 17 00:00:00 2001 From: Ryszard Staruch Date: Wed, 16 Oct 2024 13:32:19 +0200 Subject: [PATCH] Add zajecia 02 nb --- 02_wyrazenia_regularne.ipynb | 159 +++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 02_wyrazenia_regularne.ipynb diff --git a/02_wyrazenia_regularne.ipynb b/02_wyrazenia_regularne.ipynb new file mode 100644 index 0000000..872d8f2 --- /dev/null +++ b/02_wyrazenia_regularne.ipynb @@ -0,0 +1,159 @@ +{ + "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": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "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": 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 zadania. 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 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": "undefined.undefined.undefined" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}