Você está na página 1de 102

FUNDAÇÃO EDSON QUEIROZ

UNIVERSIDADE DE FORTALEZA
CENTRO DE CIÊNCIAS TECNOLÓGICAS
MESTRADO EM INFORMÁTICA APLICADA

Wilson Wagner Barroso Marques

Uma abordagem de qualidade de dados em grandes bancos de


dados heterogêneos

Fortaleza
2016
FUNDAÇÃO EDSON QUEIROZ
UNIVERSIDADE DE FORTALEZA
CENTRO DE CIÊNCIAS TECNOLÓGICAS
MESTRADO EM INFORMÁTICA APLICADA

Wilson Wagner Barroso Marques

Uma abordagem de qualidade de dados em grandes bancos de


dados heterogêneos

Dissertação apresentada ao Curso de Mestrado


em Informática Aplicada da Universidade de
Fortaleza (UNIFOR), como requisito parcial
para obtenção do Título de Mestre em
Informática Aplicada.

Orientador: Prof. Adriano Bessa Albuquerque, D.Sc.


Co-Orientador: Prof. Ângelo Roncalli Alencar Brayner, Dr.-Ing.

Fortaleza
2016
iii

Ficha catalográfica da obra elaborada pelo autor através do programa de


geração automática da Biblioteca Central da Universidade de Fortaleza

Barroso Marques, Wilson Wagner.


Uma abordagem de qualidade de dados em grandes bancos de
dados heterogêneos / Wilson Wagner Barroso Marques. - 2016
86 f.

Dissertação (Mestrado Acadêmico) - Universidade de


Fortaleza. Programa de Informatica Aplicada, Fortaleza, 2016.
Orientação: Adriano Bessa Albuquerque.
Coorientação: Angelo Alencar Brayner.

1. Qualidade de dados em aplicações empresariais. 2.


Manutenção de dados. 3. Bases de dados heterogêneas. I.
Albuquerque, Adriano Bessa. II. Brayner, Angelo Alencar. III.
Título.
iv
v

À minha família, o maior


presente que Deus me deu.
vi

AGRADECIMENTOS

Agradeço a Deus pelo seu amor e por ter me dado força em todos os momentos,
permitindo que eu concluísse esta etapa importante da minha vida.
Agradeço aos mentores espirituais por manterem-se presentes mesmo nos momentos em
que duvidei de minha fé.
Aos meus pais, Antônia e Wilson, pelo amor incondicional, pelos ensinamentos de vida
e pelos valores que sempre transmitiram. Por terem proporcionado até mesmo o que eles não
tiveram. Por ser exemplo de luta e vida.
À minha esposa Alexsandra, pelo amor e carinho que sempre teve por mim e pelas nossas
filhas. Por ser uma pessoa especial e amada por todos. Por ter, ainda, cuidado de forma
excepcional de tudo para que eu pudesse concluir este trabalho.
Às minhas filhas, Marília e Vitória, pelos sorrisos e alegrias que alentam minha alma e
me revigoram nos momentos difíceis. Pela alegria e simplicidade de serem crianças e de
estarem presentes em minha vida.
Aos meus avós (in memoriam), pelo exemplo de amor, de família e, principalmente, de
fé.
À minha sogra Ivonete, pelo amor e carinho incondicional pelas netas e filhos, por me
tratar como filho.
Ao meu sogro Tavares, pelo incentivo e apoio em todos os momentos em que esteve
presente na minha vida e, principalmente, por carinho e respeito à minha família.
Aos meus orientadores Adriano Bessa e Ângelo Brayner, pela amizade, disponibilidade,
atenção, incentivo e pelos ensinamentos acadêmicos que muito contribuíram para o
desenvolvimento deste trabalho.
À professora Vládia Célia Monteiro Pinheiro, D.Sc., por todo ensinamento acadêmico
transmitido e por aceitarem contribuir com este trabalho, participando da banca.
Ao professor José Maria da Silva Monteito Filho, D.Sc., por aceitarem contribuir com
este trabalho, participando da banca.
vii

Ao professor Plácido, Coordenador do Mestrado, pelas palavras de incentivo e confiança,


para que eu tomasse a decisão de iniciar e concluir este trabalho.
Aos meus colegas de mestrado, pela amizade, brincadeiras e por compartilharem comigo
dos mesmos desafios.
Aos demais professores do MIA, pelos conhecimentos compartilhados durante as
disciplinas.
Aos funcionários do MIA, pelo incentivo, pela paciência, carinho e disponibilidade.
À CAGECE e seus profissionais que contribuíram para a realização deste trabalho por
meio de estudo de caso.
Ao professor Otávio, pelo apoio para que eu conduzisse esse trabalho no ambiente da
CAGECE.
A todos os meus amigos e familiares, pela presença constante na minha vida e por
contribuírem para minha felicidade e da minha família.
viii

Deus nos concede, a cada dia, uma página de vida nova no


livro do tempo. Aquilo que colocarmos nela, corre por nossa conta.

(Chico Xavier)
ix

Resumo da dissertação apresentada ao Corpo Docente do Curso de Mestrado em


Informática Aplicada da Universidade de Fortaleza, como parte dos requisitos necessários para
a obtenção do grau de Mestre em Informática Aplicada.

Uma abordagem de qualidade de dados em grandes bancos de dados


heterogêneos

Autor: Wilson Wagner Barroso Marques

Orientador: Prof. Adriano Bessa Albuquerque, D.Sc.

Os dados sujos são caracterizados por apresentar inconsistências, imprecisão ou erros.


As consequências de dados sujos podem ser graves. Por exemplo, os dados imprecisos custam
à economia dos EUA $ 600 bilhões por ano. Assim, a melhoria da qualidade dos dados se torna
um objetivo crítico em grandes empresas. Nesse sentido, este trabalho apresenta uma nova
abordagem para avaliar a qualidade dos dados em bases de dados heterogêneas. Além disso, é
descrita uma estrutura para limpar dados armazenados nas bases de dados avaliadas e as
experiências em bases de dados reais mostram a eficácia e eficiência da abordagem proposta.

Palavras-chave: Qualidade de dados em aplicações empresariais; Manutenção de


dados; Bases de dados heterogêneas.
x

Abstract of the dissertation presented to the board of faculties of the Master Program in
Applied Informatics at the University of Fortaleza, as partial fulfillment of the requirements for
the Master’s degree in Applied Informatics.

A Data Quality Approach in Large-scale Heterogeneous Databases

Author: Wilson Wagner Barroso Marques

Advisor: Prof. Adriano Bessa Albuquerque, D.Sc.

Dirty data is characterized by presenting inconsistencies, inaccuracy or errors. The


consequences of dirty data may be severe. For instance, inaccurate data costs the U.S. economy
$600 billion a year. Thus, data quality improvement becomes a critical goal in large enterprises.
In this sense, this work presents a novel approach for evaluating data quality in heterogeneous
databases. Furthermore, a framework for cleaning data stored in the evaluated databases is
described and experiments on real databases show the effectiveness and efficiency of the
proposed approach.

Keywords: Data Quality in Enterprise applications; Data Maintenance; Heterogeneous


databases.
xi

SUMÁRIO

LISTA DE FIGURAS ............................................................................................................. xiv  


LISTA DE TABELAS ..............................................................................................................xv  
1   INTRODUÇÃO ..................................................................................................................1  

1.1   MOTIVAÇÃO ....................................................................................................1  

1.2   OBJETIVOS .......................................................................................................2  

1.3   METODOLOGIA ...............................................................................................3  

1.4   ESTRUTURA DO TRABALHO .......................................................................3  

2   REFERENCIAL TEÓRICO ...............................................................................................4  

2.1   QUALIDADE .....................................................................................................4  

2.2   QUALIDADE DE DADOS ................................................................................4  

2.3   TIPO DE AVALIAÇÃO DE QUALIDADE DE DADOS EM BANCO DE


DADOS 5  

2.4   QUALIDADE DE DADOS Em BANCO de dados ...........................................6  

2.5   COMO OBTER QUALIDADE ..........................................................................8  

2.5.1   COMPARAÇÃO DE STRING ..................................................................8  

2.5.2   ALGORITMO FONÉTICO ......................................................................12  

2.6   TRABALHOS RELACIONADOS ..................................................................16  

2.7   CONCLUSÃO DO CAPÍTULO ......................................................................18  


xii

3   PROCESSO DE QUALIDADE DE DADOS EM BASE DE DADOS HETEROGÊNEA


19  

3.1   O PROCESSO ..................................................................................................19  

3.1.1   Selecionar banco de dados ........................................................................20  

3.1.2   Carregar domínio ......................................................................................24  

3.1.3   Carregar dicionário ...................................................................................29  

3.1.4   Criar base classificada...............................................................................32  

3.2   CONCLUSÃO DO CAPÍTULO ......................................................................35  

4   ESTUDO DE CASO EM UMA EMPRESA SANEAMENTO BÁSICO ........................36  

4.1   PROJETO DE ESTUDO DE CASO ................................................................37  

4.1.1   HIPÓTESE................................................................................................38  

4.1.2   DADOS RELEVANTES ..........................................................................38  

4.2   EXECUÇÃO DO ESTUDO DE CASO ...........................................................38  

4.2.1   Selecionar banco de dados ........................................................................38  

4.2.2   Carregar domínio ......................................................................................40  

4.2.3   Carregar dicionário ...................................................................................43  

4.2.4   Criar base classificada...............................................................................44  

4.3   ANÁLISE DAS HIPÓTESES ..........................................................................46  

4.3.1   Análise da hipótese H1 .............................................................................46  

4.3.2   Análise da hipótese H2 .............................................................................47  

4.4   CONSIDERAÇÕES FINAIS ...........................................................................47  

4.5   CONCLUSÃO DO CAPÍTULO ......................................................................48  

5   CONCLUSÃO E TRABALHOS FUTUROS ..................................................................50  


xiii

5.1   PRINCIPAIS CONTRIBUIÇÕES ....................................................................50  

5.2   LIMITAÇÕES ..................................................................................................51  

5.3   TRABALHOS FUTUROS ...............................................................................51  

REFERÊNCIAS BIBLIOGRÁFICAS .....................................................................................52  


APÊNDICE A – ALGORITMOS.............................................................................................56  
APÊNDICE B – RESULTADOS .............................................................................................69  
xiv

LISTA DE FIGURAS

Figura 1 - Processo para identificação de dados de má qualidade ..................................20  

Figura 2 – Selecionar bases de dados ..............................................................................21  

Figura 3 – Carregar domínio ...........................................................................................25  

Figura 4 – Modelo de dados Carregar domínio ...............................................................25  

Figura 5 – Carregar dicionário ........................................................................................30  

Figura 6 – Modelo de dados dicionário ...........................................................................30  

Figura 7 – Criar Base classificada ...................................................................................32  

Figura 8 – Modelo de dados base classificada ................................................................32  

Figura 9 – Ambiente CAGECE .......................................................................................36  


xv

LISTA DE TABELAS

Tabela 1 – Categoria por Dimensões de qualidade ...........................................................7  

Tabela 2 – Decomposição de termos .................................................................................9  

Tabela 3 – Comparação de string ....................................................................................10  

Tabela 4 – Resultados da Comparação de string .............................................................11  

Tabela 5 – Variáveis de qualidade...................................................................................11  

Tabela 6 – Resultado Soundex ........................................................................................13  

Tabela 7 – Resultado BuscaBR .......................................................................................15  

Tabela 8 – Comparativo Soundex x BuscaBR ................................................................15  

Tabela 9 – Comparativo Soundex x BuscaBR (Ajustado) ..............................................16  

Tabela 10 – Criar conexão de banco de dados ................................................................21  

Tabela 11 – Selecionar tabela ..........................................................................................22  

Tabela 12 – Definição estrutura de dados TABELA.......................................................22  

Tabela 13 – Montar Base Metadados ..............................................................................23  

Tabela 14 – Carregar Tabelas Selecionadas ....................................................................24  

Tabela 15 – Definição estrutura de dados DOMÍNIO.....................................................26  

Tabela 16 – Relacionamento TABELA x DOMÍNIO .....................................................26  

Tabela 17 – Montar Domínio ..........................................................................................26  

Tabela 18 – Definição estrutura de dados NOME...........................................................27  

Tabela 19 – Relacionamento TABELA x DOMÍNIO .....................................................27  

Tabela 20 – Montar base nome .......................................................................................27  


xvi

Tabela 21 – Definição elementos para limpeza ...............................................................28  

Tabela 22 – Selecionar dicionário ...................................................................................30  

Tabela 23 – Definição estrutura de dados DICIONARIO...............................................31  

Tabela 24 – Montar dicionário ........................................................................................31  

Tabela 25 – Localizar termos para comparação ..............................................................33  

Tabela 26 – Função de similaridade ................................................................................33  

Tabela 27 – Parâmetro de avalição para Classificação ...................................................34  

Tabela 28 – Fase de Ajuste..............................................................................................34  

Tabela 29 – Quantidade de tuplas carregadas por tabela ................................................39  

Tabela 30 – Definição elementos para limpeza ...............................................................41  

Tabela 31 – Resultados falso positivo .............................................................................45  

Tabela 32 – Variáveis de qualidade.................................................................................45  

Tabela 33 – Resultados obtidos .......................................................................................46  

Tabela 34 – Resultados Sistema PRAX ..........................................................................69  

Tabela 35 – Resultados Sistema SCO .............................................................................71  

Tabela 36 – Resultados Sistema SEI ...............................................................................73  

Tabela 37 – Resultados Sistema SIC ...............................................................................75  

Tabela 38 – Resultados Sistema SISCOPE .....................................................................77  

Tabela 39 – Resultados Sistema SGR .............................................................................78  

Tabela 40 – Resultados Sistema SIG...............................................................................82  


1   INTRODUÇÃO

Este capítulo apresenta a introdução da pesquisa com a descrição da problemática que


motivou e justificou o desenvolvimento deste trabalho. Os objetivos e a metodologia aplicada
são apresentados em seguida. Ao final, é apresentada a forma de organização desta dissertação.

1.1   MOTIVAÇÃO

Ao longo dos últimos 50 anos, o mundo mudou da sociedade industrial para a sociedade
da informação. O desafio das grandes empresas é aumentar a capacidade de gerar e analisar
informações e não apenas melhorar a manufatura e a capacidade de distribuição de produtos.

Nesta nova era da informação, os dados são matérias-primas necessárias para o êxito
empresarial ou mesmo para sobrevivência numa economia globalizada. Por essa razão, dados
de má qualidade podem ter um impacto negativo no desempenho corporativo, contaminando os
sistemas de informação (JIN ET AL, 2003).

A existência de dados de má qualidade afeta negativamente a economia global no


mundo. Ekerson (2002) relata que o custo devido a problemas de qualidade de dados é de U$
600 milhões por ano. No mesmo trabalho, os autores mostram uma lacuna entre a realidade e a
percepção da existência de dados sujos nas empresas. Em outras palavras, na maioria das
organizações a existência de dados imprecisos é subestimada.

Entendemos que a qualidade dos dados se degenera com o tempo quando analisamos
sobre a dimensão de temporalidade. Por exemplo, os dados do consumidor podem tornar-se
obsoletos porque ele ou ela faleceu, casou-se ou mudou-se, apenas para mencionar algumas
situações. Também temos o problema de entrada de dados incorreta que afeta a dimensão de
credibilidade, isso sem mencionar os problemas quanto a manutenção de sistema que pode

1
mudar regras de validação sem reclassificação de dados já existentes na base de dados que
podem não atender a nova regra e evolução do sistema que podem produzir dados inconsistentes
ou imprecisos quando essa evolução não trabalha todas as regras anteriores e permite por
exemplo a lançamentos de serviços para um cliente não cadastrado.

Portanto, a importância da qualidade dos dados é amplamente aceita por várias


instituições e organizações internacionais. Houve muitas conferências internacionais que
apresentaram a qualidade dos dados como seu tema principal: a Conferência Internacional sobre
Qualidade da Informação (ICIQ, 2015), que é organizada tradicionalmente em Massachusetts
Institute of Technology - MIT, desde 1996; O seminário internacional sobre a qualidade da
informação nos sistemas de informação (IQIS), realizado em conjunto com a conferência
SIGMOD desde 2004; e o workshop internacional sobre Qualidade de Sistemas de Informação
(QoIS), realizado em conjunto com a Conferência de Entidade Relacionada (ER) desde 2005
(QoIS, 2006), e assim por diante.

A qualidade dos dados pode ser medida por meio de diferentes métricas e não apenas
precisão. Temporalidade, integridade, relevância e representação consistente são exemplos de
dimensões que podem ser utilizadas para avaliar a qualidade dos dados.

Também é importante observar que a atividade de entrada de dados ainda é realizada na


maioria dos casos por seres humanos. Evidentemente, este processo introduz altas taxas de
imprecisão de dados, embora existam técnicas para minimizar a probabilidade de introdução de
erros durante o processo de entrada de dados.

Para superar esse problema, uma nova abordagem para identificar e corrigir dados de
má qualidade em bancos de dados heterogêneos é apresentada neste trabalho.

1.2   OBJETIVOS

Os principais objetivos deste trabalho são:

•   Apresentar uma abordagem para melhorar a qualidade de dados, usando dicionário


de dados como meio de correção.

•   Gerar resultados sobre a qualidade de dados em um caso real de uma empresa.

2
1.3   METODOLOGIA

Para atingir os objetivos propostos, o desenvolvimento deste trabalho foi dividido em 3


(três) etapas:

(1)  A primeira etapa consistiu em realizar uma pesquisa bibliográfica sobre qualidade
de dados.

(2)  A segunda etapa consistiu em definir uma abordagem para melhorar a qualidade de
dados com identificações e correção nos casos possíveis.

(3)  A terceira etapa envolveu a realização de um estudo de caso, utilizando a abordagem


proposta.

1.4   ESTRUTURA DO TRABALHO

Este trabalho está organizado em 5 (cinco) capítulos, além desta introdução, descritos
resumidamente a seguir.

No Capítulo 2, REFERENCIAL TEÓRICO, são apresentados conceitos básicos


relacionados à área de qualidade de dados.

No Capítulo 3, Erro! Fonte de referência não encontrada., são apresentados o processo


e a abordagem proposta, que toma como base o referencial teórico apresentado anteriormente.
O referido capítulo tem como objetivo a estratégia proposta para a identificação de dados sujos
e sua limpeza.

No Capítulo 4, ESTUDO DE CASO EM UMA EMPRESA SANEAMENTO BÁSICO,


é apresentado o estudo de caso da abordagem na Companhia de Águas e Esgotos do Estado do
Ceará - CAGECE, com o objetivo de avaliar a utilização da proposta em bases de dados
heterogêneas reais.

No Capítulo 5, CONCLUSÃO E TRABALHOS FUTUROS, são apresentadas as


principais conclusões e as contribuições deste trabalho, bem como suas limitações e
perspectivas futuras.

3
2   REFERENCIAL TEÓRICO

Este capítulo apresenta o conceito para a construção do processo de classificação e


tratamento de dados textuais, utilizaram-se técnicas e métodos de comparação de atributos
textuais como se pode ver a seguir.

2.1   QUALIDADE

De acordo com o dicionário Aurélio, qualidade é uma "propriedade, atributo ou condição


das coisas ou das pessoas, capaz de distingui-las das outras e de lhes determinar a natureza.
Numa escala de valores, qualidade permite avaliar e, consequentemente, aprovar, aceitar ou
recusar qualquer coisa." (FERREIRA, 1999).

A norma ISO 9000:2015 (2015) define a qualidade como a totalidade de características


de uma entidade que lhe confere a capacidade de satisfazer às necessidades explícitas e
implícitas.

2.2   QUALIDADE DE DADOS

Qualidade de dados é um conceito complexo, porque possui significados diversos para


diferentes áreas de conhecimento. Portanto, gerar uma medida de qualidade aceitável para todos
não é uma tarefa fácil. Para isso é preciso definir as características da qualidade que interessam
e, então, decidir como a avaliação da qualidade será realizada (PINHO, 2001).

Segundo Scannapieco e Batini (2005), a qualidade de dados tem natureza


multidimensional. Um conjunto de dimensões de qualidade de dados é definido, incluindo
exatidão, completude, dimensões relacionadas ao tempo e consistência. De fato, embora o

4
conjunto de dimensões descrito seja compartilhado pela maioria das propostas, ainda não há
um padrão comum definindo quais são as dimensões do componente da qualidade dos dados e
qual é exatamente o seu significado.

Tais dimensões podem ser definidas: 1-Exatidão é a qualidade que definir a informação
como exata, 2-Completude é a qualidade que definir a informação como completa, 3-
Dimensões relacionadas ao tempo é a qualidade que definir a informação quanto a
temporalidade e 4-Consistência é a qualidade que definir a informação coerente.

Segundo Wang e Diane (1996), dados que não atendem ao conjunto de dimensões de
qualidade “dados de má qualidade” pode ter impactos sociais e econômicos substanciais.
Embora as empresas procurem a melhoria da qualidade dos dados com abordagens práticas e
ferramentas, seus esforços de melhoria tendem a concentrar-se estreitamente sobre a exatidão.

Acreditando que os consumidores de dados têm uma concepção de qualidade de dados


maior do que os profissionais de TI Wang e Diane (1996), conduzido um estudo para
desenvolver um quadro hierárquico para a organização de dimensões de qualidade de dados. A
característica saliente deste estudo de pesquisa é que os atributos de qualidade dos dados são
coletados de consumidores de dados em vez de serem definidos teoricamente ou com base na
experiência dos pesquisadores.

Após esta analise sobre qualidade de dados, podemos definir que dados de má qualidade
são todos aqueles que não atendem ao conjunto de dimensões de qualidade. Sendo importante
destacar que a melhoria da qualidade de dados passa por todas as dimensões e quando
trabalhamos uma determinada dimensão, estamos atingindo nosso objetivo de melhoria da
qualidade de dados.

2.3   TIPO DE AVALIAÇÃO DE QUALIDADE DE DADOS EM BANCO


DE DADOS

Os dois tipos de avaliações que podem ser feitas em um banco de dados são: a avaliação
quantitativa (ou objetiva) e a avaliação qualitativa (ou subjetiva) (PINHO, 2001).

Na avaliação quantitativa são utilizados indicadores objetivos para medir a qualidade das
informações em banco de dados. Para este caso, a avaliação de qualidade depende apenas do

5
dado que está sendo analisado, e não do ponto de vista do avaliador. São observados, por
exemplo, valores do domínio, presença de valor, entre outros fatores.

A avaliação quantitativa da qualidade é normalmente realizada por ferramentas


automatizadas (software). Esse tipo de avaliação está baseado na perspectiva do
desenvolvimento tradicional, pois considera que a precisão e a objetividade são dois critérios
necessários. Porém, sem atingir todas as dimensões de qualidade não é possível qualificar dados
como de alta qualidade.

A avaliação qualitativa da qualidade depende do ponto de vista do avaliador e do dado


que está sendo avaliado. Neste tipo de avaliação os indicadores subjetivos são as características
da qualidade que foram definidas, objetivando capturar a percepção e a expectativa do usuário
sobre a qualidade de dados. Ela pode ser realizada por especialistas ou usuários do banco de
dados, ou ainda em conjunto com ferramentas automatizadas, que utilizam os indicadores
subjetivos para julgar a qualidade atual do banco de dados e sua aptidão de uso.

2.4   QUALIDADE DE DADOS EM BANCO DE DADOS

De acordo com English (1999), a qualidade da informação é composta por três fatores:
definição clara ou significado dos dados, valores corretos e facilidade de entendimento do
formato apresentado para o usuário final. A baixa qualidade em algum desses três componentes
pode causar falhas nos processos de negócio e resultar em tomadas de decisão incorretas.
Segundo este mesmo autor, informação é a aplicação dos dados, e pode ser representada pela
seguinte equação:

Informação = f (Dados + Definição + Apresentação)

Logo, a qualidade da informação requer que haja qualidade tanto na definição quanto no
conteúdo dos dados. A qualidade na definição dos dados aplica-se a conceitos. Ela é uma
característica e uma medida dos modelos de dados produzidos pelo processo de
desenvolvimento das aplicações. A qualidade do conteúdo dos dados é o grau no qual os valores
dos dados representam corretamente os fatos ou entidades do mundo real, e atendem às
necessidades de informação dos clientes. Ela se aplica às instâncias dos dados.

6
Segundo Batini e Scannapieco (2016), quando as pessoas pensam sobre a qualidade dos
dados, eles se concentram apenas no parâmetro de exatidão. Assim, os dados de má qualidade
são utilizados mesmo se houver erros ortográficos ou valores errados como por exemplo: uma
data de aniversário errada ou a idade absurda de uma pessoa.

Há outras dimensões importantes, como a integridade e a consistência para avaliar a


qualidade dos dados, como veremos mais adiante.

De acordo com Wang e Ziad (2000) e Pipino ET AL (2002), a informação pode ser
dividida em quatro categorias e 16 dimensões de acordo com a Tabela 1.

Tabela 1 – Categoria por Dimensões de qualidade


Categoria Dimensão

Precisão:  Informação  correta  e  confiável;  

Objetividade:  A  informação  é  imparcial;  


Intrínseco  
Credibilidade:  A  informação  é  verdadeira;  

Reputação:  Fonte  e  conteúdo  da  informação;  

Acessibilidade:  A  informação  está  disponível;  


Acessibilidade  
Segurança  de  acesso:  O  acesso  à  informação  é  restrito;  

Relevância:  A  informação  é  aplicável  e  útil;  

Valor  agregado:  A  informação  é  boa  e  vantajosa;  

Contextual   Temporalidade:  A  informação  é  atualizada;  

Integridade:  A  informação  não  é  perdida  e  é  suficiente;  

Informação  adequada:  Volume  de  informação  adequado;  

Interpretabilidade:  A  informação  está  na  linguagem  apropriada;  

Facilidade  de  compreensão:  A  informação  é  facilmente  compreendida;  

Representação   Representação  concisa:  a  informação  é  representada  de  forma  compacta;  

Representação  consistente:  informação  apresentada  no  mesmo  formato;  

Facilidade  de  manuseio:  Informação  fácil  de  ser  manuseada  /  aplicada;  

7
2.5   COMO OBTER QUALIDADE

Para melhorar a qualidade de dados, pode-se utilizar: 1-Métodos de comparação de


campos textuais (string) e 2-Métodos de geração de fonema. O processo de comparação de
string também é usado em projetos de integração de sistemas usando enriquecimento léxico.

2.5.1   COMPARAÇÃO DE STRING

Uma melhora substancial na qualidade dos dados pode ser realizada a partir da
identificação de objetos similares, isso porque podemos avaliar se estes objetos tem o mesmo
significado, representem a mesma coisa ou se são iguais. A similaridade de objetos é estudada
em uma variada gama de áreas, desde o contexto da detecção de registros, documentos ou Web
sites similares, até nas áreas de plágio, identificação de spams e reconhecimento de padrões.

Um ponto importante no método de comparação é que devem existir dois objetos para ser
possível a realização da comparação. Neste caso, além dos dados que devem ser analisados é
necessário criar um dicionário que será a referencia para a comparação.

Um exemplo processo que utiliza comparação de string sem a necessidade de um


dicionário é o método de deduplicação que realiza comparação entre os próprios objetos para
identificar duplicidades.

A comparação entre cadeias de string pode ser verificada usando medidas de similaridade
ou funções, que podem ser divididos em dois grupos (mas não limitados a eles):

Baseado em Caracteres: usa como evidência a localização dos caracteres para avaliar a
similaridade dos registros. Essas funções são usadas para calcular a quantidade mínima de
variações (inserção, exclusão e atualização) necessárias para transformar a primeira String em
uma segunda String. No entanto, as funções baseadas em caracteres não têm um bom
desempenho porque comparam todos os caracteres para quantificar a semelhança. Neste grupo,
existem as seguintes funções de similaridade: Levenshtein (1965), Smith Waterman (1980),
Stochastic Model (RISTAD YANILOS, 1996).

Baseado em Tokens: o banco de dados é fragmentado no conjunto de tokens para


quantificar o nível de similaridade usando a relação entre os conjuntos (interseção ou união de

8
elementos). De forma simples, o nível de similaridade é calculado usando a correspondência
exata entre os tokens. No entanto, a coincidência exata impede a detecção de pequenas
variações, como, por exemplo, erros relacionados à tipografia, plural, abreviaturas, etc. Dados
(ROHLF, 1990), Jaccard, Cossine são exemplos de funções de similaridade deste grupo.

Para garantir a eficiência da função de similaridade, pode-se utilizar outra técnica para
fragmentar a string em unidades menores baseado na ideia de tokens a partir da decomposição
de string em termos menores. Assim será possível uma comparação entre termos com maior
grau de precisão conforme pode ser vista na Tabela 2.

A decomposição de termos será usada para montar domínio e carregar dicionário ambos
na rotina de decomposição que será responsável pela fragmentação do texto em partes menores.
Facilitando a analise de similaridade entre os termos analisados, isso porque teremos parte
menores como pode ser observado na Tabela 2. Veja que a coluna texto apresenta um conteúdo
que foi fracionado em termos (demais colunas), com isso será possível avaliar cada termo
independente. Isso porque podem existir erros apenas em partes especificas que identificadas
adequadamente dentro dos padrões de similaridade definidos, podem ser corrigidos.

Tabela 2 – Decomposição de termos


Texto Termo 1 Termo 2 Termo 3 Termo N
ALDEIA INDÍGENA CAPIM AÇU ALDEIA INDÍGENA CAPIM AÇU
ALTO DA VÁRZEA ALTO DA VÁRZEA
BARRA DA SUCATINGA BARRA DA SUCATINGA
BOA VISTA DO CAXITORÉ BOA VISTA DO CAXITORÉ
CAJAZEIRAS DO JILÓ CAJAZEIRAS DO JILÓ
FORTALEZA FORTALEZA
JIJOCA DE JERICOACOARA JIJOCA DE JERICOACOARA
MORADA NOVA MORADA NOVA
PIRES FERREIRA PIRES FERREIRA
SÃO LUÍS DO CURU SÃO LUÍS DO CURU
PALESTINA DO CARIRI PALESTINA DO CARIRI
CAMPOS BELOS CAMPOS BELOS
FARIAS BRITO FARIAS BRITO
VÁRZEA ALEGRE VÁRZEA ALEGRE
LAVRAS DA MANGABEIRA LAVRAS DA MANGABEIRA
ICO ICO

Com essa técnica, os algoritmos baseados em caractere têm que fazer o processo de
comparação apenas entre termos e não mais no texto completo como por exemplo: podemos
comparar “CAMPOS BELOS” com “CAMPUS BELUS” ou podemos decompor em termos e

9
comparar separadamente “CAMPOS” com “CAMPUS” e “BELOS” com “BELUS” o que torna
o processo de comparação mais simples. Dessa forma, a técnica torna-se melhor aproveitada,
conforme pode ser demonstrado na Tabela 3, quando temos a demonstração de casos de termos
comparados ao dicionário e suas diferenças.

A comparação de string será usada para criar base classificada na atividade executar
função de similaridade que será responsável pela identificação de similaridade entre os termos
comparados.

Tabela 3 – Comparação de string


Termo Comparação Termo Dicionário Alinhamento
ALAGOINHA
ALAGOINHA ALAGOINHA
ALAGOINHA
IC[O]
ICO ICÓ
IC[Ó]
ALC[A]NTARA[-]
ALCANTARA ALCÂNTARAS
ALC[Â]NTARA[S]
TEJU[SS]UOCA
TEJUSSUOCA TEJUÇUOCA
TEJU[Ç-]UOCA
IPAGUA[SSÚ]
IPAGUASSÚ IPAGUAÇU
IPAGUA[Ç-U]
MA[R]JO[-]L[A]NDIA
MARJOLANDIA MAJORLÂNDIA
MA[-]JO[R]L[Â]NDIA
G[RAC]A[-]
GRACA GARÇAS
G[ARÇ]A[S]

Podemos observar na Tabela 3 que o termo de comparação deve ser alinhado com o termo
do dicionário. O campo alinhamento apresentado na Tabela 3, apresenta entre colchetes os
caracteres diferentes entre os termos comparados. Este procedimento é realizado pelos
algoritmos de comparação de string que serão descritos a seguir.

As métricas com valores no intervalo [0,1] foram utilizados como critério para escolher
a função de similaridade porque são mais adequados, pois o índice que tende ao infinito é
sensível a pequenas mudanças (CLIFFORD STEPHENSON, 1975).

A distância de Levenshtein (1965) é calculada usando o número mínimo de operações


necessárias para transformar uma sequência em outra. Essas operações podem ser inserção,
exclusão ou substituição de um caractere. O algoritmo de Levenshtein (1965) usa uma matriz
(n + 1) x (m + 1), em que n e m representam o número de caracteres de duas cadeias.

É muito útil para aplicações que precisam determinar o nível de similaridade entre duas
cadeias, como o caso de verificadores ortográficos. A opção por este algoritmo também foi

10
baseada nos resultados entregues de distância que representa o número de operações realizadas
e seu coeficiente de similaridade.

O coeficiente de similaridade Dice (DSC) (ROHLF, 1990) é uma estatística utilizada para
comparar duas amostras semelhantes. Neste caso, essas amostras serão os termos que são
necessários para serem comparados. Foi desenvolvido, independentemente, pelos botânicos
Thorvald Sorensen (1948) e Lee Raymond Dice (1945) e utiliza uma fórmula matemática
descrita da seguinte forma: 2 | X Y | / | X | + | Y |, em que x e y representam o número de
caracteres de duas cadeias.

Na Tabela 4, é possível analisar os resultados obtidos com aplicação dos algoritmos de


comparação de string distância de Levenshtein (1965) e coeficiente de similaridade Dice (DSC)
(ROHLF, 1990).

A combinação destes resultados será apresentada nos próximos capítulos.

Tabela 4 – Resultados da Comparação de string


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ALAGOINHA ALAGOINHA 0 1 1
ICO ICÓ 1 0,7 0,3
ALCANTARA ALCÂNTARAS 2 0,8 0,6
TEJUSSUOCA TEJUÇUOCA 2 0,8 0,7
IPAGUASSÚ IPAGUAÇU 3 0,7 0,6
MARJOLANDIA MAJORLÂNDIA 3 0,7 0,5
GRACA GARÇAS 4 0,3 0

A escolha dos dois algoritmos para trabalhar em conjunto baseou-se na meta que visa
melhorar o desempenho da função de similaridade com qualquer tamanho de termo (uma
maneira de garantir a eficiência com qualquer quantidade de caracteres apresentados no termo,
já que não temos como limitar o tamanho de um termo para limite inferior ou superior quanto
a quantidade de caracteres), pois fornece um ajuste específico para cada função, possibilitando
estabelecer um maior nível de similaridade.

Grupo de variáveis utilizados para auxiliar este processo, de acordo com Tabela 5.

Tabela 5 – Variáveis de qualidade


Variável Descrição
É  necessário  que  o  escore  obtido  ultrapasse  o  valor  definido  por  esta  
Similaridade  automática   variável   para   obter   uma   similaridade   automática   sem   intervenção  
humana;  

11
Variável Descrição
De  modo  que  duas  cadeias  possam  ser  consideradas  semelhantes  entre  
si   e   possam   ser   apresentadas   ao   utilizador,   é   necessário   que   a  
Semelhança  substancial   pontuação   obtida   seja   maior   ou   igual   ao   valor   definido   por   esta  
variável;  

Para  que  uma  similaridade  ocorra  automaticamente,  não  pode  existir  


uma   segunda   sequência   cuja   semelhança   esteja   muito   próxima   da  
Precisão   primeira   sequência   (maior   similaridade).   Este   valor   é   um   tipo   de  
distância  mínima  que  deve  existir  entre  os  dois  valores  de  similaridades  
mais  altas;  

Quantidade  máxima  de  strings  semelhantes  que  serão  possíveis  para  


serem   exibidos   como   um   resultado   válido.   Essas   strings   são  
Valor  Máximo  
classificadas  por  grau  de  similaridade,  de  modo  que  as  sequências  mais  
semelhantes  serão  exibidas;  

2.5.2   ALGORITMO FONÉTICO

Usado para facilitar a busca de informações semelhantes, mas que podem estar com
ortografia diferente por erro de escrita e mesmo assim eles possam ser correspondidos apesar
das diferenças. Consiste na criação de blocos lógicos dentro da estrutura trabalhada para criar
relacionamentos.

Usado para indexar nomes por som, como pronunciar em uma linguagem específica,
quando há palavras semelhantes, mas que podem ter ortografia diferente para que eles possam
ser correspondidos apesar das diferenças. Consiste na criação de blocos lógicos dentro da
estrutura trabalhada para criar relacionamentos.

Christen (2007) explica que o uso de algoritmos de fonemas reduz o número de


comparações entre os registros. Esse mecanismo dará um melhor desempenho ao processo,
evitando comparações desnecessárias, isto é, não realizando comparação entre objetos
completamente diferentes. Esse tipo de algoritmo também é bastante usado para localizar dados
duplicados, quando evita comparações complexas de todos com eles mesmos para encontrar as
duplicações, o que tornaria a complexidade desta busca quadrática (O(n2)).

Um recurso baste útil, mas que deve ser trabalho para língua especifica como podemos
observar na Tabela 6, quando é possível verificar na coluna termo as informações
ALAGOINHA e ALCANTARA com a coluna resultado A425 para os dois casos. Isso ocorre
devido as particularidades da língua inglesa que inviabiliza um uso geral deste algoritmo. Sendo
necessário um algoritmo para língua portuguesa.
12
Soundex (RUSSELL ODELL, 1918), baseia-se na língua inglesa e sua codificação
consiste em uma letra seguida por três números e a letra são os primeiros da sequência. Os
números são a codificação de outras consoantes de acordo com critérios do algoritmo, conforme
descrito abaixo:

•   Substitua as consoantes (sem alterar a primeira letra da string) como segue:

1.   b, f, p, v = 1

2.   c, g, j, k, q, s, x, z = 2

3.   d, t = 3

4.   l = 4

5.   m, n = 5

6.   r = 6

•   Substitua as letras adjacentes iguais por um único dígito correspondente.

•   Remova todos os não-dígitos após a primeira letra.

•   Retorne a letra inicial e os três primeiros dígitos restantes. Se necessário, adicione


zeros à direita para formar uma letra e três dígitos.

Na Tabela 6 temos o resultado da execução do algoritmo Soundex (RUSSELL ODELL,


1918).

Tabela 6 – Resultado Soundex


Termo Resultado
ALAGOINHA A425
ALCANTARA A425
ICO I200
TEJUSSUOCA T222
IPAGUASSÚ I122
MARJOLANDIA M624
GRACA G620

BuscaBR (DE LUCENA, 2006), é uma adaptação do algoritmo fonético Soundex ao


português brasileiro, seguindo os critérios descritos abaixo:

13
•   Converter todas as letras para maiúsculas;

•   Eliminar todos os acentos;

•   Substituir:

1.   Y por I

2.   BR por B

3.   PH por F

4.   GR, MG, NG, RG por G

5.   GE, GI, RJ, MJ, NJ por J

6.   Q, CA, CO, CU, C por K

7.   LH por L

8.   N, RM, GM, MD, SM e terminação AO por M

9.   NH por N

10.  PR por P

11.  Ç, X, TS, C, Z, RS por S

12.  LT, TR, CT, RT, ST para T

13.  W para V

•   Remover as terminações [S, Z, R, R, M, N, AO e L]

•   Substituir [R por L]

•   Excluir todas as vogais e H;

•   Eliminar toda a duplicação.

Na Tabela 7 temos o resultado da execução do algoritmo BuscaBR (DE LUCENA, 2006).

14
Tabela 7 – Resultado BuscaBR
Termo Resultado
ALAGOINHA LGM
ALCANTARA LSMTL
ICO S
TEJUSSUOCA TJS
IPAGUASSÚ PGS
MARJOLANDIA MJLM
GRACA GS

É possível observar na Tabela 8 uma comparação entre o algoritmo BuscaBR e BuscaBR


Ajustado.

Tabela 8 – Comparativo Soundex x BuscaBR


Termo Soundex BuscaBR
ABAIARA A160 BL
ABREU A160 B
APRAZIVEL A162 PSV
APUIARES A162 PL
AGUAS A220 G
ASSIS A220 S
ALCANTARA A425 LSMTL
ALAGOINHA A425 LGM
ANA A500 M
ANAUA A500 M
AURORA A660 L
ARUARU A600 L

Podemos observar que os resultados apresentados pelo algoritmo Soundex têm baixa
taxa de acerto, pois existe o mesmo resultado para mais de um termo. Isso se deve ao idioma
que, para este trabalho, será o português.

Os resultados para os termos (ANA e ANAUA) com fonema gerado M e (AURORA e


ARUARU) com fonema gerado L conforme apresentado na Tabela 8. Mostra que este algoritmo
pode ser adaptado para melhor atender aos resultados. Na versão original de BuscaBR, todas as
vogais são descartadas e como o processo foi projetado para comparar termo a termo, temos os
resultados imprecisos quando temos o mesmo resultado para mais de um termo conforme
Tabela 8.

O algoritmo BuscaBR foi ajustado para descartar apenas a última vogal do termo e
preservando as demais vogais, como podemos observar nos resultados conforme Tabela 9,
quando obtemos como resulta para os termos ANA o resultado AM, ANAUA o resultado
AMAU, AURORA o resultado AULOL e ARUARU o resultado ALUALU.
15
Tabela 9 – Comparativo Soundex x BuscaBR (Ajustado)
Termo Soundex BuscaBR (Ajustado)
ABAIARA A160 ABAIAL
ABREU A160 ABEU
APRAZIVEL A162 APASIVE
APUIARES A162 APUIALE
AGUAS A220 AGU
ASSIS A220 ASI
ALCANTARA A425 ALSAMTAL
ALAGOINHA A425 ALAGOIM
ANA A500 AM
ANAUA A500 AMAU
AURORA A660 AULOL
ARUARU A600 ALUALU

2.6   TRABALHOS RELACIONADOS

Já vimos que qualidade de dados tem natureza multidimensional (SCANNAPIECO


BATINI, 2005). Neste aspecto, encontramos trabalhos que tratam o assunto com várias
abordagens que podem ser um estudo sobre qualidade de dados, aplicação de processos e
métodos para obter qualidade de dados ou então propondo um novo método para melhoria da
qualidade de dados.

Um conjunto de trabalhos sobre esse tema foi selecionado, sendo avaliadas suas
características e objetivos.

1.   Krishnan ET AL (2016) fizeram um estudo sobre a qualidade dos dados no


mercado de trabalho e na academia; tema importante no desenvolvimento deste
trabalho quando foi possível avaliar como o mercado e academia entendem a
qualidade de dados, enquanto nossa proposta é analisar e propor correções e
também avaliar a qualidade dos dados. Foram identificados como pontos
importantes: (1) a natureza interativa da limpeza de dados; (2) a falta de rigor na
avaliação da precisão dos dados limpeza; (3) desconexão entre analistas que
consultam, os engenheiros de dados e infra-estrutura que projetam a limpeza de
dados.

16
2.   Geerts e Floris (2013) desenvolveram uma proposta para avaliar e resolver o
problema da qualidade dos dados, utilizando um algoritmo para calcular
soluções mínimas e implementar um protótipo baseado em SGBD, para a
correção de integridade ou dependência.
3.   Duan e Lee (2013) realizaram um estudo para identificar a complexidade e os
aspectos abordados para melhorar a gestão do conhecimento, melhorando a
qualidade dos dados, utilizando um modelo de processo. Este trabalho
desenvolveu um processo para classificar e verificar banco de dados heterogêneo
com uma execução de ferramenta que utiliza uma estratégia de comparação para
avaliar a qualidade de dados existente com base em análises já realizadas ou na
própria base em momento anterior, com foco na correção e validação do domínio
de dados gerado no período de organização do banco de dados.
4.   Wang e Diane (1996) realizaram um estudo para desenvolver um quadro que
abranja os aspectos da qualidade dos dados que são importados para os
consumidores de dados.
5.   Kolb e Thor (2012) demonstraram uma ferramenta de deduplicação com Hadoop
para MapReduce-based.
6.   Chu e Xu (2015) apresentaram a ferramenta Katara, que trabalha com uma base
de conhecimento e um sistema de limpeza de dados atraves da interpretação
semântica de tabela para alinhá-la com base de conhecimento, assim identifica
dados corretos e incorretos e gera possíveis reparos para dados incorretos.
7.   Haas e Daniel (2015) apresentaram o Wisteria, um sistema para apoiar o
desenvolvimento iterativo e otimização da limpeza de dados usando Workflows.
8.   Khayyat e Zuhair (2015) apresentaram o BigDansing, um sistema Big Data
Cleansing. O sistem pode funcionar em cima da maioria dos Plataformas de
processamento de dados que vão desde DBMSs até Map Reduce. Uma
programação de fácil utilização permite que os usuários expressem regras de
qualidade de dados de forma declarativa e processual.

A proposta deste trabalho é trabalhar melhoria de dados com base na análise de


comparação de string, buscando componentes de similaridade através de dicionário de dados
estabelecido previamente de acordo com características de assunto tratados no sistemas/SGBD
que será objeto de análise. Também é possível executar o processo sem um dicionário, o que
nos apresentaria um resultado sobre o domínio existente na base de dados. Este domínio pode
17
ser objeto de análise de especialista para identificar se existe inconsistências. Quando um
dicionário base for estabelecido, o processo pode ser executado novamente e propor as
correções necessárias.

2.7   CONCLUSÃO DO CAPÍTULO

Neste capítulo, foi apresentado o conceito de qualidade de dados, métricas de qualidade


e quais algoritmos de comparação de string devemos usar para atingir esse objetivo de melhoria
da qualidade de dados.

Apresentamos o algoritmo BuscaBr em sua forma pura, mas será necessária uma
adaptação ao seu código para atender a proposta de decomposição de string em partes menores
que denominamos de termos. Isto porque na língua portuguesa falada no Brasil, existem várias
palavras de origem indígena compostas só por vogais. O que tornaria a representação de um
fonema impossível com a retirada de todas as vogais para um termo composto exclusivamente
de vogais ou com um número mínimo de consoantes.

Com o avanço da tecnologia da informação em várias áreas, mais pessoas usam algum
tipo de aplicação de tecnologia da informação, tais como redes sociais, e-business etc. Como
há um maior volume de dados sendo armazenados em bancos de dados, a quantidade de erros
de digitação também ocorre. Tornando a análise desses dados um grande desafio para as áreas
de tecnologia da informação.

18
3   PROCESSO DE QUALIDADE DE DADOS EM BASE DE
DADOS HETEROGÊNEA

Neste capítulo é apresentada a abordagem para a tratamento de dados de má qualidade


e como será realizada a correção para os casos possíveis ou identificação para os demais casos.
O processo de identificação de dados de má qualidade é baseado na técnica de comparação de
cadeia em termos de pares chamado técnica de comparação de termo parcial – TCTP.

3.1   O PROCESSO

Para atingir seu objetivo, o TCTP usa uma base de conhecimento, chamada
DICIONÁRIO. O DICIONÁRIO contém os domínios de todos os dados possíveis a serem
analisados. A saída TCTP é uma lista de dados de má qualidade, que não têm nenhuma
semelhança com dados no dicionário. Além disso, TCTP recomenda a ação de correção para
melhorar a qualidade dos dados na lista de dados de má qualidade.

É possível incluir, dinamicamente, termos no banco de dados de conhecimento aqui


denominado dicionário, por exemplo, expressão coloquial ou mesmo uma gíria.

O processo foi definido em atividades que se completam e interagem para atingir o


objetivo de classificar uma base dados, identificando dados de má qualidade. Este processo foi
idealizado para classificação de string apenas. Isto é, não serão tratados dados do tipo numérico,
data e etc (qualquer outro tipo de dado deve ser desconsiderado no processo).

A Figura 1 apresenta o processo de identificação de dados de má qualidade que é


descrito no diagrama de fluxo de trabalho. Cada atividade será detalhada posteriormente neste
capítulo.

19
Figura 1 - Processo para identificação de dados de má qualidade

3.1.1   Selecionar banco de dados

O processo de identificação de dados de má qualidade tem seu ponto de partida na


configuração da conexão com SGBD, que é usada para carga de dados a serem analisados.
Neste processo, é possível selecionar mais de um banco de dados a ser analisado. O objetivo é
permitir a seleção de base de dados heterogênea conforme apresentado na Figura 2, facilitando
a classificação dos mesmos dados nas diversas bases selecionadas. Sendo possível gerar
informações com mesmo domínio em qualquer base selecionada.

20
Figura 2 – Selecionar bases de dados

3.1.1.1   Atividade - Criar conexão

Para estabelecer uma conexão com banco de dados, será necessário configurar a
conexão que será usada. Podem ser criadas mais de uma conexão com objetivo de analisar bases
de dados heterogêneas com os parâmetros, conforme Tabela 10.

Tabela 10 – Criar conexão de banco de dados

Objetivo:  Criar  conexão  de  banco  de  dados  


Entrada:   Saída:  
Parâmetros  de  configuração  com  dados  principais  de   Conexão  criada  com  acesso  ao  banco  de  dados  que  foi  
(Host,  Banco,  Porta,  Usuário  e  Senha).   definido.  
Toda  conexão  deve  ter  um  nome  significativo.  

3.1.1.2   Atividade - Selecionar tabela

Ao estabelecer a conexão que será usada no processo de identificação de dados de má


qualidade, será necessária uma análise de quais tabelas devem ser analisadas. A ideia é
identificar dados incorretos observando se estes dados pertencem a um conjunto particular de
domínio sobre o qual foi montado o dicionário. Caso contrário, será apresentado nas estatísticas
do resultado final um elevado número de erros encontrados que podem ser classificados como
entrada de dados incorreta. A Tabela 11 contem os dados de entrada e saída.

21
Tabela 11 – Selecionar tabela

Objetivo:  Selecionar  tabela  


Entrada:   Saída:  
Selecionar  subconjunto  de  tabelas  para  cada  conexão   Lista  de  tabelas  que  devem  ser  copiadas  para  área  de  
criada.   trabalho  ou  stage.  

3.1.1.3   Atividade - Montar base metadados

Será realizada uma busca na base de dados a ser analisada, coletando informações sobre
metadados do subconjunto de tabelas que devem ser analisadas. Estas informações serão
armazenadas numa estrutura de dados que denominamos de TABELA.

A função desta estrutura é tornar possível o mapeamento entre os dados classificados e


sua origem na base de dados que está sendo analisada, conforme definido na atividade de criar
conexão. A Tabela 13 contem os dados de entrada e saída.

Definição da estrutura de dados TABELA conforme Tabela 12:

Tabela 12 – Definição estrutura de dados TABELA


Campo Tipo Descrição

Nome_schema   Varchar2(10)   Nome  do  schema  de  banco  de  dados  de  origem  

Nome_tabela   Varchar2(31)   Nome  da  tabela  que  será  objeto  de  análise  

Nom_campo   Varchar2(31)   Nome  do  campo  da  tabela  

Descricao_campo   Varchar2(100)   Descrição  do  campo  (informação  não  obrigatória)  

Posicao_campo   Integer   Posição  do  campo  na  tabela  (ordenação  na  tabela)  

Restricao_notnull   Varchar2(3)   Identifica  se  campo  pode  nulo  ou  não    

Tamanho_campo   Integer   Tamanho  do  campo  

Precisao_campo   Integer   Tamanho  da  precisão  numérica  para  decimais    

Definição  da  tipo  do  campo  (qual  tipo  de  dados  por  
Tipo_campo   Varchar2(30)  
estar  representado)  

22
Campo Tipo Descrição
Quantidade  de  registro  existem  na  tabela  para  este  
Quantidade_registro   Integer  
campo,  desconsiderando  os  nulos  
Chave   de   negócio   criada   através   da   regra   de  
checksum  MD5  dos  campos:    
Bk_rach   Varchar2(50)   NOME_SCHEMA,    
NOME_TABELA,    
NOME_CAMPO  
Chave   de   registro   criado   através   da   regra   de  
checksum  MD5  dos  campos:  
NOME_SCHEMA,  
NOME_TABELA,  
NOME_CAMPO,  
DESCRICAO_CAMPO,  
POSICAO_CAMPO,  
Rg_rach   Varchar2(50)   RESTRICAO_NOTNULL,  
TAMANHO_CAMPO,  
PRECISAO_CAMPO,  
ESCALA_CAMPO,  
TIPO_CAMPO,  
CHARSET_CAMPO  
<i>Esta   informação   usada   para   saber   se   teve  
mudança  de  estrutura  deste  ultima  análise>  
Data  que  foi  criado  este  estrutura  na  área  de  trabalho  
Data_criacao   Date  
ou  stage.  
Data  que  foi  modificado  estrutura  de  dados  com  base  
na   identificação   do   registro   pelo   campo   pk_rach   e  
Data_alteracao   Date   reg_rache,   avaliando   se   foi   modificado   qualquer  
informação   na   estrutura   de   dados   desde   ultima  
análise  
Data  que  foi  confirmado  que  este  campo  não  existe  
Data_exclusao   Date  
mais  na  base  de  origem  conforme  
Regra  que  identifica  se  o  campo  esta  ativo  ou  inativo  
(isto   pode   ocorrer   quando   temos   várias   alteração  
Campo_ativo   Varchar2(1)   identificadas   na   estrutura   a   cada   nova   análise   e  
temos   vários   registro   históricos   das   versões  
anteriores)  
Sequencial  que  informa  em  qual  carga  de  dados  foi  
Sequencia_carga   Integer  
carregado  esta  informação  

Tabela 13 – Montar Base Metadados

Objetivo:  Montar  Base  Metadados  


Entrada:   Saída:  
Mapeamento   das   estruturas   de   dados   na   origem   Atualização   da   estrutura   de   dados   TABELA,  
(metadados)  do  subconjunto  de  tabelas  selecionadas.   responsável   pelo   mapeamento   das   estruturas   de  
  dados  na  origem.  

23
3.1.1.4   Atividade - Carregar tabelas selecionadas

Utilizando as definições obtidas e armazenadas na estrutura de dados TABELA, será


possível criar uma cópia em nossa área de trabalho ou stage das mesmas estruturas que serão
objeto de análise. Isto é necessário para evitar distorções durante o processo de classificação.
Caso a base origem venha a ser modificada.

Esta atividade também tem o objetivo de liberar o mais rápido possível a base de origem
através de processo simples de extração e carga de dados sem aplicação de regras de negócio
para agilizar o processo.

Ao final desta atividade teremos uma réplica completa do conjunto de tabelas


selecionado para análise, o qual será usado para todo o restante do processo. A Tabela 14
contem os dados de entrada e saída.

Tabela 14 – Carregar Tabelas Selecionadas

Objetivo:  Carregar  Tabelas  Selecionadas  


Entrada:   Saída:  
Lista  de  tabelas  que  devem  ser  copiadas  para  área  de   Lista   de   tabelas   carregadas   na   área   de   trabalho   ou  
trabalho  ou  stage.   stage.  

3.1.2   Carregar domínio

A criação da base de verificação segue os requisitos conforme o que é definido na Figura


1 e detalhado na Figura 3 e 4, sendo detalhados seus passos as seguir.

24
Figura 3 – Carregar domínio

Figura 4 – Modelo de dados Carregar domínio

3.1.2.1   Atividade - Montar domínio

A montagem do domínio é realizada com base nas definições coletadas e armazenadas


na estrutura de dados TABELA, gerando um SQL que será carregado com todos os dados
disponíveis para nossa na estrutura de dados denominada DOMÍNIO. Temos uma estrutura de

25
dados verticalizada seguindo a estrutura padrão para o armazenamento desses dados no formato
definidos na Tabela 15. A Tabela 17 contem os dados de entrada e saída.

Tabela 15 – Definição estrutura de dados DOMÍNIO


Campo Tipo Descrição
Chave   de   registro   criado   através   da   regra   de  
checksum   MD5   com   todos   os   campos   da   tabela   do  
Rg_rach   Varchar2(50)   banco  origem.  
<i>Esta   informação   usada   identificar   do   registro  
horizontal  que  foi  convertido  para  vertical  >  

Nome_schema   Varchar2(10)   Nome  do  schema  de  banco  de  dados  de  origem  

Nome_tabela   Varchar2(31)   Nome  da  tabela  que  será  objeto  de  análise  

Nome_campo   Varchar2(31)   Nome  do  campo  da  tabela  

Informação   Varchar2(100)   Dado  na  origem  

Data_atualizacao   Date   Data  em  que  foi  realizada  carga  

Sequencial  que  informa  em  qual  carga  de  dados  foi  


Sequencia_carga   integer  
carregado  esta  informação  

Definição do relacionamento entre as estruturas TABELA x DOMÍNIO conforme


Tabela 16.

Tabela 16 – Relacionamento TABELA x DOMÍNIO


Objetivos: Apresentar relacionamento entre as estruturas TABELA x DOMÍNIO
TABELA DOMÍNIO

Nome_schema Nome_schema

Nome_tabela Nome_tabela

Nome_coluna Nome_coluna

Tabela 17 – Montar Domínio

Objetivo:  Montar  Domínio  


Entrada:   Saída:  
Estrutura  de  dados  TABELA  (fornece  informações  de   Atualização  da  estrutura  de  dados  DOMINIO.  
metadados).  

26
3.1.2.2   Atividade - Montar base nome

A montagem da base NOME é realizada com base nas informações coletadas e


armazenada na estrutura de dados DOMÍNIO, carregando todos os dados disponíveis para nova
estrutura de dados denominada NOME. Temos uma estrutura de dados verticalizada seguindo
a estrutura padrão para o armazenamento desses dados no formato definidos na Tabela 18. A
Tabela 20 contem os dados de entrada e saída.

Tabela 18 – Definição estrutura de dados NOME


Campo Tipo Descrição

Id_nome   Integer   Sequencia  que  identifica  registro  de  forma  única  

Resulta   do   processo   de   decomposição   do   campo    


Parte_nome   Varchar2(40)  
informação  da  tabela  DOMINIO  

Quantidade   de   partes   existe   para   recompor   a  


Parte_quantidade   Integer  
informação  

Fonema   Varchar2(40)   Fonema  que  representa  o  campo  Parte_nome  

Chave   de   registro   criado   através   da   regra   de  


checksum   MD5   com   todos   os   campos   da   tabela   do  
Rg_rach   Varchar2(50)   banco  origem.  
<i>Esta   informação   usada   identificar   do   registro  
horizontal  que  foi  convertido  para  vertical  >  

Definição do relacionamento entre as estruturas DOMÍNIO x NOME conforme Tabela


19.

Tabela 19 – Relacionamento TABELA x DOMÍNIO

Objetivos: Apresentar relacionamento entre as estruturas DOMÍNIO x NOME


DOMÍNIO NOME

Rg_rach Rg_rach

Tabela 20 – Montar base nome

Objetivo:  Montar  base  Nome  


Entrada:   Saída:  
Estrutura  de  dados  DOMÍNIO.   Atualização  da  estrutura  de  dados  NOME.  

Para execução desta atividade é necessária a aplicação das rotinas apresentadas abaixo:

27
3.1.2.2.1   Rotina de limpeza:

Retirada de elementos que podem impossibilitar uma comparação de similaridades,


retiramos os elementos conforme Tabela 21, entre outros que podem ser adicionados. Realizada
a substituição para espaçamento em branco em cada elemento substituído. Acentos gráficos não
serão removidos, porque seria um elemento para identificar erros de entrada de dados;

Tabela 21 – Definição elementos para limpeza


Elemento Tipo Descrição

[   Caracter   Abre  cochete  

]   Caracter   Fecha  cochete  

{   Caracter   Abre  chave  

}   Caracter   Fechar  chave  

(   Caracter   Abre  parêntese  

)   Caracter   Fecha  parêntese  

/   Caracter   Barra  

\   Caracter   Barra  inversa  

_   Caracter   Underline  

-­‐   Caracter   Traço  

.   Caracter   Ponto  

,   Caracter   Virgula  

;   Caracter   Ponto  e  virgula  

3.1.2.2.2   Rotina de decomposição:

28
Nesta rotina a fragmentação dos dados em unidades menores é realizada, segmentando-
as até o nível de termos. Este processo é realizado usando como critério a presença de espaços
em branco entre os termos de uma string. Estes termos são convertidos em novas tuplas que
devem ser usadas na etapa de classificação.

A importância desta rotina está relacionada com o processo comparação de string para
avaliar similaridade entre as partes analisadas. Como nosso modelo é baseado em dicionário,
comparação entre termos presentes no dicionário e termos complexos com várias partes não
seria uma boa estratégia.

3.1.2.2.3   Rotina Fonema:

Esta é a rotina em que algoritmos fonéticos serão utilizados, auxiliando na seleção de


termos que devem ser comparados ao dicionário. O algoritmo Soundex pode ser utilizado
(RUSSELL ODELL, 1918) para atender a língua inglesa e BuscaBR (DE LUCENA, 2006) para
o português. Para cada nova tupla gerada no processo de decomposição será aplicado o
algoritmo de fonema gerando, assim, base de fonemas que será usada para definir quais termos
devem ser comparados com o dicionário.

3.1.3   Carregar dicionário

A definição da geração de dicionário para análise segue como definido na Figura 1 e


detalhada na Figura 5 e 6. Esta fase é responsável por ler a tabela ou arquivo que contém o
dicionário. Esta pesquisa pode ser realizada em diferentes tipos de arquivos (CSV, XLS, TXT,
XML) ou banco de dados.

29
Figura 5 – Carregar dicionário

Figura 6 – Modelo de dados dicionário

3.1.3.1   Atividade - Selecionar dicionário

A origem das informações que devem fazer parte do dicionário o qual será usado no
processo de classificação pode ser obtida de vários formatos e origens. Esta flexibilidade foi
desenvolvida para viabilizar a utilização da informação como tabela de preços enviada do
fornecedor ou planilha desenvolvida com todos os termos/jargões específicos para a área de
atuação a fim de citar algumas possibilidades de criação do dicionário. A Tabela 22 contem os
dados de entrada e saída.

Tabela 22 – Selecionar dicionário

Objetivo:  Selecionar  dicionário  


Entrada:   Saída:  
Para   casos   de   dicionário   em   arquivo,   selecionar   o   Acesso  ao  dicionário  que  será  usado  para  análises  de  
arquivo  que  contem  o  dicionário.   similaridade.  

30
Para   casos   de   dicionário   em   banco   de   dados,   criar  
conexão  se  já  não  existir.  

3.1.3.2   Atividade - Montar dicionário

A montagem do dicionário é realizada com base nas definições armazenadas na estrutura


de dados selecionados na atividade selecionar dicionário, carregando todos os dados
disponíveis para nova estrutura de dados denominada DICIONÁRIO. Temos uma estrutura de
dados verticalizada seguindo a estrutura padrão para o armazenamento desses dados no formato
definidos na Tabela 23. A Tabela 24 contem os dados de entrada e saída.

Tabela 23 – Definição estrutura de dados DICIONARIO


Campo Tipo Descrição

Id_dicionário   Integer   Sequencia  que  identifica  registro  de  forma  única  

Resultado   do   processo   de   decomposição   do   termo  


Parte_nome   Varchar2(40)  
apresentado  como  parte  do  dicionário  

Quantidade   de   partes   existe   para   recompor   a  


Parte_quantidade   Integer  
informação  

Fonema   Varchar2(40)   Fonema  que  representa  o  campo  Parte_nome  

Tabela 24 – Montar dicionário

Objetivo:  Montar  dicionário  


Entrada:   Saída:  
Acesso  ao  dicionário  que  será  usado  para  análises  de   Atualização  da  estrutura  de  dados  DICIONÁRIO.  
similaridade.  

3.1.3.2.1   Rotina de decomposição:

Esta rotina deve ser reaplicada para montagem do dicionário, para evitar que tenhamos
termos complexos que dificultem o processo de classificação.

3.1.3.2.2   Rotina Fonema:

Esta rotina deve ser reaplicada para montagem do dicionário, para gerar o fonema que
será utilizado no processo de classificação.

31
3.1.4   Criar base classificada

A fase de classificação é realizada de acordo com a Figura 1 e a Figura 7 e 8.

Figura 7 – Criar Base classificada

Figura 8 – Modelo de dados base classificada

3.1.4.1   Atividade - Localizar termos para comparação

Em primeiro lugar, é executada uma busca nas estruturas de dados NOME e


DICIONÁRIO usando como critério de seleção o campo FONEMA que armazena a fonética,
que deve ser a mesma dos termos comparados. Este critério de seleção visa à otimização do
tempo de resposta, evitando a execução de todas as comparações possíveis. A Tabela 25 contem
os dados de entrada e saída.

32
Tabela 25 – Localizar termos para comparação

Objetivo:  Localizar  termos  para  comparação  


Entrada:   Saída:  
Estrutura  de  dados  NOME  e  DICIONÁRIO.  Através  de   Lista   de   termos   que   devem   ser   comparador   para  
seleção  de  dados  com  uso  do  campo  FONEMA.   verificar  similaridade.  

3.1.4.2   Atividade - Executar função de similaridade

Após a seleção dos termos a serem comparados é aplicada a função de similaridade nos
mesmos, considerando um nível específico de similaridade, como pode ser visto na Figura 7. O
resultado desta fase será armazenado na estrutura de dados CLASSIFICADA de acordo com a
Figura 8. A Tabela 26 contem os dados de entrada e saída.

Tabela 26 – Função de similaridade

Objetivo:  Função  de  similaridade  


Entrada:   Saída:  
Lista   de   termos   que   devem   ser   comparador   para   Coeficiente  de  similaridade  para  Levenshtein  e  Dice.  
verificar  similaridade.  

3.1.4.2.1   Distância de Levenshtein

A distância de Levenshtein nos fornece dois parâmetros para avaliação do processo de


comparação de string. O primeiro é o resultado da distância de Levenshtein que representa a
quantidade de operações que devem ser feitas para aproximarmos os termos comparados. O
segundo é uma razão entre o resultado da distância de Levenshtein e o tamanho do termo usado
para comparação, este valor pode variar entre 0 e 1.

3.1.4.2.2   Coeficiente Dice

O coeficiente Dice fornece um novo parâmetro para avaliação do processo de


comparação de string. Este coeficiente é baseado na comparação dos termos em pares de
caracteres. O que nos permite uma melhor avaliação quando trabalhamos com termos muito
pequenos.

3.1.4.3   Atividade - Executar fase de ajuste

É nesta atividade que realizamos os ajustes no processo para classificar o que será
compatível e incompatível conforme critérios definidos na Tabela 27.

33
Uma característica deste trabalho é a utilização conjunta de algoritmos de função de
similaridade. O que vai permitir um melhor ajuste para classificar os dados analisados.

Após a seleção dos termos que devem ser comparados e aplicação das funções de
similaridade nos mesmos, considerando um nível específico de similaridade, obteremos o
resultado como pode ser visto na Figura 8. A Tabela 28 contem os dados de entrada e saída.

Os dados apresentados da Tabela 27 são:

1.   Operações -> quantidade de operações necessárias para alinhas os termos


comparados. Conforme demonstrado na Tabela 3 e Tabela 8.
2.   Levenshtein -> Numero de scores obtidos na função de similaridade.
3.   Dice -> Numero de scores obtidos na função de similaridade.
4.   Resultado -> Para os termos comparados que obtiverem seus resultas conforme
estes parâmetros de qualidade, devem ser considerados compatíveis. Para os
demais resultados dos parâmetros o resultado será incompatível.

Os valores apresentados na Tabela 27, foram obtidos através de ensaios realizados com
base de teste. Quando estes parâmetros foram calibrados para atingir o maior numero de
classificação corretas possíveis.

Tabela 27 – Parâmetro de avaliação para Classificação


Operações Levenshtein Dice Resultado

=  0   >=  0,80   >=  0,70   Compatível  

=  1   =  0,77   >=  0,33   Compatível  

=  2   =  0,75   >=  0,35   Compatível  

=  3   =  0,60   >=  0,44   Compatível  

=  4   =  0,50   >=  0,60   Compatível  

Tabela 28 – Fase de Ajuste

Objetivo:  Fase  de  Ajuste  


Entrada:   Saída:  
Coeficiente  de  similaridade  para  Levenshtein  e  Dice.   Parâmetro  ajustado  para  similaridade.    

34
No final deste processo, uma lista completa de todos os termos utilizados nas tabelas
selecionadas por análise em comparação com o dicionário estará disponível. É possível avaliar
o grau de assertividade do sistema selecionado pela análise anterior.

3.2   CONCLUSÃO DO CAPÍTULO

Neste capítulo foi apresentado o processo de classificação em sua totalidade com todas
as funções e atividades a serem executadas.

35
4   ESTUDO DE CASO EM UMA EMPRESA SANEAMENTO
BÁSICO

Para avaliar a abordagem proposta, foi realizado um estudo de caso sobre dados reais
da Companhia de Águas e Esgotos do Estado do Ceará - CAGECE, que atualmente opera em
151 de 184 municípios do Estado, com serviço de água potável e saneamento para uma
população de 5.526.441 habitantes.

A Figura 9 apresenta parte dos sistemas de CAGECE e sua integração.

Figura 9 – Ambiente CAGECE

A CACEGE possui vários sistemas que fazem uso de bancos de dados como Oracle,
SQLServer e PostgreSQL, em ambiente heterogêneo. Todas as bases de dados ocupam
aproximadamente 3 TB.

36
4.1   PROJETO DE ESTUDO DE CASO

O projeto do estudo de caso seguirá em 4 etapas e todos seus subitens, conforme modelo
proposto no capítulo 3:

1.   Selecionar banco de dados


a.   Atividade - Criar conexão
b.   Atividade - Selecionar tabela
c.   Atividade - Montar base metadados
d.   Atividade - Carregar tabelas selecionadas
2.   Carregar domínio
a.   Atividade - Montar domínio
b.   Atividade - Montar base nome
i.   Rotina de limpeza
ii.   Rotina de decomposição
iii.   Rotina Fonema
3.   Carregar dicionário
a.   Atividade - Selecionar dicionário
b.   Atividade - Montar dicionário
i.   Rotina de decomposição
ii.   Rotina Fonema
4.   Criar base classificada
a.   Atividade - Localizar termos para comparação
b.   Atividade - Executar função de similaridade
i.   Distância de Levenshtein
ii.   Coeficiente Dice
c.   Atividade - Executar fase de ajuste

Será detalhado cada um dos aspectos para o estudo de caso proposto, de forma que, ao
final, tenhamos o projeto completo do estudo de caso.

37
4.1.1   HIPÓTESE

O principal objetivo deste trabalho é melhorar a qualidade de dados em grandes bancos


de dados heterogêneos e, para isso, foi desenvolvida uma abordagem que, seguida corretamente,
vai proporcionar a melhoria esperada.

As principais hipóteses para este trabalho são:

•   H1 – A utilização da abordagem é eficaz na identificação de um conjunto de


dados inconsistentes.
•   H2 – A utilização da abordagem é eficaz para sugerir um conjunto de dados a
serem corrigidos

4.1.2   DADOS RELEVANTES

A hipótese H1 e H2 são de caráter objetivo e os dados necessários para análise dessas


hipóteses serão obtidos ao final da execução do processo.

4.2   EXECUÇÃO DO ESTUDO DE CASO

4.2.1   Selecionar banco de dados

Quando analisamos o ambiente da CAGECE, podemos perceber que existem vários


sistemas realizando troca de informações e que estes dados têm níveis de similaridade comum
entre eles.

Foram criadas todas as conexões necessárias ao processo conforme atividade criar


conexão:

4.2.1.1   Atividade - Criar conexão

1.   PRAX – Oracle
2.   SIC - SQLServer
3.   SIG - SQLServer
4.   SCO - SQLServer
5.   SISCOPE - Postgresql
38
6.   SEI - Oracle
7.   SGR – Oracle

Entradas e saídas desta atividade estão descritas na Tabela 10.

4.2.1.2   Atividade - Selecionar tabela

Durante esta atividade, observou-se que, para cada sistema, existe uma base de dados
geográfica. Vários sistemas da CAGECE são utilizados para analisar informações com base na
geografia. Então, selecionamos todas as tabelas que têm informação de geografia.

Entradas e saídas desta atividade estão descritas na Tabela 11.

4.2.1.3   Atividade - Montar base metadados

Buscamos na base de dados objeto de análises e gerou-se uma base de metadados


conforme esperado, com todas as tabelas selecionadas e seus respectivos campos. Todas estas
informações estão disponíveis na estrutura de dados que denominamos de TABELA.

Entradas e saídas desta atividade estão descritas na Tabela 13 bem como sua estrutura
de dados na Tabela 12.

4.2.1.4   Atividade - Carregar tabelas selecionadas

Foi possível montar uma consulta para recuperar todos os dados pertencentes às tabelas
selecionadas para análise e criar estrutura de dados compatível na área de trabalho ou stage para
receber estes dados, com base nas definições carregadas na estrutura de dados TABELA.

Esse processo teve a finalidade de liberar a base de produção de processo onerosos de


comparação.

A Tabela 29 demostra os resultados obtidos no banco de dados origem da CAGECE


(PRAX, SCO, SEI, SGR, SIC, SIG e SISCOPE). A amostra total é 3,053 tuplas carregadas no
modelo de banco de dados para o processo de classificação.

Entradas e saídas desta atividade estão descritas na Tabela 14.

Tabela 29 – Quantidade de tuplas carregadas por tabela


Banco de Dados Tabela Quantidade

ORACLE   LOC_LOCALIDADE   310  

39
Banco de Dados Tabela Quantidade

SQLServer   T_LOC   308  

ORACLE   D_GEO_GEOGRAFIA_PRAX   276  

ORACLE   LOC_LOCALIDADE_PRAX   787  

SQLServer   LOCALIDADE   305  

SQLServer   LOCALID   791  

PostgreSQL   TB_LOC   276  

4.2.2   Carregar domínio

Executamos as duas atividades mais importantes para o processo de melhoria da


qualidade na fase carregar domínio.

4.2.2.1   Atividade - Montar domínio

Geramos a estrutura de dados DOMÍNIO com leitura dos dados encontrados na estrutura
de dados TABELA. Assim obtivemos o SQL necessário para carregar todas as informações
necessárias ao processo em estrutura verticalizada. Esta atividade foi importante porque
montamos todas as informações coletadas nos sistemas de origem (independente de sua
estrutura) numa estrutura padrão, quando passamos seus dados de colunas para linhas. Dessa
forma, estabeleceu-se uma estrutura única com todos os dados coletados para análise nas tabelas
e sistemas de origem.

Entradas e saídas desta atividade estão descritas na Tabela 17 bem como sua estrutura
de dados na Tabela 15.

4.2.2.2   Atividade - Montar base nome

Geramos a estrutura de dados NOME com leitura dos dados encontrados na estrutura
de dados DOMÍNIO. Nesta atividade em que o dado troca de estrutura, foram realizados os
passos limpeza, decomposição e fonema necessários ao processo.

Entradas e saídas desta atividade estão descritas na Tabela 19 bem como sua estrutura
de dados na Tabela 18.

40
4.2.2.2.1   Rotina de limpeza

Retiramos todos os elementos mapeados que podem impossibilitar uma comparação de


similaridades. Durante este passo foi possível identificar que a rotina de limpeza não estava
funcionando corretamente para tratar o novo conjunto de caracteres especiais que foram
incluídos na rotina de limpeza conforme Tabela 30.

Tabela 30 – Definição elementos para limpeza


Elemento Tipo Descrição

[   Caracter   Abre  cochete  

]   Caracter   Fecha  cochete  

{   Caracter   Abre  chave  

}   Caracter   Fechar  chave  

(   Caracter   Abre  parêntese  

)   Caracter   Fecha  parêntese  

/   Caracter   Barra  

\   Caracter   Barra  inversa  

_   Caracter   Underline  

-­‐   Caracter   Traço  

.   Caracter   Ponto  

,   Caracter   Virgula  

;   Caracter   Ponto  e  virgula  

#   Caracter   Cerquiha  ou  Hastag  (Elemento  novo)  

41
Elemento Tipo Descrição

@   Caracter   Arroba  (Elemento  novo)  

$   Caracter   Cifrão  ou  Dólar  (Elemento  novo)  

%   Caracter   Porcentagem  (Elemento  novo)  

*   Caracter   Asterisco  (Elemento  novo)  

<   Caracter   Menor  (Elemento  novo)  

>   Caracter   Maior  (Elemento  novo)  

=   Caracter   Igual  (Elemento  novo)  

!   Caracter   Ponto  de  Exclamação  (Elemento  novo)  

? Caracter   Ponto  de  Interrogação  (Elemento  novo)  

4.2.2.2.2   Rotina de decomposição

Realizamos a fragmentação dos dados em unidades menores, segmentando-as até o


nível de termos. Este passo foi realizado usando como critério a presença de espaços em branco
entre os termos de uma string. Estes termos foram convertidos em novas tuplas que foram
usadas na atividade de classificação.

4.2.2.2.3   Rotina Fonema

Esta rotina fez uso do algoritmo BuscaBR (ajustado) para a língua portuguesa. Para cada
tupla gerada no processo de decomposição foi aplicado o algoritmo de fonema gerando, assim
uma base de fonemas que usamos para definir quais termos devem ser comparados com o
dicionário.

Durante a execução desta rotina, foi identificada a necessidade de fazer um ajuste no


algoritmo de fonema BuscaBR. Isso foi necessário devido à existência de termos muito
pequenos no idioma português falado no Brasil, onde temos forte influência indígena e, por
isso, em nosso vocabulário existem palavras com praticamente todas as letras sendo vogais.

42
O ajuste foi realizado na etapa de retirada de todas as vogais do termo. Passamos a
retirar apenas as ultimas vogais que tem a função de qualificar o gênero.

4.2.3   Carregar dicionário

Buscamos garantir a eficiência deste processo, tal como foi apresentado, utilizando
como dicionário a lista de localidades do Ceará o que tem denominação na CAGECE como
geografia.

Através das informações obtidas no Instituto Brasileiro de Geografia e Estatística -


IBGE, foi possível montar com exatidão nosso dicionário que será usado no processo de
classificação.

Também foram incluídas localidades que hoje são atendidas pela CAGECE, mas ainda
não fazem parte da lista disponibilizada pelo IBGE. Esta lista é atualizada a cada 10 anos e sua
última atualização foi em 2010.

4.2.3.1   Atividade - Selecionar dicionário

Foi gerado um arquivo no formato Excel para comtemplar todas as localidades


existentes no Estado do Ceará.

Entradas e saídas desta atividade estão descritas na Tabela 22.

4.2.3.2   Atividade - Montar dicionário

A geração da estrutura de dados DICIONÁRIO teve início com leitura dos dados
encontrados no arquivo Excel. Neste passo em que o dado troca de estrutura, foram realizados
os passos da rotina de limpeza, decomposição e fonema necessários ao processo.

Entradas e saídas desta atividade estão descritas na Tabela 24 bem como sua estrutura
de dados na Tabela 23.

4.2.3.2.1   Rotina de decomposição

Reexecução da rotina e seus resultados foram evidenciados na estrutura de dados


DICIONÁRIO.

4.2.3.2.2   Rotina Fonema

43
Reexecução da rotina e seus resultados foram evidenciados na estrutura de dados
DICIONÁRIO.

4.2.4   Criar base classificada

4.2.4.1   Atividade - Localizar termos para comparação

Realizada consulta às estruturas de dados NOME e DICIONÁRIO usando, como


condição de pesquisa, o relacionamento entre os campos NOME.FONEMA e
DICIONÁRIO.FONEMA.

Entradas e saídas desta atividade estão descritas na Tabela 25.

4.2.4.2   Atividade - Execução função de similaridade

Após execução da atividade 4.2.4.1 (localizar termos para comparação) e passar estes
dados para esta atividade, gerou-se a lista que passou para rotinas de similaridade.

Entradas e saídas desta atividade estão descritas na Tabela 26.

4.2.4.2.1   Distância de Levenshtein

Executamos a rotina para todo o conjunto de dois parâmetros recebidos como saída da
atividade 4.2.4.2.

4.2.4.2.2   Coeficiente Dice

Executamos a rotina para todo o conjunto de dois parâmetros recebidos como saída da
atividade 4.2.4.2.

4.2.4.3   Atividade - Fase de ajuste

Executamos esta atividade mais de uma vez, pois o ajuste necessário para obter o melhor
aproveitamento do processo de classificação foi basicamente mudando os parâmetros das
variáveis de qualidade.

Inicialmente, trabalhamos com parâmetros muito elevados que gerou um número


elevado de falso positivo. Isso ocorreu porque usamos os parâmetros de Levenshtein e Dice em
0,7 para cada, o que gerou os resultados apresentados Tabela 31.

44
A fase de ajuste dos parâmetros para calibra a classificação dos dados é necessária para
o processo não gerar um numero de classificações erradas que podem ser identificados na fase
analise do resultado.

Entradas e saídas desta atividade estão descritas na Tabela 28.

Tabela 31 – Resultados falso positivo


Qualidade
Banco de Dados
Tuplas Corrigir Erros Corretas

PRAX   310   55   64   191  

SCO   308   45   58   205  

SEI   276   49   61   166  

SGR   787   88   201   498  

SIC   305   46   51   208  

SIG   791   90   201   500  

SISCOPE   276   41   66   169  

Após este pequeno fracasso, foi possível avaliar melhor as condições dos parâmetros e
redefinir uma nova configuração capaz de atender o ajuste fino, cuja realização teve o intuito
de conseguir extrair o melhor potencial do processo com geração de números bem melhores a
partir desta nova configuração, que podemos verificar na Tabela 32.

Tabela 32 – Variáveis de qualidade


Parâmetros Valores

Língua     Portugues  Brasil  (BuscaBR)  

Precisão   Levenshtein  =  1  and  Dice  =  1  

Levenshtein  >=  0,8  and  Dice  >=  0,7    


Similaridade  automática   OR    
Levenshtein  >=  0,66  and  Dice  >=  0,66  

Levenshtein  >=  0,65  and  Dice  >=  0,35    


OR    
Substantial  Similarity   Levenshtein  >=  0,60  and  Dice  >=  0,44    
OR    
Levenshtein  >=  0,5  e  Dice  >=  0,6  

45
Realizados os ajustes no processo para classificar o que será compatível e incompatível,
conforme novos critérios, obtivemos o resultado conforme Tabela 33.

É possível notar que após calibrar os parâmetros (ver Tabela 32), obtivemos uma
melhorar no numero de dados para correção que esta representado na coluna corrigir da Tabela
33. Este numero representa o numero total de dados que devem ser corrigidos para melhoria da
qualidade de dados no sistema. A coluna erros representa a quantidade de dados que não foi
possível classificar como nenhum grau de similaridade. A coluna corretas representa a
totalidade de dados corretos que existem na base.

Tabela 33 – Resultados obtidos


Qualidade
Banco de Dados
Tuplas Corrigir Erros Corretas

PRAX   310   93   26   191  

SCO   308   76   27   205  

SEI   276   81   29   166  

SGR   787   171   118   498  

SIC   305   78   19   208  

SIG   791   172   119   500  

SISCOPE   276   75   32   169  

4.3   ANÁLISE DAS HIPÓTESES

4.3.1   Análise da hipótese H1

Após a execução do processo “Montagem Domínio” e análise dos resultados obtidos,


foi verificado o sucesso desta etapa com a geração de 37.236 tuplas referentes aos dados
coletados nas tabelas e sistemas de origem e 4.329 registros com informações distintas, isto é,
o real domínio da informação.

Também foi possível avaliar outro dado importante: das 37.236 tuplas, 12.280 têm um
campo com seu valor igual a espaço em branco e outras 307 tem valor nulo. Todas as demais
têm algum tipo de informação.
46
Esta abordagem se mostrou-se satisfatória no que diz respeito ao conhecimento gerado
sobre o domínio da informação presente nos sistemas avaliados. Isso torna possível o
aprimoramento do dicionário elaborado e a reaplicação deste dicionário melhorado no intuito
de elevar o número de correções possíveis.

Como avaliação de inconsistências, foi possível observar que os dados estão


contaminados com caracteres desnecessários. Só isso já torna os dados inconsistentes ou de má
qualidade. A classificação foi realizar sem encontrar similaridade na base de conhecimento
definida como dicionário.

4.3.2   Análise da hipótese H2

Para se obter uma proposição de correção de dado é necessário identificá-lo e apresentar


resultados de similaridade relevantes para propor uma correção. Mas, para que isso ocorra, é
necessário que estes dados possam ser comparados. O que foi prejudicado por uma rotina de
limpeza que não contemplava todos os tipos de caractere especial que vai evitar uma possível
comparação.

Este refinamento foi aplicado ao processo para obtermos resultados melhores no


processo de comparação de termos conforme Tabela 30.

Após as correções aplicadas ao processo, conseguimos obter resultados expressivos


quando analisamos a Tabela 33, onde é possível avaliar a quantidade de registros apresentados
com proposta para correção nos vários sistemas.

4.4   CONSIDERAÇÕES FINAIS

Durante o estudo de caso, foi possível observar que quanto mais específico o assunto
classificado, melhores foram os resultados.

O consumo de espaço também é um fator chave para a realização de análises em grandes


volumes de tabelas. Isso se deve ao modelo proposto usar uma área de trabalho ou stage,
recebendo uma carga completa das tabelas de origem e processamento de dados relacionados a
outras tabelas neste modelo, a fim de permitir que a reversão e a localização dos dados possa
ser realizada para aplicar as correções proposta ou apenas indicação de sua localização.
47
O algoritmo de fonema BuscaBR, teve de ser adaptado ao processo. Isso foi necessário
porque há palavras em Língua Portuguesa falada no Brasil com palavras de origem indígena
composta exclusivamente de vogais. Na versão original de BuscaBR, todas as vogais são
descartadas o que não seria possível para geração de um fonema valido para determinados
termos de origem indígena. Como o processo foi projetado para comparar termo por termo,
também foi encontrado algumas palavras muito pequenas que no algoritmo original, pode gerar
um resultado não significativo.

Para termos classificados como "sem similaridade" que fazem parte do assunto no
formato definido no dicionário chamado "jargão técnico", é possível adicionar novos dados ao
dicionário e repetir o processo de classificação até obter o resultado esperado.

As dimensões encontradas no final do processo foram:

1.   Precisão (informação correta e fiável);


2.   Credibilidade (a informação é verdadeira);
3.   Reputação (fonte e conteúdo da informação);
4.   Relevância (a informação é aplicável e útil);
5.   Representação consistente (informação apresentada no mesmo formato);
6.   Valor incluído (a informação é benéfica e fornece vantagens);

4.5   CONCLUSÃO DO CAPÍTULO

Nesse capítulo foram apresentados os resultados obtidos no estudo de caso aplicado na


Companhia de Água e Esgoto do Estado do Ceará – CAGECE.

Foi um teste importante para análise do processo, porque analisamos o mesmo domínio
de informação em diferentes formatos e bases de dados.

Durante a execução do teste foi possível identificar que a rotina de limpeza não estava
funcionando corretamente para tratar caracteres especiais conforme Tabela 30. A rotina de
fonemas estabelecida previamente para o modo de Língua Portuguesa usando o BuscaBR (DE
LUCENA, 2006), não obteve o resultado esperado como uma aplicação para certas palavras de
origens nativas, que foram exclusivamente escritas por vogais. Isso ocorre porque este
algoritmo tem, como regra, a remoção de todas as vogais.

48
Efeito secundário produzido durante a introdução de uma solução que atenda a uma
precisão relativa que existe em caso de múltiplas escolhas possíveis. Este efeito pode ser
evidenciado nos resultados obtidos para termo que tem grafia semelhante com diferença apenas
na gráfica ou definição de gênero. Como exemplos temos:

1.   MASSAPÉ que significa terra ou solo e MASSAPÊ que é um município do


Ceará.
2.   SANTO e SANTA que tem o mesmo significado, mas existe a mudança de
gênero.

O item 1 pode ser resolvido com maior rigor no dicionário que será usado. No estudo
de caso aplicado à geografia, não devemos ter nomes de qualquer outro termo que não esteja
neste domínio. Quanto ao item 2, devemos definir uma lista de itens para analise, já que não
temos uma solução eminente para este caso. O melhor é identificar e separar para análise.

Na condução desse trabalho, obtivemos vários resultados da análise realizada no conjunto


dados selecionados para classificação.

Estes dados estão apresentados em forma de tabelas por sistema de origem. Todos estes
resultados estão disponíveis como evidencia do processo executado no APÊNDICE B –
RESULTADOS:

1.   Tabela 34 – Resultados Sistema PRAX


2.   Tabela 35 – Resultados Sistema SCO
3.   Tabela 36 – Resultados Sistema SEI
4.   Tabela 37 – Resultados Sistema SIC
5.   Tabela 38 – Resultados Sistema SISCOPE
6.   Tabela 39 – Resultados Sistema SRG
7.   Tabela 40 – Resultados Sistema SIG

49
5   CONCLUSÃO E TRABALHOS FUTUROS

Neste capítulo, são apresentadas as conclusões finais após execução do processo em


ambiente corporativo com bases de dados heterogêneas.

O início do procedimento se deu com a análise de uma amostra de 3.053 tuplas,


coletadas em onze sistemas e três SGBD’S diferentes. Com o objetivo de quantificar e qualificar
inconsistências, foram executadas todas as fases e atividades do processo para tratamento e
análise de comparação de string.

O processo obteve 63,45% para a similaridade para "precisão" (base já estava correta)
ou 1937 tuplas, 24,44% para "similaridade automática" (melhoria proposta) ou 746 tuplas e
12,12% para "sem similaridade" (imprecisão ou erro) ou 370 tuplas, tomando como referência
o dicionário baseado no IBGE com inclusão de localidades operados pela CAGECE (mas não
disponibilizada pelo IBGE) sem aplicação de qualquer termo específico ou jargão. O resultado
de 24,44% para "semelhança automática" ou 746 tuplas deve ser alterado/aplicado a base de
dados para melhorar a qualidade dos dados, elevando o grau de precisão para 87,88%. O
resultado de 12,12% para "sem similaridade" ou 370 tuplas, representa o grau de imprecisão
imputado no sistema por abuso do domínio analisado.

Após apresentar o cenário e todas as proposta para correção de dados apresentado pelo
processo. Foi possível verificar sua eficiência em gerar uma melhor qualidade de dados em
ambientes corporativos e base de dados heterogenias.

5.1   PRINCIPAIS CONTRIBUIÇÕES

Como principais contribuições do trabalho realizado durante essa pesquisa, podemos


destacar:

•   Desenvolvimento de um processo que permite automatizar o processo de análise e


classificação de dados de má qualidade.

50
•   Execução de um estudo de caso para avaliar a abordagem definida, de forma a
comprovar efetivamente a melhoria na qualidade de dados.

5.2   LIMITAÇÕES

O estudo de caso foi realizado em apenas uma empresa, e isso pode ser limitante para
avaliar a eficácia da abordagem e gerar uma base de conhecimento consistente sobre o assunto.
Porém, um dos objetivos do trabalho é disponibilizar o conhecimento formado a partir desta
experiência.

Outra limitação foi a abordagem ter sido realizada apenas sobre o domínio especifico.

5.3   TRABALHOS FUTUROS

Para trabalhos futuros, alguns experimentos poderão ser realizados usando outros
algoritmos para identificar a similaridade de string.

Também poderão ser usados banco de dados NoSql ou DBF, sendo que este último para
projetos legados que podem ser avaliados antes de passar por um processo de migração.

51
REFERÊNCIAS BIBLIOGRÁFICAS

(PIPINO ET AL, PIPINO, Leo L.; LEE, Yang W.; WANG, Richard Y. Data quality
2002) assessment. Communications of the ACM, v. 45, n. 4, p. 211-218, 2002.

(GEERTS FLORIS, GEERTS, Floris et al. The LLUNATIC data-cleaning framework.


2013) Proceedings of the VLDB Endowment, v. 6, n. 9, p. 625-636, 2013.

WANG, R. Y.; ZIAD M.; LEE, Y. W. (2000) Data Quality. Kluwer


(WANG ZIAD, 2000)
Academics Publishers.Hinghan, MA, USA.

SMITH, Temple F.; WATERMAN, Michael S. Identification of


(SMITH
common molecular subsequences. Journal of molecular biology, v. 147,
WATERMAN, 1980)
n. 1, p. 195-197, 1981.

(RISTAD YANILOS, SVEN RISTAD, Eric; YIANILOS, Peter N. Learning string edit
1996) distance. In: eprint arXiv: cmp-lg/9610005. 1996. p. 10005.

ROHLF, F. J. Numerical taxonomy and multivariate analysis system


(ROHLF, 1990)
(NTSYS-pc). Department of Ecology and Evolution, New York, 1990.

JIN, Liang; LI, Chen; MEHROTRA, Sharad. Efficient record linkage in


large data sets. In: Database Systems for Advanced Applications,
(JIN ET AL, 2003)
2003.(DASFAA 2003). Proceedings. Eighth International Conference
on. IEEE, 2003. p. 137-146.

(RUSSELL ODELL, RUSSELL, R.; ODELL, M. Soundex Patent 01 261 167, 1918.
1918)

DE LUCENA, F. J. T. Busca Fonética em Português do Brasil, 2006.


(DE LUCENA, 2006)

LEVENSHTEIN, V. I. Binary codes capable of correcting spurious


(LEVENSHTEIN,
insertions and deletions of ones. Problems of Information transmission,
1965)
Problems of Information Transmission v.1, n.1, p. 8–17, 1965.

52
SØRENSEN, Thorvald. {A method of establishing groups of equal
amplitude in plant sociology based on similarity of species and its
(SORENSEN, 1948)
application to analyses of the vegetation on Danish commons}. Biol.
Skr., v. 5, p. 1-34, 1948.

DICE, Lee R. Measures of the amount of ecologic association between


(DICE, 1945)
species. Ecology, v. 26, n. 3, p. 297-302, 1945.

(KRISHNAN ET AL, KRISHNAN, Sanjay et al. Towards reliable interactive data cleaning: a
2016) user survey and recommendations. In: HILDA@ SIGMOD. 2016. p. 9.

DUAN, Yucong; LEE, Roger. Knowledge management for model driven


data cleaning of very large database. In: Software Engineering, Artificial
(DUAN LEE, 2013)
Intelligence, Networking and Parallel/Distributed Computing 2012.
Springer Berlin Heidelberg, 2013. p. 143-158.

CHRISTEN, P. Towards Parameter-free Blocking for Scalable Record


(CHRISTEN, 2007) Linkage. ANU Joint Computer Science Technical Report Series,
Agosto/2007.

(BATINI BATINI, Carlo; SCANNAPIECO, Monica. Data Quality Dimensions.


SCANNAPIECO, In: Data and Information Quality. Springer International Publishing,
2016) 2016. p. 21-51.

International Conference on Information Quality (ICIQ)


(ICIQ, 2015)
http://mitiq.mit.edu/ICIQ/2015/

International Workshop on Information Quality in Information Systems


(IQIS)
(IQIS). http://iqis.irisa.fr/

International Workshop on Quality of Information Systems (QoIS).


(QoIS, 2006)
http://deptinfo.cnam.fr/qois2006/

ECKERSON, W. Data Warehousing Special Report: Data quality and


(ECKERSON, 2002)
the bottom line. Applications Development Trends, v. 1, 2002.

53
FERREIRA, Aurélio Buarque de Holanda. Novo Aurélio XXI: o
(FERREIRA, 1999) dicionário da língua portuguesa. totalmente revista e ampliada. Rio de
Janeiro: Nova Fronteira, 1999.

PINHO, S. F. Avaliacao da qualidade de dados pela nao conformidade.


(PINHO, 1999) 2001. Tese de Doutorado. Dissertaçao de Mestrado, Universidade
Federal do Rio de Janeiro, Rio de Janeiro–RJ.

ISSO 9000:2015, Sistema de gestão da qualidade – Fundamentos e


(ISO 9000, 2015)
vacabuláro / Comitê: ABNT/CB-025 Qualidade

ENGLISH, L.P. Improving Data Warehouse and Business Information


(ENGLISH, 1999) Quality – Methods for Reducong Costs and Increasing Profits. USA:
Wiley, 1999. 518p.

WANG, Richard Y.; STRONG, Diane M. Beyond accuracy: What data


(WANG DIANE,
quality means to data consumers. Journal of management information
1996)
systems, v. 12, n. 4, p. 5-33, 1996.

(SCANNAPIECO SCANNAPIECO, Monica; MISSIER, Paolo; BATINI, Carlo. Data


BATINI, 2005) Quality at a Glance. Datenbank-Spektrum, v. 14, p. 6-14, 2005.

KOLB, Lars; THOR, Andreas; RAHM, Erhard. Dedoop: efficient


(KOLB THOR, 2012) deduplication with Hadoop. Proceedings of the VLDB Endowment, v. 5,
n. 12, p. 1878-1881, 2012.

(CLIFFORD CLIFFORD, H. T., and W. STEPHENSON. "1975. An introduction to


STEPHENSON, numerical classification."
1975)

CHU, XU, et al. "Katara: A data cleaning system powered by knowledge


(CHU XU, 2015) bases and crowdsourcing." Proceedings of the 2015 ACM SIGMOD
International Conference on Management of Data. ACM, 2015.

54
HAAS, DANIEL, et al. "Wisteria: Nurturing scalable data cleaning
(HAAS DANIEL,
infrastructure." Proceedings of the VLDB Endowment 8.12 (2015):
2015)
2004-2007.

KHAYYAT, ZUHAIR, et al. "Bigdansing: A system for big data


(KHAYYAT
cleansing." Proceedings of the 2015 ACM SIGMOD International
ZUHAIR, 2015)
Conference on Management of Data. ACM, 2015.

55
APÊNDICE A – ALGORITMOS

SOUNDEX

//Script here

var soundex = function (s) {

var a = s.toLowerCase().split(''),

f = a.shift(),

r = '',

codes = {

a: '', e: '', i: '', o: '', u: '',

b: 1, f: 1, p: 1, v: 1,

c: 2, g: 2, j: 2, k: 2, q: 2, s: 2, x: 2, z: 2,

d: 3, t: 3,

l: 4,

m: 5, n: 5,

r: 6

};

r=f+

.map(function (v, i, a) { return codes[v] })

.filter(function (v, i, a) {

return ((i === 0) ? v !== codes[f] : v !== a[i - 1]);

})

.join('');

56
return (r + '000').slice(0, 4).toUpperCase();

};

BUSCABR

//Script here

// 0.Criando fonema BUSCABR

var fonema = parte_nome;

// 1.Devemos retirar os caracteres especiais e converter todas as letras para Maiúsculo;

// 2.Agora eliminamos todos os acentos

var str = fonema.replace(/Â/g, "A");

fonema = str;

var str = fonema.replace(/Á/g, "A");

fonema = str;

var str = fonema.replace(/À/g, "A");

fonema = str;

var str = fonema.replace(/Ã/g, "A");

fonema = str;

var str = fonema.replace(/Ê/g, "E");

fonema = str;

var str = fonema.replace(/É/g, "E");

fonema = str;

var str = fonema.replace(/Í/g, "I");

fonema = str;
57
var str = fonema.replace(/Ó/g, "O");

fonema = str;

var str = fonema.replace(/Õ/g, "O");

fonema = str;

var str = fonema.replace(/Ú/g, "U");

fonema = str;

// 3.Substituimos Y por I;

var str = fonema.replace(/Y/g, "I");

fonema = str;

// 4.Substituimos BR por B;

var str = fonema.replace(/BR/g, "B");

fonema = str;

// 5.Substituimos PH por F;

var str = fonema.replace(/PH/g, "F");

fonema = str;

// 6.Substituimos GR, MG, NG, RG por G;

var str = fonema.replace(/GR/g, "G");

fonema = str;

var str = fonema.replace(/MG/g, "G");

fonema = str;

var str = fonema.replace(/NG/g, "G");

fonema = str;

58
var str = fonema.replace(/RG/g, "G");

fonema = str;

// 7.Substituimos GE, GI, RJ, MJ, NJ por J;

var str = fonema.replace(/GE/g, "J");

fonema = str;

var str = fonema.replace(/GI/g, "J");

fonema = str;

var str = fonema.replace(/RJ/g, "J");

fonema = str;

var str = fonema.replace(/MJ/g, "J");

fonema = str;

var str = fonema.replace(/NJ/g, "J");

fonema = str;

// Substituimos CE, CI e CH por S

//var str = fonema.replace(/CE/g, "S");

//fonema = str;

//var str = fonema.replace(/CI/g, "S");

//fonema = str;

//var str = fonema.replace(/CH/g, "S");

//fonema = str;

// Substituimos CT por T

//var str = fonema.replace(/CT/g, "T");

//fonema = str;

59
//var str = fonema.replace(/CS/g, "S");

//fonema = str;

// 13.Substituimos Ç, X, TS, C, Z, RS por S;

var str = fonema.replace(/Ç/g, "S");

fonema = str;

var str = fonema.replace(/X/g, "S");

fonema = str;

var str = fonema.replace(/TS/g, "S");

fonema = str;

var str = fonema.replace(/C/g, "S");

fonema = str;

var str = fonema.replace(/Z/g, "S");

fonema = str;

var str = fonema.replace(/RS/g, "S");

fonema = str;

// 8.Substituimos Q, CA, CO, CU, C por K;

var str = fonema.replace(/Q/g, "K");

fonema = str;

var str = fonema.replace(/CA/g, "K");

fonema = str;

var str = fonema.replace(/CO/g, "K");

fonema = str;

var str = fonema.replace(/CU/g, "K");

fonema = str;

60
var str = fonema.replace(/C/g, "K");

fonema = str;

// 9.Substituimos LH por L;

var str = fonema.replace(/LH/g, "L");

fonema = str;

// 10.Substituimos N, RM, GM, MD, SM e Terminação AO por M;

var str = fonema.replace(/N/g, "M");

fonema = str;

var str = fonema.replace(/RM/g, "M");

fonema = str;

var str = fonema.replace(/GM/g, "M");

fonema = str;

var str = fonema.replace(/MD/g, "M");

fonema = str;

var str = fonema.replace(/SM/g, "M");

fonema = str;

// 11.Substituimos NH por N;

var str = fonema.replace(/NH/g, "N");

fonema = str;

// 12.Substituimos PR por P;

var str = fonema.replace(/PR/g, "P");

fonema = str;

61
// 14.Substituimos LT, TR, CT, RT, ST por T;

var str = fonema.replace(/LT/g, "T");

fonema = str;

var str = fonema.replace(/TR/g, "T");

fonema = str;

var str = fonema.replace(/CT/g, "T");

fonema = str;

var str = fonema.replace(/RT/g, "T");

fonema = str;

var str = fonema.replace(/ST/g, "T");

fonema = str;

// 15.Substituimos W por V;

var str = fonema.replace(/W/g, "V");

fonema = str;

// 16.Eliminamos as terminações S, Z, R, R, M, N, AO e L;

var str = fonema;

var tam = str.length;

if (str.substring(tam,tam-1) == "S" || str.substring(tam,tam-1) == "Z" ||

str.substring(tam,tam-1) == "R" || str.substring(tam,tam-1) == "M" ||

str.substring(tam,tam-1) == "N" || str.substring(tam,tam-1) == "L")

fonema = str.substring(0,tam-1);

62
var str = fonema;

var tam = str.length - 2;

if (str.substring(tam,tam+1) == "A" && str.substring(tam+1,tam+2) == "O")

fonema = str.substring(0,tam);

// Modificado terminados em A, O

var str = fonema;

var tam = str.length;

if (str.substring(tam,tam-1) == "A" || str.substring(tam,tam-1) == "O")

fonema = str.substring(0,tam-1);

// 17.Substituimos R por L;

var str = fonema.replace(/R/g, "L");

fonema = str;

// 18.O BuscaBr diz para eliminamos todas as vogais e o H

// Modificado

/*

var str = fonema.replace(/A/g, "");

fonema = str;

var str = fonema.replace(/E/g, "");

fonema = str;

var str = fonema.replace(/I/g, "");

63
fonema = str;

var str = fonema.replace(/O/g, "");

fonema = str;

var str = fonema.replace(/U/g, "");

fonema = str;

*/

var str = fonema.replace(/H/g, "");

fonema = str;

// 20.Eliminamos todas as letras em duplicidade;

var str = fonema;

var tam = str.length;

for (i = 0; i <= str.length-1; i++) {

if (str[i] == str[i+1]) {

var p1 = str.substring(0,i);

var p2 = str.substring(i+1,tam);

fonema = p1.concat(p2);

var str = fonema;

var tam = str.length;

for (i = 0; i <= str.length-1; i++) {

if (str[i] == str[i+1]) {

var p1 = str.substring(0,i);

var p2 = str.substring(i+1,tam);

fonema = p1.concat(p2);

64
}

var str = fonema;

var tam = str.length;

for (i = 0; i <= str.length-1; i++) {

if (str[i] == str[i+1]) {

var p1 = str.substring(0,i);

var p2 = str.substring(i+1,tam);

fonema = p1.concat(p2);

var str = fonema;

var tam = str.length;

for (i = 0; i <= str.length-1; i++) {

if (str[i] == str[i+1]) {

var p1 = str.substring(0,i);

var p2 = str.substring(i+1,tam);

fonema = p1.concat(p2);

// Caso fonema vazio

var str = fonema;

var tam = str.length;

if (tam == 0) {

fonema = "1";

65
}

LEVENSHITEIN

//Script here

// Compute the edit distance between the two given strings

var a = pricipal;

var b = secundario;

var matrix = [];

// increment along the first column of each row

var i;

for(i = 0; i <= b.length; i++){

matrix[i] = [i];

// increment each column in the first row

var j;

for(j = 0; j <= a.length; j++){

matrix[0][j] = j;

// Fill in the rest of the matrix

for(i = 1; i <= b.length; i++){

for(j = 1; j <= a.length; j++){


66
if(b.charAt(i-1) == a.charAt(j-1)){

matrix[i][j] = matrix[i-1][j-1];

} else {

matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution

Math.min(matrix[i][j-1] + 1, // insertion

matrix[i-1][j] + 1)); // deletion

//return matrix[b.length][a.length];

var distancia = matrix[b.length][a.length];

DICE

//Script here

// Compute the edit distance between the two given strings

function getCharactersPair(np)

var tamanho = np.length;

var pairs = [tamanho];

for(var i=0; i<np.length;i++)

pairs[i] = np.substring(i, i+2);

67
return pairs;

var np1 = pricipal;

var np2 = secundario;

var pairCharacters1 = getCharactersPair(np1);

var pairCharacters2 = getCharactersPair(np2);

var value = 0.0;

for(var i=0 ; i<pairCharacters1.length;i++)

var pair1 = pairCharacters1[i];

for(var j=0; j<pairCharacters2.length; j++)

var pair2 = pairCharacters2[j];

if(pair1 ==pair2)

value++;

break;

var diceCoefficient = (2*value)/(pairCharacters1.length+pairCharacters2.length);

68
APÊNDICE B – RESULTADOS

Resultados para sistema PRAX com banco de dados Oracle do tipo compatível na Tabela
34.

Tabela 34 – Resultados Sistema PRAX


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ACARAU ACARAÚ 1.00 0.83 0.67
ALCANTARAS ALCÂNTARAS 1.00 0.90 0.80
AMARA AMARO 1.00 0.80 0.60
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
ARARENDA ARARENDÁ 1.00 0.88 0.75
ASSARE ASSARÉ 1.00 0.83 0.67
BANABUIU BANABUIÚ 1.00 0.88 0.75
BATURITE BATURITÉ 1.00 0.88 0.75
BITUPITA BITUPITÁ 1.00 0.88 0.75
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CANAA CANAAN 1.00 0.83 0.73
CANAFISTULA CANAFÍSTULA 1.00 0.91 0.82
CANINDE CANINDÉ 1.00 0.86 0.71
CARIRE CARIRÉ 1.00 0.83 0.67
CARIRIACU CARIRIAÇU 1.00 0.89 0.78
CARIUS CARIÚS 1.00 0.83 0.67
CARUATAI CARUATAÍ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
CONCEICAO CONCEIÇÃO 2.00 0.78 0.67
COREAU COREAÚ 1.00 0.83 0.67
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
DAGUA DÁGUA 1.00 0.80 0.60
ERERE ERERÊ 1.00 0.80 0.80
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GAVIAO GAVIÃO 1.00 0.83 0.67
GONCALO GONÇALO 1.00 0.86 0.71
GRACA GRAÇA 1.00 0.80 0.60
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82
ICAPUI ICAPUÍ 1.00 0.83 0.67
ICO ICÓ 1.00 0.67 0.33
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00

69
Termo Comparação Termo Dicionário Operações Levenshtein Dice
INHARIN INHARIM 1.00 0.86 0.86
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUACU IPAGUAÇU 1.00 0.88 0.75
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IRAJA IRAJÁ 1.00 0.80 0.60
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ITAICABA ITAIÇABA 1.00 0.88 0.75
ITAPAGE ITAPAGÉ 1.00 0.86 0.71
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JOAO JOÃO 1.00 0.75 0.50
JOSE JOSÉ 1.00 0.75 0.50
JUCAS JUCÁS 1.00 0.80 0.60
MACARAU MACARAÚ 1.00 0.86 0.71
MARACANAU MARACANAÚ 1.00 0.89 0.78
MARTINOPOLE MARTINÓPOLE 1.00 0.91 0.82
MARTINOPOLES MARTINÓPOLE 2.00 0.83 0.70
MASSAPE MASSAPÉ 1.00 0.86 0.71
MASSAPE MASSAPÊ 1.00 0.86 0.71
MAZAGAO MAZAGÃO 1.00 0.86 0.71
MILHA MILHÃ 1.00 0.80 0.60
MIRAIMA MIRAÍMA 1.00 0.86 0.71
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
PACUJA PACUJÁ 1.00 0.83 0.67
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PECEM PECÉM 1.00 0.80 0.60
POCO POÇO 1.00 0.75 0.50
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUITAIUS QUITAIÚS 1.00 0.88 0.75
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUITERIANOPOLIS QUITERIANÓPOLIS 1.00 0.93 0.87
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXERE QUIXERÉ 1.00 0.86 0.71
REDENCAO REDENÇÃO 2.00 0.75 0.62
SEBASTIAO SEBASTIÃO 1.00 0.89 0.78
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
SIUPE SIUPÉ 1.00 0.80 0.60
SOLONOPOLE SOLONÓPOLE 1.00 0.90 0.80
TAPUIARA TAPUIARÁ 1.00 0.88 0.75

70
Termo Comparação Termo Dicionário Operações Levenshtein Dice
TAUA TAUÁ 1.00 0.75 0.50
TEJUCUOCA TEJUÇUOCA 1.00 0.89 0.78
TEJUSSUOCA TEJUÇUOCA 2.00 0.80 0.74
TIANGUA TIANGUÁ 1.00 0.86 0.71
TIMBAUBA TIMBAÚBA 1.00 0.88 0.75
TORROES TORRÕES 1.00 0.86 0.71
TRIANGULO TRIÂNGULO 1.00 0.89 0.78
UBAUNA UBAÚNA 1.00 0.83 0.67
VARZEA VÁRZEA 1.00 0.83 0.67
VICOSA VIÇOSA 1.00 0.83 0.67

Resultados para sistema SCO com banco de dados SQLServer do tipo compatível na
Tabela 35.

Tabela 35 – Resultados Sistema SCO


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ACARAU ACARAÚ 1.00 0.83 0.67
ALCANTARA ALCÂNTARAS 2.00 0.80 0.63
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
ARARENDA ARARENDÁ 1.00 0.88 0.75
ASSARE ASSARÉ 1.00 0.83 0.67
BANABUIU BANABUIÚ 1.00 0.88 0.75
BATURITE BATURITÉ 1.00 0.88 0.75
BITUPITA BITUPITÁ 1.00 0.88 0.75
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CARIRE CARIRÉ 1.00 0.83 0.67
CARIRIACU CARIRIAÇU 1.00 0.89 0.78
CARIUS CARIÚS 1.00 0.83 0.67
CARUATAI CARUATAÍ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
COREAU COREAÚ 1.00 0.83 0.67
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
ERERE ERERÊ 1.00 0.80 0.80
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GONCALO GONÇALO 1.00 0.86 0.71
GRACA GRAÇA 1.00 0.80 0.60
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82

71
Termo Comparação Termo Dicionário Operações Levenshtein Dice
ICAPUI ICAPUÍ 1.00 0.83 0.67
ICO ICÓ 1.00 0.67 0.33
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IRAJA IRAJÁ 1.00 0.80 0.60
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ITAICABA ITAIÇABA 1.00 0.88 0.75
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JOAO JOÃO 1.00 0.75 0.50
JOSE JOSÉ 1.00 0.75 0.50
JUCAS JUCÁS 1.00 0.80 0.60
MACARAU MACARAÚ 1.00 0.86 0.71
MARACANAU MARACANAÚ 1.00 0.89 0.78
MARRUAS MARRUÁS 1.00 0.86 0.71
MASSAPE MASSAPÉ 1.00 0.86 0.71
MASSAPE MASSAPÊ 1.00 0.86 0.71
MIRAIMA MIRAÍMA 1.00 0.86 0.71
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
OTAVILANDIA OTAVILÂNDIA 1.00 0.91 0.82
PACUJA PACUJÁ 1.00 0.83 0.67
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PECEM PECÉM 1.00 0.80 0.60
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXERE QUIXERÉ 1.00 0.86 0.71
REDENCAO REDENÇÃO 2.00 0.75 0.62
SEBASTIAO SEBASTIÃO 1.00 0.89 0.78
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
SIUPE SIUPÉ 1.00 0.80 0.60
SOLONOPOLE SOLONÓPOLE 1.00 0.90 0.80
TAPUIARA TAPUIARÁ 1.00 0.88 0.75
TAUA TAUÁ 1.00 0.75 0.50
TEJUCUOCA TEJUÇUOCA 1.00 0.89 0.78
TIANGUA TIANGUÁ 1.00 0.86 0.71
TORROES TORRÕES 1.00 0.86 0.71
UBAUNA UBAÚNA 1.00 0.83 0.67

72
Termo Comparação Termo Dicionário Operações Levenshtein Dice
VARZEA VÁRZEA 1.00 0.83 0.67

Resultados para sistema SEI com banco de dados Oracle do tipo compatível na Tabela
36.

Tabela 36 – Resultados Sistema SEI


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ACARAU ACARAÚ 1.00 0.83 0.67
ALCANTARAS ALCÂNTARAS 1.00 0.90 0.80
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
ARARENDA ARARENDÁ 1.00 0.88 0.75
ASSARE ASSARÉ 1.00 0.83 0.67
BATURITE BATURITÉ 1.00 0.88 0.75
BITUPITA BITUPITÁ 1.00 0.88 0.75
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CANAA CANAAN 1.00 0.83 0.73
CAPITAL CAPITÃO 2.00 0.71 0.57
CARIRE CARIRÉ 1.00 0.83 0.67
CARIRIACU CARIRIAÇU 1.00 0.89 0.78
CARIUS CARIÚS 1.00 0.83 0.67
CARUATAI CARUATAÍ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
CONCEICAO CONCEIÇÃO 2.00 0.78 0.67
COREAU COREAÚ 1.00 0.83 0.67
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
ERERE ERERÊ 1.00 0.80 0.80
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GONCALO GONÇALO 1.00 0.86 0.71
GRACA GRAÇA 1.00 0.80 0.60
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82
ICO ICÓ 1.00 0.67 0.33
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00
INHARIN INHARIM 1.00 0.86 0.86
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IRAJA IRAJÁ 1.00 0.80 0.60
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ITAICABA ITAIÇABA 1.00 0.88 0.75

73
Termo Comparação Termo Dicionário Operações Levenshtein Dice
ITAPAGE ITAPAGÉ 1.00 0.86 0.71
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JOAO JOÃO 1.00 0.75 0.50
JOSE JOSÉ 1.00 0.75 0.50
MACARAU MACARAÚ 1.00 0.86 0.71
MARACANAU MARACANAÚ 1.00 0.89 0.78
MARTINOPOLE MARTINÓPOLE 1.00 0.91 0.82
MARTINOPOLES MARTINÓPOLE 2.00 0.83 0.70
MASSAPE MASSAPÉ 1.00 0.86 0.71
MASSAPE MASSAPÊ 1.00 0.86 0.71
MAZAGAO MAZAGÃO 1.00 0.86 0.71
MIRAIMA MIRAÍMA 1.00 0.86 0.71
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
PACUJA PACUJÁ 1.00 0.83 0.67
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PECEM PECÉM 1.00 0.80 0.60
POCO POÇO 1.00 0.75 0.50
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUITAIUS QUITAIÚS 1.00 0.88 0.75
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUITERIANOPOLIS QUITERIANÓPOLIS 1.00 0.93 0.87
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXERE QUIXERÉ 1.00 0.86 0.71
REDENCAO REDENÇÃO 2.00 0.75 0.62
SEBASTIAO SEBASTIÃO 1.00 0.89 0.78
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
SIUPE SIUPÉ 1.00 0.80 0.60
TAPUIARA TAPUIARÁ 1.00 0.88 0.75
TAUA TAUÁ 1.00 0.75 0.50
TEJUCUOCA TEJUÇUOCA 1.00 0.89 0.78
TIANGUA TIANGUÁ 1.00 0.86 0.71
TIMBAUBA TIMBAÚBA 1.00 0.88 0.75
TORROES TORRÕES 1.00 0.86 0.71
TRIANGULO TRIÂNGULO 1.00 0.89 0.78
UBAUNA UBAÚNA 1.00 0.83 0.67
VARZEA VÁRZEA 1.00 0.83 0.67
VICOSA VIÇOSA 1.00 0.83 0.67

74
Resultados para sistema SIC com banco de dados Oracle do tipo compatível na Tabela
37.

Tabela 37 – Resultados Sistema SIC


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ACARAU ACARAÚ 1.00 0.83 0.67
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
ARARENDA ARARENDÁ 1.00 0.88 0.75
ASSARE ASSARÉ 1.00 0.83 0.67
BANABUIU BANABUIÚ 1.00 0.88 0.75
BATURITE BATURITÉ 1.00 0.88 0.75
BITUPITA BITUPITÁ 1.00 0.88 0.75
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CANAA CANAAN 1.00 0.83 0.73
CANAFISTULA CANAFÍSTULA 1.00 0.91 0.82
CARIRE CARIRÉ 1.00 0.83 0.67
CARIRIACU CARIRIAÇU 1.00 0.89 0.78
CARIUS CARIÚS 1.00 0.83 0.67
CARUATAI CARUATAÍ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
CONCEICAO CONCEIÇÃO 2.00 0.78 0.67
COREAU COREAÚ 1.00 0.83 0.67
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
DAGUA DÁGUA 1.00 0.80 0.60
ERERE ERERÊ 1.00 0.80 0.80
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GONCALO GONÇALO 1.00 0.86 0.71
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82
ICAPUI ICAPUÍ 1.00 0.83 0.67
ICO ICÓ 1.00 0.67 0.33
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00
INHARIN INHARIM 1.00 0.86 0.86
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IRAJA IRAJÁ 1.00 0.80 0.60
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ITAICABA ITAIÇABA 1.00 0.88 0.75
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JOAO JOÃO 1.00 0.75 0.50

75
Termo Comparação Termo Dicionário Operações Levenshtein Dice
JOSE JOSÉ 1.00 0.75 0.50
JUCAS JUCÁS 1.00 0.80 0.60
MACARAU MACARAÚ 1.00 0.86 0.71
MARACANAU MARACANAÚ 1.00 0.89 0.78
MARTINOPOLES MARTINÓPOLE 2.00 0.83 0.70
MASSAPE MASSAPÉ 1.00 0.86 0.71
MASSAPE MASSAPÊ 1.00 0.86 0.71
MILHA MILHÃ 1.00 0.80 0.60
MIRAIMA MIRAÍMA 1.00 0.86 0.71
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
PACUJA PACUJÁ 1.00 0.83 0.67
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PECEM PECÉM 1.00 0.80 0.60
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUITAIUS QUITAIÚS 1.00 0.88 0.75
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXERE QUIXERÉ 1.00 0.86 0.71
REDENCAO REDENÇÃO 2.00 0.75 0.62
SEBASTIAO SEBASTIÃO 1.00 0.89 0.78
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
TAPUIARA TAPUIARÁ 1.00 0.88 0.75
TAUA TAUÁ 1.00 0.75 0.50
TEJUCUOCA TEJUÇUOCA 1.00 0.89 0.78
TIANGUA TIANGUÁ 1.00 0.86 0.71
TIMBAUBA TIMBAÚBA 1.00 0.88 0.75
TORROES TORRÕES 1.00 0.86 0.71
TRIANGULO TRIÂNGULO 1.00 0.89 0.78
UBAUNA UBAÚNA 1.00 0.83 0.67
VARZEA VÁRZEA 1.00 0.83 0.67
VICOSA VIÇOSA 1.00 0.83 0.67

Resultados para sistema SISCOPE com banco de dados PostgreSQL do tipo compatível
na Tabela 38.

76
Tabela 38 – Resultados Sistema SISCOPE
Termo Comparação Termo Dicionário Operações Levenshtein Dice
ACARAU ACARAÚ 1.00 0.83 0.67
ALCANTARA ALCÂNTARAS 2.00 0.80 0.63
ALCANTARAS ALCÂNTARAS 1.00 0.90 0.80
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
ARARENDA ARARENDÁ 1.00 0.88 0.75
ASSARE ASSARÉ 1.00 0.83 0.67
BATURITE BATURITÉ 1.00 0.88 0.75
BITUPITA BITUPITÁ 1.00 0.88 0.75
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CARIRE CARIRÉ 1.00 0.83 0.67
CARIUS CARIÚS 1.00 0.83 0.67
CARUATAI CARUATAÍ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
COREAU COREAÚ 1.00 0.83 0.67
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
CURÚ CURU 1.00 0.75 0.50
ERERE ERERÊ 1.00 0.80 0.80
ERERÉ ERERÊ 1.00 0.80 0.60
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GONCALO GONÇALO 1.00 0.86 0.71
GRACA GRAÇA 1.00 0.80 0.60
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00
INHARIN INHARIM 1.00 0.86 0.86
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IRAJA IRAJÁ 1.00 0.80 0.60
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ITAICABA ITAIÇABA 1.00 0.88 0.75
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JATÍ JATI 1.00 0.75 0.50
JOAO JOÃO 1.00 0.75 0.50
JOSE JOSÉ 1.00 0.75 0.50
MACARAU MACARAÚ 1.00 0.86 0.71
MARACANAU MARACANAÚ 1.00 0.89 0.78
MASSAPE MASSAPÉ 1.00 0.86 0.71
MASSAPE MASSAPÊ 1.00 0.86 0.71
MIRAIMA MIRAÍMA 1.00 0.86 0.71

77
Termo Comparação Termo Dicionário Operações Levenshtein Dice
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
PACAJÚS PACAJUS 1.00 0.86 0.71
PACUJA PACUJÁ 1.00 0.83 0.67
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PARAMBÚ PARAMBU 1.00 0.86 0.71
PECEM PECÉM 1.00 0.80 0.60
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXERE QUIXERÉ 1.00 0.86 0.71
REDENCAO REDENÇÃO 2.00 0.75 0.62
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
SIUPE SIUPÉ 1.00 0.80 0.60
TAPUIARA TAPUIARÁ 1.00 0.88 0.75
TAUA TAUÁ 1.00 0.75 0.50
TEJUSSUOCA TEJUÇUOCA 2.00 0.80 0.74
TIANGUA TIANGUÁ 1.00 0.86 0.71
TOME TOMÉ 1.00 0.75 0.50
TORROES TORRÕES 1.00 0.86 0.71
TRAIRÍ TRAIRI 1.00 0.83 0.67
UBAUNA UBAÚNA 1.00 0.83 0.67
UMARÍ UMARI 1.00 0.80 0.60
VARZEA VÁRZEA 1.00 0.83 0.67
VICOSA VIÇOSA 1.00 0.83 0.67

Resultados para sistema SGR com banco de dados Oracle do tipo compatível na Tabela
39.

Tabela 39 – Resultados Sistema SGR


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ABILIO ABÍLIO 1.00 0.83 0.67
ACARAU ACARAÚ 1.00 0.83 0.67
ACUDE AÇUDE 1.00 0.80 0.60
AGUAS ÁGUAS 1.00 0.80 0.80
ALCANTARA ALCÂNTARAS 2.00 0.80 0.63
AMERICA AMÉRICA 1.00 0.86 0.71

78
Termo Comparação Termo Dicionário Operações Levenshtein Dice
ANAUA ANAUÁ 1.00 0.80 0.60
ANT ANTA 1.00 0.75 0.57
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
AQUINOPOLIS AQUINÓPOLIS 1.00 0.91 0.82
ARACATIACU ARACATIAÇU 1.00 0.90 0.90
ARANAU ARANAÚ 1.00 0.83 0.67
ARAPA ARAPÁ 1.00 0.80 0.60
ARAQUEM ARAQUÉM 1.00 0.86 0.71
ARARENDA ARARENDÁ 1.00 0.88 0.75
ARARIUS ARARIÚS 1.00 0.86 0.71
ASSARE ASSARÉ 1.00 0.83 0.67
BANABUIU BANABUIÚ 1.00 0.88 0.75
BARREIRO BARREIROS 1.00 0.89 0.82
BATURITE BATURITÉ 1.00 0.88 0.75
BAU BAÚ 1.00 0.67 0.33
BITUPITA BITUPITÁ 1.00 0.88 0.75
BIXOPA BIXOPÁ 1.00 0.83 0.67
BROTOS BROTAS 1.00 0.83 0.67
CAGADO CÁGADO 1.00 0.83 0.67
CALABACA CALABAÇA 1.00 0.88 0.88
CAMARA CAMARÁ 1.00 0.83 0.67
CAMARA CÂMARA 1.00 0.83 0.67
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CANAA CANAAN 1.00 0.83 0.73
CANADA CANADÁ 1.00 0.83 0.67
CANAFISTULA CANAFÍSTULA 1.00 0.91 0.82
CANDEIA CANDEIAS 1.00 0.88 0.80
CANINDE CANINDÉ 1.00 0.86 0.71
CARIRE CARIRÉ 1.00 0.83 0.67
CARIRIACU CARIRIAÇU 1.00 0.89 0.78
CARIUS CARIÚS 1.00 0.83 0.67
CARMELOPOLIS CARMELÓPOLIS 1.00 0.92 0.83
CARNAUBA CARNAUBAL 1.00 0.89 0.82
CARNAUBAS CARNAÚBAS 1.00 0.89 0.78
CARNAUBAS CARNAUBAL 1.00 0.89 0.78
CARUATAI CARUATAÍ 1.00 0.88 0.75
CATOLE CATOLÉ 1.00 0.83 0.67
CAXITORE CAXITORÉ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
CESARIO CESÁRIO 1.00 0.86 0.71
CICERO CÍCERO 1.00 0.83 0.67
CIPO CIPÓ 1.00 0.75 0.50
COITE COITÉ 1.00 0.80 0.60
COREAU COREAÚ 1.00 0.83 0.67

79
Termo Comparação Termo Dicionário Operações Levenshtein Dice
CORREGO CÓRREGO 1.00 0.86 0.71
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
CURAIS CURRAIS 1.00 0.86 0.92
CURÚ CURU 1.00 0.75 0.50
CUSTODIO CUSTÓDIO 1.00 0.88 0.75
DAGUA DÁGUA 1.00 0.80 0.60
EBROM EBRON 1.00 0.80 0.60
ERERE ERERÊ 1.00 0.80 0.80
ERERÉ ERERÊ 1.00 0.80 0.60
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FATIMA FÁTIMA 1.00 0.83 0.67
FELICIA FELÍCIA 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GAZEA GÁZEA 1.00 0.80 0.60
GEQUI GIQUI 1.00 0.80 0.60
GONCALO GONÇALO 1.00 0.86 0.71
GONSALO GONÇALO 1.00 0.86 0.71
GRACA GRAÇA 1.00 0.80 0.60
GREGORIO GREGÓRIO 1.00 0.88 0.75
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUANACES GUANACÉS 1.00 0.88 0.75
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82
IBICUA IBICUÃ 1.00 0.83 0.67
IBUACU IBUAÇU 1.00 0.83 0.67
ICAPUI ICAPUÍ 1.00 0.83 0.67
ICARAI ICARAÍ 1.00 0.83 0.67
ICO ICÓ 1.00 0.67 0.33
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00
INHARIN INHARIM 1.00 0.86 0.86
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IPAGUASSÚ IPAGUAÇU 3.00 0.67 0.59
IRAJA IRAJÁ 1.00 0.80 0.60
IRAPUÃ IRAPUÁ 1.00 0.83 0.67
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ISIDRO IZIDRO 1.00 0.83 0.67
ITAGUA ITAGUÁ 1.00 0.83 0.67
ITAICABA ITAIÇABA 1.00 0.88 0.75
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JACAUNA JACAÚNA 1.00 0.86 0.71
JOAO JOÃO 1.00 0.75 0.50
JORD JORDÃO 2.00 0.67 0.60

80
Termo Comparação Termo Dicionário Operações Levenshtein Dice
JOSE JOSÉ 1.00 0.75 0.50
JUCAS JUCÁS 1.00 0.80 0.60
LAMEIRO LAMEIRÃO 1.00 0.88 0.80
LINO LINDO 1.00 0.80 0.67
MACARAU MACARAÚ 1.00 0.86 0.71
MACEIO MACEIÓ 1.00 0.83 0.67
MAPUA MAPUÁ 1.00 0.80 0.60
MARACANAU MARACANAÚ 1.00 0.89 0.78
MARCOS MARCO 1.00 0.83 0.73
MARJOLANDIA MAJORLÂNDIA 3.00 0.73 0.55
MARRUAS MARRUÁS 1.00 0.86 0.71
MARTINSLANDIA MARTINSLÂNDIA 1.00 0.92 0.85
MASSAPE MASSAPÊ 1.00 0.86 0.71
MASSAPE MASSAPÉ 1.00 0.86 0.71
MAURICIO MAURÍCIO 1.00 0.88 0.75
MELANCIAS MELANCIA 1.00 0.89 0.82
MILHA MILHÃ 1.00 0.80 0.60
MINEIROLANDIA MINEIROLÂNDIA 1.00 0.92 0.85
MIRAIMA MIRAÍMA 1.00 0.86 0.71
MIRAMBE MIRAMBÉ 1.00 0.86 0.71
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MONTEIROS MONTEIRO 1.00 0.89 0.82
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
OTAVILANDIA OTAVILÂNDIA 1.00 0.91 0.82
PACAJÚS PACAJUS 1.00 0.86 0.71
PACUJA PACUJÁ 1.00 0.83 0.67
PAIS PAI 1.00 0.75 0.57
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PANACUI PANACUÍ 1.00 0.86 0.71
PARAMBÚ PARAMBU 1.00 0.86 0.71
PARAPUI PARAPUÍ 1.00 0.86 0.71
PAULO PAULA 1.00 0.80 0.60
PECEM PECÉM 1.00 0.80 0.60
POCO POÇO 1.00 0.75 0.50
PREA PREÁ 1.00 0.75 0.50
PRINCIPIO PRÍNCIPIO 1.00 0.89 0.78
PRINCIPIO PRINCÍPIO 1.00 0.89 0.78
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUEIROZ QUEIRÓZ 1.00 0.86 0.71
QUINCUNCA QUINCUNCÁ 1.00 0.89 0.78

81
Termo Comparação Termo Dicionário Operações Levenshtein Dice
QUITAIUS QUITAIÚS 1.00 0.88 0.75
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXARIU QUIXARIÚ 1.00 0.88 0.75
QUIXERE QUIXERÉ 1.00 0.86 0.71
QUIXOA QUIXOÁ 1.00 0.83 0.67
REDENCAO REDENÇÃO 2.00 0.75 0.62
RINARE RINARÉ 1.00 0.83 0.67
SANT SANTA 1.00 0.80 0.67
SANT SANTO 1.00 0.80 0.67
SAPO SAPÓ 1.00 0.75 0.50
SIMPLICIO SIMPLÍCIO 1.00 0.89 0.78
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
SIUPE SIUPÉ 1.00 0.80 0.60
SOLONOPOLE SOLONÓPOLE 1.00 0.90 0.80
SUASSURAMA SUASSURANA 1.00 0.90 0.80
TAPUIARA TAPUIARÁ 1.00 0.88 0.75
TAUA TAUÁ 1.00 0.75 0.50
TEJUSSUOCA TEJUÇUOCA 2.00 0.80 0.74
TIANGUA TIANGUÁ 1.00 0.86 0.71
TIBURCIO TIBÚRCIO 1.00 0.88 0.75
TOME TOMÉ 1.00 0.75 0.50
TRAIRÍ TRAIRI 1.00 0.83 0.67
TRAPIA TRAPIÁ 1.00 0.83 0.67
TRIANGULO TRIÂNGULO 1.00 0.89 0.78
TROIA TRÓIA 1.00 0.80 0.60
TUINA TUÍNA 1.00 0.80 0.60
UBAUNA UBAÚNA 1.00 0.83 0.67
UMARÍ UMARI 1.00 0.80 0.60
URUQUE URUQUÊ 1.00 0.83 0.67
VARZEA VÁRZEA 1.00 0.83 0.67
VICOSA VIÇOSA 1.00 0.83 0.67

Resultados para sistema SIG com banco de dados SQLServer do tipo compatível na
Tabela 40.

Tabela 40 – Resultados Sistema SIG


Termo Comparação Termo Dicionário Operações Levenshtein Dice
ABILIO ABÍLIO 1.00 0.83 0.67
ACARAU ACARAÚ 1.00 0.83 0.67
ACUDE AÇUDE 1.00 0.80 0.60
AGUAS ÁGUAS 1.00 0.80 0.80
ALCANTARA ALCÂNTARAS 2.00 0.80 0.63

82
Termo Comparação Termo Dicionário Operações Levenshtein Dice
AMERICA AMÉRICA 1.00 0.86 0.71
ANAUA ANAUÁ 1.00 0.80 0.60
ANT ANTA 1.00 0.75 0.57
APRAZIVEL APRAZÍVEL 1.00 0.89 0.78
APUIARES APUIARÉS 1.00 0.88 0.75
AQUINOPOLIS AQUINÓPOLIS 1.00 0.91 0.82
ARACATIACU ARACATIAÇU 1.00 0.90 0.90
ARAPA ARAPÁ 1.00 0.80 0.60
ARAQUEM ARAQUÉM 1.00 0.86 0.71
ARARENDA ARARENDÁ 1.00 0.88 0.75
ARARIUS ARARIÚS 1.00 0.86 0.71
ASSARE ASSARÉ 1.00 0.83 0.67
BANABUIU BANABUIÚ 1.00 0.88 0.75
BARREIRO BARREIROS 1.00 0.89 0.82
BATURITE BATURITÉ 1.00 0.88 0.75
BAU BAÚ 1.00 0.67 0.33
BITUPITA BITUPITÁ 1.00 0.88 0.75
BIXOPA BIXOPÁ 1.00 0.83 0.67
BROTOS BROTAS 1.00 0.83 0.67
CAGADO CÁGADO 1.00 0.83 0.67
CALABACA CALABAÇA 1.00 0.88 0.88
CAMARA CAMARÁ 1.00 0.83 0.67
CAMARA CÂMARA 1.00 0.83 0.67
CAMPANARIO CAMPÁNARIO 1.00 0.90 0.80
CANAA CANAAN 1.00 0.83 0.73
CANADA CANADÁ 1.00 0.83 0.67
CANAFISTULA CANAFÍSTULA 1.00 0.91 0.82
CANDEIA CANDEIAS 1.00 0.88 0.80
CANINDE CANINDÉ 1.00 0.86 0.71
CARIRE CARIRÉ 1.00 0.83 0.67
CARIRIACU CARIRIAÇU 1.00 0.89 0.78
CARIUS CARIÚS 1.00 0.83 0.67
CARMELOPOLIS CARMELÓPOLIS 1.00 0.92 0.83
CARNAUBA CARNAUBAL 1.00 0.89 0.82
CARNAUBAS CARNAUBAL 1.00 0.89 0.78
CARNAUBAS CARNAÚBAS 1.00 0.89 0.78
CARUATAI CARUATAÍ 1.00 0.88 0.75
CATOLE CATOLÉ 1.00 0.83 0.67
CAXITORE CAXITORÉ 1.00 0.88 0.75
CEARA CEARÁ 1.00 0.80 0.60
CESARIO CESÁRIO 1.00 0.86 0.71
CICERO CÍCERO 1.00 0.83 0.67
CIPO CIPÓ 1.00 0.75 0.50
COITE COITÉ 1.00 0.80 0.60
COREAU COREAÚ 1.00 0.83 0.67

83
Termo Comparação Termo Dicionário Operações Levenshtein Dice
CORREGO CÓRREGO 1.00 0.86 0.71
CRATEUS CRATEÚS 1.00 0.86 0.71
CRIOULAS CRIOULOS 1.00 0.88 0.75
CURAIS CURRAIS 1.00 0.86 0.92
CURÚ CURU 1.00 0.75 0.50
CUSTODIO CUSTÓDIO 1.00 0.88 0.75
DAGUA DÁGUA 1.00 0.80 0.60
EBROM EBRON 1.00 0.80 0.60
ERERE ERERÊ 1.00 0.80 0.80
ERERÉ ERERÊ 1.00 0.80 0.60
EUSEBIO EUSÉBIO 1.00 0.86 0.71
FATIMA FÁTIMA 1.00 0.83 0.67
FELICIA FELÍCIA 1.00 0.86 0.71
FELIX FÉLIX 1.00 0.80 0.60
GAZEA GÁZEA 1.00 0.80 0.60
GEQUI GIQUI 1.00 0.80 0.60
GONCALO GONÇALO 1.00 0.86 0.71
GONSALO GONÇALO 1.00 0.86 0.71
GRACA GRAÇA 1.00 0.80 0.60
GREGORIO GREGÓRIO 1.00 0.88 0.75
GROAIRAS GROAÍRAS 1.00 0.88 0.75
GUAIUBA GUAIÚBA 1.00 0.86 0.71
GUANACES GUANACÉS 1.00 0.88 0.75
GUASSUSSE GUASSUSSÊ 1.00 0.89 0.78
HIDROLANDIA HIDROLÂNDIA 1.00 0.91 0.82
IBICUA IBICUÃ 1.00 0.83 0.67
IBUACU IBUAÇU 1.00 0.83 0.67
ICAPUI ICAPUÍ 1.00 0.83 0.67
ICARAI ICARAÍ 1.00 0.83 0.67
ICO ICÓ 1.00 0.67 0.33
INDEPENDENCIA INDEPENDÊNCIA 1.00 0.92 1.00
INHARIN INHARIM 1.00 0.86 0.86
INHUCU INHUÇU 1.00 0.83 0.67
IPAGUASSU IPAGUAÇU 2.00 0.78 0.71
IPAGUASSÚ IPAGUAÇU 3.00 0.67 0.59
IRAJA IRAJÁ 1.00 0.80 0.60
IRAPUÃ IRAPUÁ 1.00 0.83 0.67
IRAUCUBA IRAUÇUBA 1.00 0.88 0.75
ISIDRO IZIDRO 1.00 0.83 0.67
ITAGUA ITAGUÁ 1.00 0.83 0.67
ITAICABA ITAIÇABA 1.00 0.88 0.75
ITAPIUNA ITAPIÚNA 1.00 0.88 0.75
JACAUNA JACAÚNA 1.00 0.86 0.71
JOAO JOÃO 1.00 0.75 0.50
JORD JORDÃO 2.00 0.67 0.60

84
Termo Comparação Termo Dicionário Operações Levenshtein Dice
JOSE JOSÉ 1.00 0.75 0.50
JUCAS JUCÁS 1.00 0.80 0.60
LAMEIRO LAMEIRÃO 1.00 0.88 0.80
LINO LINDO 1.00 0.80 0.67
MACARAU MACARAÚ 1.00 0.86 0.71
MACEIO MACEIÓ 1.00 0.83 0.67
MAPUA MAPUÁ 1.00 0.80 0.60
MARACANAU MARACANAÚ 1.00 0.89 0.78
MARCOS MARCO 1.00 0.83 0.73
MARJOLANDIA MAJORLÂNDIA 3.00 0.73 0.55
MARRUAS MARRUÁS 1.00 0.86 0.71
MARTINSLANDIA MARTINSLÂNDIA 1.00 0.92 0.85
MASSAPE MASSAPÊ 1.00 0.86 0.71
MASSAPE MASSAPÉ 1.00 0.86 0.71
MAURICIO MAURÍCIO 1.00 0.88 0.75
MELANCIAS MELANCIA 1.00 0.89 0.82
MILHA MILHÃ 1.00 0.80 0.60
MINEIROLANDIA MINEIROLÂNDIA 1.00 0.92 0.85
MIRAIMA MIRAÍMA 1.00 0.86 0.71
MIRAMBE MIRAMBÉ 1.00 0.86 0.71
MISSAO MISSÃO 1.00 0.83 0.67
MOMBACA MOMBAÇA 1.00 0.86 0.71
MONTEIROS MONTEIRO 1.00 0.89 0.82
MORAUJO MORAÚJO 1.00 0.86 0.71
MUNDAU MUNDAÚ 1.00 0.83 0.67
OROS ORÓS 1.00 0.75 0.50
OTAVILANDIA OTAVILÂNDIA 1.00 0.91 0.82
PACAJÚS PACAJUS 1.00 0.86 0.71
PACUJA PACUJÁ 1.00 0.83 0.67
PAIS PAI 1.00 0.75 0.57
PAJEU PAJEÚ 1.00 0.80 0.60
PALMACIA PALMÁCIA 1.00 0.88 0.75
PALMATORIA PALMATÓRIA 1.00 0.90 0.80
PANACUI PANACUÍ 1.00 0.86 0.71
PARAMBÚ PARAMBU 1.00 0.86 0.71
PARAPUI PARAPUÍ 1.00 0.86 0.71
PAULO PAULA 1.00 0.80 0.60
PECEM PECÉM 1.00 0.80 0.60
POCO POÇO 1.00 0.75 0.50
PREA PREÁ 1.00 0.75 0.50
PRINCIPIO PRÍNCIPIO 1.00 0.89 0.78
PRINCIPIO PRINCÍPIO 1.00 0.89 0.78
QUATINGUABA QUATIGUABA 1.00 0.91 0.86
QUEIROZ QUEIRÓZ 1.00 0.86 0.71
QUINCUNCA QUINCUNCÁ 1.00 0.89 0.78

85
Termo Comparação Termo Dicionário Operações Levenshtein Dice
QUITAIUS QUITAIÚS 1.00 0.88 0.75
QUITERIA QUITÉRIA 1.00 0.88 0.75
QUIXADA QUIXADÁ 1.00 0.86 0.71
QUIXARIU QUIXARIÚ 1.00 0.88 0.75
QUIXERE QUIXERÉ 1.00 0.86 0.71
QUIXOA QUIXOÁ 1.00 0.83 0.67
REDENCAO REDENÇÃO 2.00 0.75 0.62
RINARE RINARÉ 1.00 0.83 0.67
SANT SANTA 1.00 0.80 0.67
SANT SANTO 1.00 0.80 0.67
SAPO SAPÓ 1.00 0.75 0.50
SIMPLICIO SIMPLÍCIO 1.00 0.89 0.78
SITIO SÍTIO 1.00 0.80 0.60
SITIOS SÍTIOS 1.00 0.83 0.67
SIUPE SIUPÉ 1.00 0.80 0.60
SOLONOPOLE SOLONÓPOLE 1.00 0.90 0.80
SUASSURAMA SUASSURANA 1.00 0.90 0.80
TAPUIARA TAPUIARÁ 1.00 0.88 0.75
TAUA TAUÁ 1.00 0.75 0.50
TEJUCUOCA TEJUÇUOCA 1.00 0.89 0.78
TEJUSSUOCA TEJUÇUOCA 2.00 0.80 0.74
TIANGUA TIANGUÁ 1.00 0.86 0.71
TIBURCIO TIBÚRCIO 1.00 0.88 0.75
TOME TOMÉ 1.00 0.75 0.50
TORROES TORRÕES 1.00 0.86 0.71
TRAIRÍ TRAIRI 1.00 0.83 0.67
TRAPIA TRAPIÁ 1.00 0.83 0.67
TRIANGULO TRIÂNGULO 1.00 0.89 0.78
TROIA TRÓIA 1.00 0.80 0.60
TUINA TUÍNA 1.00 0.80 0.60
UBAUNA UBAÚNA 1.00 0.83 0.67
UMARÍ UMARI 1.00 0.80 0.60
URUQUE URUQUÊ 1.00 0.83 0.67
VARZEA VÁRZEA 1.00 0.83 0.67
VICOSA VIÇOSA 1.00 0.83 0.67

86