"""UDPipe - automatická anotace dat a základy zpracování vertikály""" # nejdrive je treba nainstalova moduly requests a conllu # python -m pip install requests # m pip install conllu from conllu import parse import requests import re #zacit webovym rozhranim http://lindat.mff.cuni.cz/services/udpipe/api-reference.php # zde se to posila pro parsing ud_pipe = 'http://lindat.mff.cuni.cz/services/udpipe/api/process' # parsovani 1 souboru, vraci vertikalu ud_pipified_data = requests.post(ud_pipe, data={'tokenizer': '', 'tagger': '', 'parser': ''},\ files={'data': open('C:\\Users\\Cech\\00_prace\\vyuka\\Brno\\PLIN057_stroj_zprac_textu\\text_03.txt', encoding='UTF-8')}) ud_pipified_json_data = ud_pipified_data.json()['result'] print(ud_pipified_json_data) # zapsani textu do souboru text_file = open('C:\\Users\\Cech\\00_prace\\vyuka\\Brno\\PLIN057_stroj_zprac_textu\\text_03_conllu.txt', "w", encoding='UTF-8') text_file.write(ud_pipified_json_data) text_file.close() # seznam vet seznam_vet = parse(ud_pipified_json_data) print(seznam_vet) # jsou tam schovane informace o jednotlivych tokenech, srov.: seznam_vet[0:3] seznam_vet[0][0] seznam_vet[0][0:3] # ukazat jim, co a jak se v tom da hledat # https://universaldependencies.org/format.html # tokenizace tokenizovany_text = [] for veta in seznam_vet: for slovo in veta: tokenizovany_text.append(slovo['form']) print(" ".join(tokenizovany_text)) # lemmatizace lemmatizovany_text = [] for veta in seznam_vet: for slovo in veta: lemmatizovany_text.append(slovo['lemma']) print(" ".join(lemmatizovany_text)) # nechava podtrzitka: UKOL vyhazte podtrzitka # POS - slovni druhy pos_text = [] for veta in seznam_vet: for slovo in veta: pos_text.append(slovo['upos']) print(pos_text) # tagy - detailni info o morfologii jednotlivych slov tag_text = [] for veta in seznam_vet: for slovo in veta: tag_text.append(slovo['xpos']) print(tag_text) # deprel - syntakticke fce deprel_text = [] for veta in seznam_vet: for slovo in veta: deprel_text.append(slovo['deprel']) print(deprel_text) # UKOL: za pomoci upos PUNCT vyhazte interpunkci a vytvorte tokenizovany text bez interpunkce # vratit vsechny tvary slovesa 'byt' vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['lemma'] == "být": vyhledavani.append(slovo['form']) print(set(vyhledavani)) # prevest na mala pismena, list comprehension a nechat kazdy tvar jen jednou [slovo.lower() for slovo in set(vyhledavani)] # vratit vsechny POS slovesa 'být' vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['lemma'] == "být": vyhledavani.append(slovo['upos']) print(set(vyhledavani)) # vratit vsechny deprel slovesa 'byt' vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['lemma'] == "být": vyhledavani.append(slovo['deprel']) print(set(vyhledavani)) # vratit vsechn substantiva vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['upos'] == "NOUN": vyhledavani.append(slovo['form']) print(vyhledavani) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani) # vratit vsechn substantiva, která jsou předmětem' vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['upos'] == "NOUN" and slovo['deprel'] == "obj": vyhledavani.append(slovo['form']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani) # UKOL: vytvorte slovni, kde budou frekvence jednotlivych slovních druhu # vrátit všechna lemmata začínající na "p" vyhledavani = [] for veta in seznam_vet: for slovo in veta: if re.match("p.*|P.*", slovo ["form"]): vyhledavani.append(slovo['lemma']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani) #vrátit všechna substantiva v singuláru [lemma] vyhledavani = [] for veta in seznam_vet: for slovo in veta: if (slovo['upos'] == "NOUN" and re.match("...S.*", slovo ["xpos"])): vyhledavani.append(slovo['lemma']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani) # jednodussi alternativa # vrátit všechna substantiva v singuláru [lemma] # nefunguje, jak ma, prikaz je dobre, ale je problem s tou vertikalou... vyhledavani = [] for veta in seznam_vet: for slovo in veta: if re.match("N..S.*", slovo ["xpos"]): vyhledavani.append(slovo['lemma']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani) #vrátit všechna substantiva v plurálu vyhledavani = [] for veta in seznam_vet: for slovo in veta: if (slovo['upos'] == "NOUN" and re.match("...P.*", slovo ["xpos"])): vyhledavani.append(slovo['form']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani)