Autorské riešenie
[stiahni forenzna_lingvistika.py]

  • Počet riešiteľov: 16 /  =  %

  • Úspešnosť riešenia: 5.25 / 7 = 75 %

V tejto úlohe potrebujeme zo zadaného textu vypočítať 3 hodnoty:

  • priemerný počet slov vo vete,

  • percentuálny výskyt funkčných slov v texte,

  • percentuálny výskyt interpunkčných znakov v texte.

S textom potrebujeme teda pracovať na úrovni slov, viet a aj celého textu. Výhodné preto bude, ak z celého textu vyberieme len slová oddelené medzerou. Interpunkčné znamienka môžeme v upravenom texte vynechať. Počas úpravy si priebežne zaznamenávajme počet interpunkčných znamienok a špeciálne tých, ktoré ukončujú vety. Následne spočítame počet slov celkovo a koľko z nich je funkčných. Posledným krokom bude výpočet troch požadovaných hodnôt.

Výsledná funkcie môže vyzerať nasledovne: 

def profil_autora(text, funkcne_slova):
    pocet_viet = 0
    pocet_interpunkcia = 0
    pocet_funkcne_slova = 0
    upraveny_text = ''
    
    for znak  in text:
        if znak in '„“(),;:-–':
            znak = ''
            pocet_interpunkcia = pocet_interpunkcia + 1
        elif znak in '.?!':
            znak = ''
            pocet_interpunkcia = pocet_interpunkcia + 1
            pocet_viet = pocet_viet + 1
        upraveny_text = upraveny_text + znak.lower()

    slova = upraveny_text.split()
    pocet_slov = len(slova)
    for slovo in slova:
        if slovo in funkcne_slova:
            pocet_funkcne_slova = pocet_funkcne_slova + 1

    priemer_slova_veta = pocet_slov / pocet_viet
    podiel_funkcne_slova = 100 * pocet_funkcne_slova / pocet_slov
    podiel_interpunkcia = 100 * pocet_interpunkcia / len(text)

    return priemer_slova_veta, podiel_funkcne_slova, podiel_interpunkcia 

Všimnime si úpravy textu.

Interpunkčné znamienka "vyhadzujeme", pričom za každé nájdené zvýšime ich počet. Ak je to znamienko pre ukončenie vety, zvýšime aj počet viet. Výsledkom je text, v ktorom sú slová oddelené medzerami a navyše písané malým písmom (znak.lower()).

Funkcia reťazca split rozdelí text na slová. Nestačí spočítať počet medzier, pretože medzi slovami, ktoré sú oddelené pomlčkou sú dve medzery.

Následne spočítame počet funkčných slov. Pre každé slovo v zozname slov otestujeme, či sa nachádza medzi funkčnými slovami.

Posledným krokom je výpočet troch požadovaných hodnôt a ich návrat.

Vaše zaujímavé riešenia a najčastejšie chyby

Najčastejšou chybou bolo vytvorenie funkcie, v ktorej zoznam funkčných slov nebol parameter, ale globálna premenná. Používanie globálnych premenných je problematické, pretože funkcia sa spolieha na to, že takáto globálna premenná existuje. Ak ju prenesieme niekam inam, už to platiť nebude a funkcia nebude fungovať.

Ďalším problémom bol znak pomlčka, ktorý má okolo seba medzery. Ak v texte spočítame počet medzier, nevieme z neho odvodiť počet slov. Podobne, ak takýto text rozdelíme podľa medzier, ostane tam pomlčka, ktorá sa bude interpretovať ako jedno slovo.

Poslednú chybou bolo, že v texte sa mohli vyskytovať funkčné slová písané veľkým písmom. V zozname funkčných slov však všetky slová sú písané malým písmom. 

Na záver vás chceme požiadať o používanie popisných identifikátorov vo vašich programoch.

  • Pre samotný beh programu to nie je nutné.

  • Ak sa uspokojíte s hodnotením typu plný počet bodov za 100% správny program a 0 bodov pre všetky ostatné prípady, tak ani v tomto prípade to nie je nutné

  • Ak chcete, aby sme sa pokúsili nájsť časti programu, ktoré fungujú správne aj keď program ako celok nie je správny, používajte popisné identifikátory.