"""EUFONIE eufonie: https://cs.wikipedia.org/wiki/Eufonie https://www.czechency.org/slovnik/EUFONIE Metody... dat jim prvni dve srofy Maje a at na zaklade sve intuice oznaci verse/hlasky, ktere jim zni eufonicky - predstavit komputacni pristup - projit s nima Metody... basnickych UKOL: zjistete, eufonii Maji; referencnim korpusem bude cely text Maje - pak jim dat za ukol jine ref. korpusy """ import math import re from collections import Counter # dokonce mereni eufonie # je treba rozsekat text na verse # vzhldem k tomu, ze potrebujeme n a x, tak musime # a) zjistit pocet vokalu ve versi # b) zjistit pocet daneho vokalu ve versi, resp. jen v tech pripadech, kdy je tam min 2x # UKOL: vytvorte loop, ktery splni bude postupne vypisovat n a x, ale jen pro verse, kde je pocet vokalu > 2 verse = maj_03.split('\n') print(verse) for vers in verse: n = len(re.findall('a|á|e|é|i|í|o|ó|u|ú|O', vers)) for vokal in vokaly: if vers.count(vokal) > 1: x = vers.count(vokal) print(f'x = {x}, n = {n}') # tisknu pro kontrolu frekvence daneho vokalu a vers # a ted je treba to udelat pro kazdy vers tak, # aby to spocitalo pro pravdepodobnosti hlasek v intervalu # zkusit s nima vymyslet for vers in verse: n = len(re.findall('a|á|e|é|i|í|o|ó|u|ú|O', vers)) for vokal in vokaly: if vers.count(vokal) > 1: x = vers.count(vokal) P = 0 while x <= n: p = (math.factorial(n)/(math.factorial(x)*(math.factorial(n-x))))*(rel_frekv_vokaly[vokal]**x)*(1-rel_frekv_vokaly[vokal])**(n-x) P = P + p x += 1 print(f'{vers.count(vokal)}:{vokal}\n{vers}') # tisknu pro kontrolu frekvence daneho vokalu a vers print(f'P: {P}') # pro kontrolu print(f'f_rel {vokal} = {rel_frekv_vokaly[vokal]}') # pro kontrolu, rel. frekv. vokalu # UKOL: upravte tak, aby tiskl jen P<0.05 pridal k tomu hodnotu euf podle vzorce 7.4 for vers in verse: n = len(re.findall('a|á|e|é|i|í|o|ó|u|ú|O', vers)) for vokal in vokaly: if vers.count(vokal) > 1: x = vers.count(vokal) P = 0 while x <= n: p = (math.factorial(n)/(math.factorial(x)*(math.factorial(n-x))))*(rel_frekv_vokaly[vokal]**x)*(1-rel_frekv_vokaly[vokal])**(n-x) P = P + p x += 1 euf = 100*(0.05-P) if P < 0.05: print(f'{vers.count(vokal)}:{vokal}\n{vers}') # tisknu pro kontrolu frekvence daneho vokalu a vers print(f'E = {euf}') # tisknu pro kontrolu frekvence daneho vokalu a vers print(f'P: {P}') # pro kontrolu print(f'f_rel {vokal} = {rel_frekv_vokaly[vokal]}') # pro kontrolu, rel. frekv. vokalu # KONSONANTY for vers in verse[0:40]: n = len(re.findall('b|c|č|d|ď|f|g|h|j|k|l|m|n|ň|p|q|r|ř|s|š|t|ť|v|w|x|z|ž', vers)) for konsonant in konsonanty: if vers.count(konsonant) > 1: x = vers.count(konsonant) P = 0 while x <= n: p = (math.factorial(n)/(math.factorial(x)*(math.factorial(n-x))))*(rel_frekv_konsonanty[konsonant]**x)*(1-rel_frekv_konsonanty[konsonant])**(n-x) P = P + p x += 1 euf = 100*(0.05-P) if P < 0.05: print(f'{vers.count(konsonant)}:{konsonant}\n{vers}') print(f'E = {euf}') print(f'P: {P}') print(f'f_rel {konsonant} = {rel_frekv_konsonanty[konsonant]}') # PROBLEMY # relativni f hlasek - chtelo by to z korpusu # dat dohromady dlouhe a kratke hlasky # asimilace # konsonanticke klastry # ALITERACE