• Publicidad

Problema: Registro de coincidencia y no coincidencia (regex)

Perl aplicado a la bioinformática

Problema: Registro de coincidencia y no coincidencia (regex)

Notapor pubafra » 2015-09-28 01:00 @083

Hola, comunidad de perlenespanol. Necesito de su ayuda para resolver un pequeño problemita.

Espero explicarme bien y que puedan entender así como lo describo.

Les platico: Tengo la siguiente lista (inventado para ejemplificar):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
AAAA
TTTT
GGGG
CCCC
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

son las secuencias que quiero buscar en una biblioteca, esta (inventada para ejemplificar):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
XXXXXXXXX
NNNNNXXXX
TTTTXXXXX
NNNNXXXXX
GGGGXXXXX
XXXXXXXXX
AAAAXXXXX
TTTTXXXXX
CCCCXXXXX
AAAAXXXXX
AAAAXXXXX
TTTTXXXXX
AAAAXXXXX
CCCCXXXXX
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

usando un script que explorer me ayudó a hacer puedo obtener lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
AAAA    4 #la primer palabra de lista aparece 4 veces en biblioteca
TTTT    3 #la segunda palabra de lista aparece 3 veces en biblioteca
GGGG    1 #la tercer palabra de lista aparece 1 veces en biblioteca
CCCC    2 #la cuarta palabra de lista aparece 2 veces en biblioteca
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

lo que yo quiero hacer es obtener las secuencias de la biblioteca que no tuvieron coincidencia con la lista.

Para este ejemplo sería un resultado como este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
XXXXXXXXX
NNNNNXXXX
NNNNXXXXX
XXXXXXXXX
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

He intentado varias opciones logrando obtener solo las secuencias que coinciden:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
TTTTXXXXX
GGGGXXXXX
AAAAXXXXX
TTTTXXXXX
CCCCXXXXX
AAAAXXXXX
AAAAXXXXX
TTTTXXXXX
AAAAXXXXX
CCCCXXXXX
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

pero estoy interesado en ambos resultados (las secuencias de la biblioteca que coinciden y las que no coinciden).

Espero de su ayuda u orientación con soluciones similares o funciones que puedan ayudar a resolverlo. Gracias y saludos.
pubafra
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2014-12-04 21:16 @927

Publicidad

Re: Problema: Registro de coincidencia y no coincidencia (re

Notapor explorer » 2015-09-28 15:58 @707

Solo es necesario incluir una excepción, para el caso de que no exista coincidencia:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3. use autodie;
  4.  
  5. # Leemos las secuencias
  6. open my $SECUENCIAS, '<', 'secuencias.txt';
  7. my @secuencias = <$SECUENCIAS>;
  8. chomp @secuencias;
  9. close $SECUENCIAS;
  10.  
  11. # Construimos la exp. reg.
  12. my $regex = join '|', @secuencias;
  13. $regex = qr/($regex)/;
  14.  
  15. # Recorrer el archivo de bibliotecas
  16. my %contador;
  17. my @no_coincide;
  18. open my $BIBLIOTECA, '<', 'bibliotecas.txt';
  19. while (my $linea = <$BIBLIOTECA>) {
  20.     chomp $linea;
  21.  
  22.     my $ha_coincidido;
  23.     while($linea =~ /$regex/g) {
  24.         $contador{$1}++;
  25.         pos($linea) = $-[0] +1;         # apuntamos a la posición inicial, siguiente, de la última coincidencia
  26.         $ha_coincidido = 1;
  27.     }
  28.  
  29.     if (not $ha_coincidido) {
  30.         push @no_coincide, $linea;
  31.     }
  32. }
  33. close $BIBLIOTECA;
  34.  
  35. # Mostrar resultados
  36. open my $SALIDA,     '>', 'resultado.txt';
  37. while (my($secuencia,$veces) = each %contador) {
  38.     say $SALIDA "$secuencia $veces";
  39. }
  40. close $SALIDA;
  41.  
  42. open my $SALIDA_NO,  '>', 'resultado_no.txt';
  43. for my $no_coincide (@no_coincide) {
  44.     say $SALIDA_NO $no_coincide;
  45. }
  46. close $SALIDA_NO;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Con el uso de la bandera $ha_coincidido se puede saber si la secuencia ha coincidido o no, por lo que podemos guardarla en el array @no_coincide, que sacaremos al final.
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: Problema: Registro de coincidencia y no coincidencia (re

Notapor pubafra » 2015-10-02 21:17 @928

explorer: de nuevo muchas gracias. Una disculpa por no haber agradecido antes.

Agregar la excepción estuvo muy bien, probé el script con una lista de 350 secuencias a buscar en una biblioteca que tiene 65533 secuencias.

El resultado debería esperar por supuesto:
archivo coincidencia ## (las secuencias que coinciden con las secuencias de la lista),
archivo no coincidencia ## (las secuencias que no coinciden con las secuencias de la lista).

El número de secuencias coincidencia más el número de secuencias no coincidencia deberían sumar los 65533 (coincidencia + no coincidencia = total biblioteca). Sin embargo no consigo obtener ese valor.

Para un caso particular obtengo la suma de 65580.

Lo sé, no es mucha la diferencia pero ya he revisado los archivo y corrí más de una vez el script ¿a qué crees que se deba esta diferencia (65580 - 65533 = 47)?

Por último, lo he probado con archivos con menos secuencias y no existe diferencias de la suma y el total de secuencias.

Saludos y gracias.
pubafra
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2014-12-04 21:16 @927

Re: Problema: Registro de coincidencia y no coincidencia (re

Notapor explorer » 2015-10-03 05:57 @290

Pues que hay "algo" en esas 47 secuencias que hacen que no salgan impresas.

Sería interesante localizar alguna, para ver el aspecto que tiene.

Si el programa no las ha detectado, es quizás por falta de robustez (el programa no ha sabido responder a casos extremos -líneas vacías, por ejemplo-) o se ha encontrado con algo que no esperaba (metacaracteres en las secuencias de búsqueda que alteran la formación de la expresión regular).
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 2 invitados