Extra¶
Woordenschat vergelijken¶
Twee schrijvers gebruiken zelden precies dezelfde woorden. De basisopgave telt hóe vaak elk woord voorkomt in één tekst; hier gaat het om een andere vraag: welke woorden delen twee teksten, en welke woorden zijn uniek voor één ervan?
Dat is geen telvraag meer, dus geen dictionary. Het is een vraag over lidmaatschap, en daar is de set voor gemaakt.
Unie en doorsnede¶
Voor twee sets a en b:
Vraag |
Methode |
Operator |
|---|---|---|
Wat zit in minstens één van de twee? |
|
|
Wat zit in allebei? |
|
|
Voorbeeld, voor a = {"appel", "peer"} en b = {"appel", "kiwi"}:
a.union(b) # {'appel', 'peer', 'kiwi'}
a.intersection(b) # {'appel'}
De teksten¶
assets/teksten/kort.txt en assets/teksten/vuurtoren.txt zijn dezelfde
bestanden als in de basisopgave.
Wat je gaat maken¶
Stap |
Functie |
Doet |
|---|---|---|
1 |
|
de verzameling unieke woorden in één tekst |
2 |
|
de woorden die in twee teksten allebei voorkomen |
3 |
|
de woorden die in minstens één van de twee voorkomen |
Stap 1: unique_words(text)¶
Geeft de set van unieke woorden in de tekst, allemaal in kleine letters en
zonder leestekens - dezelfde opschoning als word_list uit de basisopgave,
alleen levert deze functie een set op in plaats van een lijst.
Aanroep |
Resultaat |
|---|---|
|
|
|
|
Hint
Splits de tekst zoals in de basisopgave tot een lijst van schone woorden, en
zet die lijst dan om in een set met set(...).
def read_text(filename):
"""Leest een heel bestand en geeft de inhoud terug als één string
:param filename: de naam van het bestand
:type filename: str
:rtype: str
"""
with open(filename) as file:
return file.read()
# jouw oplossing
assert unique_words("Spam, spam. Taart!") == {"spam", "taart"}
assert len(unique_words(read_text("assets/teksten/kort.txt"))) == 11
Stap 3: all_words(text1, text2)¶
Geeft de set van woorden die in minstens één van de twee teksten voorkomen: de unie van hun unieke woorden.
Aanroep |
Resultaat |
|---|---|
|
|
|
|
# jouw oplossing
assert all_words("ik wil taart", "ik wil koekjes") == {"ik", "wil", "taart", "koekjes"}
assert len(
all_words(read_text("assets/teksten/kort.txt"), read_text("assets/teksten/vuurtoren.txt"))
) == 141
Uitproberen¶
kort.txt en vuurtoren.txt delen maar 4 woorden op 141 in totaal - niet
gek voor twee teksten die niets met elkaar te maken hebben. Probeer twee
teksten van dezelfde schrijver, of over hetzelfde onderwerp, en vergelijk:
delen die meer?