"""Načtení textu, tokenizace, vytvoření slovníku, frekvenčního seznamu, relativní frekvence slov, uspořádáné slovníky, stop list, vytvoření frekvenčního seznamu jen autosémantik""" # nacteni obsahu z existujiciho souboru with open('texty/text_01.txt', encoding='UTF-8') as f: obsah = f.read() print(obsah) # alternativa: file = open('file_path', 'w') # zjisteni pracovniho adresare, kdyz dame soubor do nej, nemusime zadavat celou cestu import os print(os.getcwd()) # propadna zmena adresare # os.chdir(cesta) #!!! uporzornit, ze ted nebudeme resit problem s interpunkci # rozseka nacteny text na slova do seznamu slova = obsah.split() print(slova) # rozseka nacteny text na jednotky, jejichz hranici urcuje tecka casti = obsah.split('.') print(casti) # pokud bysme to chteli bez tech non-braking spaces \xa0 znaku zobrazit, tak list comprehension [s.replace('\xa', '') for s in my_list] # nebo for cyklem #predstavime se nejdrive replace fci t01 = "Hovořím k\xa0vám v\xa0prvních hodinách roku nového" print(t01) t02 = t01.replace('\xa0', '') print(t02) casti_02 = [] for cast in casti: vycisteni = cast.replace('\xa0', ' ') casti_02.append(vycisteni) print(casti_02) # dat jim to jako ukol? # rozseka nacteny text na radky do seznamu; pokud bysme meli kuprikladu basen, tak dostaneme seznamy versu radky = obsah.split('\n') print(radky) # UKOL: vytisknete kazdou polozku seznamu casti na jeden radek, pouzujte for cyklus for cast in casti: print(cast) # pokud mam dlouhy text, chci si zobrazit je cast, napr. pro kontrolu #UKOL: vytiknete 1) prvnich 100 znaku, 2) poslednich 100 znaku, # 3) prvnich 10 slov, 4) poslednich 10 slov daneho textu, 5) 9-20 slovo print(obsah[0:100]) # vybrany pocet znaku print(obsah[-100:]) # vybrany pocet poslednich znaku print(slova[0:10]) # vybrany pocet slov print(slova[-10:]) # vybrany pocet poslednich slov print(slova[8:20]) # vybrany pocet slov - pripomenout, ze posledni hodnota se nezapocitava # delka textu ve znacich delka_ve_znacich = len(obsah) # meri se puvodni text print(delka_ve_znacich) # UKOL: vytisknout vetu 'Text má XY znaků.'; hodnotu xy vythnate z promenne delka_ve_znacich print('Text má', delka_ve_znacich, 'znaků.') # lepsi je f-string (https://docs.python.org/3/tutorial/inputoutput.html#fancier-output-formatting%22%22%22) print(f"Text má {delka_ve_znacich} znaků") # UKOL: zjistete delku textu v poctu slov # zjisteni delky textu -> pocet polozek seznam (interpunkce nevadi, # protoze je prilepena na slovech) delka_ve_slovech = len(slova) # meri se seznam slov print(delka_ve_slovech) #nebo print(f'Text má {delka_ve_slovech} slov.') # UKOL: potencialne se da predpokladat, ze delka slov se lisi napr. v ruznych typech textu, # je indikatorem readablity atp., zkusime vypocitat prumernou delku slova: # zjistime pocet znaku a avydeilme poctem slov # jenze tam mame porad tu interpunkci - musi pryc # TOKENIZACE # je treba vyhazet vsechny nealfanumericke znaky # nahrazeni jednoho znaku print(obsah) obsah_bez_carek = obsah.replace(',', '') print(obsah_bez_carek) # nahrazeni vice znaku interpunkce = (',.!?') text_bez_interpunkce = '' for znak in obsah: if znak not in interpunkce: text_bez_interpunkce += znak print(text_bez_interpunkce) #alternativa text_bez_interpunkce = obsah.translate(str.maketrans({',':'', '.':'', '!':'', '?':''})) print(text_bez_interpunkce) # Vysvetleni: # slovnik `{',':'', '.':'', '!':'', '?':''}` predstavuje mapu: co za co se ma vymenit, # napr. znak `','` za prazdny znak `'` # funkce `str.maketrans` prevede znaky uvedene v mape do jejich ciselne podoby # funkce `.translate()` provede samotnou transformaci textu # jeste musime zjisit pocet mezer v textu, protoze pocet znaku zapocitava i mezery # spocitame mezery pocet_mezer = text_bez_interpunkce.count(' ') print(pocet_mezer) # DOMACI UKOL # spocitejte průmernou delku slova ve znacich a ulozte ji do promenne 'prumerna_delka_slova' # pote vytisknete: # # # Text má xy znaků a yz slov. Průměrná délka slova je zz znaků.', pouzijte f-string