• Publicidad

Procesando texto

Perl aplicado a la bioinformática

Procesando texto

Notapor asegurac » 2009-11-30 16:08 @714

Hola a todos,

Les escribo para lo siguiente: tengo que procesar una base de datos, para ello dispongo de un par de archivos.

El archivo 1 contiene un listado de palabras que deseo buscar en el archivo 2 (base de datos). El archivo 1 tiene la siguiente estructura (solo es un fragmento):

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
zf-C2H2
WD40
I-set
Ank
fn3
Cadherin
7tm_1
V-set
Collagen
LRR_1
Pkinase
Sushi
EGF_CA
RRM_1
KRAB
C1-set
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Ahora el archivo 2, que es mi base de datos, tiene la siguiente estructura:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1-cysPrx_C      1-cysPrx_C
1-cysPrx_C      AhpC-TSA
14-3-3  14-3-3
14-3-3  Acetyltransf_1
14-3-3  LIG_14-3-3_1
14-3-3  LIG_14-3-3_2
14-3-3  LIG_14-3-3_3
14-3-3  LIG_14-3-3_none
2-Hacid_dh      2-Hacid_dh
2-Hacid_dh      2-Hacid_dh_C
2-Hacid_dh      ACT
2-Hacid_dh      LIG_CtBP
2-Hacid_dh_C    2-Hacid_dh
2-Hacid_dh_C    2-Hacid_dh_C
2-oxoacid_dh    2-oxoacid_dh
2-ph_phosp      2-ph_phosp
2OG-FeII_Oxy    2OG-FeII_Oxy
2_5_RNA_ligase  2_5_RNA_ligase
3-alpha MOSC
3-dmu-9_3-mt    3-dmu-9_3-mt
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Contiene un par de columnas separadas por "\t". Lo que deseo hacer es buscar para cada miembro de la lista del archivo 1 su ocurrencia en cualquiera de las dos columnas en el archivo 2, y que en cada ocurrencia que encuentre imprima ambas columnas.
Para ello he escrito el siguiente código, solo que no he logrado hacerlo funcionar, y cuando lo he logrado me duplica la información; supongo que tengo algún error en la forma como estoy utilizando los bucles. Agradecería que pudieran ayudarme,
Saludos.

Código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2.  
  3. open (FILE1, "only_domains_human_proteome.txt");
  4. open (FILE2, "only_interfaces3did.txt");
  5.  
  6. my @firstdb=<FILE1>;
  7. my @seconddb=<FILE2>;
  8.  
  9.  
  10. foreach $query (@firstdb){
  11. chomp $query;
  12.         for ($i=0;$i<scalar(@seconddb);$i++){
  13.        
  14.         my @domaint = split ("\t", $seconddb[$i]);
  15.                
  16.                 chomp $domaint[1];
  17.        
  18.                
  19.                
  20.                 if ($domaint[0] =~ $query){
  21.                         print "$domaint[0]\t$domaint[1]\n";
  22.  
  23.                 }
  24.  
  25.         }
  26.                                
  27.                                        
  28. }
  29.  
  30. close FILE1;
  31. close FILE2;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Publicidad

Re: Procesando texto

Notapor explorer » 2009-11-30 17:09 @756

Sí, hay un problema con la forma de hacer la comparación con la expresión regular. Faltaban los '/'.

Si quieres ver si aparece a lo largo de la línea, te vale con justamente con mirar toda la línea.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. open (FILE1, "only_domains_human_proteome.txt");
  7. open (FILE2, "only_interfaces3did.txt");
  8.  
  9. my @firstdb  = <FILE1>;
  10. my @seconddb = <FILE2>;
  11.  
  12. chomp @firstdb;
  13. chomp @seconddb;
  14.  
  15. close FILE1;
  16. close FILE2;
  17.  
  18. foreach my $query (@firstdb) {
  19.     for my $second (@seconddb) {
  20.         if ($second =~ /$query/) {
  21.             print "$second\n";
  22.         }
  23.     }
  24. }
  25.  
  26. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesando texto

Notapor asegurac » 2009-11-30 17:36 @775

Hola, muchas gracias por tu respuesta; he hecho las modificaciones al código, pero al ejecutarlo no imprime nada.
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Re: Procesando texto

Notapor explorer » 2009-11-30 18:24 @808

Según los dos ficheros de entrada que has puesto... no debería salir nada... ¿o qué debería salir?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesando texto

Notapor asegurac » 2009-11-30 18:36 @816

Hola,

Perdón, con el texto que puse del archivo 1 no aplicaría para un buen ejemplo, así que a continuación coloco un segmento que podría ejemplificar mejor lo que quiero hacer.

Archivo 1 (el nuevo):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1-cysPrx_C
DUF1193
IMS_C
P53_tetramer
3-alpha
CoA_binding
Pyrophosphatase
Paralemmin
UPF0027
Crystallin
Exostosin
FYRN
FYRC
Sox_N
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Entonces cuando se haga el match entre cada uno de los elementos de archivo 1 con los elementos de las columnas de archivo 2 debería imprimir lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1-cysPrx_C      1-cysPrx_C
1-cysPrx_C      AhpC-TSA
3-alpha         MOSC
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Re: Procesando texto

Notapor explorer » 2009-11-30 18:50 @826

Pues a mí me funciona, con el programa que te he puesto antes.

Publica tu código y vemos dónde está el fallo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesando texto

Notapor asegurac » 2009-11-30 19:14 @843

Hola,

El código está bien; revisé el formato de la lista en el archivo 1 original y me di cuenta de que al final de cada elemento existen dos espacios, así que con "chop()" "chop()" ¡funciona perfecto!

¡Muchas gracias!
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Re: Procesando texto

Notapor explorer » 2009-12-01 04:12 @216

Pero la cuestión planteada al principio no decía nada de reescribir las líneas, solo hablaba de buscar coincidencias... :(
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado