shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Erro num script pra contar frequência das palavras


From: Helton Moraes
Subject: Re: [shell-script] Erro num script pra contar frequência das palavras
Date: Mon, 10 May 2010 18:07:04 -0300

Dando continuidade a algo que poderá crescer, crescer...

Julio, então estou pensando em fazer o seguinte (só que obviamente preciso
de uma luz):

1) incluir a lista de palavras num determinado trecho do próprio arquivo do
script 'statex';
2) incluir uma opção que edita o próprio arquivo (isso existe?).

assim, se eu quisesse incluir a palavra <para> na lista negra, usaria algo
do tipo

statex --include para

novamente, pergunto: isso existe? (opção que altera o próprio script)?

Obrigado

Helton (lembrando sempre que em shell não se pergunta se tem como fazer, e
sim como é que se faz :oP)




Em 10 de maio de 2010 17:24, Julio C. Neves <address@hidden>escreveu:

> Helton,
> eu não limitaria em palavras maiores de 5 caracteres. Eu criaria um arquivo
> chamado MenosEssas que teria todas as palavras que vc não quer como do, da,
> que, de, o, a, ..., todas antecedidas por um ^ e sucedidas por um $.
>
> Cada vez que vc encontrar uma palavra indesejada, basta inclui-la no
> arquivo
> e reprocessar.
>
> Nesse caso tire aquele aquele trecho de código que tem o limitador {5} e
> insira antes de contar (para não perder tempo contando e classificando
> atoa)
> o trecho a seguir:
>
> grep -vf MenosEssas
>
> Outra coisa que vc não pensou é em palavras com hífen e as mesmas palavras
> no singular e plural.
>
> Abraços,
> Julio
> Cursos de Shell e Zenity em 2 fins de semana?
> - Aracaju turma de Shell em 12/05 - address@hidden;
> - DF turma de Shell em 12/06 - ligue (61)3223-3000;
> - RJ turma de Shell em 14/06 - ligue (21)2210-6061;
> - Floripa turma de Shell e Zenity 12/07 – address@hidden;
> - Turmas fechadas em outras cidades ligue (21)8112-9988.
>
>
> Em 10 de maio de 2010 16:47, Helton Moraes <address@hidden>
> escreveu:
>
> > Buenas!
> >
> > Juntando as dicas que me mandaram, e acrescentando mais algumas opções
> > cômodas, o script STATEX (statistics of text ;o) ficou assim (vai que
> seja
> > útil pra mais alguém...):
> >
> > tr -s "[:punct:] " "\n" <FlyerVert.txt | tr "[:upper:]" "[:lower:]" |\
> >  sort | uniq -c | sort -gr | grep -E '[\ ]+[0-9][0-9]*\ [[:alpha:]]{5}'
> |\
> >  head -n 20
> >
> > comentários:
> > tr -s > colapsa caracteres consecutivos ([:punct:] pega tudo que é
> > pontuação)
> > tr "[:upper:]" "[:lower:]" > troca maiúsculas por minúsculas;
> > sort -gr > o -g é pra que ele ordene por ordem numérica, e o r para que
> > venha a ordem numérica ao contrário (decrescente);
> > grep > ali no meio tem um {5}, que foi o valor que escolhi para tamanho
> > mínimo de palavra (senão as mais frequentes são sempre e, os, as, de,
> por,
> > para, etc.). A regex pega algum número seguido de um espaço seguido de
> uma
> > palavra com 5 caracteres, na ordem que veio do sort
> > head > mostra só os resultados mais importantes (os primeiros)
> >
> > notar que pro tr a sintaxe é [:class:] enquanto pro grep é [[:class:]]
> > (haja
> > atenção...).
> >
> > evidentemente a cereja no bolo é trocar o '5' e o '20' por $2 e $3,
> > deixando
> > o $1 para o nome de arquivo, e salvar como um script que aceite
> parâmetros.
> >
> > Desculpem se fui muito elementar
> >
> > Helton
> >
> >
> >
> > Em 10 de maio de 2010 14:56, Julio C. Neves <address@hidden
> > >escreveu:
> >
> > > Fala Helton,
> > > acho que vc queria fazer:
> > > $ echo "$Var"
> > > o problema é que o resultado digo o resultado repito o resultado
> aparece
> > > assim
> > > $ tr ' ' '\n' <<< $Var | sort | uniq -c | sort -r
> > >      4 o
> > >      3 resultado
> > >      1 repito
> > >      1 que
> > >      1 problema
> > >      1 é
> > >      1 digo
> > >      1 assim
> > >      1 aparece
> > >
> > > Porém existem outras soluções:
> > > 1 - Usando Arrays Associativas, a partir do Bash 4.0
> > > $ for palavra in $Var; do let palavras[$palavra]++; done
> > > $ paste <(echo ${palavras[@]} | xargs -n1) <(echo ${!palavras[@]} |
> xargs
> > > -n1)
> > > 1    digo
> > > 1    que
> > > 1    repito
> > > 3    resultado
> > > 1    assim
> > > 1    é
> > > 4    o
> > > 1    aparece
> > > 1    problema
> > >
> > > 2- Usando awk:
> > > awk '{
> > >     for (w = 1; w <= NF; w++) conta[$w] ++
> > > }
> > > END {
> > >     for (w in conta) print conta[w], w | "sort -nr"
> > > }' /arquivo/que/deseja/contar
> > >
> > > Abraços,
> > > Julio
> > > Cursos de Shell e Zenity em 2 fins de semana?
> > > - Aracaju turma de Shell em 12/05 - address@hidden;
> > > - DF turma de Shell em 12/06 - ligue (61)3223-3000;
> > > - RJ turma de Shell em 14/06 - ligue (21)2210-6061;
> > > - Floripa turma de Shell e Zenity 12/07 – address@hidden;
> > > - Turmas fechadas em outras cidades ligue (21)8112-9988.
> > >
> > >
> > > Em 10 de maio de 2010 14:24, Helton Moraes <address@hidden>
> > > escreveu:
> > >
> > > >
> > > >
> > > > Caros colegas
> > > >
> > > > Primeiramente, caso alguém conheça alguma técnica ou programa ou
> script
> > > > pronto (link) para o que estou tentando fazer, aceito a sugestão!
> Vamos
> > > lá:
> > > >
> > > > Estou encarregado de dar uma melhorada no estilo de um texto
> > > publicitário,
> > > > e
> > > > como bom nerd pretendo usar o shell para isso, contando as palavras
> > > > repetidas de um arquivo de texto. Para isso, tentei usar um oneliner
> > com
> > > a
> > > > seguinte sequência:
> > > >
> > > > cat (carrega o arquivo)
> > > > tr (trocar espaços por novas linhas \n)
> > > > uniq -ci (contar as linhas repetidas ignorando maiúscula/minúscula)
> > > > sort -r (para que as palavras mais frequentes apareçam na parte baixa
> > do
> > > > terminal assim que eu der ENTER)
> > > >
> > > > ficou assim:
> > > >
> > > > cat /home/helton/Desktop/test.txt | tr " " "\n" | uniq -c | sort -r
> > > >
> > > > O PROBLEMA é que o resultado é como o seguinte:
> > > >
> > > > 1 o
> > > > 1 problema
> > > > 1 é
> > > > 1 que
> > > > 1 o
> > > > 1 resultado
> > > > 1 digo
> > > > 1 o
> > > > 1 resultado
> > > > 1 repito
> > > > 1 o
> > > > 1 resultado
> > > > 1 aparece
> > > > 1 assim
> > > >
> > > > ou seja, mesmo que tenha palavras repetidas no arquivo ele aparece
> uma
> > > > ocorrência por linha precedido do 1.
> > > >
> > > > Então, como bom pai (do script), pergunto: "onde foi que eu errei?"
> > > >
> > > > Obrigado
> > > >
> > > > Helton
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > ------------------------------------
> > >
> > > ---------------------------------------------------------------------
> > > Esta lista não admite a abordagem de outras liguagens de programação,
> > como
> > > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > prévio
> > > aviso.
> > > ---------------------------------------------------------------------
> > > Sair da lista: address@hidden
> > > ---------------------------------------------------------------------
> > > Esta lista é moderada de acordo com o previsto em
> > > http://www.listas-discussao.cjb.net
> > > ---------------------------------------------------------------------
> > > Servidor Newsgroup da lista: news.gmane.org
> > > Grupo: gmane.org.user-groups.programming.shell.brazil
> > >
> > > Links do Yahoo! Grupos
> > >
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
> >
> > ---------------------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação,
> como
> > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio
> > aviso.
> > ---------------------------------------------------------------------
> > Sair da lista: address@hidden
> > ---------------------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> > http://www.listas-discussao.cjb.net
> > ---------------------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> > Links do Yahoo! Grupos
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]