"""Vyhledávání slov textu, vytvoření konkordančních řádků (hledaná slova v kontextu např. 3 slov zleva a zprava), uložení takto vytvořených konkordančních řádků, nahrazování (např. "ch" za X), RE""" # nacteni obsahu z existujiciho souboru with open('texty/text_01.txt', encoding='UTF-8') as f: obsah = f.read() print(obsah) # nahrazeni vice znaku text_bez_interpunkce = obsah.translate(str.maketrans({',':'', '.':'', '!':'', '?':''})) print(text_bez_interpunkce) text_bez_interpunkce_lc = text_bez_interpunkce.lower() print(text_bez_interpunkce_lc) #RE - udelam nejaky uvod # cviceni na RE: https://regexone.com/ # https://docs.python.org/3/library/re.html # Michal: import re # help(re) #https://docs.python.org/3.9/library/re.html #budeme pracovat retezci, tj. puvodnim textem, ktery jsme tokenizovali vyse #jednoduche zjisteni, zda se dany retezec vyskytuje v textu #funkce hlasi jen prvni vyskyt, ale to je ted jedno print(text_bez_interpunkce_lc) slovo = "vám" print(re.search(slovo, text_bez_interpunkce_lc)) slovo = "vám" if re.search(slovo, text_bez_interpunkce_lc): print(f"Je tam slovo '{slovo}'") else: print(f"Není tam slovo '{slovo}'") #vysvetlit: symboly \w, \b atd. http://programujte.com/clanek/2007110100-regularni-vyrazy-v-pythonu-1-cast/ #vysvetlit: ., *,+,[],\,|,^,{},?, $ # !!! nedelat # r01 = "týden má 7 dnů (vždy)" # re.findall("d",r01) # re.findall("\d",r01) # re.findall("(",r01) # r02 = "týden má 7 dnů \vždy\" # r03 = "týden má 7 dnů \\vždy\\" # r04 = "týden má 7 dnů "vždy"" # r05 = "týden má 7 dnů \"vždy\"" # r04 = r"týden má 7 dnů "vždy"" #vyhneme se dvema zpetnym lomitkum #r' řekne pythonu, vykašli se na escape sekvence, čti to jako znaky #je treba se podivat na seznam tec symbolu https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals # !!! https://docs.python.org/3/reference/lexical_analysis.html#escape-sequences #ukolem bude najit vsechna slova obsahujici urcite rezce, pujdem krok za krokem #re.findall() vraci seznam, jen retezce, ktere se napisi hledane_retezce = 'žs' #vrati jen tyto retezce slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) #prida z kazde strany jeden znak hledane_retezce = '.žs.' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) #je to moc zrave, vrati cely text, musime to omezit na hranice slova hledane_retezce = '.*žs.*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # najde zacatek slova po dany retezec # \w: libovolné písmeno, číslice včetně podtržítka hledane_retezce = '\w*žs' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # UKOL: koncete predchozi dotaz tak, aby vratil cela slova obsahujici 'žs' #vrati cela slova obsahujici damy retezec hledane_retezce = '\w*žs\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # dat jim tabulku z tohoto http://programujte.com/clanek/2007110100-regularni-vyrazy-v-pythonu-1-cast/ # UKOL: vyhledat slova začínající na 'ne-'a # nefunguje - zpetne lomitko pred b neni zpetny lomitkem, ktere zbavi b funkce RE hledane_retezce = '\bne\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # alternativa hledane_retezce = '\\bne\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # alternatva hledane_retezce = '\b*ne\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # alternatva - nemusime se starat o escape znaky hledane_retezce = r'\bne\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # alternatva - nemusime se starat o escape znaky hledane_retezce = r'\w*t\s\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # #vyhledat slova začínající na 'ne-'a # # !!! jen v seznamech # hledane_retezce = r'^ne' #?proc nefunguji ^ a $? protoze znaky ^ a $ oznacuji zacatek/konec celeho retezce # slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) # print(slovo_vyskyty) #ÚKOL: vyhledat slova začínající na 'zá-'a zakončená na '-m' hledane_retezce = r'\bzá\w*m\b' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) #UKOL vyhledat slova v délce 1 písmene hledane_retezce = r'\b\w\b' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) hledane_retezce = r'\b\w{2,3}\b' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) #UKOL vyhledat slova v délce 2 nebo 3 písmena hledane_retezce = r'\b\w{2,3}\b' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) #UKOL vyhledat slova v delší než 10 písmen vzor5 = r'\b\w{10,}\b' dlouhy = re.findall(vzor5, txt) print (dlouhy) hledane_retezce = r'\b\w{11,}\b' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # vyhledat cislice hledane_retezce = r'\b\d+\b' #najde ale jen vyrazy z cislic slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty) # UKOL: vyhledejte vyrazy obsahující číslice hledane_retezce = r'\w*\d\w*' slovo_vyskyty = re.findall(hledane_retezce, text_bez_interpunkce_lc) print(slovo_vyskyty)