PARSERIZZAZIONE DI FILE

16
BIOINFO3 - Lezione 35 1 PARSERIZZAZIONE DI FILE PARSERIZZAZIONE DI FILE Un problema piuttosto comune in bioinformatica è quello di leggere un file, tipicamente un flat-file in un qualche formato (es. FASTA) rappresentante un database (es. un insieme di sequenze). All’interno del file si tratta di riconoscere la struttura sintattica con cui sono organizzati i dati e quindi individuare i singoli record e all’interno dei record i singoli campi. Una volta “estratte” le informazioni di nostro interesse dal file è possibile sottoporle a qualunque elaborazione, ad esempio potremo scrivere in un nuovo file i risultati dell’elaborazione. L’elaborazione potrebbe consistere anche semplicemente nel riscrivere i record in un nuovo formato o nello scrivere solo i record che verificano determinate condizioni. record 1 recor d n ……. FILE campo 1 campo2 campo n campo 1 campo2 campo n ……. PROGRAMMA PARSERIZZATORE

description

campo 1. campo 1. campo2. campo2. campo n. campo n. ……. PARSERIZZAZIONE DI FILE. - PowerPoint PPT Presentation

Transcript of PARSERIZZAZIONE DI FILE

Page 1: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 11

PARSERIZZAZIONE DI FILEPARSERIZZAZIONE DI FILE

Un problema piuttosto comune in bioinformatica è quello di leggere un file, tipicamente un flat-file in un qualche formato (es. FASTA) rappresentante un database (es. un insieme di sequenze). All’interno del file si tratta di riconoscere la struttura sintattica con cui sono organizzati i dati e quindi individuare i singoli record e all’interno dei record i singoli campi.

Una volta “estratte” le informazioni di nostro interesse dal file è possibile sottoporle a qualunque elaborazione, ad esempio potremo scrivere in un nuovo file i risultati dell’elaborazione. L’elaborazione potrebbe consistere anche semplicemente nel riscrivere i record in un nuovo formato o nello scrivere solo i record che verificano determinate condizioni.

record1

recordn

…….FILE

campo1

campo2

campon

campo1

campo2

campon

……. PROGRAMMAPARSERIZZATORE

Page 2: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 22

FILE FASTAFILE FASTA

Supponiamo che il file da analizzare sia in formato FASTA, ad esempio un file di sequenze EST scaricato da GENBANK. Individuamo nei record i campi di nostro interesse

1)    Il numero identificativo gi del record genbank2)    Il codice accession 3)    Il nome della EST 4)    La descrizione della EST5)    La sequenza della EST

1 2 3 4

5

Page 3: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 33

ELABORAZIONEELABORAZIONE

L’elaborazione che ci interessa effettuare su ogni singolo record è quella di inserire un record corrispondente all’interno di un database relazionale SQL di sequenze EST. Le 5 informazioni estratte da ogni record dovranno produrre un corrispondente comando di insert MySQL

1 2 3 4

5

insert into est (gi,accession,nome,descrizione,sequenza)values(8777287,’AB044776’,’AB044776’,’Panax…’,‘GAAGAA…’)

Page 4: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 44

2 ALTERNATIVE2 ALTERNATIVE

Abbiamo visto che esistono due modi alternativi per interagire con un database SQL e di conseguenza è possibile eseguire l’operazione di insert in due modi alternativi

1)Dalla linea di comando del client MySQL

2)Da programma (embedding)

Nel primo caso il programma di parserizzazione creerà un file di comandi SQL che poi daremo direttamente in pasto all’interprete MySQL.

Nel secondo caso le istruzioni di insert sono eseguite una ad una direttamente all’interno del programma, man mano che vengono letti i singoli record.

La seconda soluzione sembrerebbe più “automatizzata”, però anche nel primo caso, una volta scritto completamente il file, è possibile far eseguire da programma (con una istruzione qx o system) il comando UNIX di lettura ed esecuzione del file da parte del client mysql

Page 5: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 55

SCHEMATIZZANDO…SCHEMATIZZANDO…

Proveremo a vedere entrambe le soluzioni in quanto la parte di programma che cambia è minima (evidenziata in rosso)

campo1

campo2

campon

campo1

campo2

campon

…….

while (riconoscimento di un record){

estrazione campi

definizione comando di insert

scrittura del comando sul file

}

file parserizzatorefile di

comandi SQL

campo1

campo2

campon

campo1

campo2

campon

…….

1)

2)

while (riconoscimento di un record){

estrazione campi

definizione comando di insert

esecuzione del comando

}

DB

SERVER MYSQL

esecuzionedel file

Page 6: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 66

LA STRATEGIA PER PARSERIZZARE IL FILELA STRATEGIA PER PARSERIZZARE IL FILE

Abbiamo detto che la parserizzazione deve essere guidata dalla struttura sintattica del file.In Perl una possibilità è quella di leggere l’intero file ed assegnarlo ad un’unica stringa (che può contenere file anche molto grandi) e quindi procedere all’individuazione dei record. I record sono chiaramente separabili grazie al pattern “>gi|” posto all’inizio di ogni record. Si potrà pertanto effettuare una operazione di split basata proprio su questo pattern, ottenendo un array contenente tutti i record. Per ogni record si potrà effettuare successivamente un pattern matching per estrarre i 5 campi.

file

letturafile

>gi|

>gi|

>gi|

stringa

split array ( , , )

pattern matching

1 2 3 4 5

Page 7: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 77

IL PARSERIZZATOREIL PARSERIZZATORE

Page 8: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 88

ESECUZIONEESECUZIONE

Per evitare di “sorbirsi” tutti i cicli di lettura fissiamo un break point!

Page 9: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 99

ESECUZIONEESECUZIONE

Lo split crea 22 record,ma il primo è vuoto (perché il file iniziava con il pattern di split). Per questo ho aggiunto il test if ($record)

Page 10: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1010

ESECUZIONEESECUZIONE

Prima di eliminare tutti gli spazi e i new-line dalla sequenza proviamo a vedere tutte le stringhe catturate dal pattern matching

Page 11: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1111

ESECUZIONEESECUZIONE

Vediamo la sequenza $seq prima e dopo la sostituzione del pattern

Si può anche notare che l’operazione di pattern substitution azzera le variabili speciali $1, $2,…In generale ogni operazione sui pattern cancella i risultati della precedente

Page 12: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1212

ESECUZIONEESECUZIONE

Si procede quindi con il riconoscimento del secondo record e così via.

Alla fine di ogni ciclo abbiamo a disposizione nelle variabili $gi, $ac, $nome, $descr, $seq tutti i campi per quel record

Page 13: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1313

CREAZIONE DI FILE DI COMANDI SQLCREAZIONE DI FILE DI COMANDI SQL

Non ve l’avevo ancora detto (anche perché a fine programma i file aperti vengono comunque chiusi automaticamente) ma è buona norma chiudere un file quando è stato letto o scritto completamente

Page 14: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1414

ESECUZIONEESECUZIONE

Page 15: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1515

ESECUZIONE DEL FILE DI COMANDIESECUZIONE DEL FILE DI COMANDI

Una volta scritti tutti i comandi SQL e chiuso il file di output ($nomefile.mysql) si può eseguire l’istruzione Perl:

qx{mysql btbm-xx <$nomefile.mysql};

Dove btbm-xx è il nome del database su cui far eseguire i comandi. Il comando UNIX eseguito da Perl fa leggere ed eseguire al client mysql il file di comandi appena creato.

Lo stesso comando UNIX potrà anche essere dato non da programma ma a mano al termine dell’esecuzione del programma parserizzatore

Page 16: PARSERIZZAZIONE DI FILE

BIOINFO3 - Lezione 35 1616

COMANDI SQL DA PROGRAMMACOMANDI SQL DA PROGRAMMA