Artigo: Algoritmo de Tradução de Interrogações Lógicas para SQL

Propaganda
Algoritmo de Tradução de Interrogações Lógicas para SQL
Porfírio P. Filipe1, Nuno J. Mamede2
1Inst.
Sup. de Eng. de Lisboa, R. Conselheiro Emídio Navarro, 1949-014 Lisboa, Portugal
[email protected], Tel: +351.1.8317211
2Instituto
Superior Técnico, Av. Rovisco Pais, 1049-001 Lisboa, Portugal
[email protected], Tel: +351.1.8419159
ARQUITECTURA DO SISTEMA
A arquitectura do sistema de interrogações em língua
natural representada na Figura 1 é baseada numa
linguagem de representação intermédia, designada por
linguagem de interrogação lógica (LIL), para a qual a
pergunta em língua natural é transformada antes de ser
realizada a tradução para uma interrogação SQL. A
linguagem LIL expressa o significado da pergunta em
conceitos de alto nível, independentes da estrutura da base
de dados do domínio [1][2].
A arquitectura do sistema pode ser dividida em dois
módulos. O primeiro módulo processa a língua natural
(componente linguística), onde a pergunta é submetida à
análise morfológica, sintáctica e semântica sendo obtidas
como resultado uma ou mais interrogações LIL que
correspondem às possíveis interpretações da pergunta
formulada em língua natural. Face á dimensão do domínio
e à flexibilidade da língua natural é normal existirem
várias interpretações para a mesma pergunta.
Sistema de Interrogações Edite
Pergunta em
Língua Natural
Português, Francês, Inglês,...
Descoberta do Contexto
da Pergunta
Análise
Morfológica
Informação Sobre
Palavras
Modelo Conceptual
Análise
Sintáctica
Hierarquia
de Tipos
Estrutura Sintáctica
(árvore sintáctica)
Representação
Geral
Análise
Semântica
Interrogação Lógica
Apoio à Tradução
(linguagem LIL)
Tradução
LIL/SQL
Dados de Apoio á Tradução LIL/SQL
Interrogação
SQL (SELECT)
Acesso Via ODBC
Base de Dados
do Domínio
SGBD
Resposta
Consulta
que são passadas ao sistema de gestão da base de dados
do domínio com o objectivo de obter dados para produzir
as respostas.
A principal vantagem desta arquitectura é a separação
completa entre a componente linguística e o
conhecimento dependente da base de dados do domínio.
A portabilidade do sistema de interrogações para outro
domínio (outra base de dados do domínio) é garantida
pelo preenchimento adequado do modelo conceptual.
O processamento da pergunta em língua natural é feito
por etapas: a partir da língua natural é gerada uma árvore
sintáctica que permite a construção de uma interrogação
lógica sendo esta finalmente transformada, aplicando o
algoritmo de tradução de uma interrogação lógica para
SQL, numa instrução SELECT.
A comunicação com o sistema de gestão da base de dados
do domínio é independente da realização prática porque é
executada através de um driver ODBC.
O modelo conceptual é a componente do sistema de
interrogações que representa simbolicamente os
constrangimentos conceptuais associados ao domínio da
aplicação [4]. O modelo conceptual tem três
componentes: (i) uma hierarquia de tipos que contém a
informação sobre a herança; (ii) uma representação geral
que é uma representação explícita dos constrangimentos
conceptuais do domínio e (iii) dados de apoio à tradução
LIL/SQL. Durante a análise semântica é seleccionada
uma interpretação da pergunta que respeite os
constrangimentos conceptuais do domínio.
Por exemplo, se for perguntado ao sistema de
interrogações: “Quais os hotéis com piscina com água
salgada?” existem duas interpretações possíveis. Pode ser
interpretado que “água salgada” se refere ao “hotel” ou
que se refere à “piscina”. São executadas duas consultas
ao modelo conceptual e a consulta que pergunta se a
entidade “hotel” tem a propriedade “água salgada” vai
falhar. O facto “hotel tem água salgada” é irrelevante e
por isso não é representado no modelo conceptual.
Quando uma pergunta não tem pelo menos uma
interpretação que respeita os constrangimentos
conceptuais do domínio, diz-se que está semanticamente
incorrecta.
Interpretação
da Resposta
Figura 1 - Arquitectura do Sistema de Interrogações
O segundo módulo está relacionado com o processamento
dependente da estrutura da base de dados do domínio,
traduzindo as interrogações LIL para interrogações SQL
A LINGUAGEM FONTE
A linguagem LIL é inspirada no formalismo apresentado
no projecto de MASQUE/SQL [2] e foi descrita em
[6][7][8]. A sintaxe da linguagem LIL é a de uma lógica
de primeira ordem com o poder expressivo de uma lógica
de predicados que permite representar, de uma forma
bastante intuitiva, os conceitos do mundo real:
(a) Um termo pode ser uma constante uma variável ou
um símbolo de função aplicado a um tuplo de termos.
As constantes representam objectos do mundo,
incluindo objectos abstractos como eventos e
situações. Exemplos de constantes: Ritz, sauna, -5
e 1997. Exemplos de variáveis: _3 e X.
(b) Uma fórmula primitiva é constituída por um símbolo
de predicado (que se escreve como um termo) e por
um ou dois argumentos (termos). Uma fórmula
primitiva tem a seguinte sintaxe:
simbolo_de_predicado(termo1[, termo2])
definidas cinco funções para explorar a estrutura de dados
auxiliar que devolvem uma cadeia de caracteres.
Função TRANSLATION(X,Y,Z)
Todos os argumentos são símbolos. O primeiro
argumento refere uma associação, o segundo uma
entidade e o terceiro uma entidade, uma propriedade, um
valor de propriedade, ou um nome próprio. O caracter ‘_’
pode ser usado para expressar o conceito “qualquer
símbolo”. Esta função devolve a tradução do facto (parte
da pergunta) especificado nos argumentos.
São exemplos de fórmulas primitivas:
hotel(X) e ter(X, sauna)
(c) Uma expressão LIL é um conjunto de fórmulas LIL
separadas por vírgulas e tem a seguinte sintaxe:
fórmula1, …, fórmulan
É exemplo de uma expressão LIL:
autor(X), ter(X, livro)
(d) Um conectivo lógico liga duas fórmulas LIL
originando outra fórmula.
A conjunção (&) com a seguinte sintaxe:
&(prd1(trm1,trm2),…,prdn(trmn1,trmn2))
A disjunção (V) com a seguinte sintaxe:
V(prd1(trm1,trm2),…,prdn(trmn1,trmn2))
São exemplos de utilização de conectivos lógicos:
&(ter(X, restaurante), ter(X, sauna))
V(ter(X, livro), ter(X, disco))
(e) Fórmulas predefinidas na linguagem LIL:
EXACT(termo1, termocte) (igual)
SUP(termo1, termocte) (maior)
INF(termo1, termocte) (menor)
TRADUÇÃO
Estrutura de Dados Auxiliar
Os dados de apoio à tradução da linguagem LIL para SQL
dependentes da estrutura da base de dados do domínio são
representados na Figura 2 (a sombreado) como uma
extensão do modelo conceptual. A notação usada na
Figura 2 é o IDEF1X (Integration DEFinition for
Information Modeling).
Função CLASS(X)
Usando a coluna CLASSIFICATION.DESG_CLASS, esta
função indica se o argumento, um símbolo, é representado
por uma tabela ‘Table’ ou por uma coluna ‘Column’ na
base de dados do domínio.
Função DEFAULT(X)
Esta função é usada para determinar as propriedades
omitidas ou entidades omitidas dependendo do tipo do
argumento indicado: Se o argumento é uma propriedade
devolve a entidade omitida associada a essa propriedade.
Se o argumento é uma entidade devolve a propriedade
omitida associada a essa entidade.
Esta função devolve o símbolo representado na coluna
DEFAULT.SYMBOL2 quando o seu argumento figurar na
coluna DEFAULT.SYMBOL1.
Função EQUIVALENT(X)
O argumento desta função pode ser um símbolo de
propriedade ou de entidade retornando a expressão que foi
usada na definição desse argumento. Se na definição do
argumento figurar um símbolo de função é devolvido o
nome
da
função
existente
na
coluna
CLASSIFICATION.DESC_CLASS e os argumentos
presentes na tabela EQ_SYMBOL, caso contrário é
devolvido o próprio argumento.
Função FORMATTER(X)
O argumento desta função refere uma propriedade e
devolve o nome de uma função. A função identificada
nesta consulta deve ser utilizada para apresentar ao
utilizador os dados associados à propriedade indicada em
argumento de forma adequada.
O ALGORITMO DE TRADUÇÃO
Figura 2 – Modelo Relacional da Estrutura de Dados
Funções Auxiliares
Para definir o acesso aos dados de apoio ao algoritmo de
tradução LIL/SQL sobre como cada conceito é
representado na base de dados do domínio foram
O algoritmo de tradução da linguagem LIL para SQL
assume que a instrução SELECT é obtida concatenando
traduções parciais de cada fórmula LIL que figuram na
interrogação LIL.
As fórmulas LIL com um argumento variável identificam
propriedades ou entidades que a resposta deve
contemplar.
A tradução de fórmulas LIL com um argumento originam
elementos da cláusula SELECT ou FROM, enquanto as
restantes fórmulas definem a cláusula FROM ou
WHERE, isto é, as condições às quais a resposta deve
satisfazer.
Depois de traduzir todas as fórmulas pertencentes à
interrogação LIL, é necessário verificar se a cláusula
FROM contém todas as tabelas referidas na cláusula
SELECT e na cláusula WHERE. As tabelas em falta
devem ser acrescentadas na cláusula FROM separadas por
vírgula. Uma operação semelhante deve ser realizada para
identificar colunas em falta que pertencem a tabelas que
não têm explicitada nenhuma coluna em toda a instrução
SELECT.
O processo de tradução usa oito regras: uma para
substituir variáveis pelo seu tipo, duas para traduzir
fórmulas primitivas, uma para traduzir fórmulas que
tenham conectivos lógicos, uma para traduzir fórmulas
predefinidas, duas para garantir que a instrução SQL está
completa e ainda outra para definir a formatação do
resultado.
Regra 1 — Substituição de Variáreis
Durante o processo de tradução é assumido que as
variáveis são substituídas pelos seus tipos, isto é, pelos
nomes das classes a que pertencem.
A expressão LIL: prd1(X1), prd2(X1,trm2), depois de
ser aplicada a substituição X1/prd1 (assumindo que prd1 é
o tipo da variável X1), é transformada em
prd2(prd1,trm2). Quando a substituição ocorre refere-se
o tipo de X1 como X1cte.
Regra 2 — Fórmulas Primitivas Unárias
A tradução de uma fórmula primitiva com um argumento
(prd(trm)) identifica uma tabela ou uma expressão que
envolve colunas. Existem duas possibilidades,
dependendo do valor retornado pela função CLASS(prd):
(a) Se o valor retornado é ‘Table’, então
o valor retornado pela função EQUIVALENT(prd)
é concatenado, com uma vírgula, à cláusula FROM.
Se trm é constante (um nome próprio), então
a
expressão
retornada
pela
função
TRANSLATION(_,pred,trm)
é concatenada,
com o operador ‘AND’, à cláusula WHERE;
(b) Se o valor retornado é ‘Column’, então
Se a interrogação LIL contém uma fórmula do tipo
prd2(trm2,prd), então
Se trm é constante (valor de uma propriedade),
então
a
expressão
retornada
pela
função
TRANSLATION(prd2,trm2cte,prd(trm))
é
concatenada, com o operador ‘AND’, à cláusula
WHERE;
Se trm é variável, então
Se
o
valor
retornado
pela
função
EQUIVALENT(prd) contém um símbolo de
função, então
o
valor
retornado
pela
função
EQUIVALENT(prd) é concatenado, com uma
vírgula, à cláusula SELECT.
Senão
o valor retornado pela avaliação de
EQUIVALENT(trm2cte).EQUIVALENT(prd) é
concatenado, com uma vírgula, à cláusula
SELECT.
Se a interrogação LIL não contém uma fórmula do
tipo pred2(trm2,prd), então
Se
o
valor
retornado
pela
função
EQUIVALENT(prd) contém um símbolo de
função, então
o valor retornado pela avaliação de
EQUIVALENT(prd) é concatenado, com uma
vírgula, à cláusula SELECT.
Senão
o valor retornado pela avaliação de
DEFAULT(prd).EQUIVALENT(prd)
é
concatenado, com uma vírgula, à cláusula
SELECT.
Regra 3 — Fórmulas Primitivas Binárias
A tradução de uma fórmula primitiva com dois
argumentos (prd(trm1,term2)) é a expressão retornada
pela função TRANSLATION(prd,trm1cte, trm2cte), que
deve ser concatenada, com o operador ‘AND’, à cláusula
WHERE.
Regra 4 — Fórmulas com Conectivas Lógicas
A tradução de uma fórmula que usa o conectivo ‘e’
(&(prd1(trm2, trm3), ..., prda(trmb, trmc))) é a
expressão
retornada
pela
avaliação
de
TRANSLATION(prd1cte, trm2cte, trm3cte) AND ...
AND TRANSLATION(prdacte, trmbcte, trmcct), que deve
ser concatenada, com o operador ‘AND’, à cláusula
WHERE.
A tradução de uma fórmula que usa o conectivo ‘ou’
(V(prd1(trm2,trm3),...,prda(trmb,trmc))) é a
expressão
retornada
pela
avaliação
de
(TRANSLATION(prd1cte,trm2cte,trm3cte) OR ... OR
TRANSLATION(prdacte,trmbcte, trmccte)), que deve ser
concatenada, com o operador ‘AND’, à cláusula WHERE.
Regra 5 — Fórmulas Predefinidas
A tradução de uma fórmula com o predicado EXACT
(EXACT(trm, cte)) é concatenada, com o operador
‘AND’, à cláusula WHERE e é determinada por:
(a) Se a interrogação LIL contém uma fórmula do tipo
prd2(trm2,trm), então
a expressão é retornada pela avaliação de
TRANSLATION(prd2, trm2cte, EXACT(trm, cte))
(b) Senão
a expressão
é
retornada
pela
avaliação
de
DEFAULT(trmcte).EQUIVALENT(trmcte)=cte
A tradução de uma fórmula com o predicado SUP
(SUP(trm, cte)) é concatenada, com o operador ‘AND’,
à cláusula WHERE e é determinada por:
(a) Se a interrogação LIL contém uma fórmula do tipo
prd2(trm2,trm), então
a expressão é retornada pela avaliação de
TRANSLATION(prd2, trm2cte, SUP(trm, cte))
(b) Senão
a expressão
é
retornada
pela
avaliação
DEFAULT(trmcte).EQUIVALENT(trmcte)>cte
de
A tradução de uma fórmula com o predicado INF
(INF(trm,cte)) é concatenada, com o operador ‘AND’, à
cláusula WHERE e é determinada por:
(a) Se a interrogação LIL contém uma fórmula do tipo
prd2(trm2,trm), então
a expressão é retornada pela avaliação de
TRANSLATION(prd2, trm2cte, INF(trm, cte))
(b) Senão
a expressão
é
retornada
pela
avaliação
de
DEFAULT(trmcte).EQUIVALENT(trmcte)<cte
Regra 6 — Tabelas em Falta
Se a cláusula FROM não contém todas as tabelas
referenciadas na cláusula SELECT e WHERE, então
todas as tabelas em falta devem ser concatenadas, com
uma vírgula, à cláusula FROM.
Regra 7 — Colunas em Falta
Procurar as tabelas que são referenciadas na interrogação
LIL em fórmulas com um argumento variável e que não
têm colunas na cláusula SELECT. Para cada uma das
tabelas encontradas (designadas por T) deve ser
concatenado, com uma vírgula, à cláusula SELECT o
valor
retornado
pela
avaliação
de
EQUIVALENT(T).DEFAULT(T).
Regra 8 — Formatação Opcional
Aplicar a função FORMATTER a cada coluna (ou
expressão que envolve funções de equivalência) da
cláusula SELECT para obter o formato final de cada
propriedade.
Algoritmo
Iniciar com uma instrução SELECT vazia
Para cada fórmula LIL fazer
Inicio
Tentar aplicar a Regra 1
Escolher a Regra apropriada do
conjunto {2,3,4,5}
Aplicar a regra escolhida
Fim
Tentar aplicar a Regra 6 e a Regra 7
Aplicar a Regra 8
EXEMPLO
Para demonstrar a aplicação do algoritmo de tradução
LIL/SQL apresenta-se o seguinte exemplo comentado,
assumindo que na base de dados do domínio o extracto do
modelo relacional significativo para o exemplo está
conforme o representado na Figura 3.
O caracter ‘?’ é usado para representar uma cláusula vazia
da instrução SELECT.
Interrogação em língua natural:
“Quais os nomes dos alunos com notas superiores a 15
valores que efectuaram o exame da disciplina de
Física?”
Interrogação na linguagem LIL:
nome(X), ter(aluno, nome),ter(aluno, nota),
SUP(nota,15), efectuar(aluno, exame),
ter(exame, disciplina), disciplina(fisica)
Aplicação do algoritmo de Tradução LIL/SQL:
1) Interrogação SQL: SELECT ? FROM ?
Tradução de: nome(X), usando a Regra 2:
A chamada à função CLASS(nome) retorna
‘Column’ e existe na interrogação LIL a fórmula
ter(aluno, nome)
À cláusula SELECT é concatenado o valor obtido
pela avaliação da expressão:
EQUIVALENT(ALUNO).EQUIVALENT(NOME),
que é “ALUNO.NOME”
2) Interrogação SQL:
SELECT ALUNO.NOME FROM ?
Tradução de: ter(aluno, nome), usando a Regra 3:
À cláusula WHERE é concatenado o valor obtido
pela função:
TRANSLATION(TER, ALUNO, NOME), que é “”
3) Interrogação SQL: (sem alterações).
Tradução de: ter(aluno, nota), usando a Regra 3:
À cláusula WHERE é concatenado o valor obtido
pela função:
TRANSLATION(TER, ALUNO, NOTA),
que é “ALUNO.NUMERO = EXAME.NUMERO”
4) Interrogação SQL:
SELECT ALUNO.NOME FROM ?
WHERE ALUNO.NUMERO = EXAME.NUMERO
Tradução de: SUP(nota, 15), usando a Regra 5:
Existe na interrogação LIL a fórmula ter(aluno,
nota)
À cláusula WHERE é concatenado o valor obtido
pela avaliação da expressão:
TRANSLATION(TER, ALUNO, SUP(NOTA, 15)),
que é “EXAME.NOTA > 15”
5) Interrogação SQL:
Figura 3 – Modelo Relacional da BD do Domínio
SELECT ALUNO.NOME FROM ?
WHERE ALUNO.NUMERO = EXAME.NUMERO AND
ALUNO.NOTA>15
Tradução de: efectuar(aluno, exame), usando a
Regra 3:
À cláusula WHERE é concatenado o valor obtido
pela função:
TRANSLATION(EFECTUAR, ALUNO, EXAME),
que é “ALUNO.NUMERO = EXAME.NUMERO”
6) Interrogação SQL: (sem alterações), devido à
expressão determinada já existir na cláusula WHERE.
Tradução de: ter(exame, disciplina), usando a
Regra 3:
À cláusula WHERE é concatenado o valor obtido
pela função:
TRANSLATION(TER, EXAME, DISCIPLINA),
que é “EXAME.C_DISCIPLINA =
DISCIPLINA.C_DISCIPLINA”
concebido para aceder a dados existentes numa base de
dados relacional.
O objectivo principal do Edite é proporcionar aos
utilizadores a capacidade de obter informação armazenada
numa base de dados relacional [3]. O utilizador não é
obrigado a aprender uma linguagem de comunicação
artificial sendo-lhe facilitada a possibilidade de formular
perguntas na sua língua nativa.
O Edite responde a perguntas escritas sobre recursos
turísticos transformando as questões colocadas em
interrogações SQL. As respostas dependem do tipo de
pergunta podendo ser: listas nominais de recursos, texto,
imagens, ou gráficos. Actualmente, a base de dados do
domínio contém 53000 recursos turísticos organizados em
253 tipos distintos preenchendo 209 tabelas.
REFERÊNCIAS
[1] Androutsopoulos I., Ritchie G., Thanisch P., “An
Efficient and Portable Natural Language Query Interface
for Relational Databases”, Proceedings of the 6th
International Conference on Industrial & Engineering
Applications of Artificial Intelligence and Expert
Tradução de: disciplina(fisica), usando a Regra 2: Systems, Edinburgh, U.K. Gordon and Breach Publishers
Inc., Langhorne, PA, U.S.A., pages 327-330, 1993.
A chamada à função CLASS(disciplina) retorna
[2] Androutsopoulos I., “Interfacing a Natural Language
‘Column’ e existe na interrogação LIL a fórmula
Front-End to a Relational Database (MSc thesis)”.
ter(exame, disciplina)
Technical paper 11, Dept. of AI, Univ. of Edinburgh,
À cláusula WHERE é concatenado o valor obtido
1993.
pela função:
TRANSLATION(TER, EXAME, DISCIPLINA(FISICA)), [3] Androutsopoulos I., “Natural Language Interfaces An Introduction”. Journal of Natural Language
que é “DISCIPLINA.D_DISCIPLINA = ‘FISICA’”
Engineering, Cambridge University Press, 1994.
[4] Filipe P., “Sistema de Interrogações em Língua
8) Interrogação SQL:
Natural para Bases de Dados: Modelo Conceptual,
SELECT ALUNO.NOME FROM ? WHERE ALUNO.NUMERO
= EXAME.NUMERO AND ALUNO.NOTA>15 AND
Aquisição de Vocabulário e Tradução”, M.Sc.
EXAME.C_DISCIPLINA =
Dissertation. Instituto Superior Técnico, Universidade
DISCIPLINA.C_DISCIPLINA AND
Técnica de Lisboa, 1999.
DISCIPLINA.D_DISCIPLINA = ‘FISICA’
[5] Grosz B. J., Appelt D. E., Martin P. A., Pereira C. N.,
Aplicando a Regra 6 é concatenada, com uma vírgula, à “TEAM: An Experiment in the Design of Transportable
Natural-Language Interfaces”. Artificial Intelligence 32,
cláusula FROM “ALUNO, EXAME, DISCIPLINA”.
pages 173-243. Elsevier Science Publishers B.V. (NorthHolland), 1987.
9) Interrogação SQL resultado da aplicação do algoritmo:
[6] Marques L., “Edite - Um Sistema de Acesso a Base de
SELECT ALUNO.NOME FROM ALUNO, EXAME,
Dados em Língua Natural Análise Morfológica, Sintáctica
DISCIPLINA WHERE ALUNO.NUMERO =
EXAME.NUMERO AND ALUNO.NOTA>15 AND
e Semântica”, .M.Sc. Dissertation. Instituto Superior
EXAME.C_DISCIPLINA =
Técnico, Universidade Técnica de Lisboa, 1996.
DISCIPLINA.C_DISCIPLINA AND
[7]. Reis P., Mamede N. “LIL-SQL. Processamento de
DISCIPLINA.D_DISCIPLINA = ‘FISICA’
Interrogações LIL por Tradução para SQL”. Technical
Aplicando a função FORMATTER à coluna NOME da Report. Grupo de Sistemas e Serviços Telemáticos,
cláusula SELECT, obtém-se informação complementar à INESC, 1996.
tradução. Neste exemplo, a função FORMATTER retorna [8]. Reis P., Mamede N., Matias J., Edite – A Natural
Language Interface to Databases: a New Dimension for
Nome_Próprio, servindo esta palavra chave para
an Old Approach in “Proceeding of the Fourth
identificar o formato dos nomes próprios.
International
Conference
on
Information
and
Communication
Technology
in
Tourism”,
ENTER’
97,
CONCLUSÃO
Edinburgh, Scottland, 1997.
7) Interrogação SQL:
SELECT ALUNO.NOME FROM ? WHERE ALUNO.NUMERO
= EXAME.NUMERO AND ALUNO.NOTA>15 AND
EXAME.C_DISCIPLINA =
DISCIPLINA.C_DISCIPLINA
O algoritmo apresentado é independente da base de dados
e do domínio considerado [5]. Foi implementado como
um módulo do Edite que é um sistema de interrogações
em língua natural (português, francês, inglês, e espanhol)
Download