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

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

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: 2018/11/27 11:14 by xposik