====== 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ę.** [[http://home.agh.edu.pl/~pszwed/sproj/inscr-2021.html|Zarejestruj temat]] \\ [[http://home.agh.edu.pl/~pszwed/inscr/list.cgi?courseid=sproj-1-2021&title=StudioProjektowe1.2021|Lista zarezerwowanych tematów]]\\ 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 [[https://www.cdc.gov/diseasesconditions/az/a.html|CDC ]] *Ontologie produktów żywnościowych: * [[https://www.ars.usda.gov/northeast-area/beltsville-md-bhnrc/beltsville-human-nutrition-research-center/]] * [[https://bioportal.bioontology.org/ontologies/ONS]] 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) [[https://miro.medium.com/max/1050/1*8LOMipM-fmszClg-AwATkQ.png|Przykład]] 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