• Publicidad

Extraer datos de una cadena de caracteres (GenBank)

Perl aplicado a la bioinformática

Extraer datos de una cadena de caracteres (GenBank)

Notapor Khris » 2009-04-14 20:02 @876

Hola.

Busco ayuda para resolver un problema relacionado con ADN y tal (aunque no hay que saber biología para lo que estoy preguntando aquí). Primero expondré la situación:

De un fichero en formato GenBank, tras haberlo parseado, extraje de él la siguiente información, almacenada en una variable como una sola cadena:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$seq_cds = "join(12345..12389,13400..13567,1500..1523)join(45085..46000,49
001..50678)complement(join(67548..67908,78960..79765))"
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
etc, la cadena es más larga y con más cosas.

El anterior es un ejemplo que me he inventado, pero lo que se obtiene es de ese estilo.

A los números que hay entre paréntesis (11111..22222,33333..44444,55555..66666) etc. les pueden preceder las siguientes palabras:

Ejemplo 1:
50878..51332 (no tienen paréntesis tampoco)

Ejemplo 2:
join(23519..24451,24542..24655,24752..24962,25041..25435,
25524..25743,25825..25997,26081..26203,26292..26452,
26543..26776,26862..27012,27099..27281,27372..27533,
27618..27713,27803..28431,28708..28805,28890..29080,
29160..30065,30147..30311,30410..30816,30902..31079)

Ejemplo 3:
complement(57392..58978)

Ejemplo 4:
complement(join(64398..64475,64582..64656,64751..64807,
64901..65017,65110..65217,65331..65456,65563..65652,
65739..65864,66107..66160,66262..66342,66450..66557,
66678..66749,66835..66897,67324..67512))


Tras todo este rollo, lo que me gustaría saber es una manera de:
  • agrupar todas las secuencias de números como el ejemplo 1 y ejemplo 2 en un array @join y
  • agrupar todas las secuencias de números como el ejemplo 3 y ejemplo 4 en un array @complement.
Estos arrays tendrían la forma (lo pongo como ejemplo):

@join = (11111,22222,33333,44444,55555)

Con el objetivo de extraer las bases de una cadena de ADN del siguiente modo: extraer todas las bases desde la posición 11111 hasta la posición 22222 e incluirlas en una variable, extraer todas las bases desde la posición 33333 hasta la posición 44444 y unirlas a la misma variable, etc. (esto último ya lo sé hacer -creo-, lo decía por si sabéis si el operador ".." que une las posiciones inicialmente me podría ayudar para algo en esta tarea, y así no sustituirlo por comas).


Por cierto, para que me queden los números separados por comas (,) utilizo antes una expresión regular para sustituir ".." por ",", ese no es un problema, lo que no sé es cómo conseguir @join y @complement.


He probado con expresiones regulares, pero no sé si se puede con ellas solamente. También probé con paréntesis de expresiones regulares, pero no conseguí nada.


Además, y si no es mucho pedir, agradecería mucho que fuera un código lo más sencillo posible. Es que soy bastante nuevo en programación, y es bastante importante que lo entienda para lo que quiero hacer.


Muchísimas gracias.
Khris
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-14 18:52 @828

Publicidad

Notapor explorer » 2009-04-15 04:20 @222

Bienvenido a los foros de Perl en Español, Khris.

Mírate este hilo anterior.

Si no te lo resuelve, vuelve a mandarnos otro mensaje.

De todas formas, yo aprendería BioPerl...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Bio::SeqIO;
 
my $seqio_object = Bio::SeqIO->new(-file => $gb_file);
my $seq_object = $seqio_object->next_seq;
 
for my $feat_object ($seq_object->get_SeqFeatures) {
   if ($feat_object->primary_tag eq "CDS") {
      print $feat_object->spliced_seq->seq,"\n";
      # e.g. 'ATTATTTTCGCTCGCTTCTCGCGCTTTTTGAGATAAGGTCGCGT...'
      if ($feat_object->has_tag('gene')) {
         for my $val ($feat_object->get_tag_values('gene')){
            print "gene: ",$val,"\n";
            # e.g. 'NDP', from a line like '/gene="NDP"'
         }
      }
   }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(sacado de aquí). Otro ejemplo.

Si no encuentras lo que buscas, manda otro mensaje que entonces veremos si podemos ayudarte con el desarrollo que buscas.

Actualización: He encontrado un programa que creo que hace algo parecido.

Actualización: Algo más relativo a join y complement.
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 4 invitados