UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO



Documentos relacionados
O que são Bancos de Dados?

Prof. Marcelo Machado Cunha

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Banco de Dados. Prof. Antonio

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Tarefa Orientada 16 Vistas

Linguagem de Consulta Estruturada SQL- DML

Engenharia de Software III

Prof.: Clayton Maciel Costa

Structured Query Language (SQL)

Dado: Fatos conhecidos que podem ser registrados e têm um significado implícito. Banco de Dados:

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

INTRODUÇÃO. Diferente de Bando de Dados

Processo de Controle das Reposições da loja

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Introdução ao SQL Avançado

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Conceitos de Banco de Dados

Introdução a Banco de Dados

Principais Comandos SQL Usados no MySql

Lição 1 - Criação de campos calculados em consultas

Orientação a Objetos

Persistência e Banco de Dados em Jogos Digitais

NOME SEXO CPF NASCIMENTO SALARIO

Noções de. Microsoft SQL Server. Microsoft SQL Server

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Manual SAGe Versão 1.2 (a partir da versão )

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Hoje é inegável que a sobrevivência das organizações depende de dados precisos e atualizados.

SQL. Curso Prático. Celso Henrique Poderoso de Oliveira. Novatec

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Astra. Introdução e conceitos básicos do sistema

Comandos de Manipulação

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, MODELAGEM DE DADOS. Aula 2. Prof. Rafael Dias Ribeiro. M.Sc.

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Guia Site Empresarial

MANUAL DE PROCEDIMENTOS PARA CADASTRO DE PEDIDO DE COMPRA

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

LINGUAGEM DE BANCO DE DADOS

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

SISTEMA GERENCIADOR DE BANCO DE DADOS

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, MODELAGEM DE DADOS. Aula 1. Prof. Rafael Dias Ribeiro. M.Sc.

Anexo III Funcionamento detalhado do Sistema Montador de Autoria

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Busca. Pesquisa sequencial

Como funciona? SUMÁRIO

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Disciplina de Banco de Dados Introdução

4.6. SQL - Structured Query Language

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Questão Essência do Excel

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Programa EndNote. Download para teste no site: (Atualmente o EndNote está na versão 5x)

O Gerenciamento de Documentos Analógico/Digital

Sistema de Gestão de Freqüência. Manual do Usuário

Manual do Sistema "Vida Controle de Contatos" Editorial Brazil Informatica

Treinamento sobre SQL

Operações de Caixa. Versão 2.0. Manual destinado à implantadores, técnicos do suporte e usuários finais

Disciplina: Unidade III: Prof.: Período:

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Manual do Visualizador NF e KEY BEST

Entendendo como funciona o NAT

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

Banco de Dados. Aula 1 - Prof. Bruno Moreno 16/08/2011

MANUAL TISS Versão

BANCO DE DADOS. Fixação dos conteúdos Integridade Referencial Normalização Exercícios

Banco de Dados I Introdução

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Backup. Permitir a recuperação de sistemas de arquivo inteiros de uma só vez. Backup é somente uma cópia idêntica de todos os dados do computador?

Sistemas de Banco de Dados Aspectos Gerais de Banco de Dados

Análise de Ponto de Função

Registro e Acompanhamento de Chamados

Faça um Site PHP 5.2 com MySQL 5.0 Comércio Eletrônico

Banco de Dados I. Apresentação (mini-currículo) Conceitos. Disciplina Banco de Dados. Cont... Cont... Edson Thizon

Material de Apoio. SEB - Contas a Pagar. Versão Data Responsável Contato 1 05/12/2011 Paula Fidalgo paulaf@systemsadvisers.com

Introdução Banco de Dados

Este documento tem o objetivo de esclarecer alguns procedimentos e definir parâmetros para facilitar o processo.

Disciplina: Tecnologias de Banco de Dados para SI s

15/03/2010. Análise por pontos de função. Análise por Pontos de Função. Componentes dos Pontos de Função. Componentes dos Pontos de Função

ÍNDICE 1 INTRODUÇÃO ACESSO AOS SISTEMAS DOCUMENTOS MANUTENÇÃO OCR REGISTRO DE DOCUMENTOS GERANDO DOCUMENTOS

IMPLEMENTAÇÃO DAS CAMADAS Inference Machine e Message Service Element PARA UM SERVIDOR DE SISTEMA DE GERENCIAMENTO DE Workflow HOSPITALAR

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

Considerações a serem feitas antes da implantação.

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

02 - Usando o SiteMaster - Informações importantes

Introdução e motivação SGBD XML Nativo Consultas em SGBDs XML Prática. Bancos de dados XML. Conceitos e linguagens de consulta

Aplicação Prática de Lua para Web

LINGUAGEM SQL PARA CONSULTAS EM MICROSOFT ACCESS

Integridade dos Dados

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

Transcrição:

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ANÁLISE DE MÉTODOS DE CONSULTA POR SIMILARIDADE DE TEXTOS EM BANCO DE DADOS Área de Banco de Dados por Rodrigo Andreatta da Costa Julia Marques Carvalho da Silva, MSc Orientadora Itajaí (SC), dezembro de 2008

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ANÁLISE DE MÉTODOS DE CONSULTA POR SIMILARIDADE DE TEXTOS EM BANCO DE DADOS Área de Banco de Dados por Rodrigo Andreatta da Costa Relatório apresentado à Banca Examinadora do Trabalho de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientadora: Julia Marques C. da Silva, MSc Itajaí (SC), dezembro de 2008

SUMÁRIO LISTA DE ABREVIATURAS...v LISTA DE FIGURAS...vi LISTA DE TABELAS...ix RESUMO...x ABSTRACT...xi 1 INTRODUÇÃO...1 1.1 PROBLEMATIZAÇÃO... 3 1.1.1 Formulação do Problema... 3 1.1.2 Solução Proposta... 3 1.2 OBJETIVOS... 3 1.2.1 Objetivo Geral... 3 1.2.2 Objetivos Específicos... 3 1.3 METODOLOGIA... 4 1.4 ESTRUTURA DO TRABALHO... 5 2 FUNDAMENTAÇÃO TEÓRICA...6 2.1 BANCO DE DADOS... 6 2.1.1 Linguagem SQL... 9 2.1.2 Algoritmos para Operações de Consulta... 12 2.1.3 Funções para Tratamento de Strings... 13 2.2 ALGORITMOS DE BUSCA... 15 2.2.1 Algoritmo da Força Bruta... 15 2.2.2 Algoritmo de Knuth-Morris-Pratt... 16 2.2.3 Algoritmo de Boyer-Moore... 20 2.2.4 Algoritmo de Rabin-Karp... 24 2.2.5 Algoritmo de Levenshtein... 27 2.2.6 Algoritmo de Smith Waterman... 28 2.2.7 Algoritmo de Stochastic Model... 29 2.2.8 Algoritmo de Jaro Metric... 30 2.2.9 Algoritmo de Hamming Distance... 31 2.2.10 Algoritmo de Soundex Distance Metric... 31 2.2.11 Algoritmo de Convington s Distance Function... 33 2.2.12 Considerações sobre os Algoritmos de Similaridade Analisados... 33 2.3 APLICAÇÕES COM ALGORITMOS DE SIMILARIDADE... 34 2.3.1 Similarity Retrivel Engine... 35 2.3.2 XSimilarity... 37 2.3.3 Sistema de Reconhecimento de Imagens Similares... 41 2.3.4 Considerações sobre os aplicativos similares... 43 ii

2.4 SISTEMA DE AVALIAÇÃO DA PESQUISA INSTITUCIONAL... 44 3 PROJETO...52 3.1.1 Hamming Distance... 53 3.1.2 Levenshtein... 55 3.1.3 KMP... 60 3.1.4 Jaro... 62 3.1.5 Rabin-Karp... 63 3.1.6 Algoritmo Proposto... 66 3.2 TESTES... 67 3.3 RESULTADOS OBTIDOS... 69 3.4 ANÁLISE DA HIPÓTESE... 71 3.4.1 Hipótese 1... 72 3.4.2 Hipótese 2... 72 3.4.3 Hipótese 3... 73 3.4.4 Hipótese 4... 73 3.4.5 Hipótese 5... 73 3.4.6 Hipótese 6... 74 3.4.7 Conclusões... 74 4 CONCLUSÃO...75 REFERÊNCIAS BIBLIOGRÁFICAS...77 A Cenários de testes...80 A.1 CENÁRIO 1: USUÁRIO COM POUCAS PRODUÇÕES... 80 A.1.1 Cenário 1a: Participação em Bancas... 80 A.1.2 Cenário 1b: Projeto de Pesquisa... 81 A.1.3 Cenário 1c: Artigo em Evento Nacional... 82 A.1.4 Cenário 1d: Orientação de TCC... 83 A.1.5 Cenário 1e: Projeto de Pesquisa... 84 A.1.6 Cenário 1f: Projeto de Pesquisa... 84 A.1.7 Cenário 1g: Participação em Banca... 85 A.1.8 Cenário 1h: Participação em Banca... 86 A.1.9 Cenário 1i: Participação em banca... 87 A.2 CENÁRIO 2 USUÁRIO COM MAIS DE 1000 PRODUÇÕES... 88 A.2.1 Cenário 2a: Participação em Banca... 88 A.2.2 Cenário 2b: Artigo em Evento Internacional... 89 A.2.3 Cenário 2c: Artigo em Evento Nacional... 90 A.2.4 Cenário 2d: Curso de Curta Duração... 91 A.2.5 Cenário 2e: Participação em Banca... 92 A.2.6 Cenário 2f: Artigo em Evento Internacional... 93 A.2.7 Cenário 2g: Resumo em Evento Nacionais... 94 A.2.8 Cenário 2h: Artigo em Evento Internacional... 95 A.2.9 Cenário 2i: Comissão de Avaliação de Cursos... 96 iii

A.2.10 Cenário 2j: Artigo em Evento Nacional... 97 iv

LISTA DE ABREVIATURAS BD CCIFM CGI CNPq CPF DCL DDL DLL DML DNA DQL HCFMRP KMP ODBC PACS PL/SQL PROPPEC SAPI SIREN SGBD SQL SRIS TCC UNIVALI XML Banco de Dados Centro de Ciências das Imagens e Física Médica Common Gateway Interface Conselho Nacional de Desenvolvimento Científico e Tecnológico Cadastro de Pessoa Física Data Control Language Data Definition Language Dynamic-link library Data Manipulation Language Deoxyribonucleic acid Data Query Language Hospital das Clínicas da Faculdade de Medicina de Ribeirão Preto Knuth-Morris-Pratt Open Data Base Connectivity Picture Archiving and Communication System Procedural Language/Structured Query Language Pró-reitoria de Pesquisa, Pós-graduação, Extensão e Cultura Sistema de Avaliação da Produção Institucional Similarity Retrivel Engine Sistema Gerenciador de Banco de Dados Structured Query Language Sistema de Reconhecimento de Imagens Similares Trabalho de Conclusão de Curso Universidade do Vale do Itajaí Extensible Markup Language v

LISTA DE FIGURAS Figura 1. Exemplo de banco de dados relacional...8 Figura 2. Sintaxe do comando de consulta...10 Figura 3. Exemplo de uma consulta SQL...12 Figura 4. Exemplo de uma consulta SQL com operador LIKE...12 Figura 5. Tipos de alinhamentos de strings...15 Figura 6. Exemplo de funcionamento do algoritmo de força bruta...16 Figura 7. Exemplo da fórmula para calculo da próxima posição a ser utilizada na comparação do algoritmo KMP...18 Figura 8. Valores de d(k) para o exemplo da Figura 6...19 Figura 9. Algoritmo para determinação do D(k)...19 Figura 10. Resolução do mesmo exemplo mostrado na Figura 6, mas com a utilização do algoritmo de KMP...20 Figura 11. Explicação da heurística do bom sufixo e do mau caractere...21 Figura 12. Exemplo da utilização da heurística do mau caractere baseado na Figura 11...21 Figura 13. Exemplo da utilização da heurística do bom sufixo baseado na Figura 11...22 Figura 14. Exemplo de applet comparando as palavras a costa e rodrigo a costa...23 Figura 15. Resultado da pesquisa do algoritmo Boyer-Moore...24 Figura 16. Exemplo do algoritmo de Rabin Karp....26 Figura 17. Definição da função de Levenshtein...27 Figura 18. Exemplo de applet comparando as palavras andreata e andreatta...28 Figura 19. Definição da função de Smith Waterman...29 Figura 20. Exemplo de comparação usando a função Smith Waterman...29 Figura 21. Métrica do algoritmo de Jaro...30 Figura 22. Exemplo da métrica de Jaro...31 Figura 23. Exemplo de cadeia de bits...31 Figura 24. Atribuição de valores do algoritmo de Convington s Distance...33 Figura 25. Exemplo de execução de consultas por similaridade sobre a tabela Exame, k-nn query usando a métrica textura...36 Figura 26. Exemplo da execução de consultas por similaridade sobre a tabela automóveis....37 Figura 27. Casos de uso apresentando as principais funcionalidades do sistema...38 Figura 28. Interface do Xsimilarity...39 Figura 29. Exemplo arquivo XML...40 Figura 30. Exemplo de uma consulta do XSimilarity...41 Figura 31. Visualização das imagens médicas do SRIS...42 Figura 32. Tela de resultados de consultas por similaridade do SRIS...43 Figura 33. Tela do SAPI...46 Figura 34. Referências das produções...47 Figura 35. Detalhes das produções...48 Figura 36. Diagrama entidade-relacionamento do SAPI...49 Figura 37. Código PHP do SAPI utilizado para efetuar a comparação...51 Figura 38. Sintaxe das funções de similaridade produzidas...52 Figura 39. Comparação entre as strings ABACATE e ABATE...53 Figura 40. Implementação da função Hamming Distance....54 Figura 41. Resultado da comparação entre as palavras ABACATE e ABATE utilizando a função Hamming Distance...54 vi

Figura 42. Tabela gerada na comparação entre as palavras ABACATE e ABATE utilizando a função Hamming Distance....55 Figura 43. Trecho principal do código da função Levenshtein...55 Figura 44. Resultado da comparação entre as palavras ABACATE e ABATE utilizando a função Levenshtein....56 Figura 45. Primeiro passo do exemplo do algoritmo de Levenshtein...56 Figura 46. Primeira comparação da segunda iteração do exemplo do algoritmo de Levenshtein....57 Figura 47. Segunda comparação da segunda iteração do exemplo do algoritmo de Levenshtein....58 Figura 48. Terceira comparação da segunda iteração do exemplo do algoritmo de Levenshtein...58 Figura 49. Quarta comparação da segunda iteração do exemplo do algoritmo de Levenshtein....59 Figura 50. Quinta comparação da segunda iteração do exemplo do algoritmo de Levenshtein....60 Figura 51. Resultado final da tabela de comparações do exemplo do algoritmo de Levenshtein...60 Figura 52. Implementação da função KMP....61 Figura 53. Resultado da comparação entre as strings ABACATE e ABATE utilizando o algoritmo KMP...61 Figura 54. Primeira comparação do exemplo do algoritmo KMP....61 Figura 55. Segunda comparação do exemplo do algoritmo KMP....62 Figura 56. Resultado da comparação entre ABACATE e ABATE utilizando o algoritmo Jaro....62 Figura 57. Implementação da função KMP....63 Figura 58. Implementação da função Rabin-Karp....64 Figura 59. Resultado da comparação entre as strings ABACATE e ABATE utilizando o algoritmo Rabin-Karp....64 Figura 60. Primeira comparação do exemplo do algoritmo de Rabin-Karp....65 Figura 61. Segunda comparação do exemplo do algoritmo de Rabin-Karp....65 Figura 62. Terceira comparação do exemplo do algoritmo de Rabin-Karp...66 Figura 63. Terceira comparação do exemplo do algoritmo de Rabin-Karp...67 Figura 64. Gráfico do número de docentes por faixa de quantidade de produções....68 Figura 65. Gráfico da média do grau de similaridade resultante dos dois cenários de testes....70 Figura 66. Gráfico da média do tempo de execução em segundos resultante dos dois cenários de testes...71 Figura 67. Teste Z para comparação entre médias...72 Figura 68. Produção original e alterada do cenário 1a...80 Figura 69. Produção original e alterada do cenário 1b...81 Figura 70. Produção original e alterada do cenário 1c...82 Figura 71. Produção original e alterada do cenário 1d...83 Figura 72. Produção original e alterada do cenário 1e...84 Figura 73. Produção original e alterada do cenário 1f....85 Figura 74. Produção original e alterada do cenário 1g...86 Figura 75. Produção original e alterada do cenário 1h...87 Figura 76. Produção original e alterada do cenário 1i...88 Figura 77. Produção original e alterada do cenário 2a...89 Figura 78. Produção original e alterada do cenário 2b...90 Figura 79. Produção original e alterada do cenário 2c...91 Figura 80. Produção original e alterada do cenário 2d...92 Figura 81. Produção original e alterada do cenário 2e...93 Figura 82. Produção original e alterada do cenário 2f....94 Figura 83. Produção original e alterada do cenário 2g...95 Figura 84. Produção original e alterada do cenário 2h...96 vii

Figura 85. Produção original e alterada do cenário 2i...97 Figura 86. Produção original e alterada do cenário 2j...98 viii

LISTA DE TABELAS Tabela 1. Composição de um comando de seleção...11 Tabela 2. Comparação entre funções dos bancos Oracle, Postgre e SQL Server...14 Tabela 3. Regras do Soundex Code...32 Tabela 4. Exemplo da regra do algoritmo Soundex Code com a string Dickson e Dixon....32 Tabela 5. Valores das penalidades da função de Convigton s Distance...33 Tabela 6. Tabela comparativa entre aplicativos similares...44 Tabela 7. Tabela de resultados geral dos testes quanto ao grau de similaridade...69 Tabela 8. Tabela de resultados do cenário 1a...81 Tabela 9. Tabela de resultados do cenário 1b....81 Tabela 10. Tabela de resultados do cenário 1c...82 Tabela 11. Tabela de resultados do cenário 1d....83 Tabela 12. Tabela de resultados do cenário 1e...84 Tabela 13. Tabela de resultados do cenário 1f....85 Tabela 14. Tabela de resultados do cenário 1g....86 Tabela 15. Tabela de resultados do cenário 1h....87 Tabela 16. Tabela de resultados do cenário 1i....88 Tabela 17. Tabela de resultados do cenário 2a...89 Tabela 18. Tabela de resultados do cenário 2b....90 Tabela 19. Tabela de resultados do cenário 2c...91 Tabela 20. Tabela de resultados do cenário 2d....92 Tabela 21. Tabela de resultados do cenário 2e...93 Tabela 22. Tabela de resultados do cenário 2f....94 Tabela 23. Tabela de resultados do cenário 2g....95 Tabela 24. Tabela de resultados do cenário 2h....96 Tabela 25. Tabela de resultados do cenário 2i....97 Tabela 26. Tabela de resultados do cenário 2j....98 ix

RESUMO COSTA, Rodrigo Andreatta da. Análise de Métodos de Consulta por Similaridade de Textos em Banco de Dados. Itajaí, 2008. 127 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação) Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2008. Os sistemas de bancos de dados evoluíram nos últimos anos, sendo cada vez mais comum encontrar bases com grandes volumes de dados. Nelas são encontradas informações dos mais diversos tipos, números, textos, datas e inclusive dados de tipos mais complexos, como arquivos e imagens. Porém estas informações não têm muita valia se não puderem ser recuperadas de alguma forma. A consulta vem a ser, por este motivo, uma funcionalidade muito importante para auxiliar os usuários. Contudo este procedimento permite apenas pesquisas por palavras fixas. Por outro lado, existem aplicações que necessitam realizar buscas textuais cujas consultas não podem retornar resultados iguais (idênticos) ou distintos, mas qual é o grau de semelhança. O objetivo deste trabalho é apresentar os principais algoritmos de busca por similaridade de textos, escolher alguns para serem implementados e analisar qual melhor se adequa ao cenário do Sistema de Avaliação da Produção Institucional (SAPI) e executar uma comparação entre os resultados obtidos nos testes. Palavras-chave: Busca por String. Algoritmos de Similaridade. Similaridade de Textos. x

ABSTRACT The databases systems have been improved significantly in the last years. Nowadays, it s very common to find bases with a large number of records. They are able to store different kinds of data, like numbers, characters, date and also complex data as images and files. But this stored information doesn t have any value if it cannot be recovered. The query comes to be, therefore, a very important feature to help the users. The problem is that the database management systems allow only exact searches. Otherwise, there are applications that need to do text searches can t return distinct or identical results, but the similarity s degree. The aim of this work is to show some algorithms to search for similar texts, choose some of them to implement and to analyze which is the best for the scenario of SAPI and to execute a comparison among the test s results. Keywords: String Searches, Similarity Algorithms, Text Similarity. xi

1 INTRODUÇÃO No passado era comum encontrar em empresas áreas de arquivamento de documentos, tanto de texto, quanto de imagens, vídeos e sons, que formavam uma base de dados. O armazenamento requeria muito espaço físico e a busca por informações era lenta e imprecisa. Com o aperfeiçoamento da tecnologia, foi criada uma forma computacional de guardar estas informações, forma esta que ficou conhecida como banco de dados. Os bancos de dados costumam ser acessados e configurados por um sistema gerenciador de banco de dados (SGBD). O SGBD normalmente utiliza um modelo relacional, onde as estruturas têm forma de tabelas, compostas por linhas e colunas. Em bancos de dados pode ocorrer o armazenamento de dados semelhantes, um exemplo disso ocorre em bibliotecas digitais. Em uma base de dados composta pela integração de sistemas de informações externos pode acontecer de existir informações relacionadas ao mesmo assunto, porém gravadas de maneiras diferentes. Borges et al. (2005) cita como exemplo o caso onde, o nome de uma cidade pode estar armazenado das seguintes formas: Rio Grande - RS, R. Grande, Rio Grande, Rio Graande. e assim por diante. Nestes casos, como não há como afirmar se duas representações são provenientes de um mesmo objeto, uma saída é criar um mecanismo que verifique a proximidade entre os valores. Entretanto as possibilidades de busca e cruzamento de informações são realizadas de diversas formas, possibilitando que uma consulta retorne dados não pertinentes. Neste cenário, para se conseguir realizar uma consulta eficaz e confiável, é necessário a indexação adequada dos registros armazenados na base que possua suporte à similaridade, o que nem sempre ocorre. A idéia da técnica de busca por similaridade é baseada em recuperar objetos semelhantes ou próximos ao elemento pesquisado, sendo definido como espaço métrico o conjunto dos objetos referenciados. Na atualidade existem programas na área da medicina que utilizam Content-based image retrieval em consultas à banco de dados de imagens.

Santos Filho (2001 apud Borges et al., 2005) afirma que: Esta técnica executa comparações por semelhança, permitindo uma consulta precisa o suficiente para que possa retornar resultados satisfatórios, porém não tão precisa que venha deixar de retornar resultados relevantes.. Outra possível utilização de similaridade em consultas está na validação de estruturas genéticas, onde uma seqüência de DNA (formada por agrupamento de letras que dão origem a cadeias compostas por milhares de nucleotídeos). Altschul (1990) apud Souza (2004) desenvolveu uma ferramenta capaz de definir o coeficiente de semelhança entre diferentes cadeias de seqüências. A busca em textos é um importante recurso utilizado em ferramentas para edição de texto, para recuperação de dados e manipulação de símbolos. Segundo Carvalho et al. (2005): Os problemas de busca em texto consistem em encontrar todas as ocorrências (ou a primeira ocorrência) de uma palavra no texto. Onde a palavra e o texto são strings de um mesmo alfabeto. O importante é reportar todas as ocorrências sabendo-se que a busca por uma palavra de tamanho m em um texto de tamanho n (onde n > m) tem um tempo O(n) no pior caso (para m fixo). A UNIVALI possui um sistema conhecido como Sistema de Avaliação da Produção Institucional (SAPI) que é utilizado para gerenciar as produções dos docentes, mantendo uma base de dados de todas as produções que são desenvolvidas, de forma integrada com o sistema Lattes. Uma produção é qualquer artigo, trabalho acadêmico ou orientação. Cada produção registrada no Lattes é carregada para o SAPI. Neste momento, cada produção do Lattes é comparada com aquelas que já existem no currículo do SAPI, onde aquelas que apresentam 90% de similaridade são consideradas iguais e então os dados são atualizados. As produções com menos de 90% são consideradas como novas e inseridas no SAPI. Atualmente, para realizar esta comparação todas as produções do Lattes e do SAPI são carregadas para a página PHP e então comparadas. Esta tarefa demanda um alto processamento do servidor web, onde em currículos com alto número de produções (por exemplo, 450 produções) pode levar até cinco minutos para realizar o processamento. Considerando o cenário citado acima, surgiu a idéia de desenvolver rotinas implementadas nos sistemas gerenciadores de banco de dados para resolver o problema de lentidão nas comparações e também nas ineficiências existentes no processo. 2

Atualmente, os sistemas gerenciadores de banco de dados (SGBD's) comerciais existentes não conseguem executar consultas de strings aproximadas para textos (GRAVANO, 2001 apud BORGES, CONY, FREITAS, 2005). Desta forma, o presente TCC visa pesquisar e avaliar algoritmos de pesquisa que consigam distinguir informações similares, mas que possam estar representadas de maneiras diferentes em base de dados textuais. 1.1 PROBLEMATIZAÇÃO 1.1.1 Formulação do Problema Os SGBD s foram criados para permitir o armazenamento de informações, permitindo aos usuários a recuperação dos dados através de consultas. Estas consultas possuem certa restrição, pois apenas são possíveis comparações exatas com operadores do tipo: maior que, menor que, igual, diferente, entre outros. Uma deficiência deste sistema está no fato da impossibilidade da execução de consultas buscando por informações similares. Na grande maioria dos gerenciadores de banco de dados há apenas funções para alterar a formatação e comparação de strings. 1.1.2 Solução Proposta A solução proposta é pesquisar funções baseadas em algoritmos que realizam busca por similaridade. Após análise das funções encontradas foram escolhidas algumas delas para serem implementadas e disponibilizadas no SGBD. Foram realizados testes para saber qual algoritmo realiza as buscas trazendo os dados mais próximos aos desejados e com o melhor desempenho. E por último, foi documentado os resultados de cada algoritmo codificado. 1.2 OBJETIVOS 1.2.1 Objetivo Geral Investigar, implementar e avaliar o uso de algoritmos de busca por similaridade, baseados em métricas de distância entre Strings. 1.2.2 Objetivos Específicos Pesquisar e analisar possíveis aplicações similares; Compreender o processo de pesquisa em banco de dados; 3

Pesquisar e definir os algoritmos que serão implementados; Implementação dos algoritmos: o KMP; o Rabin Karp; o Levenshtein; o Hamming Distance; o Jaro. Testes dos algoritmos; Comparar os algoritmos, resultados obtidos e documentar informações sobre as informações obtidas. 1.3 METODOLOGIA O projeto tem como modelo de metodologia as seguintes etapas principais: (i) estudo; (ii) especificação; (iii) implementação; (iv) testes; e (v) documentação. A etapa de estudo tem como função a análise do problema que gerou o motivo do trabalho, pesquisa de tecnologias necessárias para o desenvolvimento dos objetivos propostos, busca por produtos similares e análise quanto a viabilidade do projeto. A especificação é a segunda etapa do projeto proposto. É nesta fase que é feito o levantamento e definição do que será desenvolvido, é procurado por algoritmos que possuem características de pesquisa em textos, é feita a escolha os algoritmos que serão codificados e formulada a criação da documentação em geral. O próximo passo é a implementação dos algoritmos que foram escolhidos na etapa de especificação. Nesta fase também se encontra a tarefa da obtenção e instalação do SGBD. Nesta fase foram escolhidos alguns dos algoritmos encontrados para serem transformados em funções codificadas na linguagem PL/SQL. As duas últimas etapas são os testes e documentação, onde após a criação de um banco de dados real são processadas as rotinas com as funções criadas. Para os testes, foram selecionados registros da base de dados obtida. Após isso, cada registro foi copiado e modificado para ser 4

executado nas funções. Cada dupla de registros (original e modificado) teve sua similaridade calculada pelos algoritmos implementados e também por uma função do PHP chamada similar_text para haver um ponto de referência ao avaliar os resultados gerados em cada teste. 1.4 ESTRUTURA DO TRABALHO Este trabalho está dividido em quatro capítulos principais, onde no primeiro é descrita uma introdução do assunto de banco de dados, explicado qual o problema que originou a idéia deste trabalho e definida qual a solução proposta. Também são expostos os objetivos gerais e específicos do projeto. O segundo capítulo é composto pela fundamentação teórica, onde são explicados os principais assuntos que serão abordados no trabalho. Há tópicos que conceituam e definem os temas de banco de dados, linguagem SQL, principais algoritmos existentes para realização de consultas em banco de dados, funções para tratamentos de strings e os aplicativos existentes no mercado que possuem uma funcionalidade parecida ao projeto proposto. O terceiro capítulo é formado pela implementação dos algoritmos escolhidos, onde são selecionadas duas palavras para serem aplicadas às funções e para explicar como cada algoritmo se comporta para as mesmas variáveis de entrada. Este capítulo é a base de informação para documentar o capítulo quatro que é onde são comentados os resultados obtidos. 5

2 FUNDAMENTAÇÃO TEÓRICA Considerando que este trabalho é focado ao assunto de banco de dados, mais especificadamente ao procedimento de consultas por strings em textos, neste capítulo serão apresentados alguns conceitos sobre banco de dados, a linguagem utilizada para realizar consultas, algoritmos existentes e algumas funções utilizadas para tratamento de strings. 2.1 BANCO DE DADOS No cotidiano, a maioria das pessoas se depara com situações ou atividades que utilizam algum tipo de banco de dados. Situações como, ir ao banco imprimir um extrato da conta, fazer uma reserva de um hotel ou passagem aérea, consultar a disponibilidade de livros em uma biblioteca e consultar preços de produtos em supermercados são formas invisíveis de interação com banco de dados. Segundo Date (2007) banco de dados é basicamente um sistema computacional que executa a manutenção de registros. Pode ser feita uma comparação como sendo o equivalente eletrônico de um armário de arquivamento, onde são armazenados conjuntos de arquivos de dados computadorizados. Podem também ser considerados como um sistema de computador cuja função principal é armazenar informações, permitindo que estas possam ser consultadas ou alteradas quando necessário. Para Elmasri (2006) Um banco de dados é uma coleção de dados relacionados. Os dados são fatos que podem ser gravados e que possuem um significado implícito. Estes sistemas podem ser encontrados desde em pequenos computadores de mão (palm), computadores pessoais, até grandes mainframes ou clusters de computadores, sendo que quanto mais mobilidade existir menor é a quantidade de recursos fornecidos pelo sistema. Em máquinas com grande poder de processamento os sistemas costumam ser multi-usuário, onde mais de que um usuário pode acessar o banco de dados ao mesmo tempo, diferentemente do que ocorre em sistemas monousuário. Date (2007) caracteriza os dados de um banco de dados como integrados e compartilhados, pois é uma unificação de vários arquivos que podem ser acessados por mais de um usuário onde,

normalmente, cada usuário está interessado em apenas uma pequena parte das informações armazenadas. Segundo Elmasri e Navathe (2006), um banco de dados pode ser de qualquer tamanho e ter sua complexidade variável, podendo ser mantido manualmente ou automaticamente. Quando se está lendo sobre banco de dados é comum encontrar o termo Sistema Gerenciador de Banco de Dados, conhecido como SGBD. Trata-se de um conjunto de softwares (programas) responsáveis por manter o banco de dados em funcionamento. Segundo Date (2007), o SGBD é a peça mais importante de todo o sistema. De uma forma simples, ele está localizado entre o banco de dados físico (hardware), onde os dados estão realmente gravados, e o usuário que está utilizando o sistema. Para Elmasri e Navathe (2006) O SGBD é um sistema de software de propósito geral que facilita os processos de definição, construção, manipulação e compartilhamento de banco de dados entre vários usuários e aplicações. Atualmente os SGBD s utilizam o modelo de dados relacional que foi considerado como sendo o mais flexível e adequado para tratar os vários problemas que se colocam no nível de implementação da base de dados. A estrutura fundamental do modelo relacional é a relação (tabela), que é formada por várias linhas (conhecidas como registros) que por sua vez são compostas por um ou mais atributos que guardam o tipo de dados a ser armazenado. Um SGBD possui algumas funcionalidades importantes, como por exemplo: Controlar a concorrência entre usuários ou programas: isto ocorre pois a mesma informação não pode ser alterada por mais de um recurso ao mesmo tempo. Considerando como exemplo uma reserva de passagem de avião, no momento em que a atendente estiver realizando uma alteração na reserva do passageiro, o registro que possui as informações desta reserva é bloqueado pelo SGBD contra a ação de outros recursos (outros funcionários ou rotinas que são executadas no banco de dados). Apenas a pós o fim da tarefa da atendente é que o registro é liberado para outra operação. Segundo Mattoso (2005), o bloqueio pode ser lógico (através de linguagem de programação) ou físico (travando o registro ou a tabela). 7

Controlar as transações: por exemplo, em uma operação de reserva de vôo, no decorrer das alterações feitas pela atendente operações de inserção, deleção e alteração são executadas, porém serão percebidas ou visualizadas por outros recursos apenas após a confirmação (comando conhecido como commit) ou rejeição (comando conhecido como roolback) das ações. Controlar o acesso feito pelos usuários: é possível atribuir permissões para cada usuário separadamente ou para grupos informando quais tabelas cada um tem acesso e quais operações (alteração, inserção, deleção, consulta) cada um pode realizar. Controle de integridade nos dados: por exemplo, em uma operação de reserva de vôo, o SGBD deve validar o que a atendente está informando como cidade destino, sendo que, a tabela de reservas pode aceitar apenas cidades que já foram cadastradas em outra tabela no banco de dados. Por exemplo, a Figura 1 apresenta a tabela CURSO, com quatro registros, sendo que cada registro é composto pelos campos NOME, NÚMERO, CRÉDITOS e DEPARTAMENTO. Figura 1. Exemplo de banco de dados relacional Um ponto interessante no modelo ER é que não há caminhos pré-definidos para se fazer acesso aos dados. Por exemplo, é possível ligar a tabela CURSO (campo Número ) com a tabela 8

SECAO (campo Curso ). Da mesma forma pode-se ligar a tabela CURSO (campo Número ) com a tabela PRE-REQUISITO (campo Número ) para saber qual curso precisa ser feito primeiro. Contudo, para a utilização de tal funcionalidade, precisa-se tomar cuidado de alguns fatores como, por exemplo, a repetição de informação e a incapacidade de representar parte da informação e perda de informação. 2.1.1 Linguagem SQL A SQL (Structured Query Language), conhecido também como Linguagem de Consulta Estruturada, é uma linguagem padrão de pesquisa criada para se comunicar com bancos de dados. Segundo Battisti (2006), esta linguagem foi desenvolvida para ser independente de hardware e software. Para Battisti (2006): Ao usar o SQL, não é necessário saber a respeito do software de banco de dados ou do hardware envolvido em uma operação. Tudo o que você precisa conhecer são os comandos/instruções SQL padrão para solicitar informações, que obrigatoriamente é o mesmo em todos os sistemas que utilizam o SQL. Battisti (2006) comenta que as instruções SQL são conduzidas com um único comando que contém uma descrição completa da informação exigida. Explica também que o maior benefício do método SQL é não haver a necessidade de se preocupar em como os dados são recuperados, mas somente com o conteúdo do conjunto de dados. Segundo Leme (2006), os comandos SQL são divididos conforme abaixo: Data Definition Language (DDL), Linguagem de Definição de Dados: Permite ao usuário criar/apagar tabelas, índices e visões. Os principais comandos são create, drop e alter. Data Manipulation Language (DML), Linguagem de Manipulação de Dados: Permite ao usuário inserir, alterar, apagar ou selecionar registros (dados) em uma tabela. Os principais comandos são insert, update, delete e select. Data Control Language (DCL), Linguagem de Controle de Dados: Controla as permissões de acesso dos usuários do banco de dados para ver ou manipular informações. Os principais comandos são grant e revoke. 9