diff --git a/cw/02_wyszukiwarki_roboty.ipynb b/cw/02_wyszukiwarki_roboty.ipynb new file mode 100644 index 0000000..7037db8 --- /dev/null +++ b/cw/02_wyszukiwarki_roboty.ipynb @@ -0,0 +1,272 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Wyszukiwarki roboty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadanie\n", + "\n", + "Opracować w języku Haskell wyspecjalizowanego robota pobierającego dane z konkretnego serwisu.\n", + "\n", + "Punkty: 80 (domyślnie - niektóre zadanie są trudniejsze, wówczas ich ilość podana jest przy zadaniu)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ogólne zasady:\n", + "- pobieramy informacje (metadane) o plikach PDF, DjVU, JPG itp, ale nie same pliki,\n", + "- nie pobierajmy całego serwisu, tylko tyle, ile trzeba, by pobrać metadane o interesujących nas zasobach,\n", + "- interesują nas tylko teksty polskie, jeśli nie jest to trudne, należy odfiltrować publikacje obcojęzyczne,\n", + "- staramy się ustalać datę z możliwie dużą dokładnością." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Instrukcja" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 0. Haskell Stack\n", + "\n", + "Pobrać Haskell Stack\n", + "\n", + " curl -sSL https://get.haskellstack.org/ | sh -s - -d ~/bin\n", + "\n", + "\n", + "##### Problemy z fizycznymi komputerami wydziałowymi\n", + "Na fizycznych komputerach wydziałowych są błędnie ustawione prawa dostępu na dyskach sieciowych, Haskell Stack musi działać na fizycznym dysku:\n", + "\n", + " rm -rf /mnt/poligon/.stack\n", + " mkdir /mnt/poligon/.stack\n", + " mv ~/.stack ~/.stack-bak # gdyby już był... proszę się nie przejmować błędem\n", + " ln -s /mnt/poligon/.stack ~/.stack" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Repozytorium z przykładowym rozwiązeniem\n", + "\n", + "Zrobienie forka repozytorium https://git.wmi.amu.edu.pl/filipg/twilight-library.git\n", + "\n", + "\n", + "![forkowanie repo](./obrazki/02-fork.png)\n", + "\n", + "Sklonowanie sforkowanego repozytorium na komputer\n", + "\n", + "![sklonowanie repo](./obrazki/02-fork-clone.png)\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Sprawdzenie czy przykładowy robot działa \n", + "\n", + "\n", + "W katalogu projektu należy odpalić:\n", + "\n", + " stack install # może trwać długo za pierwszym razem\n", + " stack exec almanachmuszyny\n", + "\n", + "Jeżeli instalacja nie powiedzie się, być może należy zainstalować paczki libpcre3 libpcre3-dev , np. na ubuntu:\n", + "\n", + " sudo apt install libpcre3 libpcre3-dev\n", + " \n", + " \n", + " \n", + "### Metoda opracowania robota z przykładu:\n", + "\n", + "##### Znalezienie wyszystkich stron z rocznikami:\n", + "\n", + "W przeglądarce należy znaleźć wszystkie linki do stron z rocznikami. Najłatwiej zrobić to przez podejrzenie źródła strony. Na przykład można kliknąć prawym przyciskiem myszy na link i wybrac \"Inspect Element\" (działa na chrome).\n", + "\n", + "![inspect](./obrazki/02-inspect.png)\n", + "\n", + "\n", + "Łatwo zauważyć, że wszystkie linki mają klasę \"roczniki\". Dlatego należy odwołać sie w robocie do tej klasy poprzez xpath w pliku app/almanachmuszyny.hs :\n", + "\n", + " extractRecords = extractLinksWithText \"//a[@class='roczniki']\" -- pary adres-tytuł \n", + " \n", + "Następna linijka kodu służy oczyszczeniu stringa z tytułem rocznika:\n", + "\n", + " >>> second (arr $ replace \"\\r\\n \" \" \")\n", + "\n", + "\n", + "Następnie, łatwo zauważyć, że robiąc prostą manipulację linkiem z :\n", + "\n", + "http://www.almanachmuszyny.pl/index.php?p=spisy/95s\n", + "\n", + "na \n", + "\n", + "http://www.almanachmuszyny.pl/index.php?p=spisy/95tr\n", + "\n", + "dostajemy stronę spis-treści ze wszystkimi pdf-ami. Dlatego robimy podmianę linku:\n", + "\n", + " >>> first (arr ((++\"tr\") . init)) -- modyfikujemy pierwszy element pary, czyli adres URL\n", + " \n", + " \n", + "Nastęnie ze wszystkich podanych stron ze spisem treści wybieramy wszystkie pdfy korzystając z polecenia:\n", + "\n", + " >>> first (extractLinksWithText \"//li/a[contains(@href,'.pdf')]\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Opracowanie swojego robota\n", + "\n", + "Opracuj swojego robota wzorując się na pliku almanachmuszyny.hs. (Ale dodaj swój plik, nie zmieniaj almanachmuszyny.hs!)\n", + "Twój robot powinien działać na serwisie wybranym z listy na którą należy się zapisać (na dole tej strony).\n", + "\n", + "Dopisz specyfikację swojego robota do shadow-library.cabal.\n", + "\n", + "Pracuj nad swoim robotem, uruchamiaj go w następujący sposób:\n", + "\n", + " stack build\n", + " stack exec mojrobot\n", + " \n", + "mojrobot to przykładowa nazwa- dla swojego projektu użyj innej, znaczącej nazwy\n", + "\n", + "Jeśli publikacja (np. pojedynczy numer gazety) składa się z wielu plików, powinien zostać wygenerowany jeden rekord, w finalUrl powinny znaleźć się URL do poszczególnych stron (np. plików JPR) oddzielone //.\n", + "\n", + "Dla twojego robota przydatne mogą być funkcje zdefiniowane w ShadowLibrary/Core.hs\n", + "\n", + "\n", + "\n", + "##### Problemy z https\n", + "\n", + "W przypadku problemów z https:\n", + "\n", + "Trzeba użyć modułu opartego na bibliotece curl. Paczka Ubuntu została zainstalowana na komputerach wydziałowych. Na swoim komputerze możemy zainstalować paczkę libcurl4-openssl-dev, a\n", + "następnie można sobie ściągnąć wersję twilight-library opartą na libcurl:\n", + "\n", + " git fetch git://gonito.net/twilight-library withcurl\n", + " git merge FETCH_HEAD\n", + " \n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Zgłoszenie zadań\n", + "\n", + "Po opracowaniu robota oddaj zadanie korzystając z panelu MS TEAMS assigments umieszczając jako rozwiązanie link do twojego repozytorium." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lista serwisów do wyboru" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Na serwis należy zapisywać się korzystając z linka do google doc podanego na ćwiczeniach\n", + "\n", + "Lista serwisów do wyboru (na każdy serwis 1 osoba):\n", + "\n", + "1. [Teksty Drugie](http://tekstydrugie.pl)\n", + "2. [Archiwum Inspektora Pracy](https://www.pip.gov.pl/pl/inspektor-pracy/66546,archiwum-inspektora-pracy-.html)\n", + "3. [Medycyna Weterynaryjna](http://www.medycynawet.edu.pl/archives) — również historyczne zasoby od 1945 roku, **120 punktów**\n", + "4. [Polskie Towarzystwo Botaniczne](https://pbsociety.org.pl/default/dzialalnosc-wydawnicza/) — wszystkie dostępne zdigitalizowane publikacje!, **130 punktow**\n", + "5. [Wieści Pepowa](http://archiwum2019.pepowo.pl/news/c-10/gazeta) — nie pominąć strony nr 2 z wynikami, **110 punktów**\n", + "6. [Czasopismo Kosmos](http://kosmos.icm.edu.pl/)\n", + "7. [Czasopismo Wszechświat](http://www.ptpk.org/archiwum.html)\n", + "8. [Czasopisma polonijne we Francji](https://argonnaute.parisnanterre.fr/ark:/14707/a011403267917yQQFAS) — najlepiej w postaci PDF-ów, jak np. [https://argonnaute.parisnanterre.fr/medias/customer_3/periodique/immi_pol_lotmz1_pdf/BDIC_GFP_2929_1945_039.pdf](), **220 punktów**\n", + "9. [Muzeum Sztuki — czasopisma](https://zasoby.msl.org.pl/mobjects/show), **220 punktów**, publikacje, teksty, czasopisma, wycinki\n", + "10. [Wiadomości Urzędu Patentowego](https://grab.uprp.pl/sites/Wydawnictwa/WydawnictwaArchiwum/WydawnictwaArchiwum/Forms/AllItems.aspx)\n", + "11. [Czas, czasopismo polonijne](https://digitalcollections.lib.umanitoba.ca/islandora/object/uofm:2222545), **140 punktów** S.G.\n", + "12. [Stenogramy Okrągłego Stołu](http://okragly-stol.pl/stenogramy/), **110 punktów**\n", + "13. [Nasze Popowice](https://smpopowice.pl/index.php/numery-archiwalne)\n", + "14. [Czasopisma entomologiczne](http://pte.au.poznan.pl/)\n", + "15. [Wiadomości matematyczne](https://wydawnictwa.ptm.org.pl/index.php/wiadomosci-matematyczne/issue/archive?issuesPage=2), **120 punktow**\n", + "16. [Alkoholizm i Narkomania](http://www.ain.ipin.edu.pl/archiwum-starsze.html)\n", + "17. [Czasopismo Etyka](https://etyka.uw.edu.pl/tag/etyka-562018/), O.K.\n", + "18. [Skup makulatury](https://chomikuj.pl/skup.makulatury.prl), **250 punktów**\n", + "19. [Hermes](https://chomikuj.pl/hermes50-1) i https://chomikuj.pl/hermes50-2, **250 punktów**\n", + "20. [E-dziennik Województwa Mazowieckiego](https://edziennik.mazowieckie.pl/actbymonths) **150 punktów**\n", + "21. [Czasopismo Węgiel Brunatny](http://www.ppwb.org.pl/wegiel_brunatny)\n", + "22. [Gazeta GUM](https://gazeta.gumed.edu.pl/61323.html)\n", + "23. [Nowiny Andrychowskie](https://radioandrychow.pl/nowiny/)\n", + "24. [Kawęczyniak](http://bip.kaweczyn.pl/kaweczyn/pl/dla-mieszkanca/publikacje/archiwalne-numery-kaweczyniaka-rok-1995-2005/kaweczyniaki-rok-1997.html)\n", + "25. [Zbór Chrześcijański w Bielawia](http://zborbielawa.pl/archiwum/)\n", + "26. [Gazeta Rytwiańska](http://www.rytwiany.com.pl/index.php?sid=5)\n", + "27. [Nasze Popowice](https://smpopowice.pl/gazeta/2005_12_nasze-popowice-nr_01.pdf)\n", + "28. [Echo Chełmka](http://moksir.chelmek.pl/o-nas/echo-chelmka)\n", + "29. [Głos Świdnika](http://s.bibliotekaswidnik.pl/index.php/archwium/116-glos-swidnika) **100 punktów**\n", + "30. [Aneks](https://aneks.kulturaliberalna.pl/archiwum-aneksu/) **90 punktów**\n", + "31. [Teatr Lalel](http://polunima.pl/teatr-lalek)\n", + "32. [Biuletyn Bezpieczna Chemia](https://www.pipc.org.pl/publikacje/biuletyn-bezpieczna-chemia)\n", + "33. [Głos Maszynisty](https://zzm.org.pl/glos-maszynisty/)\n", + "34. [Kultura Paryska](https://www.kulturaparyska.com/pl/index), całe archiwum z książkami i innymi czasopismami, **180 punktów**\n", + "35. [Gazeta Fabryczna - Kraśnik](https://80lat.flt.krasnik.pl/index.php/gazeta-fabryczna/) **120 punktów**\n", + "36. [Artykuły o Jujutsu](http://www.kobudo.pl/artykuly_jujutsu.html)\n", + "37. [Wycinki o Taekwon-Do](https://www2.pztkd.lublin.pl/archpras.html#z1996)\n", + "38. [Materiały o kolejnictwie](https://enkol.pl/Strona_g%C5%82%C3%B3wna) **180 punktów**\n", + "39. [Centralny Instytut Ochrony Pracy](http://archiwum.ciop.pl/), znaleźć wszystkie publikacje typu , wymaga trochę sprytu **130 punktów**\n", + "40. [Biblioteka Sejmowa - Zasoby Cyfrowe](https://biblioteka.sejm.gov.pl/zasoby_cyfrowe/), **200 punktów**\n", + "41. [Elektronika Praktyczna](https://ep.com.pl/archiwum), te numery, które dostępne w otwarty sposób, np. rok 1993\n", + "42. [Litewska Akademia Nauk](http://www.mab.lt/), tylko materiały w jęz. polskim, takie jak np.\n", + " , **170 punktów**\n", + "43. [Litewska Biblioteka Cyfrowa](https://www.epaveldas.lt), wyłuskać tylko materiały w jęz. polskim, **190 punktów**\n", + "44. [Czasopisma Geologiczne](https://geojournals.pgi.gov.pl), **120 punktów**\n", + "45. [Czasopisma PTTK](https://www.czasopisma.centralnabibliotekapttk.pl/index.php?i3), **120 punktów**\n", + "46. [Czasopisma Polskiego Towarzystwa Dendrologicznego](https://www.ptd.pl/?page_id=7), **100 punktów**\n", + "47. [Kilka przedwojennych książek](https://dziemiela.com/documents.htm)\n", + "48. [Historia polskiej informatyki](http://klio.spit.iq.pl/a4-wyroby-polskiej-informatyki/a4-2-sprzet/) - wyjątkowo bez datowania\n", + "49. [Zeszyty Formacyjne Katolickiego Stowarzyszenia „Civitas Christania”](http://podkarpacki.civitaschristiana.pl/formacja/zeszyty-formacyjne/), tylko niektóre pliki można zdatować\n", + "50. [Józef Piłsudski Institute of America](https://archiwa.pilsudski.org/) - **220 punktów**\n", + "51. [Prasa podziemna — Częstochowa](http://www.podziemie.com.pl), również ulotki i inne materiały skanowane - **180 punktów**\n", + "52. [Tajemnica Atari](http://krap.pl/mirrorz/atari/horror.mirage.com.pl/pixel/), plik ZIP z DjVu\n" + ] + } + ], + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/cw/02a_tfidf_tasks.ipynb b/cw/03a_tfidf_tasks.ipynb similarity index 100% rename from cw/02a_tfidf_tasks.ipynb rename to cw/03a_tfidf_tasks.ipynb diff --git a/cw/02a_tfidf_tasks_ODPOWIEDZI.ipynb b/cw/03a_tfidf_tasks_ODPOWIEDZI.ipynb similarity index 100% rename from cw/02a_tfidf_tasks_ODPOWIEDZI.ipynb rename to cw/03a_tfidf_tasks_ODPOWIEDZI.ipynb diff --git a/cw/02b_tfidf_newsgroup.ipynb b/cw/03b_tfidf_newsgroup.ipynb similarity index 100% rename from cw/02b_tfidf_newsgroup.ipynb rename to cw/03b_tfidf_newsgroup.ipynb diff --git a/cw/obrazki/02-fork-clone.png b/cw/obrazki/02-fork-clone.png new file mode 100644 index 0000000..f36bc5b Binary files /dev/null and b/cw/obrazki/02-fork-clone.png differ diff --git a/cw/obrazki/02-fork.png b/cw/obrazki/02-fork.png new file mode 100644 index 0000000..d94ca2c Binary files /dev/null and b/cw/obrazki/02-fork.png differ diff --git a/cw/obrazki/02-inspect.png b/cw/obrazki/02-inspect.png new file mode 100644 index 0000000..dea856a Binary files /dev/null and b/cw/obrazki/02-inspect.png differ