• Publicidad

Contar ocurrencias

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Contar ocurrencias

Notapor wampaier » 2009-06-22 09:29 @437

¿Qué tal...? Tengo un programa en el cual... voy a buscar una palabra.... pero esa palabra puede estar más de una vez.... ¿Cómo puedo hacerle para que me la cuente una sola vez?

Gracias...
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Publicidad

Notapor explorer » 2009-06-22 09:46 @449

Con un diccionario se resuelve fácilmente...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use utf8;
use open OUT => ':locale';
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "es_ES");

my $frase = "
En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua,
rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, salpicón
las más noches, duelos y quebrantos los sábados, lentejas los viernes, algún
palomino de añadidura los domingos, consumían las tres partes de su hacienda.
El resto della concluían sayo de velarte, calzas de velludo para las fiestas
con sus pantuflos de lo mismo, los días de entre semana se honraba con su
vellori de lo más fino. Tenía en su casa una ama que pasaba de los cuarenta, y
una sobrina que no llegaba a los veinte, y un mozo de campo y plaza, que así
ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro hidalgo
con los cincuenta años, era de complexión recia, seco de carnes, enjuto de
rostro; gran madrugador y amigo de la caza. Quieren decir que tenía el
sobrenombre de Quijada o Quesada (que en esto hay alguna diferencia en los
autores que deste caso escriben), aunque por conjeturas verosímiles se deja
entender que se llama Quijana; pero esto importa poco a nuestro cuento; basta
que en la narración dél no se salga un punto de la verdad."
;

my %palabras;

while ($frase =~ /(\w+)/g) {
    $palabras{uc $1}++;
}

for my $palabra (sort keys %palabras) {
    print "$palabra\n";
}

__END__
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
A
ACORDARME
ADARGA
ALGO
ALGUNA
ALGÚN
AMA
AMIGO
ANTIGUA
ASTILLERO
ASÍ
AUNQUE
AUTORES
AÑADIDURA
AÑOS
BASTA
CALZAS
CAMPO
CARNERO
CARNES
CASA
CASO
CAZA
CINCUENTA
COMO
COMPLEXIÓN
CON
CONCLUÍAN
CONJETURAS
CONSUMÍAN
CORREDOR
CUARENTA
CUENTO
CUYO
DE
DECIR
DEJA
DELLA
DESTE
DIFERENCIA
DOMINGOS
DUELOS
DÉL
DÍAS
EDAD
EL
EN
ENJUTO
ENSILLABA
ENTENDER
ENTRE
ERA
ESCRIBEN
ESTO
FIESTAS
FINO
FLACO
FRISABA
GALGO
GRAN
HA
HACIENDA
HAY
HIDALGO
HONRABA
IMPORTA
LA
LANZA
LAS
LENTEJAS
LLAMA
LLEGABA
LO
LOS
LUGAR
MADRUGADOR
MANCHA
MISMO
MOZO
MUCHO
MÁS
NARRACIÓN
NO
NOCHES
NOMBRE
NUESTRO
O
OLLA
PALOMINO
PANTUFLOS
PARA
PARTES
PASABA
PERO
PLAZA
POCO
PODADERA
POR
PUNTO
QUE
QUEBRANTOS
QUESADA
QUIEREN
QUIERO
QUIJADA
QUIJANA
RECIA
RESTO
ROCÍN
ROSTRO
SALGA
SALPICÓN
SAYO
SE
SECO
SEMANA
SOBRENOMBRE
SOBRINA
SU
SUS
SÁBADOS
TENÍA
TIEMPO
TOMABA
TRES
UN
UNA
VACA
VEINTE
VELARTE
VELLORI
VELLUDO
VERDAD
VEROSÍMILES
VIERNES
VIVÍA
Y
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Explicación de los uses requeridos en este otro hilo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor wampaier » 2009-06-22 10:06 @463

Gracias, tu ayuda es bastante buena.... ¿Conoces los records de Genbank? Mira, te paso un ejemplo con 3 records.... cada record está dividido por "//" y cuando encuentre la palabra dentro del primer record se pase al segundo y así sucesivamente.

Código: Seleccionar todo
LOCUS       Z18825                   324 bp    mRNA    linear   PRI 04-OCT-2000
DEFINITION  Homo sapiens rearranged Ig kappa chain V-domain cDNA.
ACCESSION   Z18825
VERSION     Z18825.1  GI:33415
KEYWORDS    Ig kappa chain; immunoglobulin; variable region.
SOURCE      Homo sapiens (human)
  ORGANISM  Homo sapiens
            Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
            Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
            Catarrhini; Hominidae; Homo.
REFERENCE   1  (bases 1 to 324)
  AUTHORS   Griffiths,A.D., Malmqvist,M., Marks,J.D., Bye,J.M., Embleton,M.J.,
            McCafferty,J., Baier,M., Holliger,K.P., Gorick,B.D.,
            Hughes-Jones,N.C., Hoogenboom,H.R. and Winter,G.
  TITLE     Human anti-self antibodies with high specificity from phage display
            libraries
  JOURNAL   EMBO J. 12 (2), 725-734 (1993)
   PUBMED   7679990
REFERENCE   2  (bases 1 to 324)
  AUTHORS   Griffiths,A.D.
  TITLE     Direct Submission
  JOURNAL   Submitted (25-NOV-1992) Griffiths A.D., MRC Centre for Protein
            Engineering, Hills Road, Cambridge, CB2 2QH, U.K
FEATURES             Location/Qualifiers
     source          1..324
                     /organism="Homo sapiens"
                     /macronuclear
                     /mol_type="mRNA"
                     /isolate="two unimmunised humans"
                     /db_xref="taxon:9606"
                     /clone="FOG1-VLH6"
                     /sex="Male"
                     /cell_type="peripheral lymphocyte"
                     /tissue_type="blood"
                     /dev_stage="adult"
     gene            <1..>324
                     /gene="IgK"
     CDS             <1..>324
                     /gene="IgK"
                     /codon_start=1
                     /product="Ig kappa chain V-domain"
                     /protein_id="CAA79277.1"
                     /db_xref="GI:939908"
                     /translation="DIQMTQSPSTLSASIGDRVTITCRASQNIDSWLAWFQHKPGKAP
                     KPLIYGAFTLQNGVPSRFSGSGSGTEFSLTISSLQPDDFATYFCQQAHSFPPTFGGGT
                     RLEIKR"
     V_region        <1..>324
                     /gene="IgK"
                     /product="Ig kappa chain V-domain"
ORIGIN     
        1 gacatccaga tgacccagtc tccctccacc ctgtctgcat ctataggaga cagagtcacc
       61 atcacttgcc gggccagtca gaatattgat agctggttgg cctggtttca acacaaacca
      121 gggaaagccc ccaagcccct gatctacggt gcattcactt tgcaaaatgg cgtcccgtcc
      181 agattcagcg gcagtggctc tgggacagag ttctccctca ctatcagcag cctgcagcct
      241 gacgattttg caacttactt ctgtcaacag gctcacagtt tccctcccac tttcggcgga
      301 gggacacgac tggagattaa acgt
//

LOCUS       Z18840                   315 bp    mRNA    linear   PRI 04-OCT-2000
DEFINITION  Homo sapiens rearranged Ig kappa region V-domain cDNA.
ACCESSION   Z18840
VERSION     Z18840.1  GI:33423
KEYWORDS    Ig kappa chain; immunoglobulin; variable region.
SOURCE      Homo sapiens (human)
  ORGANISM  Homo sapiens
            Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
            Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
            Catarrhini; Hominidae; Homo.
REFERENCE   1  (bases 1 to 315)
  AUTHORS   Griffiths,A.D., Malmqvist,M., Marks,J.D., Bye,J.M., Embleton,M.J.,
            McCafferty,J., Baier,M., Holliger,K.P., Gorick,B.D.,
            Hughes-Jones,N.C., Hoogenboom,H.R. and Winter,G.
  TITLE     Human anti-self antibodies with high specificity from phage display
            libraries
  JOURNAL   EMBO J. 12 (2), 725-734 (1993)
   PUBMED   7679990
REFERENCE   2  (bases 1 to 315)
  AUTHORS   Griffiths,A.D.
  TITLE     Direct Submission
  JOURNAL   Submitted (25-NOV-1992) Griffiths A.D., MRC Centre for Protein
            Engineering, Hills Road, Cambridge, CB2 2QH, U.K
FEATURES             Location/Qualifiers
     source          1..315
                     /organism="Homo sapiens"
                     /macronuclear
                     /mol_type="mRNA"
                     /isolate="two unimmunised humans"
                     /db_xref="taxon:9606"
                     /clone="TNF-VLE1"
                     /sex="Male"
                     /cell_type="peripheral lymphocyte"
                     /tissue_type="blood"
                     /dev_stage="adult"
     gene            <1..>315
                     /gene="IgK"
     CDS             <1..>315
                     /gene="IgK"
                     /codon_start=1
                     /product="Ig kappa chain V-domain"
                     /protein_id="CAA79292.1"
                     /db_xref="GI:939916"
                     /translation="EIVLTQSPSSVSASVGDRVTITCRASQGIRSWLAWYQQKPGKAP
                     NLLIYAASTLETGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQANSFPLTFGGGT
                     KLE"
     V_region        <1..>315
                     /gene="IgK"
                     /product="Ig kappa chain V-domain"
ORIGIN     
        1 gaaattgtgc tgactcagtc tccatcttcc gtgtctgcat ctgtaggaga cagagtcacc
       61 atcacttgtc gggcgagtca gggtattcgc agctggttag cctggtatca gcagaaacca
      121 gggaaagccc ctaacctcct gatctatgct gcatccactt tggaaactgg ggtcccatca
      181 aggttcagcg gcagtggatc tgggacagat ttcactctca ccatcagcag cctgcagcct
      241 gaagattttg caacttacta ttgtcaacag gctaacagtt tccctctcac tttcggcgga
      301 gggaccaagc tggag
//

LOCUS       S59162                   433 bp    mRNA    linear   PRI 26-JUN-2000
DEFINITION  Ig V kappa =anti-single/double-stranded DNA antibody NE-13 light
            chain variable region [human, B-cells, mRNA Partial, 433 nt].
ACCESSION   S59162
VERSION     S59162.1  GI:299955
KEYWORDS    .
SOURCE      Homo sapiens (human)
  ORGANISM  Homo sapiens
            Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
            Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
            Catarrhini; Hominidae; Homo.
REFERENCE   1  (bases 1 to 433)
  AUTHORS   Hirabayashi,Y., Munakata,Y., Takai,O., Shibata,S., Sasaki,T. and
            Sano,H.
  TITLE     Human B-cell clones expressing lupus nephritis-associated anti-DNA
            idiotypes are preferentially expanded without somatic mutation
  JOURNAL   Scand. J. Immunol. 37 (5), 533-540 (1993)
   PUBMED   8387226
  REMARK    GenBank staff at the National Library of Medicine created this
            entry [NCBI gibbsq 130630] from the original journal article.
            This sequence comes from Fig. 6.
FEATURES             Location/Qualifiers
     source          1..433
                     /organism="Homo sapiens"
                     /mol_type="mRNA"
                     /db_xref="taxon:9606"
                     /cell_type="B cells"
     gene            1..>433
                     /gene="Ig Vkappa"
     CDS             1..>433
                     /gene="Ig Vkappa"
                     /note="mismatches(74[Y->T],122[N->D]); conceptual
                     translation presented here differs from translation in
                     publication"
                     /codon_start=1
                     /product="anti-single/double-stranded DNA antibody NE-13
                     light chain variable region"
                     /protein_id="AAB26430.2"
                     /db_xref="GI:8176528"
                     /translation="MDMGVLVQLLGLLLLWFPGSRCDIQMTQSPSSVSASVGDRVTIT
                     CRASQGISSWLAWYQQKPGKAPKLLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQP
                     EDFATYYCQQANSFPYPFGGGTKVEIKRTVAAPSVFIFPPSD"
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Notapor explorer » 2009-06-22 10:12 @466

Pero... ¿a qué palabra te refieres?

Por estos foros hemos hablado en algunas ocasiones sobre los ficheros Genbank. Usa el sistema de búsqueda para localizarles.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor wampaier » 2009-06-22 10:21 @473

¡Ah! Por ejemplo, digamos que se quiere buscar y contar la palabra "lymphocyte".
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Notapor explorer » 2009-06-22 11:02 @502

Bueno, buscar por esa palabra es muy sencillo. Te vale con usar la función index(), por ejemplo (no probado):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $fichero = do {local $/; open GEN, "<genbank.txt"; <GEN> };

if (index($fichero, "lymphocyte") >= 0) {
    print "Está\n";
}
Coloreado en 0.002 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor wampaier » 2009-06-22 11:24 @517

Ok, pero ¿tú que me recomiendas para hacerlo para que me cuente cuántas veces aparece dicha palabra...? ¿Y que me imprima las veces que aparece?

Disculpa que te moleste tanto pero es que soy nuevo en esto... y rara vez trabajo con programación...

¡¡Gracias!!
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Notapor explorer » 2009-06-22 11:55 @538

wampaier escribiste:Ok, pero ¿tú que me recomiendas para hacerlo para que me cuente cuántas veces aparece dicha palabra...? ¿Y que me imprima las veces que aparece?

Pero es que eso es diferente a lo que habías pedido.

Si quieres contar las veces que aparece la palabra "lymphocyte", puedes hacerlo de varias maneras.

Puedes ir línea por línea y comprobar si está o no está (no probado):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open GENBANK, "<genbank.txt" or die "$!\n";

my $veces_que_aparece = 0;

while (my $linea = <GENBANK>) {
    if (index($linea, "lymphocyte") >= 0) {
        $veces_que_aparece++;
    }
}
close GENBANK;
print "La palabra lymphocyte aparece $veces_que_aparece veces\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

O usar una expresión regular... (no probado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open GENBANK, "<genbank.txt" or die "$!\n";
undef $/;
my $fichero = <GENBANK>;
close GENBANK;

my $veces_que_aparece = 0;

$veces_que_aparece++ while $fichero =~ /lymphocyte/g;
# o así:
$veces_que_aparece = () = $fichero =~ /lymphocyte/g;

print "La palabra lymphocyte aparece $veces_que_aparece veces\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y algunas formas más.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor wampaier » 2009-06-22 12:17 @553

¡Aaah! ok ok... ya estoy entendiendo... pero por ejemplo, ¿así solo me cuenta una vez la palabra aunque aparezca más veces en cada record? Es que es eso lo que se me dificulta.

Te repito cada record está separado por "//".
wampaier
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2008-08-12 12:50 @576

Notapor explorer » 2009-06-22 12:36 @567

Pero es que no has dicho en qué ámbito quieres llevar las cuentas, si en todo el fichero o por cada registro...

Tu piensa que los ordenadores son muy tontos, y hay que decirle las cosas muy claras... y a los informáticos les pasa lo mismo :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

open  GENBANK, '<genbank.txt' or die "No puedo abrir el fichero genbank.txt: $!\n";
my @registros;
{
   local $/ = '//';                     # Suponemos que // no aparece más que como separador de registros

   @registros = <GENBANK>;
}
close GENBANK;

print "Leídos ", scalar @registros, " registros\n";

for (my $i = 0; $i < @registros; $i++) {

    my $veces = () = $registros[$i] =~ /lymphocyte/i;

    print "La palabra lymphocyte aparece $veces veces en el registro $i de genbank.txt\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
sale:
Código: Seleccionar todo
Leídos 3 registros desde genbank.txt
La palabra lymphocyte aparece 1 veces en el registro 0
La palabra lymphocyte aparece 1 veces en el registro 1
La palabra lymphocyte aparece 0 veces en el registro 2
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados