Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Spam I

  • Dotazy a odpovědi
  • Testík
  • Vyjasnění a diskuse zadání úlohy Spam filter
  • Nastavení projektu pro Spam filter v PyCharmu
  • Spouštění testů v PyCharmu
  • Vysvětlení a demonstrace testů k úloze Spam filter
  • Hádanka
  • Příkaz yield

Dotazy a odpovědi

  • Kolik lidí se pokusilo implementovat funkci read_classification_from_file()? Kolik lidí si myslí, že ji i úspěšně dokončilo?
  • Na jaké problémy jste při práci se soubory narazili?
  • Připomenutí: proč je dobré používat parametr encoding ve volání open(filename, mode, encoding='utf-8')?

Hádanka

Programovací testík

Zadání na interních stránkách.

Úvod do úlohy Spam filtr

Tým pro Spam filtr

Druhá část úlohy Spam filtr je týmová. Bylo by dobře, kdybyste nejpozději příští týden věděli, s kým budete v týmu. Dejte nám vědět, zda tým už máte nebo si někoho najdete sami, zda byste chtěli, abychom vám někoho přidělili, nebo zda máte k týmové práci takový odpor, že opravdu chcete úlohu řešit sami.

Dotazník

Pokud se rozhodnete úlohu řešit sami, vězte, že to bude mnohem více práce: musíte vytvořit kód, report i prezentaci sami. V týmu se o práci můžete podělit.

Založení projektu a spouštění skriptů v PyCharm

Pokud někdo stále naráží na problémy, zkuste si přečíst

Spouštění testů v PyCharm

Opět existuje několik způsobů, jak testy spustit. Vyberte si ten, který vám nejvíc vyhovuje.

Spuštění testů z jednoho modulu v Python shellu

Spustí testy v jednom modulu:

Spuštění testů jednoho modulu v nástroji Test

Spustí testy v jednom modulu.

2017-11-30: Dnes jsme zjistili, že v učebně 307 v PyCharm Community tato možnost nefunguje správně. Pokud narážíte na podobné problémy, zkuste si běhovou konfiguraci nadefinovat ručně (viz následující popis). Stačí použít Target Python s názvem testovaného modulu, např. test_readClassificationFromFile. Možnost s Target Path občas nefunguje.

Spuštění všech testů v adresáři (projektu) najednou v nástroji Test

Spustí všechny testy.

2018/07/17 13:25

Demonstrace testů k úloze Spam filter

http://docs.python.org/py3k/library/unittest.html

  • Testy se snažíme psát srozumitelně, abyste jejich studiem něco získali.
  • Mnoho pomocných funkcí, které u testů jsou, tvoří také zajímavý studijní materiál.
  • Uvědomte si, že testy velmi často dělají opak toho, co má dělat váš kód: když má vaše funkce načítat data ze souboru, musí je jiná funkce v testu nejprve vytvořit. Zkuste zde hledat inspiraci k řešení vlastních problémů!

Testy ke kroku 1

Stáhněte si testy ke kroku 1 úlohy Spam filtr. Archiv rozbalte do adresáře, kde vyvíjíte spam filter.

  • Zkuste si zdrojový kód testů sami přečíst. Poznamenejte si nejasnosti. Diskutujte o nich se cvičícím.
  • Zkuste testy spustit.
  • Co vám říká výstup? Jaký další (co nejmenší) krok byste udělali na základě výstupu unit testu, abyste se posunuli dál?
  • Zkuste tento krok rovnou udělat. Jak se změnil výstup unit testu? Jak další krok byste udělali?

Testy ke kroku 2

Zopakujte (podle potřeby) výše uvedené i pro testy ke kroku 2.

Příkaz ''yield''

Iterable, iterator, ''yield''

Programovací úlohy

  • Dokončete krok 1 úlohy Spam filtr, tj. funkci read_classification_from_file() tak, aby procházela unit testem.
  • Začněte pracovat na kroku 2 úlohy Spam filtr, tj. na třídě Corpus a její metodě emails().

Domácí úkol

Vyplňte dotazník ohledně složení týmů pro Spam filtr, pokud jste to ještě neudělali.

Programování

Pokud se vám to nepodařilo už na cvičení, dokončete:

  • krok 1 úlohy Spam filtr, tj. funkci read_classification_from_file() tak, aby procházela testy.
  • krok 2 úlohy Spam filtr, tj. třídu Corpus a její metodu emails() tak, aby procházela testy.

Příprava

Příprava na krok 3 úlohy spam filtr:

Prostudujte si:

Na kus papíru napište:

  • co podle vás tyto zkratky znamenají pro problém filtrování spamu
  • co budeme potřebovat, abychom tyto statistiky mohli napočítat
2018/07/17 13:25

Příprava na krok 4 úlohy spam filtr:

Rozmyslete si a načrtněte na kus papíru:

  • Jakým způsobem se spam filtr vlastně používá?
  • Jaký je z hlediska implementace rozdíl mezi učicím se filtrem a filtrem, který se učit neumí?
  • Existuje nějaká část, kterou budou mít všechny spam filtry společnou?
  • Je lepší realizovat spam filtr jako funkci nebo jako objekt s vlastnostmi a metodami?
  • Jaké jsou minimální požadavky na tuto realizaci? Co všechno by měla umět? Jaké musí mít vstupy a co musí být jejím výstupem?
2018/07/17 13:25
courses/b4b33rph/cviceni/program_po_tydnech/tyden_08.txt · Last modified: 2022/01/07 14:16 by mrkosja1