"""UDPipe - automatická anotace dat a základy zpracování vertikály""" # nejdrive je treba nainstalova moduly requests a conllu # py -m pip install requests # py -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('texty/text_01.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('texty/text_01_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[9] 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 # zobrazeni tokenizace tokenizovany_text = [] for veta in seznam_vet: for slovo in veta: tokenizovany_text.append(slovo['form']) print(tokenizovany_text) print(" ".join(tokenizovany_text)) # zobrazeni 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 lemmatizovany_text = [] for veta in seznam_vet: for slovo in veta: lemmatizovany_text.append(slovo['lemma']) lemmatizovany_text = " ".join(lemmatizovany_text) lemmatizovany_text = lemmatizovany_text.replace('_', '') print(lemmatizovany_text) # POS - slovni druhy pos_text = [] for veta in seznam_vet: for slovo in veta: pos_text.append(slovo['upos']) print(pos_text) # UKOL: vytvrte frekvencni distribuci slovnich druhu from collections import Counter freq_pos = Counter(pos_text) print(freq_pos) # 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 tokenizovany_text = [] for veta in seznam_vet: for slovo in veta: if slovo['upos'] != "PUNCT": tokenizovany_text.append(slovo['form']) print(" ".join(tokenizovany_text)) # 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(vyhledavani) 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)) # UKOL: vytvorte seznam vsech substantiv (slovnich tvaru), # kazdy tvar jen jednou, prevest na mala pismena, usporadat je podle abecedy vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['upos'] == "NOUN": vyhledavani.append(slovo['form']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] # !!pokud by tam bylo Bylo i bylo, tak tam zustanou oboje vyhledavani = set(vyhledavani) print(sorted(vyhledavani)) # vratit vsechna 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) ### ZDE JSEM SKONCIL 13. 12. # UKOL: vytvorte seznam slov , ktera jsou prvnim slovem na zacatku vety vyhledavani = [] for veta in seznam_vet: for slovo in veta: if slovo['id'] == 1: vyhledavani.append(slovo['form']) print(vyhledavani) # 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) """ # UKOL: všechna predmety, ktere jsou v akuzativu vyhledavani = [] for veta in seznam_vet: for slovo in veta: if (slovo['deprel'] == "obj" and re.match("....4.*", slovo ["xpos"])): vyhledavani.append(slovo['form']) vyhledavani = [slovo.lower() for slovo in set(vyhledavani)] print(vyhledavani)