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 argparse (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 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 knn.py a 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ě.

courses/b3b33kui/semestralni_ulohy/5_ml/argparse.txt · Last modified: 2023/04/28 18:08 by xposik