Spam I

Výsledky učení

Po tomto cvičení student

  • rozumí zadání úlohy Spam filtr, rozumí formátu dat;
  • umí spustit testy k prvnímu kroku úlohy Spam filtr, rozumí jejich výstupům a chápe, jak mohou být užitečné při řešení úlohy;
  • umí vytvářet jednoduché generátory pomocí příkazu yield.

Program

  • Dotazy a odpovědi
  • Testík
  • Hádanka
  • Vyjasnění a diskuse zadání úlohy Spam filter
  • Vysvětlení a demonstrace testů k úloze Spam filter
  • Příkaz yield

Dotazy a odpovědi

  • Kdo dokončil implementaci funkcí count_chars_in_string() a count_chars_in_file()?
  • 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')?

Programovací testík

Zadání 4. testíku se dozvíte na cvičení.

Hádanka

Zadání hádanky se dozvíte na cvičení.

Úvod do úlohy Spam filtr

Tým pro Spam filtr

Druhá část úlohy Spam filtr je týmová. Do příštího týdne vyplňte

Dotazník

a dejte nám tak 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.

  • 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.
  • Je to hlavně pro naši i vaši orientaci, abychom my i vy věděli, s kým jste v týmu, příp. komu máme partnera do týmu najít. Proto se ptáme i na úroveň Pythonu, abychom dokázali vás dokázali lépe “namatchovat” k sobě.
  • Týmy mohou být sestaveny napříč cvičeními. (Závěrečnou prezentaci stačí předvést na jednom cvičení.)

Založení projektu a spouštění testů

Pokud stále narážíte na problémy se zakládáním projektů, spouštěním skriptů, či testů, zkuste si přečíst následující informace:

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, iterátor, generátor, ''yield''

Programovací úlohy

  • Dokončete krok 1 úlohy Spam filtr, tj. funkci read_classification_from_file() tak, aby procházela testy.
  • 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
 

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?
 
courses/b4b33rph/cviceni/program_po_tydnech/tyden_08.txt · Last modified: 2024/12/11 15:36 by xposik