3o Projecto GTI

Propaganda

Departamento
de
Engenharia
Informática
2008/2009
Gestão
e
Tratamento
de
Informação
1º
semestre
Mini‐Projecto
3
–
Entrega
a
28/11/2008
na
aula
teórica
Deverá
utilizar
a
ferramenta
Saxon,
apresentada
nas
aulas
de
laboratório,
para
resolver
cada
um
dos
exercícios
práticos
que
são
propostos.
Tenha
em
conta
que
nas
aulas
de
laboratório
foram
apresentadas
várias
funções
de
extensão
à
biblioteca
da
XPath
2.0,
relacionadas
com
extracção
de
informação.
Exercício
1
Considere
as
seguintes
cadeias
de
caracteres
(strings):
AAABCCDDCCAAB,
AACCBBCCACBB
e
BAACCBAABCC
1. Usando
o
algoritmo
de
programação
dinâmica
apresentado
nas
aulas,
calcule
a
distância
de
edição
entre
cada
uma
das
strings.
Deverá
apresentar
todos
os
passos
envolvidos
no
cálculo.
2. Com
base
no
resultado
da
alínea
anterior,
apresente
todos
os
alinhamentos
possíveis
entre
cada
par
de
strings.
Exercício
2
Apresente
um
programa
XQuery
que
faça
o
reconhecimento
de
todos
os
nomes
de
filmes
que
se
encontram
mencionados
na
página
Web
com
URL
http://www1.uni‐
hamburg.de/clpic/tematicos/cinema/panorama.html.
O
reconhecimento
deverá
ser
feito
com
base
num
dicionário.
Para
construir
o
dicionário,
deverá
extrair
todos
os
filmes
que
se
encontram
listados
da
página
Web
com
URL
http://pt.wikipedia.org/wiki/Anexo:Lista_de_filmes_portugueses.
Exercício
3
Considere
as
duas
árvores
seguintes:
A
A
B
C
G
B
C
H
G
D
E
F
D
E
F
IST/DEI
Pág.
1
de
3
Gestão
e
Tratamento
de
Informação
1. Usando
o
algoritmo
Simple
Tree
Matching,
calcule
a
similaridade
entre
ambas.
Deverá
apresentar
todos
os
passos
envolvidos
no
cálculo.
2. Indique
um
possível
alinhamento
dos
nós.
Exercício
4
Considere
o
seguinte
Hidden
Markov
Model,
M=(A,B,p),
desenhado
para
identificar
ocorrências
de
nomes
de
locais:
A
=
Prefixo
Local
Sufixo
Outras
Prefixo
0,1
0,75
0
0,15
Local
0,05
0,35
0,30
0,30
Sufixo
0
0,02
0,44
0,54
Outras
0,25
0,10
0,22
0,43
B
=
Prefixo
Local
Sufixo
Outras
A
0,10
0
0,10
0,10
Azeitão
0
0,40
0,02
0,01
De
0,20
0
0,10
0,02
Em
0,40
0,01
0,10
0,04
Maria
0
0,20
0,01
0,03
Nasceu
0,10
0,02
0,10
0,20
Perto
0,10
0
0,10
0,07
Setúbal
0
0,35
0,01
0,03
<outras>
0,01
0,02
0,16
0,45
<pontuação>
0,09
0
0,30
0,05
p
=
Prefixo
Local
Sufixo
Outras
0,35
0,30
0,05
0,30
Neste
modelo,
A
é
a
matriz
de
transição
entre
estados,
B
é
a
probabilidade
de
gerar
cada
símbolo
em
cada
estado
e
p
é
a
probabilidade
inicial
de
cada
estado.
1. Desenhe
uma
representação
gráfica
da
máquina
de
estados
correspondente
ao
modelo
M.
2. Calcule
a
sequência
de
estados
mais
provável
de
ter
gerado
a
frase:
“A
Maria
nasceu
em
Azeitão,
perto
de
Setúbal.”.
Apresente
os
cálculos
efectuados
em
cada
passo.
IST/DEI
Pág.
2
de
3
Gestão
e
Tratamento
de
Informação
3. Sugira
uma
modificação
ao
modelo
que
pudesse
melhorar
o
seu
desempenho.
Exercício
5
5.1
‐
A
função
de
extensão
java:gti.dictionarychunk(),
descrita
nas
aulas
de
laboratório
e
construída
com
base
nas
funcionalidades
disponibilizadas
pela
API
do
LingPipe,
corresponde
ao
método
Java
cujo
código
se
apresenta
na
Figura
1.
public static java.util.List< org.w3c.dom.Text> dictionarychunk ( String data,
java.util.List<String> dict ) throws Exception {
javax.xml.parsers.DocumentBuilderFactory fa =
javax.xml.parsers.DocumentBuilderFactory.newInstance();
org.w3c.dom.Document xdocument = fa.newDocumentBuilder().newDocument();
java.util.List<Text> results = new java.util.ArrayList<Text>();
com.aliasi.dict.MapDictionary dictionary = new com.aliasi.dict.MapDictionary();
for (int i=0; i<dict.size(); i++) {
dictionary.addEntry(new DictionaryEntry(dict.get(i),"chunk",1.0));
}
com.aliasi.chunk.ExactDictionaryChunker chunker = new
com.aliasi.chunk.ExactDictionaryChunker(dictionary,
com.aliasi.tokenizer.IndoEuropeanTokenizerFactory.FACTORY, true,true);
com.aliasi.chunk.Chunking chunking = chunker.chunk(data);
for (com.aliasi.chunk.Chunk chunk : chunking.chunkSet()) {
int start = chunk.start();
int end = chunk.end();
String text = data.substring(start,end);
results.add(xdocument.createTextNode(text));
}
return results;
}
Figura
1
–
Método
Java
correspondente
à
função
java:gti.dictionarychunk().
Crie
uma
nova
função
de
extensão,
denominada
approxdictionarychunk(),
que
em
lugar
de
fazer
o
emparelhamento
directo
com
todas
as
entidades
mencionadas
no
dicionário,
tal
como
a
função
dictionarychunk(),
permita
reconhecer
todas
as
entidades
mencionadas
que
tenham
uma
distância
de
edição
inferior
a
“2”
em
relação
às
entidades
mencionadas
no
dicionário.
O
código
Java
da
função
deverá
ser
apresentado
como
resolução
deste
exercício.
Sugestão:
Deve
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.ApproxDictionaryChunker.
5.2
–
Aplique
a
função
criada
na
alínea
anterior
ao
problema
apresentado
no
Exercício
2.
Deverá
apresentar
uma
XQuery
que
permita
reconhecer
os
nomes
de
filmes
que
se
encontram
mencionados
na
página
Web
com
URL
http://www1.uni‐
hamburg.de/clpic/tematicos/cinema/panorama.html,
usando
o
dicionário
criado
no
exercício
2
e
a
função
criada
na
alínea
anterior.
IST/DEI
Pág.
3
de
3

Download