Table of Contents
Studio projektowe 1 (2021)
Tematy są przeznaczone dla kierunku Informatyka I (3 rok)
Organizacja
- Grupy zakładają repozytoria na Githubie (lub w podobnym miejscu)
- Uzupełniany plik README.md powinien podawać cel projektu, zastosowane technologie, sposób instalacji i konfiguracji.
- W 3-4 tygodniu grupy przygotowują 7 minutowe prezentacje (tytuł, podstawowe funkcje, projekt, planowane technologie i biblioteki, szkice algorytmów, sposób pozyskiwania danych). Dyskusja na forum całej grupy projektowej.
- Pod koniec semestru - prezentacja końcowa i (opcjonalnie) demonstracja. Dyskusja na forum całej grupy projektowej.
- W trakcie semestru - indywidualne konsultacje grup
Rejestracja tematów
Uwaga Przed zarejestrowaniem tematu sprawdź, czy nie jest zajęty. Dany temat może zostać wybrany tylko przez jedną grupę.
Funkcja do rejestracji jest niestety bardzo prymitywna, za co z góry przepraszam. Działanie jej polega na dopisywaniu kolejnych wierszy do pliku tekstowego. Nanosząc ręcznie poprawki najłatwiej jest mi usuwać całe wiersze.
- Jeśli 1-2 osobowa grupa chce dodać kolejną osobę - proszę zarejestrować jeszcze raz wpisując wszystkich członków grupy. Wcześniejszy wpis zostanie usunięty
- Jeżeli grupa chce zmienić temat - proszę zarejestrować jeszcze raz grupę i nowy temat.
Lista tematów
1. Repozytorium danych tekstowych (publikacji) na potrzeby NLP
Uwaga to są trzy tematy do realizacji w mniejszych grupach składające się na pewną całość. Na początku należy ustalić wspólne API i ewentualnie utworzyć usługi mock (symulowane usługi nieistniejącego serwisu), a na zakończenie zintegrować.
1.a Backend
Projekt i implementacja bazy danych do przechowywania danych tekstowych oraz metadanych publikacji, a także API typu REST do wprowadzania danych oraz realizacji dostępu. Metadane stałe - tytuł, streszczenie, czasopismo, słowa kluczowe, data publikacji, autorzy, numer ISSN. Dodatkowo metadane zdefiniowane przez użytkownika. W rzeczywistości chodzi o identyfikację terminów i ich lokalizacji w tekście, ale może być ogólnie zapisane jako klucz, wartość. Indeksowanie według słów (wydzielonych za pomocą gotowego tokenizera) i terminów. Możliwość eksportu zawartości.
3-4 osoby
1.b Frontend
Aplikacja webowa pozwalająca na przeglądanie zawartości repozytorium. Wyszukiwanie według metadanych a także słów. Wyświetla listę znalezionych artykułów lub tekst konkretnego artykułu (wybranego z listy). Wybieranie artykułów i eksport.
2-3 osoby
1.c Zasilanie
Oprogramowanie zasilające repozytorium artykułami pobranymi z wybranych źródeł z literaturą medyczną, np.: https://www.ncbi.nlm.nih.gov/pmc/tools/get-full-text/ Należy przeanalizować API i napisać program, który sekwencyjnie będzie pobierał artykuły w wybranym formacie, wyodrębniał tekst i dodawał do repozytorium - wraz z metadanymi.
2-3 osoby
2. Semantyczny leksykon na potrzeby NLP
Celem jest zgromadzenie terminów dotyczących chorób i produktów żywnościowych przez połączenie zawartości WordNet i dodatkowo wprowadzonych informacji. Należy założyć, że terminy mogą być powiązane relacjami, np. chleb jest rodzajem pieczywa, a pieczywa to węglowodany. Terminy w języku angielskim. Należy podjąć decyzję projektowe - czy te relacje mają zostać zakodowane w jakimś specyficznym języku (np. ontologii OWL) czy po prostu składowane w prostej bazie typu SQL Lite. Wymagany jest interfejs dostępu w języku Python. Można posłużyć się różnymi źródłami, np.
- Web scraping listy chorób z CDC
- Ontologie produktów żywnościowych:
3 osoby
3. Ekstrakcja terminów i relacji z tekstu za pomocą spaCy
Spacy to popularna biblioteka do NLP w języku Python. Ma ładny tutorial https://spacy.io/ Celem projektu jest realizacja trzech zadań (język angielski)
- Ekstrakcja terminów (obiektów) na podstawie leksykonu - czyli funkcji, która zadecyduje, czy jest to interesujący nas termin
- Ekstrakcja relacji zdefiniowanych w postaci manualnie zdefiniowanych reguł. Reguły mogą zostać zakodowane z użyciem informacji o wartościach symboli, częściach mowy oraz funkcji.
- Implementacja algorytmu typu snowball - próba dopasowania reguł do znanej relacji. Rozpatrywane są terminy wewnątrz jednego zdania. Pomiędzy terminami są symbole, którym spacy automatycznie przypisze informacje o częściach mowy/zdania. Zbiór takich sekwencji może zostać uaktualniony w postaci reguły.
3 osoby
4. Narzędzie do etykietowania danych tekstowych w formie aplikacji webowej
Etykietowanie terminów i relacji. Przypadki użycia (pełny CRUD):
- Ładowanie tekstu
- Klikamy lub wybieramy wyraz (lub termin złożony z 2-3 wyrazów) i przypisujemy kategorię (np. organizacja, państwo, choroba, produkt)
- Klikamy na dwa zaznaczone terminy i przypisujemy nazwę relacji oraz opcjonalnie jej wagę
- Pobieranie adnotacji (etykiet)
3-4 osoby
5. Web scraping opinii internetowych
Celem jest pobranie i zapis w bazie danych tekstów opinii wraz z oceną liczbową (gwiazdki). W miarę możliwości także informacje o produktach. Efektem będzie zgromadzenie tekstów (słów i zwrotów) za pomocą których są wyrażane pozytywne i negatywne opinie. Wykorzystanie biblioteki BeautifulSoup lub podobnej. Zakłada się także przeprowadzenie prostej analizy - często występujące pojedyncze słowa lub sekwencje słów powiązane z daną oceną.
3 osoby
6. Webowy czytnik tekstów połączony z text to speech
Użytkownik ładuje plik tekstowy lub PDF (w języku angielskim). System dzieli tekst na fragmenty i wyświetla w oknie równocześnie emituje dźwięk uzyskany za pomocą gTTS. (Google Text to Speech). Zalogowany użytkownik ma dostęp do swoich tekstów, może kontynuować czytanie w miejscu, w którym przerwał.
3 osoby
7. Aplikacja webowa pobierająca dane o kursach walut lub akcji z mikroserwisem do predykcji
Aplikacja pobiera/gromadzi dane o kursach i składuje w bazie danych. Osobnym komponentem jest web serwis na serwerze Flask implementujący kilka-kilkanaście metod predykcji za pomocą gotowych funkcji bibliotek języka Python. Aplikacja umożliwia wyświetlanie kursów oraz porównywanie z przewidywaniami. 3 osoby
8. Ekstrakcja twarzy (dzieci) z filmów wideo
Celem jest zgromadzenie możliwie dużej liczby zdjęć tej samej osoby. Zakłada się wykorzystanie wysokopoziomowej biblioteki face_recognition (Python). Umożliwia ona rozpoznanie twarzy na obrazie oraz stwierdzenie podobieństwa. Niestety, stosunkowo słabo działa w przypadku twarzy dzieci (ujęcia muszą być dość podobne). Idea: wydzielamy klatki z filmu, identyfikujemy położenia twarzy i potencjalnie twarze tej samej osoby - nakładanie się prostokątów i podobieństwo. Wyodrębniamy obrazki twarzy (z pewnym marginesem) i zapisujemy wraz z metadanymi. Projekt obejmuje także organizację pobierania specyficznych filmów wideo z sieci (np. wybranych według słów kluczowych) za pomocą oprogramowania typu YouTube downloader.
3 osoby
9. Symulacja ruchu drogowego z użyciem SUMO
Celem projektu jest automatyzacja procesu przygotowania symulacji ruchu drogowego z użyciem symulatora SUMO:
- import mapy OSM dla wybranego obszaru i przetworzenie na dane dla symulatora
- zdefiniowanie punktów pomiaru (automatyczne rozmieszczenie dużej liczby punktów pomiaru w zadanym obszarze)
- uruchomienie symulacji, zbieranie danych i zapis w bazie danych (może być lekka, typu SQLite)
- wizualizacja wyników symulacji dla wybranych dróg
2-3 osoby
10. System do pobieranie i analizy tekstów z Twittera
Zastosowanie gotowej biblioteki (Java lub Python) pozwalającej na pobieranie nowych wpisów w języku polskim z Twittera. Zapis w bazie danych. Przetwarzanie z użyciem spaCy (model języka polskiego). Aplikacja webowa umożliwiająca dostęp i przeglądanie z funkcją grupowania (np.. Zgrupuj tweety z ostatniego tygodnia).
2-3 osoby
11. System do zbierania i analizy treści kanałów RSS
Celem systemu jest regularne zbieranie treści kanałów RSS (i opcjonalnie artykułów) i ich zapis w bazie danych. Analiza ma polegać na wyszukiwaniu podobnych informacji, np. powiązanych z jednym tematem, a także zadanych sekwencji, np. po tym, jak opublikowany został artykuł na temat X, to w czasie mniejszym niż 7 dni pojawił się artykuł na temat Y. Oczekiwane jest opracowanie różnych graficznych widoków wyników.
2-3 osoby
12. Aplikacja definiowania tematów projektów, tworzenia grup i przesyłania dokumentów
2-3 osoby