Du jobber i et prosjekt som skal analysere 50-tallets barnesanger. Andre i prosjektet har samlet inn diverse sangtekster som strengvariabler i et Matlabscript som heter opprett_barnesanger.mDere ønsker nå å kunne telle hvor mange forekomster det er av utvalgte ord i enkelte barnesanger. Lag en funksjon som tar inn en streng med sangtekst og en celleliste med ord, og som teller hvor mange ganger ordene i cellelisten forekommer i sangteksten. Resultatet skal returneres som en cellematrise, hvor første kolonne på en rad inneholder et gitt ord og andre kolonne på samme rad inneholder antall forekomster av det ordet.

Lag en funksjon som tar inn en streng, fjerner alle vokalene i denne strengen, og returnerer resultatet. Funksjonen må fungere både for store og små bokstaver.

 Utdelt kode

opprett_barnesanger.m
kjoereturen = 'Vesle Jumbo, vesle Sambo og Amandus dokkemann ville ta en liten tur i trekkoppbilen til Johan. "Hvem kan styre?" sa Amandus. "Ikke jeg", sa negermann. "Jamen det kan jeg", sa Jumbo, "jeg kan styre lite grann. Og så setter jeg meg der, og så sitter Sambo her, og Amandus han kan sitte både her og både der."';
vesle_hoa = 'Det var en liten negergutt som hette Vesle Hoa. Han hadde fjær på hodet sitt og ring på tommeltoa. Han hadde bare bukse på, og buksa den var gjort av strå, men Hoa likte buksa godt, for han var en ekte hottentott.';
kaptein_sortebill = 'Jeg er kaptein Sorte Bill fra femten hundre og fjorten hei fadderi fadderullan dei. En sjørøver-kaptein av den gode gamle sorten, hei fadderi fadderullan dei. Og skuta er det mange til i, her er Jack og gamle Billi, Petter Flint og Røde Willi og enda noen til. Når vi heiser alle kluter kan vi borde alle skuter. Ingen slipper unna kaptein Sorte Bill!'; 

 

Videoforklaring (14:34) 

Del 1 (8:38)Del 2 (5:56)
Oppgaveintroduksjon, preallokering av celleliste, cellekopiering og problemoppdeling.Kode for å telle strengforekomster, og test av funksjonen.

Løsningsforslag

tell_ord.m
function retur = tell_ord(tekst, ordliste)
    tekst(~isletter(tekst)) = ' ';
    retur = cell(length(ordliste), 2);
    retur(:,1) = ordliste;
    for i = 1:size(retur, 1)
        retur{i, 2} = 0;
    end    
    tekstord = strsplit(tekst);
    for i = 1:length(tekstord)
        for j = 1:length(ordliste)
            if strcmp(tekstord{i}, ordliste{j})
                retur{j, 2} = retur{j, 2} + 1;
            end
        end
    end
end


  • No labels