{ "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": 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\", \"Adam to szef\", \"adam To szef\"]\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(f\"{name}: {validate_name(name)}\")\n", "\n", "print(\"PHONE NUMBERS\")\n", "for phone_number in phone_numbers:\n", " print(f\"{phone_number}: {validate_phone_number(phone_number)}\")\n", "\n", "print(\"ZIP CODES\")\n", "for code in zip_codes:\n", " print(f\"{code}: {validate_zip_code(code)}\")\n", "\n", "print(\"EMAILS\")\n", "for email in emails:\n", " print(f\"{email}: {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. Podzielone zdania muszą zachować pierwotną interpunkcję (czyli po podziale kropka/wykrzyknik/znak zapytania muszą występować w rozdzielonych od siebie zdaniach). 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).\n", "\n", "Nie wolno stosować długiej listy słów odmienionych w różny sposób jako pattern, należy użyć relatywnie niedużej listy i zastosować odpowiedni pattern pokrywający różne odmiany danego słowa." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Solution 3\n", "\n", "def censor_text(text):\n", " pass" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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 }