8
Naslednja funkcija dobi kot parameter tabelo stavkov in pripravi slovar, v katerem je za vsako besedo navedeno, v katerih stavkih se pojavlja. Ključ v slovarju je torej beseda, pripadajoča vrednost pa je seznam s številkami stavkov. Pri tej nalogi predpostavimo, da v stavkih ni ločil in podobnih stvari, tako da klic stavek.split
zadošča za razbijanje stavka na besede.
(a) V funkciji je napaka; poišči jo in jo odpravi.
(b) V funkciji se lahko v seznamu pojavitev neke besede pojavi ista številka stavka večkrat, če je ta beseda večkrat nastopila v tem stavku. Spremeni funkcijo tako, da bo take večkratne pojavitve prezrla (torej da bo upoštevala le prvo pojavitev posamezne besede v stavku).
(c) Napiši funkcijo StevSopojavitev(s1, s2, kazalo)
, ki kot parametre dobi besedi s1
in s2
ter slovar, ki ga je vrnila funkcija KazaloPojavitev
, in vrne število stavkov, v katerih nastopata tako beseda s1
kot beseda s2
.
(d) Poišči na internetu dovolj dolgo besedilo, ga razbij na stavke in poišči deset parov besed, ki se največkrat pojavijo v istem stavku. To lahko narediš tako, da najprej pripraviš kazalo s funkcijo KazaloPojavitev
in nato za vsak par besed v kazalu pokličeš StevSopojavitev
. Druga možnost pa je, da se za vsak stavek z dvema zankama sprehodiš po vseh parih različnih besed v stavku in v nekem slovarju povečaš števec sopojavitev za vsakega od teh parov besed (par besed lahko uporabiš kot ključ v slovarju na primer tako, da ju stakneš v en sam niz oblike beseda1 + " " + beseda2
). Preizkusi oba pristopa; rezultati morajo biti enaki, kateri pristop pa je hitrejši?