Warning
This page is located in archive.

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')?

Úvod do úlohy Spam filtr

Založení projektu v PyCharm

Používáte-li k vývoji v Pythonu prostředí PyCharm, doporučujeme vám vytvořit si pro řešení úlohy projekt. PyCharm tak bude schopen lépe analyzovat váš kód a udržovat stav vaší práce mezi jednotlivými sezeními.

Při vytváření projektu dejte pozor, abyste vybrali správnou verzi interpreteru! Na cvičeních používáme Python 3 (ideálně 3.4, ale může být i 3.2).

Tutoriály k vytváření projektů v PyCharm na stránkách JetBrains:

Stručný postup:

2014/10/22 09:43 · xposik

Spouštění skriptů v PyCharm

Existuje celá řada možností, jak skript/program spustit. Každá se hodí na něco jiného, má své výhody a nevýhody.

Spouštění v Python shellu

Spustí skript, jako byste jej řádek po řádku napsali do konzole Pythonu:

Konfigurace pro běh a ladění

Run/Debug Configurations:

Spouštění pomocí nástroje Run

Skript spustí v nové instanci Pythonu:

2014/10/22 09:43 · xposik

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.

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

Spustí všechny testy.

2014/10/22 09:43 · xposik

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''

  • Co jsou “iterables”?
    • Iterable je každý objekt, jehož prvky se dají procházet cyklem for. Seznamy, n-tice, řetězce, soubory, atd.
  • Co je to generátor?
    • Generátor je také “iterable”, ale lze ho projít jen jednou.
    • Generuje jednotlivé prvky “za pochodu”, jeden po druhém. Není třeba mít všechny prvky v paměti.
  • Co je yield?
    • yield je klíčové slovo, které funguje podobně jako return, ale vrací generátor.
    • Zavoláte-li funkci, která obsahuje yield, kód uvnitř funkce se nespustí! Funkce pouze vrátí generátor.
    • Vrácený generátor má metodu next (kterou volá cyklus for, aniž byste o tom věděli).
    • Při prvním volání metody next se funkce spustí, dokud nenarazí na první yield. Tam se její běh přeruší (ovšem generátor si pamatuje její stav) a argument příkazu yield je vrácen volajícímu kódu.
    • Při každém dalším volání metody next se funkce spustí od předchozího yield, dokud nenarazí na další yield nebo na konec funkce.

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 testem.
  • krok 2 úlohy Spam filtr, tj. třídu Corpus a její metodu emails() tak, aby procházela testem.

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
2010/09/14 15:03

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?
2010/09/14 15:04
courses/a4b99rph/cviceni/program_po_tydnech/tyden_05.txt · Last modified: 2015/10/26 17:54 by svobodat