Merge branch 'master' of git.wmi.amu.edu.pl:filipg/aitech-eks

This commit is contained in:
Filip Gralinski 2021-03-20 14:29:59 +01:00
commit ee94e75c1c
8 changed files with 276 additions and 2 deletions

View File

@ -53,7 +53,9 @@
"- 450—499 — 4+\n", "- 450—499 — 4+\n",
"\n", "\n",
"- 500- — 5\n", "- 500- — 5\n",
"\n" "\n",
"\n",
"**Żeby zaliczyć przedmiot należy pojawiać się na laboratoriach. Maksymalna liczba nieobecności to 3. Obecność będę sprawdzał poprzez panel MS TEAMS, czyli będę sprawdzał czy ktoś jest wdzwoniony na ćwiczenia. Jeżeli kogoś nie będzie więcej niż 3 razy, to nie będzie miał zaliczonego przedmiotu** \n"
] ]
}, },
{ {
@ -80,7 +82,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.8.5" "version": "3.8.3"
} }
}, },
"nbformat": 4, "nbformat": 4,

View File

@ -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 <http://archiwum.ciop.pl/44938>, 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",
" <https://elibrary.mab.lt/handle/1/840>, **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
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
cw/obrazki/02-fork.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
cw/obrazki/02-inspect.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 KiB