====== Argumenty na příkazové řádce ====== Hodně užitečných nástrojů pro uživatele počítačů má formu příkazů/skriptů spouštěných z příkazové řádky (''ls'', ''dir'', ''grep'', ...). Tyto příkazy obvykle přijímají argumenty uvedené na příkazové řádce za příkazem (např. ''ls -la''), které ovlivňují chování příkazu. Python obsahuje standardní modul [[https://docs.python.org/3/library/argparse.html|argparse]] ([[https://docs.python.org/3/howto/argparse.html|tutorial]]), který umožňuje snadno konfigurovat možné parametry skriptu a následně je snadno zpracovat. ===== Využití v úloze klasifikace znaků ===== Skript, který máte vytvořit, se má chovat podle [[courses:b3b33kui:semestralni_ulohy:5_ml:start#specifikace|specifikací]]. To lze zajistit např. tak, že modul ''argparse'' pro klasifikátor k-NN nakonfigurujete následujícím způsobem: import argparse def setup_arg_parser(): parser = argparse.ArgumentParser(description='Learn and classify image data.') parser.add_argument('train_path', type=str, help='path to the training data directory') parser.add_argument('test_path', type=str, help='path to the testing data directory') parser.add_argument('-k', type=int, help='number of neighbours (if k is 0 the code may decide about proper K by itself') parser.add_argument("-o", metavar='filepath', default='classification.dsv', help="path (including the filename) of the output .dsv file with the results") return parser Když pak tuto funkci použijete takto: parser = setup_arg_parser() args = parser.parse_args() print(args.train_path) proměnná ''args'' bude obsahovat všechny potřebné informace předané skriptu na příkazové řádce a můžete s nimi dál pracovat. Pro naivní bayesovský klasifikátor stačí uvedený kód jen drobně modifikovat (odstranit argument ''-k''). ===== Kostry modulů ''knn.py'' a ''naive_bayes.py'' ===== Soubory {{ :courses:b3b33kui:cviceni:strojove_uceni:knn.py |}} a {{ :courses:b3b33kui:cviceni:strojove_uceni:naive_bayes.py |}} můžete použít jako výchozí kostru vašeho řešení. Pokud např. modul ''knn.py'' spustíte jako python3 knn.py -k 3 ./train_data ./test_data měli byste vidět následující výstup: Training data directory: ./train_data Testing data directory: ./test_data Output file: classification.dsv Running k-NN classifier with k=3 tedy * adresáře s trénovacími a testovacími daty specifikované na příkazové řádce, * název výstupního souboru, který na příkazové řádce specifikován nebyl a ''argparse'' doplnil výchozí hodnotu, a * zvolený počet sousedů //k// pro k-NN. (Klasifikátor ale musíte implementovat sami. :-) ) Modul ''naive_bayes.py'' můžete použít obdobně.