Dodano nowe podrozdziały do części o projekcie.

Nowe podrozdziały to:
 - Sprawdzanie typu odpowiedzi
 - Automatyczna regulacja częstości zapytań

Napoczęto crawlowanie wieloprocesowe.
Poprawiono diagramy crawler.xml i scrapy_data_flow.xml

Nowe pakiety minted i algoruled.
This commit is contained in:
siulkilulki 2018-06-09 23:39:46 +02:00
parent ade4259433
commit 40dd43ee2a
7 changed files with 174 additions and 35 deletions

View File

@ -1 +1 @@
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" version="8.7.4" editor="www.draw.io" type="device"><diagram id="625b897b-bc36-6d92-01ce-cd687e325a73" name="Page-1">7Vldk6MoFP01qdp9SEoFjT52eia7D7tVU9UPu/NIkCg1KC6SMelfvxAxKpie7iTbH1ObhwQuCNdzDly4mYH7Yv+bQFX+J08JmwVeup+BT7Mg8APgqx9tObSWMI5aQyZoajr1hgf6SIzRM9YdTUk96ig5Z5JWYyPmZUmwHNmQELwZd9tyNp61QhlxDA8YMdf6F01l3lrj0OvtvxOa5d3MvmdaNgh/ywTflWa+WQC2x0/bXKBuLNO/zlHKm4EJfJ6Be8G5bEvF/p4wjW0HW/vc+kzryW9BSvmcB4L2ge+I7cyro1SQ+qBsO8HaodCWUuOtPHQIHd+R6FG8GVg1OZXkoUJYtzZKE8qWy4Kpmq+KW8rYPWdcHJ/ViAQYK3stBf9GBi1ptInCSLUYt4iQZH/21fwTYEqIhBdECu24eSCABuNDpy1Tb3pG/Y6HfMBmZGzIiCg7Dd0DqQoGy2lcgYNrVu4MnIzp1XJDPFNE4u0knhGOyWZ7GzyBhedJw6+BJ3TwxAI1jIgPCCR8S2GGDpAOgqRM7/QeqmqYobqmeAwa2VP5t8Z3EZra166lVN4MmnT1q2GinYakzsZrwaZc4TuByWh/kkhkRA6WlgvuALxwArvOJghDkn4fOzEFqJnhC6fKvbObCkgsTlrnzVPDjdceKLEGgtZA7Ss7Aylm0GHQrdId6vMOA88SW+I96Rd8ur8qtB70Yjtx8Cz9RS/SX8lLcgvxqSHXVPt0hRThO5Mi8JJFHC59GJjvMW+htwhA7CWh+YaX6RRasyTjGLC0ZvlPNBy+Mw0vzwejiCmSVxtdynTpl6ZpFohtVLx4zLhAi4r96vb6gEHMD8/sX68RxOIXElA3c1SWPw/49lHsVcFPXgj+4wY1FFPCFlxkPwf+IXhD/Ls78kc5wgE3bi7fMm7aOxdMLgyNgRVmILQGulH4s8MZ8J8OfyeFTPe/Ovz5btLgowkwflcCXF56h7AFGFgDnRHgJZy7CY2Xc34TZoc0Jm9Jo70sg/hCGqG9XvXRfXDmBuBdbCuhfWO99bbi5ngcidU5qnSRFscE7lBdOqBTjNgdo1mpbJJXA+sfaEPYF15TSblu3XApeaE6MN2wOmVtx1lKnbcFq+Nkd3XVJpq1WlFX2dK9PqisjD+fcil1hvpOoxKscVrCBcW83FJ1oBELrGYM1imSSP1ou2JnTepaSZwiNkdVNVcqXPuR7sXlvOCCzAtS7uY5TcncD+JFVWaz688vQbx0FGcSQ4O1AxJ37XS2qw4wz8hB/U/0TYiGy8gm+tVoDp5xTu1oxjvBDiuh2NFb+4/O/P0Foa1JZMieJ30sue6CFY/3On/p4ganQosdgS8Czp8Arr01bflxR+4RjP7Z8a5hXh//R1Oa9HxY7fvG7qZ1TDS3Aykf2rG6O9gPb2UKTDmmYXzFMqm64X3MmJBZqFiBr26J7gouaJrqaSZ5H98Gb8HtcpzDgtDd+qa4vYBaVe3/ymtDYv9/Kfj8Lw==</diagram></mxfile> <mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36" version="8.7.6" editor="www.draw.io" type="device"><diagram id="625b897b-bc36-6d92-01ce-cd687e325a73" name="Page-1">7Vldj9soFP01kboPiWyDvx4n02b6sLuqNKq6fSSY2KjYuJiMk/n1CzGOP0imSZpO06rzkIELBnzO4V64noD7fPMgUJn9wxPCJp6TbCbg7cTzXBiG6p+2bBtLGAaNIRU0MZ06wyN9JsboGOuaJqQadJScM0nLoRHzoiBYDmxICF4Pu604G85aopRYhkeMmG39RBOZNdbIdzr7e0LTrJ3ZdUzLEuEvqeDrwsw38cBq99c056gdy/SvMpTwumcC7ybgXnAum1K+uSdMY9vC1jy3ONK6X7cghTzlAa954AmxtXl1lAhSbZVtLVgzFFpRalYrty1Cu3ckehRnAuZ1RiV5LBHWrbXShLJlMmeq5qriijJ2zxkXu2c1Ih7Gyl5Jwb+QXksSLAM/UC32e5hXeyJCkk3PZN7rgfCcSKEXblo9aDDettoy9bpj1G15yHpsBsaGjIjS/dAdkKpgsDyMK7Bwffj3o4GTMb1brohngki0OohngCOyXF0HTzDCc6/h18ATWnhigWpGxC8IJPyZwvQtIC0ESZHcaR+qapihqqJ4CBrZUPmfxnfmm9rntqVQq+k16epnw8RR4Cq+FpgM3JFEIiVysJNIMvDYNrg98PwD2LU2QRiS9Gno5w8Bamb4wKla71GnAuIRJ83bmKf6jnc8UDwaCI4GajCwBlLMoG2vW6k7VMcXDJyR2GLnxXXBl/urQrOCTmx7Dk7SX3CW/gpekGuITw25oHpNp0sR3roUgRPPIj90oWd+h7z5zswDkRP75hdeplM4miUexoBwNMsP0bB/YxoOjwejgCmS50tdSnXpTV3XM8SWKjg8p1ygWcn+snv9gkHM9Y/4r9cIYtGZBFT1FBXF7wP++Cj2quDHZ4L/vEQ1xZSwGRfp74G/D34i/u0d+UaPcMCOm+FNxc2x54LxhaHRG4UZCEcDXSn8jcMZcF8Of3uFHO7/3eHPtZMGNy7A6LYFGF56hxgL0BsNdESAl3BuJzTO5/wSZvs0xjdF43hbetGFNMLxftVH996ZG4CbcCv++MZ6bbdi53gsiVUZKnWR5rsEbl9dOnpTjNgdo2mhbJKXPevfaEnYB15RSbluXXIpea46MN0w32dth1lKnbcF891kd1XZJJq1WlFbWdGNPqjMzXreZlLqDPWdRsVb4KSAM4p5saLqQCNmWM3oLRIkkfqn7YqdBakqpXmK2BSV5VSpcOEGuheX05wLMs1JsZ5mNCFT14tmZZEe3SpnpEaj0FKcSQz19g6I7b3T2r7rAHNCDuoP0VchGrbfXTqiX41m74RzakszXgu2nQvFjvb13zrzdxeEpiaRIXsavxhLzrhgRUNf54Y2bvBQaBlH4IuAcw8A19yaVnznkTsEg69r3jZMq913NKVJx4Xlpmtsb1q7RHMzkFpDM1Z7B/vmrUwhJ4c0DK9YJlXXv48ZEzIbFSs+1C3R3sE5TRI9zUHeh7fBa3AbDnNYENqu7xC3F1Crqt2nvCYkdt9Lwbv/AQ==</diagram></mxfile>

View File

@ -1 +1 @@
<mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" version="8.7.5" editor="www.draw.io" type="device"><diagram id="cf372a5d-54c1-bbd3-8c64-dd4e289d779e" name="Page-1">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</diagram></mxfile> <mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" version="8.7.5" editor="www.draw.io" type="device"><diagram id="cf372a5d-54c1-bbd3-8c64-dd4e289d779e" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -68,4 +68,8 @@
\addcontentsline{toc}{chapter}{Bibliografia} \addcontentsline{toc}{chapter}{Bibliografia}
%\newpage\null\thispagestyle{empty}\newpage %\newpage\null\thispagestyle{empty}\newpage
%\input{zakres_projektu.tex} %\input{zakres_projektu.tex}
\end{document} \end{document}
%%% Local Variables:
%%% LaTeX-command: "latex -shell-escape"
%%% End:

View File

@ -9,6 +9,8 @@
\usepackage{hyperref} % wewnetrzne odnosniki w dokumencie \usepackage{hyperref} % wewnetrzne odnosniki w dokumencie
\usepackage{listings} % kody zrodlowe \usepackage{listings} % kody zrodlowe
\usepackage{minted} % lepsze kody zrodlowe
\usepackage[algoruled]{algorithm2e} %pseudocody
\usepackage{fancyhdr} % zywe paginy smierci \usepackage{fancyhdr} % zywe paginy smierci
\usepackage{tocloft} % format spisu tresci \usepackage{tocloft} % format spisu tresci
@ -25,7 +27,6 @@
\usepackage{tabularx} %lepsze tabele nie uzywane \usepackage{tabularx} %lepsze tabele nie uzywane
\usepackage{makecell} % do formatowania cell w tabelach \usepackage{makecell} % do formatowania cell w tabelach
\usepackage{geometry} \usepackage{geometry}
% \usepackage{minted} %kolorowanie kodu
\usepackage{subfig} \usepackage{subfig}
\usepackage{float} % to use H option in figures \usepackage{float} % to use H option in figures
@ -34,4 +35,7 @@
\usepackage{titling} \usepackage{titling}
\usepackage{afterpage} \usepackage{afterpage}
%%% Local Variables:
%%% LaTeX-command: "latex -shell-escape"
%%% End:

View File

@ -1,4 +1,3 @@
\chapter{Ekstrakcja godzin rozpoczęcia mszy świętych} \chapter{Ekstrakcja godzin rozpoczęcia mszy świętych}
\section{Ogólny zarys systemu} \section{Ogólny zarys systemu}
System zaczyna działanie od zebrania jak największej ilości danych (nazwa parafii, adres, diecezja System zaczyna działanie od zebrania jak największej ilości danych (nazwa parafii, adres, diecezja
@ -150,69 +149,201 @@ porusza się pająk. Oznacza to, że jedna instancja pająka zajmuje się ści
tylko jedenej parafii. W ramach jednej parafii pająk jest w stanie tylko jedenej parafii. W ramach jednej parafii pająk jest w stanie
asynchronicznie wysłać wiele zapytań do serwera i odbierać wiele odpowiedzi od serwera. asynchronicznie wysłać wiele zapytań do serwera i odbierać wiele odpowiedzi od serwera.
\subsubsection{Komponenty crawler'a} \subsection{Komponenty pająka}
\subsubsection{Przepływ danych} \begin{description}
\item [Silnik] - odpowiada za kontrolę przepływu danych i komunikację między komponentami.
\item [Dyspozytor] - otrzymuje żądania od silnika, kolejkuje je i na
prośbę silnika odsyła z powrotem.
\item [Downloader] - jego zadniem jest ściąganie stron parafialnych i
przekazywanie ich silnikowi.
\item [Przetwarzacz danych] - zajmuje się końcową obróbką i zapisem danych.
\item [Spider]\footnote{Użyto angielskiej nazwy, aby rozróżnić
\textit{spider'a} (komponent pająka), od pająka (cały program
odpowiedzialny za crawlowanie stron parafialnych).}
- definuje sposób w jaki ściągać dane, między innymi jak parsować stronę i za jakimi
linkami podążać.
\item [Spider middleware] - programy pośredniczące między silnkiem, a
spider'em. Odpowiedzialne są za dodatkowe przetwarzanie danych wyjściowych
(dane parafialne i żądania) i wejściowych (odpowiedzi) spider'a.
\item [Downloader middleware] - programy pośredniczące między silnikiem, a
downloader'em. Zajmują się dodatkowym przetwarzaniem danych wejściowych
(żądań) i wyjściowych (odpowiedzi) downloader'a.
\end{description}
\newpage
\subsection{Przepływ danych}
Przepływ danych kontrolowany jest przez Przepływ danych kontrolowany jest przez
silnik i prezentuje się następująco: silnik i prezentuje się następująco:
\begin{figure}[tbh] \begin{figure}[tbh]
\center \center
\includegraphics[width=0.7\hsize]{scrapy_data_flow.png} \includegraphics[width=0.85\hsize]{scrapy_data_flow.png}
% \caption{100 crawlerów pracujących jednocześnie} % \caption{100 crawlerów pracujących jednocześnie}
\label{scrapy_data_flow_pic} \label{scrapy_data_flow_pic}
\end{figure} \end{figure}
\begin{enumerate} \begin{enumerate}
\item Silnik otrzymuje od pająka żądanie pobrania początkowej strony danej \item Silnik otrzymuje od spider'a żądanie pobrania początkowej strony danej
parafii (najczęściej jest to strona główna parafii). parafii (najczęściej jest to strona główna parafii).
\item Silnik oddaje żądania dyspozytorowi, który kolejkuje je do dalszego \item Silnik oddaje żądania dyspozytorowi, który kolejkuje je do dalszego
przetwarzania oraz pyta dyspozytora o żądania gotowe do przekazania downloader'owi. przetwarzania oraz pyta dyspozytora o żądania gotowe do przekazania downloader'owi.
\item Dyspozytor zwraca silnikowi następne żądania. \item Dyspozytor zwraca silnikowi następne żądania.
\item Silnik wysyła żądania do downloader'a. Zanim żądania dotrą do \item Silnik wysyła żądania do downloader'a. Zanim żądania dotrą do
downloader'a przetwarzane są przez middleware'y downloader'a. downloader'a przetwarzane są przez downloader middleware.
\item Downloader ściąga stronę parafialną i umieszcza ją w odpowiedzi, którą \item Downloader ściąga stronę parafialną i umieszcza ją w odpowiedzi, którą
przesyła silnikowi. Zanim odpowiedź dotrze do silnka przetwarzana jest przez przesyła silnikowi. Zanim odpowiedź dotrze do silnka przetwarzana jest przez
middleware'y downloader'a. downloader middleware.
\item Silnik otrzymuje odpowiedź od downloader'a i przekazuje ją pająkowi do \item Silnik otrzymuje odpowiedź od downloader'a i przekazuje ją spider'owi do
dalszego przetwarzania. Zanim odpowiedź trafi do pająka przetwarzana jest dalszego przetwarzania. Zanim odpowiedź trafi do spider'a przetwarzana jest
przez middleware'y pająka. przez spider middleware.
\item Pająk przerabia odpowiedź i zwraca dane strony parafialnej silnikowi. Zanim dane \item Spider przerabia odpowiedź i zwraca dane strony parafialnej silnikowi. Zanim dane
trafią do silnika przechodzą przez middleware'y pająka. Dodatkowo pająk trafią do silnika przechodzą przez spider middleware. Dodatkowo spider
wysła żądania z nowymi stronami parafialnymi do pobrania. wysła żądania z nowymi stronami parafialnymi do pobrania.
\item Silnik wysyła zebrane dane do przetwarzacza danych, który zapisuje je w \item Silnik wysyła zebrane dane do przetwarzacza danych, który zapisuje je w
pliku jsonline. Następnie przekazuje nowe żądania do zakolejkowania pliku jsonline REF. Następnie przekazuje nowe żądania do zakolejkowania
dyspozytorowi. dyspozytorowi.
\end{enumerate} \end{enumerate}
\vspace*{-20mm} % \vspace*{-20mm}
Cały proces trwa dopóty, dopóki są nowe żądania do przetworzenia. Cały proces trwa dopóty, dopóki są nowe żądania do przetworzenia.
\subsection{Sprawdzanie typu odpowiedzi}
Podczas crawlowania ważne jest rozpoznawanie typu ściąganych danych. W przypadku
crawlowania stron parafialnych interesują nas wyłącznie dane tekstowe. Należy
zatem zadbać o to aby nie pobierać danych binarnych takich jak np. video, audio
i obrazy.
\vspace*{20mm} Scrapy obsługuje rozpoznawanie typu zawartości odpowiedzi bazując na
następujących kryteriach:
\begin{itemize}
\item wartościach \mintinline{bash}{Content-type}, \mintinline{bash}{Content-Encoding} i \mintinline{bash}{Content-Disposition} w nagłówku odpowiedzi,
\item nazwie pliku lub adresie url (jeśli nie udało się rozpoznać po nagłówku),
\item analizując pierwsze 5000 bajtów zawartości odpowiedzi w poszukiwaniu
znaków znajdującyh się wyłącznie w plikach binarnych (jeśli nie udało się
rozpoznać po nazwie pliku lub adresie url).
\end{itemize}
Powyższy schemat postępowania jest skuteczny jeśli serwisy internetowe zwracają
poprawne odpowiedzi. Niestety niektóre strony parafialne potrafią zwracać
odpowiedzi, które są niezgodne z
https://tools.ietf.org/html/rfc7231 section-3.1.1.5.
UZU Dla przykładu potrafi zwórcić \mintinline{bash}{Content-Type: text/html}, a w \mintinline{bash}{body} binarną
zawartość np. film.
Ze względu na tego rodzaju anomalie zastosowano następujący algorytm REF.
\enlargethispage{4\baselineskip}
\begin{algorithm}
\setstretch{1.2}
\SetAlgorithmName{Algorytm}{algorithm}{List of Algorithms}
\caption{Rozpoznawanie plików binarnych}
\SetAlgoLined
\SetKwData{File}{bytes}
\SetKwData{True}{True}
\SetKwData{False}{False}
\SetKwInput{kwInput}{Wejście}
\SetKwInput{kwOutput}{Wyjście}
\kwInput{\File $\leftarrow$ 1024 pierwsze bajty pliku}
\kwOutput{\True jeśli plik binarny, \False jeśli plik tekstowy}
\SetKwData{ControlCount}{control\_char\_count}
\SetKwData{ControlRatio}{control\_char\_ratio}
\SetKwData{AsciiCount}{extended\_ascii\_count}
\SetKwData{AsciiRatio}{extended\_ascii\_ratio}
\If{\File puste}{
\Return{\False}\;
}
\If{\File dekodowalne jako unikod}{
\Return{\False}\;
}
\ControlCount $\leftarrow$ liczba znaków kontrolnych w \File\;
\AsciiCount $\leftarrow$ liczba znaków ascii o kodach od 128 do 255 w \File\;
\ControlRatio $\leftarrow \frac{\ControlCount}{1024}$\;
\AsciiRatio $\leftarrow \frac{\AsciiCount}{1024}$\;
\SetKwIF{IfM}{ElseIfM}{ElseM}{if~(\endgraf}{\endgraf)~then}{else if}{else}{end if}%
\IfM{\begin{tabular}{@{\hspace*{1.5em}}l@{}}
$($\ControlRatio $> 0.3$ {\bf and} \AsciiRatio $< 0.05)$ {\bf or}\\
$($\ControlRatio $> 0.8$ {\bf and} \AsciiRatio $> 0.80)$
\end{tabular}}{
\Return{\True}\;
}
\SetKwData{Null}{null}
\If{znak \Null w \File}{
\Return{\True}\;
}
\Return{\False}\;
\end{algorithm}
\subsection{Automatyczna regulacja częstości zapytań}
Biblioteka scrapy zawiera przydatne rozszerzenie, które potrafi automatycznie
regulować częstość zapytań w zależności od obciążenia crawler'a i strony internetowej.
\noindent Algorytym regulacji częstości zapytań prezentuje się następująco:
\begin{enumerate}
\item Przyjmijmy, że:
\subitem {\makebox[4.55cm][l]{\mintinline{python}{download_delay}\footnote{Czasy oczekiwania i
opóźnienia liczone są w sekudnach.}}} to opóźnienie wysłania
zapytania.
\subitem \mintinline{python}{target_download_delay} to docelowe
opóźnienie zapytania.
\subitem {\makebox[4.55cm][l]{\mintinline{python}{init_download_delay}}} to początkowe opóźnienie wysłania
zapytania.
\subitem {\makebox[4.55cm][l]{\mintinline{python}{min_download_delay}}} to minimalne opóźnienie wysyłania.
\subitem {\makebox[4.55cm][l]{\mintinline{python}{max_download_delay}}} to maksymalne opóźnienie wysyłania.
\subitem {\makebox[4.55cm][l]{\mintinline{python}{latency}}} to czas od
ustanowienia połączenia \\
{\makebox[5.22cm][l]{}} do otrzymania nagłówków odpowiedzi.
\subitem {\makebox[4.55cm][l]{\mintinline{python}{target_concurrency}}} to zaplanowana liczba zapytań na sekundę.
\item Zacznij z \mintinline{python}{download_delay} równym \mintinline{python}{init_download_delay}.
\item Kiedy odpowiedź jest odebrana, \\ustaw
\mintinline{python}{target_download_delay = latency / target_concurrency}
\item Następne \mintinline{python}{download_delay} ustaw jako średnią z
aktualnego \mintinline{python}{download_delay} i \mintinline{python}{target_download_delay}.
\item \mintinline{python}{download_delay} nie może być mniejszy niż i większy niż .
\item Czasy oczekiwania na odpowiedzi z kodem http różnym od 2xx nie są brane
pod uwagę.
\end{enumerate}
\noindent W crawlerze stron parafialnych stałe ustawiono następująco:
\begin{itemize}
\item \mintinline{python}{min_download_delay = 0}
\item \mintinline{python}{init_download_delay = 5}
\item \mintinline{python}{target_concurrency = 1}
\end{itemize}
\subsection{Crawlowanie wieloprocesorowe}
Pająk został zaprojektowany w ten sposób, aby bardzo łatwo można było
urównoleglić ściąganie stron parafialnych.
Z pomocą GNU parallel crawlowane jest jednocześnie 100 parafii. Z pomocą GNU parallel crawlowane jest jednocześnie 100 parafii.
\begin{figure}[tbh] \begin{figure}[tbh]
\center \center
\includegraphics[width=0.7\hsize]{crawler.png} \includegraphics[width=0.7\hsize]{crawler.png}
\caption{100 crawlerów pracujących jednocześnie} \caption{100 crawlerów pracujących jednocześnie.}
\label{crawler_pic} \label{crawler_pic}
\end{figure} \end{figure}
\section{Organizacja danych} % może zbyt inżynierskieby \subsection{Konwersja html na tekst.}
\section{Ekstrakcja godzin rozpoczęcia mszy świętych}
\subsection{Ogólny zarys} \section{System crowdsourcingowy}
\subsection{Named entity recognition} \section{Ekstraktor regułowy}
\subsection{Słowa kluczowe} \section{Ekstraktor oparty na uczeniu maszynowym}
\subsection{Reguły}
\subsection{Bootstraping}
\subsection{Otoczenia słów (ang. word embeddings)}
\chapter{Rezultaty} \chapter{Rezultaty}
\section{Wyrażenia regularne} % \section{Organizacja danych} % może zbyt inżynierskieby
\section{Bootstraping}
\section{Autorska metoda}
\subsection{Ewaluacja wewnętrzna} %F1 score
\subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy
\chapter{Wnioski}
\chapter{Perspektywy na przyszłość} \chapter{Perspektywy na przyszłość}
\chapter{Podsumowanie}
% \subsection{Ewaluacja wewnętrzna} %F1 score
% \subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy
% \chapter{Wnioski}
%%% Local Variables:
%%% LaTeX-command: "latex -shell-escape"
%%% End: