"""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""" # seminar 231004 # cil -> VYTVORENI SLOVNIKU # prevedeni textu na mala pismena print(text_bez_interpunkce) text_bez_interpunkce_lc = text_bez_interpunkce.lower() print(text_bez_interpunkce_lc) # rozsekam do seznamu slova = text_bez_interpunkce_lc.split() print(slova) len(slova) # potrebujeme tam nechat jen unikatni polozky, abychom dostali seznam types # postupujeme analogticky k osdstaraneni interpunkce """interpunkce = (',.!?') text_bez_interpunkce = '' for znak in obsah: if znak not in interpunkce: text_bez_interpunkce += znak print(text_bez_interpunkce)""" # rozdil je # 1) v tom, ze namisto stringu ma byt vysledkem seznam, proto vytvorime nejdrive prazdny seznam # seznam_slov = [] # 2) namisto doplonvani znaku do stringu - text_bez_interpunkce += znak - potrebujem pridavat polozky do seznamu # to udelame takto seznam_slov.append(slovo) # UKOL: vytvorte seznam typu z daneho textu, tento prikaz muze mit uplne stejnou strukturu jako to odstaranovani interpunkce seznam_slov = [] for slovo in slova: if slovo not in seznam_slov: seznam_slov.append(slovo) print(seznam_slov) len(seznam_slov) # lepsi je set -> `set` je mnozina, datovy typ Pythonu; podoba se seznamu, # ale kazdou unikatni polozku udrzuje pouze v jedne kopii seznam_slov = set(slova) print(seznam_slov) #pokud bychom chteli prevest na seznam seznam_slov = list(set(slova)) print(seznam_slov) # abecedne usporadany slovnik seznam_slov_abc = sorted(set(slova)) print(seznam_slov_abc) # cilem vytvorit # 1) seznam skladajici se jen z autosemantik # 2) spocitat Lexical density (https://en.wikipedia.org/wiki/Lexical_density): # One method to calculate the lexical density is to compute the ratio of lexical items to the total number of words # # synsemantika jsou v stop listu (vytahl jsem to pro ilustraci jen z tohoto textz) stop_list = ['a', 'aby', 'ani', 'bych', 'byla', 'byli', 'bylo', 'byste','do','i','jako', 'je','jen','jimiž','jsem', 'jsou', 'k','která', 'které', 'který','mi','mnou', 'moji','míste', 'mým', 'mými', 'mě', 'na', 'naše', 'našeho', 'našich', 'naší', 'nebo', 'nejen', 'nejsem', 'nikdy', 'pro', 'přede', 'přes', 's', 'samém', 'se', 'také', 'tu', 'tyto', 'této', 'v', 'vaše', 'vašich', 've', 'vy', 'vám', 'vámi', 'vás', 'váš', 'všech', 'všechna', 'všechny', 'všichni', 'vždyť', 'z', 'že', '100', '50tá'] # UKOL: analogicky k vytvoreni slovniku pomici cyklu a podminky vytvorte seznam autosemantik, # ulozte jej do promene 'autosemantika' autosemantika = [] for slovo in seznam_slov_abc: if slovo not in stop_list: autosemantika.append(slovo) print(autosemantika) len(autosemantika) # UKOL spocitejte lexical density v text_01, # # # zakrohlete na 2 desetinna cisla, pouzijte vzorec z Wikipedie LD = (len(autosemantika)/len(slova))*100 LD = round(LD, 2) print(LD) #FREKVENCNI SLOVNIK # alternativa k tomu, jak to budem delat freq_slovnik = {} for slovo in slova: if slovo in freq_slovnik: freq_slovnik[slovo] += 1 else: freq_slovnik[slovo] = 1 print(freq_slovnik) from collections import Counter #vytvori frekvencni slovnik usporadny od nejfrekventovanejsich frekv_slovnik = Counter(slova) print(frekv_slovnik) type(frekv_slovnik) #prevedu do dict frekv_slovnik_02 = dict(frekv_slovnik) print(frekv_slovnik_02) #deset nejcastejsich slov v textu, ale frekv_slovnik.most_common(10) #frekvence konkretniho slova frekv_slovnik['vám'] hledane_slovo = 'vám' frekv = frekv_slovnik[hledane_slovo] print(f'Frekvence slova {hledane_slovo} je {frekv}.') # seznam hodnot, tj. jednotlivych frekvenci frekvenci tak, # jak jdou v textu za sebou # !!! je tam chyba, každé slovo je tam jen jednou.... i o vyssi frekvenci, nejde to dostat z dictionary! frekvence = list(frekv_slovnik.values()) print(frekvence) # usporadny od nejfrekventovanejsich hodnot print(sorted(frekvence, reverse = True)) #UKOL: zjistete pocet slov o delce 1, 2, ... n. # Je to tzv. frekvencni spektrum, # ulozte tedy hodnoty do promenne frekvencni_spektrum frekvencni_spektrum = Counter(frekvence) print(frekvencni_spektrum) #zjisteni slov o dane frekvenci hledana_frekvence = 2 #zadani hodnoty hledane frekvence slova_o_frekvenci = [] for i in frekv_slovnik: if frekv_slovnik[i] == hledana_frekvence: slova_o_frekvenci.append(i) print(slova_o_frekvenci) #relativni frekvencni slovnik rel_frekv_slovnik = frekv_slovnik #nejdrive si nactu abs. frekvence do chystanho slovniku a ten pak budu menit pocet_slov = len(slova) for hodnota in rel_frekv_slovnik: rel_frekv_slovnik[hodnota] = rel_frekv_slovnik[hodnota] / pocet_slov print(rel_frekv_slovnik) #se zaokrouhlenim #relativni frekvencni slovnik rel_frekv_slovnik = [] rel_frekv_slovnik = frekv_slovnik #nejdrive si nactu abs. frekvence do chystanho slovniku a ten pak budu menit pocet_slov = len(slova) for hodnota in rel_frekv_slovnik: rel_frekv_slovnik[hodnota] = round(rel_frekv_slovnik[hodnota] / pocet_slov, 6) print(rel_frekv_slovnik) # #UKOL: vyjdrete to jako procentualni pokryti jednotlivych slov v textu na dve desetinna cisla frekv_slovnik = Counter(slova) rel_frekv_slovnik = frekv_slovnik #nejdrive si nactu abs. frekvence do chystanho slovniku a ten pak budu menit pocet_slov = len(slova) for hodnota in rel_frekv_slovnik: rel_frekv_slovnik[hodnota] = round((rel_frekv_slovnik[hodnota] / pocet_slov)*100, 2) print(rel_frekv_slovnik) type(rel_frekv_slovnik) rel_frekv_slovnik_02 = dict(rel_frekv_slovnik) dict(sorted(frekv_slovnik.items(), key=lambda i: (-i[1], i[0])))