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: Julio C. Neves
Subject: Re: [shell-script] Erro num script pra contar frequência das palavras
Date: Mon, 10 May 2010 17:24:51 -0300

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]



reply via email to

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