Número: Nome: 1 -------------------------------------------------------------------------------------------------------------- INSTITUTO SUPERIOR TÉCNICO Gestão e Tratamento de Informação Exame: tipo Dezembro 2007 -------------------------------------------------------------------------------------------------------------- A duração deste exame é de 2Horas. É um exame com consulta. O número total de pontos é 20. Marque as suas respostas NA FOLHA DE EXAME. Escreva o seu número e nome no topo de cada página. Escreva todas as fórmulas. Para o uso oficial somente 1 2 3 4 5 SUM 2.5 5 5 5 2.5 20
Número: Nome: 2 1. (2.5 pts) Miscelânia a) (0.25 pts) Diga qual é a diferença entre information extraction e information retrieval. Refira um problema em que seria mais apropriado o uso de técnicas de IE. Refira um problema em que seria mais apropriado o uso de técnicas de IR. Information Retrieval lida com o problema de, dado um conjunto de documentos (normalmente, com conteúdo textual) e a necessidade de informação de um utlilizador, como recuperar os documentos que satisfaçam essa necessidade. I.e., a unidade de informação é o documento e, normalmente, não há qualquer tentativa de estruturar a informação nele contida. Information Extraction lida com o problema de, dado um conjunto de documentos, como extraír as entidades (pessoas, locais, eventos, etc.) mencionadas nos documentos e as relações entre essas entidades. I.e., existe uma tentativa de extraír informação estruturada de documentos contendo informação não estruturada. Note-se que não existe uma fronteira definida entre as duas áreas e, muitas vezes, estas intersectam-se. Uma tarefa apropriada para IE é, por exemplo, criar uma base de dados (relacional) de nomes de actores e filmes em que participaram, dado um conjunto de documentos contendo críticas de cinema. Uma tarefa apropriada para IR é a busca de documentos na WWW, dado um conjunto de palavras chave. b) (0.25 pts) Num sistema de integração de dados, explique qual a diferença entre os modelos global-as-view e local-as-view. Indique uma vantagem e uma desvantagem de cada um dos modelos. No global-as-view, o esquema do mediador é definido com base nos esquemas das fontes. Vantagem: a resposta a uma interrogação colocada sobre o esquem do mediador é calculada através de um processo de expansão de vistas que é facilmente calculado. Desvantagem: não é facilmente escalável, já que, quando adicionamos uma fonte, é necessário conhecer o esquema de todas as outras fontes. Só deste modo, se consegue determinar com que fontes se pode combinar a nova. No local-as-view, o esquema das fontes de dados é defindo a partir do esquema do mediador. Vantagem: permite expressar informação incompleta nas fontes de dados, ou esquema do mediador é mais estável Desvantagem: computacionalmente mais caro
Número: Nome: 3 c) (1 pts) Relativamente às ferramentas WebHarvest e LingPipe, indique nas alíneas seguintes quais as verdadeiras: a) O LingPipe oferece na sua API implementações de funções para a medição de similaridade entre cadeias de caracteres. V b) O WebHarvest oferece entre as suas funcionalidades básicas um processador específico para a classificação de texto F c) O funcionamento do LingPipe baseia-se numa cadeia de processamento especificada através de um ficheiro de configuração XML F d) (1 pts) Indique se as seguintes afirmações são verdadeiras ou falsas: a. As dimensões de qualidade de dados (por exemplo, accuracy )servem para suportar análises de dados agregados. F b. Numa regra de Datalog, o lado direito (ou corpo) só pode conter predicados positivos. F c. A operação de selecção sobre o modelo de dados hierárquico (ou baseado em árvores, como o caso de XML) retornaria todas as sub-árvores que obedecem a uma determinada condição. V
Número: Nome: 4 2. (5 pts) XML: XSD, XPath, XSLT, XQuery Considere o seguinte documento XML, o qual representa informação no contexto de uma agenda electrónica: <?xml version="1.0"?> <agenda> <grupo gid="ep0"> <entrada id="e1" tipo="pessoa"> <nome>martins, José</nome> <email>jmartins@mail.pt</email> <telefone>223 604479</telefone> </entrada> </grupo> <grupo gid="ep1"> <entrada id="e2" tipo="pessoa"> <nome>pedro Marques</nome> <telefone>223 604469</telefone> </entrada> <entrada id="e3" tipo="pessoa"> <nome>josé Saraiva</nome> <email>js@hotmail.com</email> <telefone>213 604479</telefone> </entrada> </grupo> <entrada id="e4" tipo="empresa"> <nome>lavandaria Tudo Mais Branco</nome> <telefone>213 604433</telefone> </entrada> <entrada id="e5" tipo="pessoa"> <nome>miguel Alves de Castro</nome> </entrada> </agenda> a) (1 pts) Escreva um XMLSchema que permita validar o documento XML dado acima. <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:complextype name="agendatype"> <xsd:sequence> <xsd:element name="grupo" type="grupotype" maxoccurs="unbonded" /> <xsd:element name="entrada" type="entradatype" maxoccurs="unbonded" /> </xsd:sequence> </xsd:complextype> <xsd:complextype name="grupotype"> <xsd:sequence> <xsd:element name="entrada" type="entradatype" maxoccurs="unbonded" /> </xsd:sequence> <xsd:attribute name="gid" type="xsd:string" /> </xsd:complextype> <xsd:complextype name="entradatype"> <xsd:sequence> <xsd:element name="nome" type="xsd:string"/> <xsd:element name="email" type="xsd:string" minoccurs="0" /> <xsd:element name="telefone" type="xsd:string" minoccurs="0" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" /> <xsd:attribute name="tipo" type="xsd:string" /> </xsd:complextype> <xsd:element name="agenda" type="agendatype"/> </xsd:schema>
Número: Nome: 5 (b) (2 pts) Escreva uma XSLT para transformar o documento XML dado acima num documento HTML em que a informação de cada contacto apareça de uma forma tabular como a que é indicada abaixo. Deverá ainda usar as funções XPath para processamento dos elementos de texto por forma a colocar um indicativo +351 em todos os nomes de telefone e normalizar os nomes das pessoas por forma a que sigam sempre o formato "NomePróprio NomeFamilia". nome empresa/particular telefone email id grupo <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>agenda</h2> <table border="1"> <tr bgcolor="#9acd32"> <td>nome</td> <td>empresa/pessoar</td> <td>telefone</td> <td>email</td> <td>id</td> <td>grupo</td> </tr> <xsl:for-each select="//agenda/grupo/entrada"> <tr> <td><xsl:value-of select="reverse(tokenize(nome,','))"/></td> <td><xsl:value-of select="@tipo"/></td> <td><xsl:value-of select="concat('+351',telefone)"/></td> <td><xsl:value-of select="email"/></td> <td><xsl:value-of select="@id"/></td> <td><xsl:value-of select="../@gid"/></td> </tr> </xsl:for-each> <xsl:for-each select="//agenda/entrada"> <tr> <td><xsl:value-of select="reverse(tokenize(nome,','))"/></td> <td><xsl:value-of select="@tipo"/></td> <td><xsl:value-of select="concat('+351',telefone)"/></td> <td><xsl:value-of select="email"/></td> <td><xsl:value-of select="@id"/></td> <td></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Número: Nome: 6 (c) (1 pts) Escreva expressões XPath para seleccionar os seguintes elementos do ficheiro XML 1. Selecione todas as entradas de pessoas com nome contendo "José" ou "Pedro". 2. Selecione os identificadores das entradas que não são do tipo "pessoa". 1. //entrada[contains(nome,'josé') or contains(nome,'pedro')] 2. //entrada[@tipo!= 'pessoa'] (d) (1pts) Escreva uma XQuery para transformar o documento XML dado num documento HTML que obedeça às restrições colocadas na alínea 2 b) e que adicionalmente ordene os grupos e as respectivas entradas de acordo com o seu id. <html> <body> <h2>agenda</h2> <table border="1"> <tr bgcolor="#9acd32"> <td>nome</td> <td>empresa/pessoar</td> <td>telefone</td> <td>email</td> <td>id</td> <td>grupo</td> </tr> { let $doc :=. for $a in $doc//entrada order by $a/../@gid, $a/@id return <tr> <td>{reverse(tokenize($a/nome,','))}</td> <td>{$a/@tipo}</td> <td>{concat('+351',$a/telefone)}</td> <td>{$a/email}</td> <td>{$a/@id}</td> <td>{$a/../@gid}</td> </tr> } </table> </body> </html>
Número: Nome: 7 3. (5 pts) Data Extraction (a) (2 pts) Usando o algoritmo de distância de edição baseado em programação dinâmica, calcule a distância e o alinhamento entre as duas cadeias de caracteres abaixo indicadas. Indique também a matriz calculada pelo algoritmo. A X T T C E G F T X T C E G G F A X T T C E G F 0 1 2 3 4 5 6 7 8 T 1 1 2 2 3 4 5 6 7 X 2 2 1 2 3 4 5 6 7 T 3 3 2 1 2 3 4 5 6 C 4 4 3 2 2 2 3 4 5 E 5 5 4 3 3 3 2 3 4 G 6 6 5 4 4 4 3 2 3 G 7 7 6 5 5 5 4 3 3 F 8 8 7 6 6 6 5 4 3 edit distance = 3 alinhamento: A X T T C E G - F T X T - C E G G F
Número: Nome: 8 (b) (2 pts) Usando o algoritmo "simple tree matching" dado nas aulas teóricas, calcule a distância e o alinhamento das árvores que se seguem. Devem ser mostradas todas as matrizes calculadas pelo algoritmo. A A / / \ B F B F / \ / \ C D G H C G H E E D A/A B F B/B C D C/C E E/E 0 0 0 0 0 0 0 0 1 B 0 3 3 C 0 2 2 E 0 1 2 F 0 3 5 6 G 0 2 2 3 F/F H H/H 0 0 1 H 0 1 2 (c) (0,5 pts) Considerando o universo das cadeias de caracteres alfabéticos possíveis (A a Z, maiúsculas ou minusculas e sem considerar acentos e cedilhas), escreva expressões regulares que permitam mapear as seguintes restrições: Cadeira alfanumérica que contenha dois caracteres 'a' juntos. [a-za-z]*aa[a-za-z]* Cadeia alfanumérica que começe por um carácter minúsculo e tem no máximo dois caracteres maiúsculos. [a-z]+[a-z]*[a-z]?[a-z]*[a-z]?[a-z]*
Número: Nome: 9 (d) (0,5 pts) As quantias monetárias podem ser expressas de diferentes formas. Escreva expressões regulares que permitam fazer o reconhecimento das quantias monetárias apresentadas na tabela abaixo Moeda Exemplos Euro 1,00; 1,5 ; 15,50EUR Libra 12.50; 22.12; 22.99 Dólar $25.13; $5.00; $0.30; Escudo 12$50; 25$00; 150$00; 0$50 ( [0-9]+,[0-9]+) ([0-9]+,[0-9]+( (EUR))) ( [0-9]+\.[0-9]+) ($[0-9]+\.[0-9]+) ([0-9]+$[0-9]+)
Número: Nome: 10 4. (2 pts) Integração de dados Considere o ficheiro XML da pergunta 2 e o seguinte ficheiro XML: <contactos> <contacto email="maria@mail.pt"> <nomepessoa> <nomeproprio>maria</nomeproprio> <nomefamilia>pestana</nomefamilia> </nomepessoa> <telefone>212269988</telefone> </contacto> <contacto email="joana@sapo.pt"> <nomepessoa> <nomeproprio>joana</nomeproprio> <nomefamilia>martins</nomefamilia> </nomepessoa> </contacto> <contacto> <nomepessoa> <nomeproprio>miguel</nomeproprio> <nomefamilia>amaral</nomefamilia> </nomepessoa> </contacto> </contactos> a) Escreva uma XSD que capture uma visão integrada das duas fontes de dados. O esquema produzido deve conter os conceitos significativos dos dois esquemas. Uma vez que o esquema associado ao ficheiro XML original correspondente à informação de contactos numa agenda é mais genérico e captura todos os elementos significativos dos dois ficheiros, podemos usar a XSD dada como resposta na pergunta 2 a)
Número: Nome: 11 b) Escreva em XQuery dois mapeamentos entre esquemas (views), para o ficheiro XML fornecido para esta alínea e outro para o ficheiro XML da pergunta 2, que produzam XML em conformidade com o schema dado como resposta. Defina ainda uma view adicional, de nome mediated-schema, que faça a união dos dois mapeamentos sobre um elemento de raiz comum e que produza XML em conformidade com o esquema da alínea anterior. Para o ficheiro da pergunta 2 a view seria simplesmente uma função XPath que retornasse exactamente o conteúdo do documento. declare function gti:view1() { let $agenda := doc("agenda.xml") return $agenda; } Para o ficheiro desta alínea poderia ser usada a seguinte função XPath para produzir a view: declare function gti:view2() { <agenda xsi:nonamespaceschemalocation="schema.xsd"> { for $agenda in doc("contactos.xml")//contacto return <entrada tipo= pessoa > <nome> {concat($agenda/nome/pessoa(nomeproprio,,$agenda/nome/pessoa(nomefamilia} </nome> <email>{data($agenda/@email)}</author> <telefone>{data($agenda/@telefone)}</isbn> </entrada> } </agenda>} A view mediated-schema poderia ser obtida com ea seguinte função XPath: declare function gti:integrated() { let $aux = ( gti:view1()//agenda union gti:view2()//agenda ) return <agenda xsi:nonamespaceschemalocation="schema.xsd">{$aux}</agenda> }
Número: Nome: 12 b) Escreva, em Xquery, a seguinte interrogação sobre o esquema do mediador da alínea anterior: Qual o email da Joana Martins? //entrada[nome= Joana Martins ]/email
Número: Nome: 13 5. (5 pts) Limpeza e transformação de dados (a) (1.5 pts) Considere as duas cadeias de caracteres da pergunta 3.a) e aplique: 1. a função de distância de Jaro para calcular a distância entre elas. 2. a função de distância de Hamming. Apresente os cálculos. 1. Jaro s1 = s2 = 8 s1 /2 = 4 caracteres comuns: X, T, T, C, E, G, F => 7 caracteres transpostos: T, C, E => 3 A X T T C E G F T X T C E G G F semelhança (s1, s2) = (7/8+ 7/8+ 0,5*3/7)/3 = (0,875*2 + 0,21)/3 = 0,65 2.Hamming distância (s1, s2) = 4 (b) (2pts) Suponha um ficheiro com a seguinte lista de nomes e URLs de empresas: PIONEER http://www.pioneer.com 3Com Corporation http://www.3com.com Sony Corporation www.sony.co.uk Sony Corp www.sony.com THREE COM CORP http://www.3com.com PIONEER ELECTRONIC CORP www.pioneer.co.jp Sony Corp www.sony.com PIONEER STANDARD ELECTRONICS INC http://www.pios.com PIONEER http://www.pioneer.com PIONEER ELECTRONIC CORP www.pioneer.co.jp O objectivo é identificar os registos que dizem respeito à mesma empresa. Recorrendo ao algoritmo sorted neighbour e tendo em conta as actividades que compõem um processo de identificação de duplicados aproximados, indique quais os passos a seguir. Para cada passo, indique também quais os dados resultantes. Os passos seguidos devem ter como objectivo maximizar a eficiência e a qualidade dos dados obtidos.
Número: Nome: 14 Passo 1 pré-processamento: - converter os nomes e urls todos para minúsculas ou maiúsculas - retirar ou acrescentar a todos os URL o http:// Passo 2 escolher uma chave de ordenação - por exemplo, 3 primeiras letras do nome e 3 letras a seguir à quarta da url Passo 3 ordenar o ficheiro pela chave escolhida Passo 4- escolher um tamanho para a janela (por exemplo, 4) e só comparar os registos que pertencem a esta janela, usando um cjto de regras do tipo: - se os nomes são semelhantes com uma distância igual ou inferior a 3, usando o TF-IDF e as urls são semelhantes com uma distância inferior ou igual a 2 então os registos são semelhantes. - fazer deslizar a janela até ter coberto todos os registos (c) (1 pts) Suponha a relação Empresas (id, nome, url) que guarda os registos da alínea anterior e adiciona um identificador para cada registo. Escreva em SQL uma interrogação que retorne os pares de id (ex: (id1, id2) ) que são considerados suficientemente próximos pela aplicação de uma das funções de distância da alínea a) aplicada ao nome da empresa. Considere que dois nomes de empresa são considerados semelhantes se a sua distância de edição fôr inferior ou igual a 2. (Nota: Relembre como escreve um similarity join em SQL) Select t1.id id1, t2.id id2 From Empresas t1, Empresas t2, Where jaro(t1,nome, t2.nome) <= 2