Ver Feed RSS

The JEdi lair's

Contador de ocorrência de palavras em arquivos LaTeX (Python)

Avalie este Post de Blog
--

Boa noite pessoal! Como foram as festas de fim de ano? Espero que tenham aproveitado bastante… Eu o fiz!

Não sei se vocês sabem, mas no momento estou escrevendo uma monografia. Meu curso a exige como requisito final para receber o título de Bacharel. Para facilitar minha vida, estou escrevendo-a utilizando o LaTeX. Existe um pacote para o LaTeX chamado ABNTeX que contém todos os estilos outorgados pela ABNT. Dêem uma olhada nesse pacote. Ele pode poupar muito do seu tempo no futuro.

O LaTeX mais é ou menos como o HTML, uma linguagem de marcação. Então, ao invés de você ir colocando o texto e pressionando botõeszinhos para formatá-los, você vai colocando os elementos da linguagem e tal… O “design” do arquivo fica por conta de uma espécie de folha de estilo (ainda na analogia com o HTML).

Então, esses dias eu estava precisando fazer a contabilidade da quantidade de palavras, quais estou usando mais, etc. Como isso não pode ser feito convencionalmente, pois as palavras reservadas são confundidas com elementos do texto, eu resolvi criar um pequeno programa em Python para me auxiliar nessa empreitada. O código é bastante simples e está longe de ser perfeito. Apesar de estar atendendo bem as minhas necessidades, no futuro adicionarei alguns novos recursos.

O script pode ser baixado aqui. Para executá-lo basta fazer:
voce@seucomputador:/path$ python contador.py arquivo0.tex arquivo1.tex … arquivoN.tex
Ele vai ler cada um dos arquivos e vai sumarizá-los em conjunto. Como eu gosto de separar meus textos em vários arquivos, resolvi fazer dessa forma para poder contabilizar as informações de todos eles.

Uma coisa importante, esse script ignora palavras com menos de 3 letras e também as que estão dentro de uma lista chamada “ignore”, dentro do código. Por que não ignorar também as palavras de três letras? Simples: acrônimos. USB, SMP, CPU, FTP, SSH, … Todos eles fazer parte do dia-a-dia dos computeiros e não podem ficar de fora.

Também há uma lista com algumas palavras reservadas do LaTeX e ABNTeX. Caso alguma palavra reservada esteja sendo contada, basta adicioná-la a essa lista.

Espero que seja de utilidade… Até mais…
Categorias
Não Categorizado

Comentários

  1. Avatar de Magnun
    Muito bom cara! Script muito bem bolado... Parabéns!!
  2. Avatar de tuxdahora
    Eu sugeriria uma correção. O LaTeX não é uma Linguagem de Marcação. Mas ele também não é um Editor de Textos. Eu diria que o LaTeX se encaixa melhor como um Programador de Textos, pois, além de você escrever o código-fonte (que não necessariamente são marcações, mas sim, instruções para o compilador), você precisa compilá-lo para obter o resultado. E o resultado são vários arquivos, além do "executável" que é um arquivo no formato DVI (DeVice Independent) ou PDF (Portable Document Format), se você já gera diretamente um PDF pelas instruções de sua compilação.
    Atualizado 16-01-2010 em 20:22 por tuxdahora (Correção de sigla ;-))
  3. Avatar de PEdroArthurJEdi
    Como eu coloquei no texto, o LaTeX é mais ou menos como o HTML. Não significa que ele seja a mesma coisa, com os mesmos fundamentos ou que tenham o mesmo poder de representação. Apenas o estilo de se desenvolver o resultado final é parecido.

    Eu quero questionar seu argumento: se eu tivesse um compilador HTML -> PDF, o HTML também deixaria de ser uma linguagem de marcação? O browser não seria uma espécie de interpretador de código? Ou seja, essa situação não seria análoga a programas compilados e interpretados? Você está certo quanto a nomenclatura de linguagens como o LaTeX, mas, IMHO, esse argumento não é muito consistente.

    Um exemplo muito mais válido de que LaTeX não é simplesmente uma linguagem de marcação é a criação das referências bibliográficas. Você pode encher seu arquivo de referências de entradas. Porém, só são materializadas para o arquivo de saída aquelas que foram utilizadas no texto. Seria algo como desvios condicionais em uma linguagem de programação como C, Java e Python.

    Valeu pela sujestão :-)
    Abraço
  4. Avatar de tuxdahora
    Mas é impossível (na minha visão, é claro :-D que o LaTeX seja sequer parecido com HTML, ou qualquer outra linguagem de marcação. O código-fonte em linguagem LaTeX precisa ser compilado, pelo (sendo redundante) compilador do LaTeX. E esse mesmo compilador é quem gera os vários arquivos de saída, como resultado do processo. E um desses arquivos de saída será o que nos interessa: o seu "executável".

    As instruções dentro de um arquivo-fonte LaTeX estão longe de serem simples marcações passíveis de interpretação. Além de sua utilização ser muito mais ampla (e complexa) que numa linguagem de marcação "tradicional", é preciso um processo de compilação dessas instruções para a geração de um executável. E como o arquivo executável gerado na compilação do arquivo-fonte em LaTeX é bem peculiar (no caso, é gerado um arquivo executável que é uma apresentação gráfica de um documento, em um formato de arquivo hoje em dia muito pouco utilizado), eu não poderia simplesmente chamar o LaTeX de Linguagem de Programação. Por isso resolvi chamá-lo de um Programador de Textos.

    Veja bem: desde o mais simples exemplo de arquivo-fonte LaTeX. até o mais complexo, ao compilá-lo, se o mesmo possuir erros, o compilador interromperá o processo, indicará (da maneira dele) onde estaria o erro e qual seria ele, e você teria duas opções: (1) aplicar comandos nessa interação com o compilador para resolver o problema ou; (2) interromper o processo de compilação e ir direto ao arquivo-fonte para consertar o(s) erro(s), e, posteriormente, re-compilá-lo. Uma linguagem de marcação não precisa de um compilador, o LaTeX sim!

    Voltando ao exemplo abstrato, se você esquecer, ou colocar em um lugar errado, uma chave, um colchete, um parêntese, um "&", um "%", um "@", um ">", ou mesmo uma barra "\" , o compilador interromperá o processo, indicará os possíveis problemas, e cabe a você resolvê-los antes de terminar o processo (ou iniciar um novo processo de) compilação, posteriormente.

    Para aumentar mais ainda a similaridade do LaTeX com uma linguagem de programação como C, C++ ou Java, os erros costumam ser razoavelmente parecidos. Claro que você não vai encontrar instruções como IFs e WHILEs da vida. Pelo menos não como o povo está acostumado a ver nas linguagens de programação e de scripts das mais comuns (o poder das "macros" no LaTeX é fora-de-série). E acredite, você pode fazer programas interativos com LaTeX sim!! São resursos muito pouco (ou quase nada) utilizados, que dão ao LaTeX poder suficiente para você fazer "o que quiser" dele (e ter algo muito além de um simples gerador de textos profissional). Você pode fazer contas, criar jogos ou interfaces interativas, e por aí vai. Claro que hoje em dia é muito mais útil fazer toda essa interatividade em linguagens de programação ou scripts da vida, que em LateX :-) Nem se compara... :-D

    E o que ele não tem de "comum" em uma linguagem de programação, ele tem de avançado com o uso de "pacotes" que lhe permitem fazer de tudo com ele (desde fantásticos gráficos e fluxogramas, até ilustrações vetoriais, passando por criação de fontes de texto, estruturas químicas complexas e mais uma infinidade de possibilidades). Você poderia até mesmo compará-los às bibliotecas. Mas o seu uso e função são levemente diferentes.

    Comparado com o LaTeX, uma linguagem de marcação não chega nem aos pés em possibilidades (talvez se você juntar todas as linguagens de marcação, e todos os seus interpretadores, você consiga uma faixa bem próxima de possibilidades de uso).

    E agora, respondendo a suas perguntas:

    "Se eu tivesse um compilador HTML -> PDF, o HTML também deixaria de ser uma linguagem de marcação?"

    Resposta: Não, pois não é o próprio HTML que irá compilar seu código e gerar um PDF. Você, possivelmente, usará linguagem de programação ou script à parte para isso. E isso qualquer um pode montar à parte, na linguagem que quiser e pra fazer o que bem entender.
    "O browser não seria uma espécie de interpretador de código? Ou seja, essa situação não seria análoga a programas compilados e interpretados?"

    Resposta: Não necessariamente. E essa resposta tem muito do conteúdo da primeira resposta que fiz aqui. Se compararmos um navegador com um interpretador, não poderíamos associá-lo a um compilador, pois o processo não é um motor auto-HTML. Você possui um sistema/programa à parte (no caso o navegador), feito em uma linguagem de programação ou script à parte (C, C++, etc), para te permitir interpretar determinada linguagem de marcação. O caso do LaTeX é diferente: ele possui compilador próprio que processa o código-fonte e gera uma pá de arquivos diferentes e úteis (e quanto mais complexo é seu arquivo-fonte LaTeX, maior será o número de arquivos úteis de saída da compilação). E, após a compilação, o que você vai precisar usar de imediato é o arquivo "executável" no formato DVI. E aí sim, com o arquivo DVI em mãos, você pegará um programa a parte para interpretá-lo (um KDVI da vida), que funcionaria como um navegador para uma linguagem de marcação, e assim, apresentar seu conteúdo de uma forma estruturada (formatada) para o usuário.
    E hoje em dia, muitos só conhecem o LaTeX (ou nem sabem que é o LaTeX que eles estão utilizando) devido a interfaces gráficas que os aproximam de um Editor de textos, como o TeXmacs, o Kile, ou mesmo o LyX. Realmente, quem utiliza o LaTeX por essas interfaces, não vai chamar o LaTeX nem de linguagem de marcação, quanto menos de um Programador de Textos: vai chamá-lo simplesmente (e erroneamente) de Editor de Textos.

    Para os novatos esses "editores de texto" são uma mão-na-roda. Mas tudo que facilita por um lado, inviabiliza por outro. Essas interfaces (ainda) não estão maduras o suficiente para usuários mais avançados, e não vão te permitir refinar seu arquivo do jeito que você quer. Um usuário avançado que queira liberdade, terá de (e irá preferir) utilizar o LaTeX "na mão": pela linha de comando utilizando seu compilador.

    Por sinal, eu gostaria muito de ver mais posts sobre LateX aqui no Under-Linux. Eu pretendo escrever alguns, mas gostaria da sua ajuda. Acredito que será muito vantajoso para toda a comunidade ter mais de uma pessoa criando tutoriais sobre o LaTeX. Até os dias de hoje, o LaTeX nunca conseguiu o mérito que ele realmente merece. Ainda mais com a versão 3 saindo do forno, que vai torná-lo imbatível :-D

    Um abraço.

+ Enviar Comentário