NOME

Chron_extract - extractor de cronologias web


DESCRIÇÃO

Chron_extract é uma script feita em Perl para extrair cronologias a partir de páginas web. Utilizando o módulo Template::Extract, esta script reconhece informação presente em documentos HTML, gerando ficheiros chronl que são interpretados pelo módulo Chronology. A sua utilização passa apenas por etiquetar o documento Html que contém a informação e escrever um ficheiro de configuração onde são indicados os blocos de informação a extrair.

Para testar a script, invocar

./chron_extract.pl config config_extract_1807 outfile inv1807.cl year 1807 inv1807.html

e consultar o ficheiro inv1807.cl gerado.


INVOCAÇÃO

chron_extract.pl [OPTIONS] ficheiro.html

A secção OPTIONS é do tipo 'chave valor' em que as chaves e valores possíveis são:

debug 1|2|3|4
Permite especificar o nível de debug que se pretende. Existem 4 níveis de debug (de 1 a 4). Para saber melhor o que representa cada um deles, consulte a secção DEBUG.

config conf_file
Permite indicar o path para o ficheiro de configuração. Omitindo esta opção, é utilizado o ficheiro ./config_extract para leitura das configurações.

year yyyy
Permite indicar o ano da cronologia (no caso de todos os eventos terem decorrido no mesmo ano).

month mm
Permite indicar o mês - em formato numérico - da cronologia (no caso de todos os eventos terem decorrido no mesmo mês).

outfile file.cl
Permite especificar um ficheiro chronl para guardar a informação gerada. Por omissão, é utilizada a standard Output.

validate true|false
Permite fazer uma validação final do código chronl gerado. Por omissão, o valor é true.

Notas:

Em relação à invocação da script convém ter em conta que:

i)
A ordem pela qual são especificadas as várias OPTIONS é irrelevante. Contudo, o path para o ficheiro deverá ser sempre o último argumento. Nunca poderá vir no bloco de options.

ii)
As opções year e month, sendo especificadas, têm prioridade sobre uma string para captar o mês ou o ano no meio do texto. Dada a facilidade com que são passadas estas opções, recomenda-se fortemente a sua utilização no caso de todos os eventos da cronlogia extraída terem ocorrido num mesmo ano e/ou mês.


FICHEIRO DE CONFIGURAÇÃO

É composto por um conjunto de blocos separados por uma linha tracejada (-------). Cada bloco é constituído necessariamente por 3 campos: block (nome do bloco), type (tipo do bloco) e format (formato do bloco).

block
Nome do bloco a extrair. É especialmente importante porque vai permitir identificar uma dado bloco no documento html.

Existem vários blocos possíveis:

i) NAME (tipo String)
nome da cronologia

ii) IDCHRON (tipo String)
identificador da cronologia

iii) EVENTS (tipo Array)
bloco de eventos que compõem a cronologia. Em cada evento, podem-se utilizar os campos year, month, day, name, id e description referentes a um evento.

iv) KEYWORDS (tipo String)
conjunto de palavras-chave da cronologia

type
Tipo de um bloco. Pode ser uma string se for para extrair uma frase ou um array se se pretender extrair um conjunto de linhas que seguem um dado formato.

format
Formato de um bloco. Segue a sintaxe do Template::Extract pelo que recomenda-se a leitura da documentação deste módulo. Convém saber que sempre que se pretende extrair um campo c1 de uma frase, temos de colocar [% c1 %]. Recomenda-se também que, entre dois blocos onde possa haver espaços no documento html, se inclua a etiqueta [% /\s*/ %]. No cado das strings, só é admissível um campo: a própria string. O nome do campo deverá ser igual ao do bloco mas em minúsculas. Nos blocos do tipo array, existem campos associados a cada bloco. Para ver os campos disponíveis em cada bloco, consultar a secção anterior block.

Convém perceber que cada bloco é constituído por vários campos no caso dos arrays ou de um só campo no caso das strings. Todos os campos seguem o seguinte esquema: [% c %] em que 'c' é o nome do campo.

Como exemplo, está disponível o ficheiro de configuração do documento inv1807.html.


ETIQUETAGEM

A etiquetagem do documento Html é muito simples. Basta colocar <!--BEGIN nome_bloco--> e <!--END nome_bloco--> no início e fim de cada bloco. Recomenda-se que, no caso de blocos do tipo String a etiqueta BEGIN e END seja colocada imediatamente antes e depois do texto a extrair. No caso do tipo Array, recomenda-se que se crie uma nova linha quer para a etiqueta BEGIN quer para a etqiueta END (ver ficheiro inv1807.html como exemplo). Quer a etiqueta BEGIN como a END, estão em forma de comentário HTML pelo que a sua coloção nos documentos não altera a forma como eles são visulalizados pelos browsers. Pareceu-nos mais sensata esta abordagem do que aquela que foi seguida no desenvolvimento do módulo WWW::Extractor.


DEBUG

Através da opção debug, é possivel obter informação adicional sobre o comportamento da script. Pode ser muito útil no caso da ocorrência de erros.

Existem 4 niveis de debug:

  1. nível mínimo de debug (valor por omissão)

  2. é feito um dumper da estrutura que armazena a informação extraída

  3. além do que é feito nos níveis anteriores, são mostradas todas as expressões regulares utilizadas na processo de extração. Note-se que esta informação é gerada pelo módulo Template::Extract.

  4. mostra apenas o ficheiro html normalizado (antes de ser processado)

Toda a informação de debug é enviada para a Standard Error (STDERR).

Aconselha-se que quando se utilize a opção debug, seja também utilizada a opção outfile para se poder distinguir a informação de debug com o código chronl.


VALIDAÇÃO

O chron_extract não garante que o ficheiro gerado esteja de acordo com a gramática do chronl. Em muitos casos, o código gerado constitui apenas uma aproximação que deverá ser revista e completada pelo utilizador final. Assim, existe uma opção validate que por omissão está activada e que valida o ficheiro gerado. Desta forma, o utilizador fica com uma ideia do estado da cronologia gerada.


NORMALIZAÇÃO

Para mais facilmente extrair a informação do documento HTML, é-lhe feito uma normalização que permite remover, entre outras coisas, espaços adicionais ou mudanças de linha.


EXEMPLOS

Como exemplo, está disponível um documento Html contendo uma cronologia das invasões francesas em 1807 (inv1807.html) e o ficheiro de configuração (config_extract_1807). O documento Html foi obtido no do Portal de História (www.arqnet.pt) e está disponível em http://www.arqnet.pt/portal/portugal/invasoes/inv1807.html

Invocando $./chron_extract.pl config config_extract_1807 outfile inv1807.cl year 1807 inv1807.html

produziria o seguinte output

Block NAME is correctly extracted

Block KEYWORDS is correctly extracted

Block EVENTS is correctly extracted

Examinating the generated file...

The file is valid with the chronl grammatic


AUTOR

Luis Oliveira - luis.oliveira@montemuro.org


VER TAMBÉM

Dado que o módulo Template::Extract tem uma grande importância nesta script, recomenda-se a leitura dos seguintes documentos:

Documentação da versão 0.35 do módulo (mais recente)
http://search.cpan.org/~autrijus/Template-Extract-0.35/lib/Template/Extract.pm

Artigo da Oreilly sobre o módulo Template::Extract
http://www.oreillynet.com/pub/a/javascript/excerpt/spiderhacks_chap01/

Exemplo de utilização do Template::Extract
http://www.perladvent.org/2003/5th/

Recomenda-se também a leitura da documentação do módulo Chronology uma vez que esta script serve de suporte a esse módulo.