Exercícios propostos

Propaganda

Departamento
de
Engenharia
Informática
2008/2009
Gestão
e
Tratamento
de
Informação
1º
semestre
Laboratório
6
–
Exercícios
Deverá
utilizar
a
ferramenta
Saxon,
apresentada
durante
a
aula
de
laboratório,
para
resolver
cada
um
dos
exercícios
propostos.
Tenha
em
atenção
que
o
software
usado
nas
aulas
de
laboratório
oferece,
como
complemento
às
funções
da
biblioteca
XPath
2.0,
algumas
funções
de
extensão
relacionadas
com
a
extracção
de
informação
a
partir
de
elementos
textuais.
Estas
funções
de
extensão
foram
desenvolvidas
com
recurso
ao
LingPipe,
uma
biblioteca
de
funções
Java
para
processamento
de
texto.
Para
mais
informações
sobre
o
LingPipe
deverá
ser
consultado
o
site
http://alias‐i.com/lingpipe/.
Entre
as
funções
de
extensão
disponíveis,
encontram‐se
as
seguintes:
• Função
java:gti.textdoc(),
que
aceita
como
parâmetro
um
URI
para
um
documento
e
retorna
a
cadeia
de
caracteres
correspondente
ao
seu
conteúdo
textual.
• Função
java:gti.regexchunk(),
que
aceita
como
parâmetros
uma
cadeia
de
caracteres
e
uma
expressão
regular,
retornando
todas
as
entidades
mencionadas
na
cadeia
de
caracteres
que
correspondem
à
expressão
regular
fornecida.
• Função
java:gti.dictionarychunk(),
que
aceita
como
parâmetros
uma
cadeia
de
caracteres
e
um
dicionário
(i.e.,
uma
sequência
de
cadeias
de
caracteres
com
as
entidades
que
se
pretendem
extrair),
retornando
todas
as
entidades
mencionadas
na
cadeia
de
caracteres
que
se
encontram
listadas
no
dicionário.
• Função
java:gti.mlchunk(),
que
aceita
como
parâmetros
uma
cadeia
de
caracteres
e
um
documento
XML
com
os
exemplos
de
treino.
Esta
função
utiliza
um
algoritmo
de
aprendizagem
automática
baseado
em
Modelos
de
Markov
Escondidos
(HMMs)
para
reconhecer
as
entidades
mencionadas
na
cadeia
de
caracteres,
com
base
nos
exemplos
fornecidos.
A
Figura
1
exemplifica
a
utilização
destas
funções,
mostrando
como
se
podem
extrair
entidades
(e.g.,
endereços
de
email
ou
nomes
próprios)
que
se
encontrem
mencionadas
numa
cadeia
de
caracteres,
usando
dicionários
e
expressões
regulares.
declare namespace gti = "java:gti";
let $t := 'O Manuel tem o endereço [email protected] e a Maria tem o endereço
de email [email protected]'
let $dictionary := ('manuel','maria')
let $r := '[^ ]+@[^ ]+'
for $i in gti:regexchunk($t,$r) | gti:dictionarychunk($t,$dictionary)
return <entidade>{$i}</entidade>
Figura
1
–
Exemplo
da
utilização
de
funções
de
extensão
relacionadas
com
extracção
de
informação.
IST/DEI
Pág.
1
de
3
Gestão
e
Tratamento
de
Informação
Nesta
aula
de
laboratório
irá
também
ser
utilizada
a
ferramenta
RoadRunner,
a
qual
permite
a
geração
automática
de
wrappers
sobre
documentos
HTML
com
base
num
método
de
aprendizagem
automática
não
supervisionado.
O
algoritmo
que
está
na
base
da
ferramenta
RoadRunner
foi
introduzido
nas
aulas
teóricas.
Mais
informações
sobre
a
ferramenta
RoadRunner
podem
ser
obtidas
no
ficheiro
roadrunner-help.txt,
que
acompanha
o
software
das
aulas
de
laboratório.
Exercício
1
A
Figura
2
apresenta
um
programa
XQuery
que
permite
aceder
ao
site
da
biblioteca
do
IST
e
extrair
10
hiperligações
para
páginas
HTML
com
informação
bibliográfica
sobre
livros
e
dissertações
relacionados
com
a
palavra‐chave
“XML”.
declare
declare
declare
declare
namespace gti = "java:gti";
namespace xhtml = "http://www.w3.org/1999/xhtml";
namespace saxon="http://saxon.sf.net/";
option saxon:output "method=text";
let $s := 'http://thesaurus.reitoria.utl.pt'
let $u := '/search*por/a?searchtype=Y&searcharg=xml&SORT=D'
let $doc := gti:htmldoc(concat($s,$u))
for $i in $doc//xhtml:span[@class="briefcitTitle"]/xhtml:a
return concat('http://thesaurus.reitoria.utl.pt',$i/@href,'
')
Figura
2
–
Um
programa
XQuery
que
extrai
hiperligações
do
site
da
biblioteca
do
IST.
Utilize
a
ferramenta
RoadRunner
por
forma
a
extrair
a
informação
bibliográfica
das
páginas
HTML
acessíveis
através
das
hiperligações
produzidas
como
resultado
para
o
programa
apresentado
na
Figura
2.
Crie
ainda
um
programa
XQuery
que,
operando
sobre
os
documentos
XML
produzidos
como
resultado
pelo
RoadRunner,
apresente
os
dados
de
acordo
com
o
formato
da
Figura
3.
<obra>
<titulo>Manuel</titulo>
<autor>Uso de XQuery em aplicações na Web</autor>
</obra>
Figura
3
–
Documento
XML
com
informação
bibliográfica
sobre
os
livros
e
dissertações.
Exercício
2
Em
http://www.indexgeo.com.au/data/capital/capital.csv
encontra‐se
um
ficheiro
de
texto
com
uma
lista
das
cidades
Australianas
que
são
capitais
de
estado.
Escreva
um
programa
XQuery
que,
através
do
uso
de
funções
de
extensão
em
conjunto
com
um
dicionário
contendo
as
cidades
listadas
no
documento
referenciado
acima,
IST/DEI
Pág.
2
de
3
Gestão
e
Tratamento
de
Informação
permita
extrair
do
documento
HTML
acessível
em
http://wikitravel.org/en/Australia
todas
as
capitais
de
estado
que
se
encontram
mencionadas
no
texto.
Exercício
3
Escreva
um
programa
XQuery
que,
através
do
uso
da
função
de
extensão
java:gti.mlchunk(),
permita
extrair
do
documento
HTML
acessível
em
http://www.presidentsusa.net/
todos
os
nomes
de
pessoas
que
se
encontram
mencionados
no
texto.
Como
exemplo
de
treino,
deve
ser
usado
o
documento
muc.xml,
distribuído
com
o
sotware
usado
nas
aulas
de
laboratório,
no
qual
se
encontram
anotados
todos
os
nomes
de
pessoas
que
se
encontram
mencionados
no
texto.
Exercício
4
A
função
de
extensão
java:gti.mlchunk()
corresponde
ao
método
Java
cujo
código
se
apresenta
na
Figura
4.
Tal
como
mencionado
anteriormente,
este
método
Java
utiliza
as
funcionalidades
disponibilizadas
pela
API
do
LingPipe.
public static List<Text> mlchunk ( String data, NodeInfo doc ) throws Exception {
org.w3c.dom.Document xdocument =
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
TokenizerFactory factory = new IndoEuropeanTokenizerFactory();
CharLmRescoringChunker chunker = new CharLmRescoringChunker(factory,10,8,256,8);
Muc6ChunkParser parser = new Muc6ChunkParser();
parser.setHandler(chunker);
parser.parse(new InputSource(new StringReader(gti.serialize(doc))));
List<Text> results = new ArrayList<Text>();
Chunking chunking = chunker.chunk(data);
for (Chunk chunk : chunking.chunkSet()) {
String text = data.substring(chunk.start(),chunk.end());
results.add(xdocument.createTextNode(text));
}
return results;
}
Figura
4
–
Método
Java
correspondente
à
função
java:gti.mlchunk().
Crie
uma
nova
função
de
extensão
denominada
bayeschunk()
que,
em
lugar
de
um
método
de
aprendizagem
automática
baseado
em
Modelos
de
Markov
Escondidos,
utilize
um
modelo
Bayesiano
para
fazer
o
reconhecimento
de
entidades.
Para
resolver
este
exercício,
deverá
consultar
a
documentação
(i.e.,
os
tutoriais
e
a
documentação
Javadoc)
da
API
LingPipe,
que
se
encontra
disponível
através
do
site
http://alias‐i.com/lingpipe/.
Em
particular,
deverá
ser
analisada
em
detalhe
a
documentação
disponível
para
a
classe
com.aliasi.chunk.TokenShapeChunker.
IST/DEI
Pág.
3
de
3

Download