Strumenti Utente

Strumenti Sito


ud_treebank

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
ud_treebank [2021/10/25 13:58]
65.21.180.48 versione precedente ripristinata (2021/06/03 11:07)
ud_treebank [2021/10/29 21:15] (versione attuale)
deleteme versione precedente ripristinata (2021/06/03 11:54)
Linea 1: Linea 1:
-====== Struttura di un treebank in “Universal Dependencies” ======+====== Struttura di un treebank “Universal Dependencies” ======
 ===== Scaricare il treebank di copto ===== ===== Scaricare il treebank di copto =====
 Copiate nella cartella "testi" la cartella "UD_Coptic-Scriptorium-master" scaricabile in formato compresso da questo [[https://github.com/UniversalDependencies/UD_Coptic-Scriptorium/archive/refs/heads/master.zip|link]] (si veda il file LICENSE.txt per riferimenti e condizioni di utilizzo). Copiate nella cartella "testi" la cartella "UD_Coptic-Scriptorium-master" scaricabile in formato compresso da questo [[https://github.com/UniversalDependencies/UD_Coptic-Scriptorium/archive/refs/heads/master.zip|link]] (si veda il file LICENSE.txt per riferimenti e condizioni di utilizzo).
 ===== Struttura dei record ===== ===== Struttura dei record =====
-Nel formato “Universal Dependencies” i record relativi alle singole parole unità corrispondono a singoli righi di testo con campi separati da TAB (caratteri di tabulazione), esemplificati dai record seguenti (gli esempi sono tratti in particolare dal corpus di copto menzionato sopra):+Nel formato “Universal Dependencies” ([[https://universaldependencies.org]]) i record relativi alle singole parole unità corrispondono a singoli righi di testo con campi separati da TAB (caratteri di tabulazione), esemplificato dai record seguenti (tratti in particolare dal corpus di copto menzionato sopra):
 <code> <code>
-8 ⲛⲧⲟⲕ ⲛⲧⲟⲕ PRON PPERI Definite=Def|Gender=Masc|Number=Sing|Person=2|PronType=Prs 3 acl _ Orig=ⲛ̄ⲧⲟⲕ +15 ⲕ ⲛⲧⲟⲕ PRON PPERS Definite=Def|Gender=Masc|Number=Sing|Person=2|PronType=Prs 16 nsubj _
-...+ 
 33 ⲭⲣⲓⲥⲧⲟⲥ ⲭⲣⲓⲥⲧⲟⲥ NOUN N Foreign=Yes 30 nmod _ Entity=person)person)|Orig=ⲭ︤ⲥ︥|OrigLang=grc 33 ⲭⲣⲓⲥⲧⲟⲥ ⲭⲣⲓⲥⲧⲟⲥ NOUN N Foreign=Yes 30 nmod _ Entity=person)person)|Orig=ⲭ︤ⲥ︥|OrigLang=grc
 </code> </code>
 Disponendo in verticale i campi abbiamo: Disponendo in verticale i campi abbiamo:
 +  - posizione della parola unita' nella frase;
 +  - significante grafico della parola unità;
 +  - lessema;
 +  - parte del discorso secondo una classificazione universale;
 +  - parte del discorso secondo una classificazione elaborata specificamente per la lingua in esame;
 +  - insieme di sottocampi comprendente i valori delle categorie grammaticali;
 +  - posizione nella frase della parola da cui la parola in esame dipende sintatticamente;
 +  - relazione sintattica tra la parola in esame e la parola da cui essa dipende sintatticamente;
 +  - campo eventualmente utilizzabile per l'indicazione combinata della posizione della parola reggente e della relazione sintattica;
 +  - altre note.
 +
 +
 <code python> <code python>
 +1) 15 #posizione della parola unita' nella frase
 +2) ⲕ #significante grafico della parola unita'
 +3) ⲛⲧⲟⲕ #lessema
 +4) PRON #parte del discorso secondo una classificazione universale
 +5) PPERS #parte del discorso secondo una classificazione elaborata specificamente per la lingua in esame
 +6) Definite=Def|Gender=Masc|Number=Sing|Person=2|PronType=Prs #insieme di sottocampi comprendente i valori delle categorie grammaticali
 +7) 16 #posizione nella frase della parola da cui la parola in esame dipende sintatticamente
 +8) nsubj #relazione sintattica tra la parola in esame e la parola da cui essa dipende sintatticamente (qui "nominal subject")
 +9) _ #campo eventualmente utilizzabile per l'indicazione combinata della posizione della parola reggente e della relazione sintattica 
 +10) _ #altre note 
 +
 +
 1) 33 #posizione della parola unita' nella frase 1) 33 #posizione della parola unita' nella frase
-2) ⲭⲣⲓⲥⲧⲟⲥ #lessema +2) ⲭⲣⲓⲥⲧⲟⲥ #significante grafico della parola unita' 
-3) ⲭⲣⲓⲥⲧⲟⲥ #significante grafico della parola unita'+3) ⲭⲣⲓⲥⲧⲟⲥ #lessema
 4) NOUN #parte del discorso secondo una classificazione universale 4) NOUN #parte del discorso secondo una classificazione universale
 5) N #parte del discorso secondo una classificazione elaborata specificamente per la lingua in esame 5) N #parte del discorso secondo una classificazione elaborata specificamente per la lingua in esame
-6) Foreign=Yes #insieme di sottocapi comprendente i valori delle categorie grammaticali contestuali e inerenti (qui contiene un valore relativo allo strato lessicale) +6) Foreign=Yes #insieme di sottocampi comprendente i valori delle categorie grammaticali (qui contiene un valore relativo allo strato lessicale) 
-7) 30 #posizione nella frase della parola da cui la parola registrata dipende sintatticamente +7) 30 #posizione nella frase della parola da cui la parola in esame dipende sintatticamente 
-8) nmod #relazione sintattica tra la parola registrata e la parola da cui dipende sintatticamente (qui modificatore di nome)+8) nmod #relazione sintattica tra la parola in esame e la parola da cui essa dipende sintatticamente (qui "nominal modifier")
 9) _ #campo eventualmente utilizzabile per l'indicazione combinata della posizione della parola reggente e della relazione sintattica 9) _ #campo eventualmente utilizzabile per l'indicazione combinata della posizione della parola reggente e della relazione sintattica
 10) Entity=person)person)|Orig=ⲭ︤ⲥ︥|OrigLang=grc #altre note  10) Entity=person)person)|Orig=ⲭ︤ⲥ︥|OrigLang=grc #altre note 
 +</code>
 +Inoltre all'inizio di ogni frase figura un rigo recante il codice identificativo della frase stessa. P. es:
 +<code>
 +# sent_id = shenoute_fox-XH204-216_s0006
 </code> </code>
  
-<code python ud_explorer.py> 
-# -*- coding: utf-8 -*- 
-#Copyright 2021 P. Milizia CC-BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 
-import re 
-import glob 
- 
- 
-#CLASSE PYTHON PER LA LETTURA DI UN TREEBANK UD 
-class UD: 
- def __init__(self, data): 
- self.data=self.add_sent_id(data) 
- self.tokens=self.create_tokens(self.data) 
- self.sentences=self.create_sentences(self.tokens) 
-  
- #aggiunge il campo sent_id 
- def add_sent_id(self, text): 
- sid_expr=re.compile('(?<=sent_id\s=\s).*') 
- text=re.split('\n',text) 
- output='' 
- sid='' 
- for line in text: 
- found=re.search(sid_expr,line) 
- if found != None: 
- sid=found.group() 
- if line !='' and line[0] != '#': 
- line = line+'\t'+sid 
- output += line+'\n' 
- return output 
-  
- #crea la lista dei tokens 
- def create_tokens(self, data): 
- expr=re.compile('\n([^#].*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*)') 
- tokens = re.findall(expr, data) 
- for i in range(len(tokens)): 
- tokens[i]=list(tokens[i]) 
- for ii in (5,9): 
- tokens[i][ii]=re.split('\|',tokens[i][ii]) 
- try: 
- tokens[i][0]=int(tokens[i][0]) 
- except ValueError: 
- pass 
- try: 
- tokens[i][6]=int(tokens[i][6]) 
- except ValueError: 
- pass 
- return tokens 
- 
- #crea il dizionario delle frasi 
- def create_sentences(self, tokens): 
- sentences={} 
- sid='' 
- for t in tokens: 
- if t[10] != sid: 
- sid=t[10] 
- sentences[sid]=['root'] 
- if type(t[0])==int: 
- tt=t[:] 
- sentences[sid].append(tt) 
- return sentences 
- 
- def parent_of(self, occurrence): 
- x=self.sentences[occurrence[10]][occurrence[0]] 
- return self.sentences[x[10]][x[6]] 
- 
- def grandparent_of(self, occurrence): 
- return self.parent_of(self.parent_of(occurrence)) 
- 
- def subsequent_of(self, occurrence): 
- try: 
- outp=self.sentences[occurrence[10]][occurrence[0]+1] 
- except IndexError: 
- outp=None 
- return outp 
- 
- def precedent_of(self, occurrence): 
- try: 
- outp=self.sentences[occurrence[10]][occurrence[0]-1] 
- except IndexError: 
- outp=None 
- except TypeError: 
- outp=None 
- return outp 
-  
- def children_of(self,occurrence): 
- x=self.sentences[occurrence[10]][occurrence[0]] 
- return [t for t in self.sentences[occurrence[10]][1:] if self.parent_of(t)==x] 
- 
- def ancestors_of(self, occurrence): 
- x=self.sentences[occurrence[10]][occurrence[0]] 
- output = [x] 
- while x != 'root': 
- y=self.parent_of(x) 
- output.append(y) 
- x=y 
- return output 
- 
- def get_sentence(self, x): 
- return [j[1] for j in self.sentences[x][1:]] 
- 
- 
-#PREPARAZIONE DEI DATI PER LA CLASSE 
- 
-#lettura file 
-directory_name='testi/UD_Coptic-Scriptorium-master' 
-path = directory_name+'/*conllu' 
-files=glob.glob(path) 
-data='' 
-for filepath in files: 
- with open(filepath, 'r') as file: 
- file_data=file.read() 
- data+=file_data 
-#ordina i file e crea una variabile text_list con l'elenco dei testi 
-data=data.split('# newdoc ')[1:] 
-data.sort() 
-data='# newdoc '+'# newdoc '.join(data) 
-text_list=re.findall('#\snewdoc\s.*', data) 
- 
- 
-#ESEMPIO DI UTILIZZO 
- 
-#trova tutte le occorrenze di 'ⲙⲙⲟ' e di 'ⲛ' come marca dell'oggetto diretto 
-#alle seguenti condizioni: 
-#1) che la frase sia al passato perfettivo positivo 
-#2) che almeno un elemento sia interposto tra verbo e preposizione 
- 
-coptic=UD(data) 
- 
-found_tokens=[] 
- 
-def is_past(o): 
- answer = False 
- for child in coptic.children_of(o): 
- if child[1]=='ⲁ' and child[3]=='AUX': 
- answer = True 
- break 
- return answer 
- 
-for token in coptic.tokens: 
- if (token[1] == 'ⲙⲙⲟ' or token[1] == 'ⲛ') and token[7]=='case': 
- try: 
- regens = coptic.grandparent_of(token) 
- noun_pronoun = coptic.parent_of(token) 
- if noun_pronoun[7]=='obj' and is_past(regens) and (int(token[0]) - int(regens[0]))>1: 
- found_tokens.append(token) 
- except: 
- pass 
- 
-for o in found_tokens: 
- print(o) 
-</code> 
ud_treebank.1635170327.txt.gz · Ultima modifica: 2021/10/25 13:58 da 65.21.180.48