====== Spam filter - krok 1 ======
Budeme vytvářet funkci, která bude umět načíst údaje ze souborů ''!truth.txt'' nebo ''!prediction.txt'' do datové struktury typu ''dictionary''.
* [[.unit_testing|Testy]] ke kroku 1: {{test1_readclassification.zip}}
===== Příprava =====
- Práce s datovou strukturou ''dictionary'' (viz {[b4b33rph:Pilgrim2009]}, kapitola [[http://www.diveintopython3.net/native-datatypes.html#dictionaries|2.7]], nebo {[b4b33rph:Wentworth2012]}, kapitola [[http://openbookproject.net/thinkcs/python/english3e/dictionaries.html|20]])
* Zopakovat: vytvoření prázdného slovníku, přidání páru klíč-hodnota, zjištění hodnoty pro klíč
* Vyzkoušejte si procházení položek slovníku pomocí metody ''items()'':
eng_to_cz = {'cat': 'kocka', 'dog': 'pes', 'house': 'dum' }
for eng, cz in eng_to_cz.items():
print(eng, ',', cz)
- Zopakujte si použití sekce if __name__ == "__main__":
(viz {[b4b33rph:Pilgrim2009]}, kapitola [[http://www.diveintopython3.net/your-first-python-program.html#runningscripts|1.10]]).
- Práce se soubory (viz {[b4b33rph:Pilgrim2009]}, kapitola [[http://www.diveintopython3.net/files.html|11]], nebo {[b4b33rph:Wentworth2012]}, kapitola [[http://openbookproject.net/thinkcs/python/english3e/files.html|13]] - Ale pozor! Zde autoři zapomínají specifikovat kódování souboru!)
* Otevření a uzavření textového souboru
* Použití příkazu ''with''
* Čtení ze souboru (po řádcích)
* Načtení celého obsahu souboru do 1 řetězce
- Metoda ''split()'' řetězcových proměnných (viz dokumentace k [[http://docs.python.org/py3k/library/stdtypes.html?highlight=split#str.split|str.split()]])
===== Načtení klasifikace ze souboru =====
Úkol:
* V modulu ''utils.py'' vytvořte funkci ''read_classification_from_file'' pro načtení klasifikace mailů z textového souboru
K čemu nám to bude:
* Funkci ''read_classification_from_file'' budeme potřebovat při učení filtru (pokud jej budeme učit) a při hodnocení úspěšnosti filtrů.
==== Specifikace ====
Funkce ''read_classification_from_file'' (v modulu ''utils.py''):
^ Vstupy: | cesta k textovému souboru (v našem případě to budou typicky soubory ''!truth.txt'' a ''!prediction.txt'')|
^ Výstupy: | ''dictionary'' obsahující pro každý název souboru identifikátor SPAM nebo OK |
Funkce načte textový soubor, v němž jsou na řádku vždy 2 řetězce oddělené mezerou,
email01.txt OK
email02.msg OK
email03.txt SPAM
email1234.txt OK
...
a vytvoří z něj datovou strukturu ''dictionary'' (na pořadí jednotlivých "řádků" v následujícím výpisu nezáleží):
{'email1234.txt': 'OK', 'email03.txt': 'SPAM', 'email02.msg': 'OK', 'email01.txt': 'OK'}
Bude-li soubor prázdný, funkce vrátí prázdný slovník.
> {{page>..:..:internal:cviceni:spam:krok1#read_classification_from_file&editbtn}}
===== Zápis klasifikace do souboru =====
Tip: pravděpodobně se vám bude hodit i inverzní funkce, tedy funkce pro zápis klasifikace uložené ve slovníku do souboru na disku. Toto v tuto chvíli ponecháváme jako dobrovolný DÚ.
> {{page>..:..:internal:cviceni:spam:krok1#write_classification_to_file&editbtn}}