Table of Contents

Spam filter - krok 2

Vytvořte třídu Corpus, která bude obalovat adresář s emaily. Vybavte ji metodami, které umožní emaily snadno procházet.

Testy ke kroku 2:

Příprava

Korpus

Úkol:

K čemu nám to bude:

Specifikace

Třída Corpus (v modulu corpus.py) bude obalovat adresář s emaily a umožní nám je snadno procházet. Třída bude mít následující vlastnosti:

# Create corpus from a directory
corpus = Corpus('/path/to/directory/with/emails')
count = 0
# Go through all emails and print the filename and the message body
for fname, body in corpus.emails():
    print(fname)
    print(body)
    print('-------------------------')
    count += 1
print('Finished: ', count, 'files processed.')

K výše uvedenému příkladu: Těla některých emailů obsahují unicode znaky - proto používáme kódování utf-8, abychom je v řetězci dovedli reprezentovat. Při výpisu pomocí print(body) ale můžete občas dostat výjimku! Záleží na tom, na jakém systému a v jakém shellu výše uvedený skript spustíte. Konzole, na kterou výpis probíhá, implicitně nějaké kódování používá a často je jiné než utf-8. Nastane pak situace, kdy se snažíme konzoli vnutit znak, který nezná.

Jedno z možných řešení je místo print(body) použít k výpisu print(body.encode()). Touto metodou se řetězec znaků převede na sekvenci bytů (datový typ bytes), která by se měla dát vypsat ať už konzole používá jakékoli kódování. Místo onoho problémového unicode znaku pak ve výpisu uvidíte sekvenci 2 až 4 jiných znaků. Nijak významně to ale výpis nepokazí.