• Nenhum resultado encontrado

CHATTERBOT PARA ESCLARECIMENTO DE DÚVIDAS SOBRE AS FORMAS DE INGRESSO EM CURSOS DA FURB

N/A
N/A
Protected

Academic year: 2021

Share "CHATTERBOT PARA ESCLARECIMENTO DE DÚVIDAS SOBRE AS FORMAS DE INGRESSO EM CURSOS DA FURB"

Copied!
66
0
0

Texto

(1)

UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS

CURSO DE CIÊNCIA DA COMPUTAÇÃO – BACHARELADO

CHATTERBOT PARA ESCLARECIMENTO DE DÚVIDAS

SOBRE AS FORMAS DE INGRESSO EM CURSOS DA FURB

BRUNO DE OLIVEIRA

BLUMENAU 2015

(2)

BRUNO DE OLIVEIRA

CHATTERBOT PARA ESCLARECIMENTO DE DÚVIDAS

SOBRE AS FORMAS DE INGRESSO EM CURSOS DA FURB

Trabalho de Conclusão de Curso apresentado ao curso de graduação em Ciência da Computação do Centro de Ciências Exatas e Naturais da Universidade Regional de Blumenau como requisito parcial para a obtenção do grau de Bacharel em Ciência da Computação.

Profa. Joyce Martins, Mestre - Orientadora

BLUMENAU 2015

(3)

CHATTERBOT PARA ESCLARECIMENTO DE DÚVIDAS

SOBRE AS FORMAS DE INGRESSO EM CURSOS DA FURB

Por

BRUNO DE OLIVEIRA

Trabalho de Conclusão de Curso aprovado para obtenção dos créditos na disciplina de Trabalho de Conclusão de Curso II pela banca examinadora formada por:

______________________________________________________ Presidente: Profa. Joyce Martins, Mestre – Orientadora, FURB

______________________________________________________ Membro: Prof. Alexander Roberto Valdameri, Mestre – FURB

______________________________________________________ Membro: Prof. Aurélio Faustino Hoppe, Mestre – FURB

(4)

AGRADECIMENTOS

Agradeço a minha mãe, Edite Maria Nolli, que sempre se sacrificou para prover uma vida digna para sua família.

À minha orientadora, Joyce Martins, pela sua dedicação e paciência em me ajudar na elaboração do trabalho.

(5)

RESUMO

A pesquisa apresentada neste trabalho descreve o processo de especificação e de implementação de um chatterbot que responde dúvidas sobre as formas de ingresso (para calouros) em cursos da FURB. As perguntas que o chatterbot pode responder são especificadas em bases de conhecimento em AIML. O interpretador responsável pela interpretação das bases de conhecimento em AIML faz uso de tags específicas para consultar uma ontologia sobre o domínio das formas de ingresso em cursos da FURB, a fim de ajudar na elaboração das respostas. Algumas informações contidas na ontologia podem ser cadastradas por meio de uma área administrativa. O resultado do desenvolvimento do chatterbot mostrou que a criação manual de bases de conhecimentos em AIML requer muito tempo, é trabalhosa, além de poder apresentar problemas na detecção de sentenças que possuem erros ortográficos. Mesmo com os problemas relacionados com o uso de bases em AIML, o chatterbot elaborado conseguiu alcançar o objetivo de dialogar com os usuários. Palavras-chave: Chatterbot. AIML. Ontologia. OWL. SPARQL.

(6)

ABSTRACT

The research presented in this work describes the specification and implementation process of a chatterbot which answers questions about the forms of ingress (for freshman) in courses of FURB. The questions which the chatterbot can answer are specified in AIML knowledge bases. The interpreter responsible for interpretation of AIML knowledge bases uses specific tags for consult an ontology about the domain of forms of ingress in courses of FURB, to assist in the elaboration of answers. Some information contained in the ontology can be inserted by means of an administrative area. The result of development of the chatterbot showed that the manual creation based on knowledge in AIML requires a lot of time, is laborious, besides being able to present problems in sentence detection which have misspellings. Even with the related problems with the use of AIML bases, the elaborate chatterbot managed to achieve the goal of dialogue with the users.

(7)

LISTA DE FIGURAS

Figura 1- Chatterbot Doroty ... 27

Figura 2 - Fragmento da base AIML que contém o comando exist ... 29

Figura 3 - Arquitetura do chatterbot Andrew ... 31

Figura 4 - Diagrama de casos de uso ... 32

Figura 5 - Visão parcial da ontologia sobre as formas de ingresso na FURB ... 35

Figura 6 - Parte do diagrama de pacotes do sistema ... 37

Figura 7 - Diagrama de classes dos pacotes extensao e helper ... 37

Figura 8 - Diagrama de classes do pacote sparql ... 38

Figura 9 - Diagrama de classes do pacote resultado ... 40

Figura 10 – Diagrama de classes do pacote jena ... 41

Figura 11 - Diagrama de classes dos onto e mapper ... 42

Figura 12 - Diagrama de classes do pacote gateway ... 43

Figura 13 - Interação entre um usuário e o chatterbot ... 50

Figura 14 - Painel de administração ... 51

Figura 15 – Relação dos vestibulares cadastrados... 51

Figura 16 - Cadastro de um vestibular... 52

Figura 17 - Um vestibular específico ... 52

(8)

LISTA DE QUADROS

Quadro 1 – Base de conhecimento descrita em AIML ... 15

Quadro 2 - Base de conhecimento descrita em AIML com tags adicionais ... 16

Quadro 3 - Declaração de classes em OWL ... 19

Quadro 4 - Exemplo de propriedade de objeto ... 20

Quadro 5 - Exemplo de propriedade de tipo de dado ... 20

Quadro 6 - Exemplo de propriedade de anotação... 20

Quadro 7 - Exemplo de declaração de um indivíduo nomeado ... 21

Quadro 8 - Exemplo da consulta SELECT ... 22

Quadro 9 - Resultado da consulta SELECT ... 22

Quadro 10 - Exemplo da consulta ASK ... 23

Quadro 11 - Exemplo da consulta DESCRIBE ... 23

Quadro 12 - Exemplo da consulta DESCRIBE com a cláusula WHERE ... 23

Quadro 13 - Resultado parcial da consulta DESCRIBE ... 23

Quadro 14 - Exemplo da instrução INSERT DATA ... 24

Quadro 15 - Exemplo da instrução INSERT ... 24

Quadro 16 - Exemplo da instrução DELETE DATA ... 24

Quadro 17 - Exemplo da instrução DELETE ... 24

Quadro 18 - Exemplo da atualização de dados com as instruções DELETE e INSERT ... 25

Quadro 19 - Exemplo do uso da função BIND ... 25

Quadro 20 - Exemplo do uso da função COUNT ... 25

Quadro 21 - Exemplo do uso do GROUP_CONCAT e GROUP BY ... 25

Quadro 22 - Resultado parcial da consulta com uso do GROUP_CONCAT e GROUP BY ... 26

Quadro 23 - Exemplo do uso da função FILTER ... 26

Quadro 24 - Requisitos funcionais ... 30

Quadro 25 - Requisitos não funcionais ... 30

Quadro 26 - Tags de consulta à ontologia e acesso aos dados ... 33

Quadro 27 - Tags de formatação de dados ... 34

Quadro 28 – Padrão de conhecimento para responder o dia de divulgação do resultado do vestibular... 44

Quadro 29 – Padrão de conhecimento para responder uma solicitação de ajuda ... 45

(9)

Quadro 31 - Método queryResult da classe SparqlExtension que interpreta a tag

<queryResult> ... 46

Quadro 32 - Método iterate da classe SparqlExtension que interpreta a tag <iterate> . 46 Quadro 33 - Método var da classe SparqlExtension que interpreta a tag <variable> ... 47

Quadro 34 - Método executarSelect da classe JenaSparqlEngine ... 48

Quadro 35 - Método salvar da classe VestibularMapper ... 48

Quadro 36 - Método salvar da classe VestibularGateway ... 49

Quadro 37 - Comparação entre o trabalho apresentado e os trabalhos correlatos ... 55

Quadro 38 – Caso de uso: Dialogar com o chatterbot ... 62

Quadro 39 - Caso de uso: Manter ingresso via vestibular ... 62

Quadro 40 - Caso de uso: Manter cursos ... 63

Quadro 41 - Caso de uso: Manter turno de estudo ... 63

Quadro 42 - Caso de uso: Manter cidade ... 63

Quadro 43 - Caso de uso: Manter os cursos oferecidos pelo vestibular ... 64

Quadro 44 - Caso de uso: Manter informações sobre a prova do vestibular ... 64

Quadro 45 - Caso de uso: Manter a data de divulgação do resultado do vestibular ... 64

(10)

LISTA DE ABREVIATURAS E SIGLAS

API – Application Programming Interface

AIML– Artificial Intelligence Markup Language ALICE – Artificial Linguistic Internet Computer Entity CDI – Contexts and Dependency Injection

DAML – DARPA Agent Markup Language FURB – Universidade Regional de Blumenau IA – Inteligência Artificial

IRI – Internationalized Resource Identifier OIL – Ontology Inference Layer

OWL – Web Ontology Language

RDF – Resource Description Framework

RDFS – Resource Description Framework Schema RF – Requisitos Funcionais

RNF – Não Funcionais

SHOE – Simple HTML Ontology Extension

SPARQL – SPARQL Protocol And RDF Query Language XML – eXtensible Markup Language

(11)

SUMÁRIO

1 INTRODUÇÃO ... 12 1.1 OBJETIVOS ... 12 1.2 ESTRUTURA... 13 2 FUNDAMENTAÇÃO TEÓRICA ... 14 2.1 CHATTERBOTS ... 14

2.2 ARTIFICIAL INTELLIGENCE MARKUP LANGUAGE ... 15

2.3 ONTOLOGIA... 18 2.3.1 OWL ... 18 2.3.2 SPARQL ... 21 2.4 TRABALHOS CORRELATOS ... 26 2.4.1 Doroty ... 26 2.4.2 OntoBot ... 27

2.4.3 Um chatterbot para aquisição automática de perfil do usuário ... 28

2.4.4 Lunmi ... 28

3 DESENVOLVIMENTO ... 30

3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO ... 30

3.2 ESPECIFICAÇÃO ... 30

3.2.1 Casos de uso ... 31

3.2.2 Especificação das tags AIML para acesso a ontologia ... 32

3.2.3 Especificação das tags AIML para tratamento dos dados ... 33

3.2.4 Ontologia sobre as formas de ingresso (para calouros) nos cursos da FURB ... 34

3.2.5 Diagrama de classes do projeto ... 36

3.3 IMPLEMENTAÇÃO ... 43

3.3.1 Técnicas e ferramentas utilizadas... 43

3.3.2 Bases de conhecimento AIML ... 43

3.3.3 Tags para consulta de ontologias a partir das bases de conhecimento em AIML... 45

3.3.4 Execução de consultas em SPARQL ... 47

3.3.5 Mapeamento de classes em Java para classes da ontologia ... 48

3.3.6 Operacionalidade da implementação ... 50

3.4 RESULTADOS E DISCUSSÕES ... 53

(12)

4.1 EXTENSÕES ... 58 REFERÊNCIAS ... 59 APÊNDICE A – Descrição dos casos de uso ... 62 APÊNDICE B – Descrição das bases de conhecimentos em AIML usadas pelo chatterbot ...65

(13)

12

1 INTRODUÇÃO

Ao longo de sua história, os seres humanos criaram diversos artefatos, como a escrita, a agricultura e as engenharias, que lhe garantiram a sobrevivência e a evolução. Todos esses artefatos, sejam eles simples técnicas manuais ou o desenvolvimento de alguma ciência, surgiram graças à capacidade do ser humano de fazer um planejamento adequado, de raciocinar sobre os fatos, de aprender novas habilidades e de observar o mundo ao seu redor.

Na atual Era Contemporânea, os computadores apresentam algumas das características descritas acima, mesmo que mais simplificadas, fazendo com que possam auxiliar ou substituir o ser humano em algumas atividades, tais como planejamento de rotas, atendimento automatizado de clientes e tradução de textos. Podendo os computadores desempenhar funções que antes somente os seres humanos tinham capacidade intelectual para executar, pergunta-se: até que ponto computadores são inteligentes? Nesse sentido, segundo Russel e Norvig (2013, p. 4), Alan Turing elaborou um teste, chamado Teste de Turing, que fornece uma definição de inteligência. Para o computador passar neste teste, segundo os autores, ele deve dialogar com um interrogador humano. Caso o interrogador não saiba dizer se está conversando com um computador ou com uma pessoa, pode-se inferir que o computador possui (ou simula) uma inteligência parecida com a humana.

Como se percebe, para o computador passar neste teste, ele precisa manter um diálogo do mesmo modo que os seres humanos. Logo, ele precisa ter capacidade, por exemplo, de compreender a linguagem natural, de ter conhecimento sobre uma variedade de assuntos e de raciocinar sobre os fatos levantados na conversa. Atualmente, uma classe de software que permite dialogar com o usuário tem chamado a atenção, são os chatterbots. Os chatterbots são, segundo Comarella e Café (2008, p. 58), “[...] um programa de computador que tem como objetivo responder perguntas de tal forma que a pessoa que estiver interagindo com ele tenha a impressão de estar conversando com outra pessoa.”

Diante do exposto, foi desenvolvido um chatterbot que consegue dialogar com os usuários sobre as formas de ingresso nos cursos da Universidade Regional de Blumenau (FURB).

1.1 OBJETIVOS

O objetivo deste trabalho é desenvolver um chatterbot que dialoga com os usuários de maneira autônoma.

Os objetivos específicos deste trabalho são:

(14)

13

b) permitir que o chatterbot responda dúvidas referentes às formas de ingresso (para calouros) nos cursos da FURB;

c) permitir a interação em língua portuguesa. 1.2 ESTRUTURA

A pesquisa realizada está organizada em capítulos. No primeiro capítulo é feita uma introdução relacionada aos chatterbots e aos objetivos a serem alcançados com a presente pesquisa. O segundo capítulo apresenta os conceitos que foram utilizados no desenvolvimento do trabalho. São apresentados os fundamentos teóricos sobre os chatterbots e a tecnologia utilizada para representar o seu conhecimento. Também é apresentado o conceito de ontologia e a sua forma de representação e manipulação. No terceiro capítulo é descrito o processo de especificação e de implementação da solução proposta, bem como é feita uma análise dos resultados alcançados. No quarto e último capítulo é mostrada a conclusão do trabalho e também são expostas algumas ideias que podem ser investigadas no desenvolvimento de pesquisas futuras.

(15)

14

2 FUNDAMENTAÇÃO TEÓRICA

Neste capítulo são relatados os principais conceitos e técnicas que envolvem a criação de chatterbots. A seção 2.1 trata sobre o que são os chatterbots. A seção 2.2 apresenta uma linguagem de criação de bases de conhecimento para chatterbots. A seção seguinte apresenta o conceito e a utilização de ontologias para representar conhecimento. Por fim, a seção 2.4 apresenta os trabalhos correlatos.

2.1 CHATTERBOTS

Chatterbots são programas de computador que tem como objetivo simular uma conversa do mesmo modo que um ser humano (COMARELLA; CAFÉ, 2008; LEMOS, 2011; TEIXEIRA, 2005). Teixeira (2005, p. 21) destaca ainda que o “objetivo é responder as perguntas de tal forma que as pessoas tenham a impressão de estar conversando com outra pessoa e não com um programa de computador.”. Permite-se assim que o usuário interaja com um sistema de informação de uma forma parecida com que ele interage com as outras pessoas no seu cotidiano.

Com as vantagens inerentes ao emprego de uma interface de comunicação usando linguagem natural, abrem-se diversas possibilidades de uso dos chatterbots. Segundo Galvão (2003), os chatterbots estão sendo utilizados em diversas áreas, como entretenimento, ensino a distância, atendimento ao consumidor e comércio eletrônico.

Moura (2003) divide os chatterbots em três gerações, usando como base as tecnologias empregadas no desenvolvimento. São elas:

a) 1° geração: utilizam técnicas de casamento de padrão e regras gramaticais, como em ELIZA, um chatterbot que tenta conversar como um psicanalista;

b) 2° geração: empregam técnicas de inteligência artificial, como redes neurais, lógica fuzzy e modelos de Markov. Dentre os chatterbots desta geração, pode-se citar o COLIN, que aprende a “falar” com ajuda do usuário empregando redes neurais;

c) 3° geração: utilizam a linguagem de marcação chamada de Artificial Intelligence Markup Language (AIML) para a criação de suas bases de conhecimento, citando-se como exemplo o chatterbot Artificial Linguistic Internet Computer Entity (ALICE).

(16)

15

2.2 ARTIFICIAL INTELLIGENCE MARKUP LANGUAGE

AIML é uma linguagem de marcação baseada no eXtensible Markup Language (XML), que tem como finalidade a especificação de bases de conhecimento para chatterbots. A linguagem AIML nasceu no âmbito do projeto de desenvolvimento do chatterbot ALICE (WALLACE, 2000).

Uma base de conhecimento AIML é formada, segundo Marietto et al. (2013), por blocos básicos de diálogos, chamados de categorias, onde cada categoria contém um padrão que representa uma sentença do usuário e uma resposta corresponde que o chatterbot dará ao usuário. No Quadro 1, tem-se um exemplo de uma pequena base de conhecimento em AIML.

Quadro 1 – Base de conhecimento descrita em AIML 1 <aiml>

2 <category>

3 <pattern>O meu nome é *</pattern>

4 <template> Olá Sr(a) <star index="1"/>! </template>

5 </category>

6

7 <category>

8 <pattern>Eu tenho * anos</pattern>

9 <template>Que legal !!! <set><name>idade</name><star/></set></template> 10 </category>

11

12 <category>

13 <pattern>Quantos anos eu tenho mesmo</pattern> 14 <template>

15 <random>

16 <li>Você tem <get><name>idade</name></get> anos</li>

17 <li>Horas bolas, você me disse que tinha <get><name>idade</name></get> anos</li> 18 </random> 19 </template> 20 </category> 21 22 <category>

23 <pattern>Você tem um calendário ai</pattern>

24 <template> Claro ! <system> cal </system> </template> 25 </category>

26 </aiml>

Observa-se no Quadro 1 que:

a) nas linhas 1 e 26 tem-se a tag <aiml>, usada para delimitar um documento AIML;

b) da linha 2 até a linha 5 é definida uma categoria (<category>), que engloba uma

possível sentença do usuário (<pattern>) e a resposta que o chatterbot dará para a

entrada (<template>). Na possível sentença do usuário, é utilizado * (asterisco)

para indicar que podem existir uma ou mais palavras. Na resposta para a sentença do usuário, é utilizada a tag <star> para obter o fragmento de texto capturado

pelo asterisco (*);

c) na linha 9 é definida uma variável chamada idade, utilizando a tag <set>, sendo o

(17)

16

dentro da tag <set> indica que está sendo definida uma variável global;

d) da linha 15 até a linha 18 é definida uma resposta para uma sentença do usuário, sendo utilizado a tag <random> que permite que uma resposta seja escolhida

aleatoriamente. Cada possível resposta é inserida dentro de uma tag <li>. Além disso, nas linhas 16 e 17 tem-se a tag <get>, que permite obter o valor de uma

variável;

e) na linha 24 a tag <system> envia um comando que vai ser executado pelo sistema

operacional, sendo a saída resultante exibida para o usuário. O comando cal no sistema operacional Linux serve para exibir um calendário em modo texto.

AIML contém ainda outras tags para: consultar a mensagem anterior, para verificar determinadas condições e para fazer uma recursão. O Quadro 2 exibe a utilização destas tags.

Quadro 2 - Base de conhecimento descrita em AIML com tags adicionais 1 <aiml> 2 <category> 3 <pattern>OI</pattern> 4 <template><srai>Olá</srai></template> 5 </category> 6 7 <category> 8 <pattern>Olá ^</pattern>

9 <template>Olá! qual é o seu nome?</template>

10 </category> 11

12 <category>

13 <pattern>Você pode me chamar de *</pattern>

14 <template>Muito prazer Sr(a)<star/>! Você quer perguntar alguma coisa pra

mim?</template> 15 </category>

16

17 <category>

18 <pattern>SIM</pattern>

19 <that>Você quer perguntar alguma coisa pra mim</that>

20 <template>Pode perguntar. Estou aqui para te ajudar.</template>

21 </category> 22

23 <category>

24 <pattern>Qual a capital do Estado de *</pattern>

25 <template><think> <set><var>estado</var><star/></set> </think> 26 <condition><var>estado</var>

27 <li><value>Roraima</value>A capital é a cidade de Boa Vista</li> 28 <li>VISH...eu não sei </li>

29 </condition> 30 </template> 31 </category> 21 </aiml>

No Quadro 2 tem-se:

a) na linha 4, dentro da tag <template>, é utilizada a tag <srai> para fazer uma

recursão, ou seja, a base de conhecimento será novamente analisada para verificar se existe algum padrão que case com a sentença definida dentro da tag. Em caso positivo, o resultado (conteúdo da tag <template>) vai ser inserido no lugar da

(18)

17

tag <srai>;

b) na linha 8 é utilizado o operador ^ (circunflexo) para indicar que pode existir zero

ou mais palavras após a palavra “Olá”;

c) da linha 17 até a linha 21 é definida uma categoria de conhecimento que casa com o padrão “SIM” desde que a última mensagem tenha sido “Você quer perguntar alguma coisa pra mim”. O acesso ao histórico da conversa é feito através da tag

<that>;

d) na linha 25 é definida uma variável chamada estado, utilizando a tag <set>,

sendo o valor desta variável definido pelo conteúdo da tag <star>. O uso da tag <var> dentro da tag <set> indica que está sendo definida uma variável local. A

tag <set> sempre retorna o valor que foi atribuído à variável. Então, ela pode ser

colocada dentro da tag <think>, que não tem nenhum retorno;

e) da linha 26 até a linha 29 é feito o uso de uma condição (<condition>) para

determinar qual resposta dar para o usuário. Cada tag <li> contém uma resposta

possível, caso o valor da variável a ser testada seja igual ao valor especificado dentro da tag <value>. Observa-se que uma tag <li> sem uma tag <value> indica

que ela será usada caso nenhuma das outras tags (<li>) forem utilizadas.

Chatterbots que utilizam a tecnologia AIML são formados por uma interface para interação com o usuário, uma base de conhecimento AIML e um interpretador para interpretá-la (MOURA, 2003). Segundo Leonhartdt (2005), quando o usuário fornece uma entrada, o interpretador1 aplica um processo de normalização, onde ocorre, por exemplo, a substituição de abreviaturas, a quebra da entrada em sentenças, a remoção da pontuação e a conversão das palavras para o maiúsculo. Com a entrada normalizada, o interpretador busca uma resposta na base AIML. Para tanto, o interpretador precisa interpretar o conteúdo da base de conhecimento. Wallace (2008) relata que o conteúdo das categorias AIML é armazenado em uma árvore. “Cada nó da árvore armazena uma única palavra ou os coringas “_” ou “*” [entre outros] e cada folha armazena a resposta ou os dados existentes entre as tags <template>.” (TEIXEIRA, 2005, p. 24). Para efetuar a busca na árvore, Teixeira (2005, p. 24) relata que é utilizada “[...] uma versão mais restrita do algoritmo busca primeiro em profundidade.”

1 Alguns autores chamam o interpretador AIML de ALICE, pois o projeto ALICE também cuida da

(19)

18

2.3 ONTOLOGIA

Na construção de chatterbots podem ser usadas ontologias. Para a Ciência da Computação, mais especificamente no subcampo de Inteligência Artificial (IA), segundo Guarino, Oberle e Stabb (2009, p. 2, tradução nossa), a ontologia é tratada “[...] como um tipo especial de objeto de informação ou artefato computacional.” Uma ontologia permite modelar um determinado domínio de conhecimento utilizando uma série de elementos previamente definidos (GRUBER, 2009). Uschold e Grüninger (1996) relatam que as ontologias podem ser utilizadas para definir um senso comum sobre um domínio de conhecimento para a comunicação entre pessoas, para a interoperabilidade entre sistemas ou para o processo de desenvolvimento de um software.

Para o uso de ontologias em um ambiente computacional é necessário uma maneira de representá-las de uma forma que seja passível de processamento e interpretação pelo computador. Breitman (2005) destaca o uso das linguagens Resource Description Framework (RDF), Resource Description Framework Schema (RDFS), Simple HTML Ontology Extension (SHOE), Ontology Inference Layer (OIL), DARPA Agent Markup Language (DAML), DAML+OIL e Web Ontology Language (OWL), como forma para a criação de ontologias. As informações contidas em uma ontologia criada em RDF, RDFS ou OWL podem ser consultadas e atualizadas através de linguagens de consultas específicas, como a linguagem SPARQL Protocol And RDF Query Language (SPARQL).

2.3.1 OWL

A finalidade da linguagem OWL é permitir a criação de ontologias sobre determinados conceitos e sobre os relacionamentos entre eles (BREITMAN, 2005). A linguagem OWL foi construída como uma camada acima das linguagens RDF e RDFS, para resolver alguns problemas relacionados à criação de ontologias utilizando estas linguagens (ANTONIOU; HARMELEN, 2009).

Ontologias escritas em OWL são formadas por triplas (DUCHARME, 2013), sendo que uma tripla é uma declaração composta por três elementos: sujeito, predicado e objeto (SCHREIDER; RAIMOND, 2014). Em linguagem corrente, um exemplo de tripla seria “O Bruno estuda na FURB”, onde o sujeito “Bruno” e o objeto “FURB” estão relacionados através do predicado “estuda na”. As triplas são uma maneira de codificar informações sobre algo, onde o predicado da tripla tem a função de informar do que se está falando. No exemplo anterior, o sujeito e o objeto são indivíduos específicos do mundo real, "Bruno" e "FURB", mas eles poderiam estar se referindo a um conjunto genérico de indivíduos ou até mesmo

(20)

19

sobre um predicado. Por exemplo, seria possível criar uma tripla que contém a informação "Universidade é um tipo de Organização Educacional". A OWL faz uso do conceito de triplas para representar os seus elementos básicos que são: classes, propriedades e indivíduos2.

As classes servem para definir um conjunto de indivíduos que possuem características em comum. Na OWL classes são definidas utilizando a sintaxe owl:Class, sendo que todas

as classes definidas são subclasses da classe owl:Thing (ANTONIOU; HARMELEN, 2004;

BREITMAN, 2005). No Quadro 3 é mostrado um exemplo de definição de duas classes em OWL.

Quadro 3 - Declaração de classes em OWL 1 <owl:Class rdf:about="SerVivo"/>

2

3 <owl:Class rdf:about="SerHumano">

4 <rdfs:subClassOf rdf:resource="SerVivo"/>

5 </owl:Class>

A primeira classe definida (linha 1) é a classe SerVivo. A identificação da classe se dá

através do atributo rdf:about que, segundo Wood et al. (2013), é o sujeito de uma tripla. A

segunda classe definida (linha 3) é a classe SerHumano. Para declarar que a classe SerHumano

é uma subclasse de SerVivo é utilizada a propriedade rdfs:subClassOf (WOOD et al.,

2013). A identificação da classe mãe se dá através do atributo rdf:resource.

As propriedades servem para definir as relações entre os indivíduos (HORRIDGE, 2011). São utilizadas quando é necessário descrever fatos sobre os indivíduos (BREITMAN, 2005). Propriedades como “nasceu em” e “morreu em”, por exemplo, poderiam estar relacionando um indivíduo que representa uma pessoa com um indivíduo que representa uma cidade. Hitzler et al. (2012) divide as propriedades em três tipos: de objeto, de tipos de dados e de anotação.

As propriedades de objeto, segundo Antoniou e Harmelen (2004, p. 118, tradução nossa), “[...] relacionam objetos com outros objetos.” Um exemplo desta propriedade em linguagem corrente seria “Cruz e Souza nasceu em Florianópolis”. Os objetos “Cruz e Souza” e “Florianópolis” estão relacionados através da propriedade “nasceu em”. A representação dessa propriedade em OWL encontra-se no Quadro 4.

2 Quando a semântica da ontologia é interpretada como um grafo RDF diz-se que ela tem uma semântica baseada

em RDF e quando ela é interpretada seguindo a lógica descritiva a sua semântica é chamada de semântica direta (HITZLER, 2012). Glimm (2011, p.5) comenta que na semântica direta não existe a presença de triplas, já que na lógica descritiva é utilizada outra estrutura de representação. Neste trabalho é adotada a visão de uma ontologia OWL como um grafo RDF.

(21)

20

Quadro 4 - Exemplo de propriedade de objeto 1 <owl:ObjectProperty rdf:about="nasceuEm">

2 <rdfs:domain rdf:resource="Pessoa" />

3 <rdfs:range rdf:resource="Cidade"/>

4 </owl:ObjectProperty>

5

6 <owl:NamedIndividual rdf:about="Cruz_e_Souza"> 7 <rdf:type rdf:resource="Pessoa"/>

8 <nasceuEm rdf:resource="Florianopolis"/>

9 </owl:NamedIndividual>

No Quadro 4, da linha 1 até a linha 4, foi declarada a propriedade nasceuEm

(owl:ObjectProperty). O uso de rdfs:domain e rdfs:range servem, respectivamente, para

definir o sujeito e o objeto da propriedade declarada (BREITMAN, 2005). Da linha 6 até a linha 9 é declarado um indivíduo que contém a propriedade definida anteriormente. Percebe-se que o vínculo da propriedade com um indivíduo Percebe-se dá através de uma tag <nasceuEm>.

O segundo tipo de propriedade, propriedade de tipos de dados, relaciona, segundo Breitman (2005, p. 63), ”[...] instâncias de classes e literais expressos em RDF e datatypes do XML”. O ano de fundação de uma cidade ou a data de nascimento de uma pessoa seriam exemplos deste tipo de propriedade. No Quadro 5 é mostrada a criação de uma propriedade de tipo de dado chamada nome (linha 1 a linha 4) e o seu vínculo com um indivíduo (linha 6 a

linha 9). Nota-se o uso da instrução owl:DatatypeProperty para a criação de uma

propriedade de tipo de dado.

Quadro 5 - Exemplo de propriedade de tipo de dado 1 <owl:DatatypeProperty rdf:about="nome">

2 <rdfs:domain rdf:resource="Pessoa"/>

3 <rdfs:range rdf:resource="&xsd;string"/

4 </owl:DatatypeProperty>

5

6 <owl:NamedIndividual rdf:about="Cruz_e_Souza"> 7 <rdf:type rdf:resource="Pessoa"/>

8 <nome rdf:datatype="&xsd;string">João da Cruz e Souza</nome>

9 </owl:NamedIndividual>

Por fim, tem-se a propriedade de anotação. Esta propriedade serve para adicionar informações que não fazem parte do domínio da ontologia (HITZLER et al., 2012). A versão da ontologia, um comentário sobre uma classe ou a descrição de uma classe são exemplos de propriedades de anotação. O Quadro 6 mostra o uso de uma propriedade de anotação para associar uma descrição a uma classe.

Quadro 6 - Exemplo de propriedade de anotação 1 <owl:AnnotationProperty rdf:about="descricao"/>

2 <owl:Class rdf:about="Pessoa"> 3

4

<descricao rdf:datatype="&xsd;string">Esta classe representa as pessoas do

mundo real</descricao> 5 </owl:Class>

“Indivíduos são objetos do mundo; pertencem as classes e são relacionados a outros indivíduos (e classes) através de propriedades” (BREITMAN, 2005, p. 62). Em uma ontologia

(22)

21

sobre cidades, cidades como Blumenau e New York são indivíduos, bem como os filmes Titanic e Transformers são indivíduos em uma ontologia sobre filmes. Em uma situação onde é necessário declarar que o filme Transformers (da ontologia de filmes) foi gravado na cidade de New York (da ontologia de cidades), seria necessário que a cidade New York tivesse um nome para poder ser referenciada. Este nome ou identificador em uma ontologia OWL é dado através de uma Internationalized Resource Identifier (IRI) (MOTIK; PATEL-SCHENEIDER; PARSIA, 2012). Para os autores, na OWL os indivíduos são chamados de indivíduos nomeados (named individual) quando possuem um identificador para serem referenciados externamente e são chamados de indivíduos anônimos (anonymous individual) quando não tem. O exemplo do Quadro 7 mostra a criação de um indivíduo nomeado do tipo SerHumano

chamado Bruno com o uso de owl:NamedIndividual.

Quadro 7 - Exemplo de declaração de um indivíduo nomeado 1 <owl:NamedIndividual rdf:about="Bruno">

2 <rdf:type rdf:resource="SerHumano"/>

3 </owl:NamedIndividual>

É possível também estabelecer limitações aos indivíduos de uma classe, através de restrições (BREITMAN, 2005). Motik, Patel-Scheneider e Parsia (2012) apresentam algumas restrições que podem ser aplicadas nas propriedades, como por exemplo, a restrição de cardinalidade, que pode ser utilizada para definir o número máximo de relacionamentos que um indivíduo pode ter com outro através de uma propriedade específica.

2.3.2 SPARQL

SPARQL é uma linguagem de consulta para dados em RDF (ALLEMANG; HENDLER, 2011). A linguagem faz uso de padrões de triplas que permitem utilizar variáveis no lugar do sujeito, do predicado e do objeto com a finalidade de casar com padrões de grafos (HERTEL; BROESKSTRA; STUCKENSCHMIDT, 2009). Com a linguagem SPARQL é possível realizar consultas em arquivos em RDF ou em banco de dados. Os bancos de dados que fazem o gerenciamento de triplas são chamados de triple stores (ALLEMANG; HENDLER, 2011), enquanto a execução de consultas em SPARQL em servidores remotos é feita através de um web service chamado de SPARQL endpoint (DUCHARME, 2013).

(23)

22

Quadro 8 - Exemplo da consulta SELECT 1 PREFIX dbpprop: <http://dbpedia.org/property/>

2 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 3 PREFIX dbpedia: <http://dbpedia.org/resource/> 4 SELECT ?nomeMunicipio WHERE {

5 ?municipio dbpedia-owl:type dbpedia:Municipalities_of_Brazil .

6 ?municipio dbpprop:name ?nomeMunicipio .

7 }

Observa-se no Quadro 8 que:

a) da linha 1 até a linha 3 são definidos prefixos para os namespaces, com a finalidade de simplificar as consultas (HERTEL; BROESKSTRA; STUCKENSCHMIDT, 2009);

b) a linha 4 tem a instrução SELECT e uma variável (?nomeMunicipio), sendo que

esta instrução, segundo Wood et al. (2013, p. 100, tradução nossa), “[...] seleciona informações com base em restrições.”;

c) na linha 5 é declarado o primeiro padrão de triplas, onde é utilizado como sujeito do padrão a variável ?municipio. O uso de uma variável em um padrão de triplas

indica a presença de uma incógnita. O dbpedia-owl:type é o predicado do

padrão, que na ontologia da DBpedia (DBPEDIA COMMUNITY, 2014) representa uma propriedade que indica o tipo de um objeto. Por último, tem-se o objeto do padrão, dbpedia:Municipalities_of_Brasil. A classe consultada é a classe dos municípios do Brasil. Logo, este padrão vai casar com as triplas que têm um sujeito qualquer (?municipio) que é (dbpedia-owl:type) um município do

Brasil (dbpedia:Municipalities_of_Brasil);

d) na linha 6 está o segundo padrão, onde a variável ?municipio faz referência ao nó que foi atribuído3 a esta variável no padrão anterior, para verificar, através do predicado dbpprop:name, se esse nó possui um objeto ?nomeMunicipio.

O resultado da consulta serão todos os nós associados à variável ?nomeMunicipio que

satisfizerem os padrões definidos. No Quadro 9 são apresentados os três primeiros resultados da consulta do Quadro 8.

Quadro 9 - Resultado da consulta SELECT nomeMunicipio

1 "Bom Jesus do Itabapoana"@en 2 "Pilar do Sul"@en

3 "Santa Bárbara"@en

Além da consulta SELECT, tem- se a consulta ASK, que verifica se existe alguma tripla

que corresponda ao padrão especificado na cláusula WHERE, retornando verdadeiro, em caso

(24)

23

positivo, ou falso, em caso contrário (WOOD et al., 2013). A consulta ASK pode ser utilizada,

por exemplo, para verificar a existência de alguma propriedade associada a alguma entidade ou para verificar se uma propriedade tem um determinado valor. Além disso, Wood et al. (2013) ressalta que ASK pode ser usada como uma forma de se evitar executar uma consulta

demorada que não retorna nenhum resultado. No Quadro 10 é apresentado um exemplo de uma consulta ASK. Esta consulta retorna verdadeiro (true) caso a cidade de Blumenau

(dbpedia:Blumenau) tenha uma elevação (dbpedia-owl:elevation) de 21 metros4. Quadro 10 - Exemplo da consulta ASK

1 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 2 PREFIX dbpedia: <http://dbpedia.org/resource/>

3 ASK WHERE {

4 dbpedia:Blumenau dbpedia-owl:elevation 21 .

5 }

Por sua vez, a consulta DESCRIBE serve para descrever um recurso (DUCHARME,

2013). Descrever um recurso significa obter todos os atributos e as relações associadas a ele.

DESCRIBE pode ser utilizada quando é necessário retornar todas as propriedades associadas a uma ou a várias entidades através da cláusula WHERE. O Quadro 11 apresenta um exemplo da

consulta DESCRIBE como uma forma de retornar todas as propriedades relacionadas à

Universidade Regional de Blumenau (FURB), enquanto o Quadro 12 mostra o uso de

DESCRIBE com a cláusula WHERE para retornar todas as propriedades referentes às universidades do Estado de Santa Catarina.

Quadro 11 - Exemplo da consulta DESCRIBE 1 PREFIX dbpedia-pt: <http://pt.dbpedia.org/resource/>

2 DESCRIBE dbpedia-pt:Universidade_Regional_de_Blumenau

Quadro 12 - Exemplo da consulta DESCRIBE com a cláusula WHERE 1 PREFIX dbpedia-pt: <http://pt.dbpedia.org/resource/>

2 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>

3 DESCRIBE ?universidade WHERE {

4 ?universidade a dbpedia-owl:University .

5 ?universidade dbpedia-owl:state dbpedia-pt:Santa_Catarina .

6 }

O Quadro 13 apresenta algumas das informações retornadas da consulta do Quadro 11.

Quadro 13 - Resultado parcial da consulta DESCRIBE

1 dbpedia-pt:Universidade_Regional_de_Blumenau dbpprop-pt:nEstudantes 13371 ;

2 dbpprop-pt:orcamento 95 ;

3 dbpprop-pt:nProfessores 837 ;

4 dbpprop-pt:reitor dbpedia-pt:João_Natel_Pollonio_Machado .

A partir da versão 1.1 da linguagem SPARQL é possível realizar a atualização de dados (WOOD et al., 2013), com a inserção, a remoção e a atualização de triplas. A inserção de triplas em um grafo se dá através das instruções INSERT e INSERT DATA. A diferença entre

4 A palavra metros foi inserida para uma melhor compreensão, pois na base de dados da DBpedia a propriedade

(25)

24

as duas é que o INSERT DATA não tem a cláusula WHERE, enquanto que na instrução INSERT a

cláusula WHERE está presente e é possível referenciar as variáveis dos padrões de procura

definidos (DUCHARME, 2013). No exemplo do Quadro 14 é utilizado o comando INSERT DATA para inserir o nome e a data de fundação de uma nova biblioteca

(Nova_Biblioteca_de_Alexandria).

Quadro 14 - Exemplo da instrução INSERT DATA 1 PREFIX : <http://minha-ontologia.com.br/>

2 PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 3 INSERT DATA {

4 :Nova_Biblioteca_de_Alexandria a :Bibilioteca .

5 :Nova_Biblioteca_de_Alexandria :nome "Nova Biblioteca de Alexandria"^^

6 xsd:string .

7 :Nova_Biblioteca_de_Alexandria :dataFundacao 2002 .

8 }

Já o Quadro 15 mostra o uso do comando INSERT para adicionar em todas as

universidades a informação que elas são subordinadas ao Ministério da Educação.

Quadro 15 - Exemplo da instrução INSERT 1 PREFIX : <http://minha-ontologia.com.br/>

2 INSERT { ?universidade :subordinadoAo :Ministerio_da_Educacao } WHERE {

3 ?universidade a :Universidade .

4 }

Para apagar triplas são utilizadas as instruções DELETE e DELETE DATA. As diferenças

entre as duas são as mesmas das operações de inserção comentadas anteriormente. O Quadro 16 contém uma consulta que apaga a data de fundação de uma biblioteca com o uso da instrução DELETE DATA, enquanto que no Quadro 17 a instrução DELETE é utilizada para

apagar a data de fundação de todas as universidades.

Quadro 16 - Exemplo da instrução DELETE DATA 1 PREFIX : <http://minha-ontologia.com.br/>

2 DELETE DATA { :Nova_Biblioteca_de_Alexandria :dataFundacao 2002 . } Quadro 17 - Exemplo da instrução DELETE

1 PREFIX : <http://minha-ontologia.com.br/>

2 DELETE { ?universidade :dataFundacao ?data . } WHERE {

3 ?universidade a :Universidade .

4 }

A atualização de informações em SPARQL ocorre com a execução de uma consulta com instruções para apagar e inserir triplas (DUCHARME, 2013). Gearon, Passant e Pollares (2013) relatam que no processo de atualização de informações, a cláusula WHERE fornece as

variáveis capturadas pelo padrão de triplas especificado para as instruções DELETE e INSERT, respectivamente. O exemplo do Quadro 18 mostra uma consulta para atualizar o nome de uma universidade que tem como sigla FURB.

(26)

25

Quadro 18 - Exemplo da atualização de dados com as instruções DELETE e INSERT 1 PREFIX : <http://minha-ontologia.com.br/>

2 PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 3 DELETE { ?universidade :nome ?nome }

4 INSERT { ?universidade :nome "Fundação Universidade Regional de Blumenau" }

5 WHERE {

6 ?universidade a :Universidade .

7 ?universidade :abreviacao "FURB"^^xsd:string .

8 }

Segundo Harris e Seaborne (2013), para permitir que um valor seja atribuído a uma variável a partir de um padrão ou uma expressão, pode ser usada a instrução BIND. Já para

aplicar funções (de cálculo ou de contagem) em cima do resultado, por exemplo, em situações onde é necessário retornar somente o preço total de um conjunto de produtos ou retornar a quantidade de produtos comprados, podem ser utilizadas as funções de agregação. O Quadro 19 mostra o uso da instrução BIND para transformar a elevação da cidade de Blumenau que

está em metros para pés5. O Quadro 20 mostra o uso da função COUNT para retornar a

quantidade de universidades presentes no Brasil. Já no exemplo do Quadro 21 é feito o uso da função de agregação GROUP_CONCAT para concatenar todos os nomes das universidades em

uma única variável. O GROUP BY serve para agrupar dados (DUCHARME, 2013). Uma parte

do resultado desta consulta é mostrada no Quadro 22.

Quadro 19 - Exemplo do uso da função BIND 1 PREFIX dbpedia: <http://dbpedia.org/resource/>

2 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 3 SELECT ?altitudeEmPes WHERE {

4 dbpedia:Blumenau dbpedia-owl:elevation ?altitude BIND (?altitude * 3.28 AS

5 ?altitudeEmPes).

6 }

Quadro 20 - Exemplo do uso da função COUNT 1 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 2 PREFIX dbpedia: <http://dbpedia.org/resource/>

3 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 4 PREFIX dbpprop: <http://dbpedia.org/property/>

5 SELECT (COUNT(?universidade) AS ?quantidadeDeUniversidades) WHERE { 6 ?universidade a dbpedia-owl:University ;

7 dbpedia-owl:country dbpedia:Brazil .

8 }

Quadro 21 - Exemplo do uso do GROUP_CONCAT e GROUP BY 1 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 2 PREFIX dbpedia: <http://dbpedia.org/resource/>

3 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 4 PREFIX dbpprop: <http://dbpedia.org/property/>

5 SELECT ?nomeEstado

6 (GROUP_CONCAT(?nomeUniversidade; separator=",") AS ?listaUniversidades) WHERE

7 { ?universidade a dbpedia-owl:University ;

8 dbpedia-owl:country dbpedia:Brazil ;

9 dbpprop:name ?nomeUniversidade ;

10 dbpedia-owl:state ?estado. 11 ?estado dbpprop:name ?nomeEstado .

12 } GROUP BY (?nomeEstado)

5 Unidade de medida de comprimento.

(27)

26

Quadro 22 - Resultado parcial da consulta com uso do GROUP_CONCAT e GROUP BY

nomeEstado listaUniversidades

1 "State of Santa Catarina"@en Universidade do Extremo Sul Catarinense, Universidade do Estado de Santa Catarina, Universidade Federal de Santa Catarina, Instituto Federal de Santa Catarina

Em situações, por exemplo, onde é necessário retornar todos os nomes de funcionários que tem mais de 50 anos, seria necessário ter algum mecanismo para não permitir os nomes de funcionários com menos de 50 anos sejam retornados. Para situações como a descrita é necessário o uso da instrução FILTER. A instrução FILTER tem como finalidade determinar

quais dados serão retornados com base em uma expressão lógica definida (ALLEMANG; HENDLER, 2011). O exemplo do Quadro 23 faz uso da instrução FILTER para retornar

somente as universidades brasileiras com mais de 10 mil alunos. O uso do ; (ponto e vírgula)

após a declaração de uma tripla indica que a tripla abaixo vai reutilizar o seu sujeito (WOOD, et al., 2013).

Quadro 23 - Exemplo do uso da função FILTER 1 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 2 PREFIX dbpedia: <http://dbpedia.org/resource/>

3 PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 4 PREFIX dbpprop: <http://dbpedia.org/property/>

5 SELECT ?nomeUniversidade ?numeroDeEstudantes WHERE {

6 ?universidade a dbpedia-owl:University; 7 dbpedia-owl:country dbpedia:Brazil ; 8 dbpprop:name ?nomeUniversidade; 9 dbpedia-owl:numberOfStudents ?numeroDeEstudantes . 10 FILTER (?numeroDeEstudantes > 10000) 11 } 2.4 TRABALHOS CORRELATOS

Nesta seção são relatados alguns trabalhos correlatos, entre os quais o chatterbot Doroty (LEONHARTDT, 2005), o OntoBot (AL-ZUBAIDE; ISSA, 2011), o chatterbot desenvolvido por Moura (2003) e o chatterbot Lunmi (DIAS et al., 2007).

2.4.1 Doroty

O objetivo do trabalho, segundo Leonhartdt (2005, p. 15), é “propor uma solução para o problema da falta de capacitação e treinamento de alguns profissionais que atuam no gerenciamento de redes de grandes corporações.” Para tanto, é utilizado um chatterbot chamado Doroty que tem a capacidade de responder perguntas sobre a área de gerenciamento de redes, bem como, mostrar algumas informações coletadas sobre uma rede. A Figura 1 mostra uma tela de interação do Doroty.

O chatterbot Doroty faz uso da linguagem AIML para especificar a sua base de conhecimento. Entretanto, quando o usuário faz uma pergunta que envolva informações sobre a rede gerenciada, o interpretador AIML envia algumas informações sobre a pergunta para o

(28)

27

um módulo chamado de modulo central, que busca em um banco de dados às informações solicitadas. A arquitetura de Doroty ainda contém outros módulos que trabalham de forma autônoma, com a finalidade de coleta e armazenamento das informações sobre os equipamentos e demais objetos conectados à rede gerenciada. O chatterbot Doroty foi desenvolvimento em Java, utilizando o MySQL como banco de dados.

Figura 1- Chatterbot Doroty

Fonte: Leonhartdt (2005, p. 56).

2.4.2 OntoBot

O trabalho apresenta uma proposta de construção de chatterbot usando ontologias. A arquitetura proposta por Al-Zubaide e Issa (2011) possui três elementos chaves: a ontologia, um módulo de processamento de linguagem natural e um motor de inferência.

Al-Zubaide e Issa (2011, p. 9-11) explicam que a ontologia, que representa a base de conhecimento do chatterbot, é convertida para um banco de dados relacional. O módulo de processamento de linguagem natural recebe a entrada do usuário e realiza o processo de criação de tokens, filtragem de palavras indesejadas, derivação das palavras para sua raiz e a

(29)

28

procura de palavras que contenham sinônimos. A saída do módulo de processamento de linguagem natural é repassada para o motor de inferência.

Através de seus submódulos, o motor de inferência tenta definir o escopo da conversa e tenta fazer um casamento entre a saída gerada pelo módulo de processamento de linguagem natural e alguma regra pré-definida. Cada regra define um possível estilo de pergunta e está associada a uma consulta ao banco de dados.

Tendo efetuada a consulta, a resposta obtida é passada por um processo, onde ocorrem, se necessário, a pluralização das palavras e a conjugação dos verbos, para que então a resposta seja enviada ao usuário.

2.4.3 Um chatterbot para aquisição automática de perfil do usuário

O objetivo do trabalho, segundo Moura (2003, p. 11), é “[...] desenvolver um chatterbot capaz de manter diálogos sobre um domínio específico, e realizar aquisição automática de perfil dos usuários do sistema nesse domínio.” O chatterbot proposto por Moura (2003) conversa sobre filmes, tentando traçar o perfil do usuário a partir da conversa.

Este chatterbot também utiliza a tecnologia AIML como base de conhecimento, porém a base de conhecimento é derivada de outro chatterbot, chamado de PixelBot. Moura (2003) relata que a base de conhecimento do PixelBot contém conhecimento sobre vários assuntos, como música e futebol, e que esta base de conhecimento foi estendida com novas categorias de conhecimento para que o chatterbot pudesse conversar sobre filmes. Além da base de conhecimento, o projeto conta com o apoio de um banco de dados onde as informações detalhadas sobre os filmes estão guardadas. Para acesso as informações sobre os filmes, bem como para registrar as preferências dos usuários, foram criadas tags especiais para o AIML, como por exemplo, a tag <buscafilme>, que serve para procurar um determinado tipo de

filme, e a tag <notadada>, para gravar as avaliações dadas pelos usuários no banco de dados. No projeto foi utilizada a linguagem de programação Java e o banco de dados Microsoft Access.

2.4.4 Lunmi

O chatterbot Lunmi, segundo Dias et al. (2007, p. 2), “[...] tem como finalidade responder a perguntas a respeito de um periódico científico eletrônico, a Revista Informação & Sociedade, do Departamento de Biblioteconomia e Documentação da UFPB”. Responde dúvidas sobre qual é o qualis da revista, como enviar um artigo para a revista, quem são os editores da revista, entre outras. O chatterbot de Dias et al. (2007) faz uso de bases de conhecimento em AIML e de uma ontologia.

(30)

29

Os autores criaram uma Application Programming Interface (API) própria que encapsula o acesso a ontologia. Além disto, é feito o uso de uma linguagem de consulta própria. Dias et al. (2007) comenta que o uso da linguagem é para facilitar o acesso à ontologia por parte do usuário. Esta linguagem fornece os comandos exist e instances

utilizados, respectivamente, para verificar e retornar instâncias de recursos. A Figura 2 mostra um exemplo do comando exist. Como se percebe, é através da tag <system> que as

instruções para a consulta da ontologia são colocadas. No projeto do chatterbot Lunmi foi utilizada a linguagem de programação Java e a API do Protégé, usada pela API criada pelos autores.

Figura 2 - Fragmento da base AIML que contém o comando exist

Fonte: Dias et al. (2007, p. 9).

O chatterbot Lunmi teve duas versões: a primeira versão somente utiliza bases de conhecimento em AIML e a segunda versão tem o apoio de uma ontologia para responder aos usuários. A utilização da ontologia ajudou na manutenção do projeto, mas, em contrapartida, a aplicação perdeu um pouco de desempenho (DIAS et al., 2007).

(31)

30

3 DESENVOLVIMENTO

Este capítulo apresenta todo o processo de desenvolvimento do software desenvolvido na pesquisa. A seção 3.1 descreve os principais requisitos levantados em relação ao problema da pesquisa, na seção 3.2 são mostrados os artefatos gerados durante o processo de modelagem do sistema, a seção 3.3 trata da implementação do sistema e, por fim, na seção 3.4 são discutidos os resultados alcançados.

3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO

Os Requisitos Funcionais (RF) e Não Funcionais (RNF) do trabalho desenvolvido são apresentados, respectivamente, nos Quadro 24 e Quadro 25, sendo que para os RFs foram relacionados os casos de uso correspondentes.

Quadro 24 - Requisitos funcionais

Requisitos funcionais (RF) Caso de

uso (UC) RF01: permitir que o usuário interaja com o chatterbot através de uma página web. UC01 RF02: permitir que o chatterbot responda questões referentes às formas de ingresso

(para calouros) nos cursos da FURB.

UC01 RF03: permitir que o usuário interaja com o chatterbot em língua portuguesa. UC01

RF04: permitir o cadastro de cursos. UC05

RF05: permitir o cadastro de turnos de estudos dos cursos. UC06 RF06: permitir o cadastro de ingresso via vestibular. UC02 RF07: permitir o cadastro de cursos oferecidos no ingresso via vestibular. UC08 RF08: permitir o cadastro de ingresso via histórico escolar. UC04 RF09: permitir o cadastro de cursos oferecidos no ingresso via histórico escolar. UC09 RF10: permitir o cadastro de ingresso via ENEM. UC03 RF11: permitir o cadastro de cursos oferecidos no ingresso via ENEM. UC10 RF12: permitir o cadastro da prova do vestibular. UC11 RF13: permitir o cadastro de cidades para realização da prova do vestibular. UC07 RF14: permitir o cadastro da data de divulgação dos aprovados pelo vestibular UC12 RF15: permitir o cadastro da data de divulgação dos aprovados pelo histórico escolar UC13 RF16: permitir o cadastro da data de divulgação dos aprovados pelo ENEM UC14

Quadro 25 - Requisitos não funcionais Requisitos não funcionais (RNF)

RNF01: utilizar a linguagem de programação Java na implementação da solução proposta. RNF02: utilizar o framework Vraptor para o desenvolvimento da estrutura web do projeto. RNF03: utilizar o interpretador ProgramAB para interpretar as bases de conhecimento em AIML. RNF04: utilizar o framework Apache Jena para manipular a ontologia.

RNF05: utilizar o Apache Jena Fuseki como SPARQL endpoint. RNF06: utilizar o framework Bootstrap para o design das páginas web.

3.2 ESPECIFICAÇÃO

Esta seção mostra o processo de especificação do chatterbot desenvolvido. Na seção 3.2.1 são apresentados os casos de uso, na seção 3.2.2 é apresentada a especificação das tags criadas para consultar a ontologia, na seção 3.2.3 é apresentada a especificação das tags

(32)

31

referentes à formatação de dados, na 3.2.4 é exibida a modelagem da ontologia sobre as formas de ingresso (para calouros) nos cursos da FURB e, por último, a seção 3.2.5 mostra os diagramas de classes do sistema desenvolvido.

A Figura 3 exibe uma representação da arquitetura do chatterbot desenvolvido. O chatterbot faz uso de uma série de bases de conhecimento AIML e de uma ontologia para conseguir responder uma pergunta do usuário. Nas bases de conhecimento AIML estão contidas as perguntas que o chatterbot consegue responder, enquanto que a ontologia é utilizada para ajudar na construção das respostas.

Figura 3 - Arquitetura do chatterbot Andrew

3.2.1 Casos de uso

Para a modelagem do sistema foram definidas as interações entre o usuário e o sistema. Estas interações foram modeladas como casos de uso como mostra a Figura 4. No Apêndice A encontra-se uma descrição detalhada dos principais casos de uso apresentados na Figura 4.

(33)

32

Figura 4 - Diagrama de casos de uso

3.2.2 Especificação das tags AIML para acesso a ontologia

A principal função deste conjunto de tags (Quadro 26) é permitir o acesso aos dados da ontologia a partir da base AIML.

(34)

33

Quadro 26 - Tags de consulta à ontologia e acesso aos dados

tag descrição tags filhas

<sparql> Permite a execução de uma consulta em SPARQL, suportando

dois tipos de consultas: ASK e SELECT.

resultado: se a consulta for do tipo ASK, retorna um valor lógico para a base de conhecimento, caso contrário, armazena o resultado em um objeto interno do interpretador para acesso posterior.

exemplo: <sparql>

SELECT ?desc WHERE { :Vestibular :descricao ?desc} </sparql>

-

<queryResult> Permite acessar os dados de uma consulta SELECT, sendo que a

tag <index> indica o índice do elemento a ser acessado, enquanto a tag <variable> indica o nome da variável SPARQL a ser acessada.

resultado: retorna o valor da variável. Em caso de erro ao acessar o índice e a variável informada, retorna a mensagem “unknown”. exemplo: <queryResult> <index>0</index> <variable>url</variable> </queryResult> <index> <variable>

<iterate> Permite efetuar uma iteração sobre um conjunto de dados

retornados de uma consulta em SPARQL, sendo que a tag <from> serve para indicar o conjunto de objetos que vai ser iterado, a tag

<item> representa o item que está sendo iterado no momento e a

tag <variable> é utilizada para acessar uma variável deste item. Todo o texto da tag <item> vai fazer parte da iteração.

resultado: retorna uma string com todos os caracteres da iteração. exemplo:

<iterate> <from> <sparql>

SELECT ?nomeTurno WHERE

{?turno a :Turno; :nome ?nomeTurno} </sparql> </from> <item><variable>nomeTurno</variable>, </item> </iterate> <from> <item> <variable>

3.2.3 Especificação das tags AIML para tratamento dos dados

Nem todos os dados recebidos da ontologia podem ser mostrados diretamente aos usuários, pois tornaria a comunicação entre o chatterbot e o usuário muito robótica. Por exemplo, quando o usuário pergunta quais cursos estão sendo ofertados pelo vestibular, é necessário de cada curso seja separado por uma vírgula e que exista a conjunção “e” entre os dois últimos cursos. Já quando é necessário exibir uma data (com dia, mês e ano), é necessário

(35)

34

que ela esteja em um formato longo (29 de fevereiro de 2016). Para resolver estes problemas foram definidas as tags descritas no Quadro 27.

Quadro 27 - Tags de formatação de dados

tag descrição tags filhas

<list> Representa uma lista de dados, sendo que a tag <data> contém os

elementos da lista, a tag <add> adiciona um elemento estrutural na lista e a tag <conj> adiciona uma determinada conjunção. resultado: retorna uma lista de dados formatados.

exemplo: <list>

<data><get><var> disciplinas </var></get></data> <add><conj>e</conj></add>

</list>

<data> <add> <conj>

<dateFormat> Serve para formatar uma data, sendo que a tag <style> define a

forma de exibição da data através de dois caracteres, um representando a data (L) e o outro a hora (S), e a tag <date2> representa uma data específica. Caso a tag <style> seja LS, a saída será a data seguida da hora, caso a tag <style> seja L-, a saída será somente a data.

resultado: retorna uma data formatada. Em caso de erro, retorna uma string vazia.

exemplo: <dateFormat> <style>L-</style> <date2><get><var>dataPublicacao</var></get></date2> </dateFormat> <style> <date2>

<isEmpty> Verifica se o conteúdo da tag é vazio.

resultado: retorna true, caso o conteúdo esteja vazio, e retorna false, caso contrário.

exemplo: <isEmpty>

<get><var>turnos</var></get> </isEmpty>

-

3.2.4 Ontologia sobre as formas de ingresso (para calouros) nos cursos da FURB

As informações sobre as formas de ingresso (para calouros) na FURB foram modeladas em uma ontologia. Para tanto, foram analisados os editais da ACAFE para o vestibular 2014/2 e vestibular 2015/1, bem como os editais da FURB para ingresso pelo ENEM 2014/2 e o para ingresso pelo histórico escolar 2014/2. Procurou-se na análise dos documentos encontrar informações que pudessem compor a ontologia de modo a melhor representar o domínio. Na Figura 5 é mostrada parte da ontologia modelada. Os retângulos que possuem um nome são as classes da ontologia. As três principais classes são: ENEM, HistoricoEscolar e Vestibular. Cada uma dessas classes representa uma determinada

(36)

35

forma de ingresso e todas as três herdam da classe FormaDeIngresso. Além disso, a classe Curso representa os cursos da instituição, enquanto que a classe CursoOfertado representa

os cursos que estão sendo oferecidos através de alguma forma de ingresso. A classe

Universidade, que contém o indivíduo que representa a FURB, é uma subclasse de OrganizacaoEducacional, que por sua vez é filha da classe Organizacao.

Figura 5 - Visão parcial da ontologia sobre as formas de ingresso na FURB

As propriedades de objetos são exibidas como relacionamentos entre as classes. A propriedade hasFormaDeIngresso é utilizada para indicar uma forma de ingresso

(FormaDeIngresso) de uma organização educacional (OrganizacaoEducacional), enquanto

que a propriedade hasFormaDeIngressoAtual indica quais são as formas de ingresso

utilizadas atualmente por uma organização educacional. Percebe-se que nessa propriedade é utilizada a restrição de cardinalidade, para indicar, por exemplo, que a propriedade só pode se relacionar com no máximo um ingresso pelo ENEM (ENEM), um ingresso por histórico escolar

(HistoricoEscolar) e um vestibular (Vestibular). A propriedade hasEdicaoEnem é

utilizada para indicar as edições do ENEM (ENEMEdicao) que são aceitas por uma forma de

(37)

36

vagas que estão sendo ofertadas (CursoOfertado) por uma forma de ingresso

(FormaDeIngresso) específica. A propriedade hasCurso serve para indicar o curso de uma

organização educacional e também o curso que está sendo ofertado. Já a propriedade

hasTurno indica o turno de estudo de um curso e o turno de um curso que vai ser ofertado para ingresso.

As propriedades de tipos de dados e as propriedades de anotação aparecem dentro do retângulo que representa as classes quando são utilizadas por somente uma classe. Caso contrário, elas aparecem em um retângulo separado. Para a classe FormaDeIngresso são

aplicadas as propriedades de tipos de dados semestre e ano para indicar o semestre e o ano

de ingresso dos alunos aprovados e maxCursosPorAluno para indicar a quantidade máxima

de cursos que um aluno pode escolher. Ela também possui uma propriedade de anotação chamada de Label, que serve para associar um nome mais legível à classe. A classe CursoOfertado possui a propriedade de tipo de dado quantidadeVagas para indicar a

quantidade de vagas que está sendo ofertada pelo curso em questão, além da propriedade de anotação Label.

A presença dos termos asym e func indicam as características assimétricas e

funcionais das propriedades. A característica assimétrica determina que a propriedade somente tenha um único sentido, enquanto que a característica funcional indica que o indivíduo só pode se relacionar no máximo uma vez com outro indivíduo (ou literal) através da propriedade em questão (HITZLER et al., 2012).

3.2.5 Diagrama de classes do projeto

A solução proposta é composta por classes e métodos. Para prover melhor organização ao projeto, as classes foram agrupadas em pacotes. Cada pacote contém as classes ou outros pacotes sobre uma determinada parte do sistema. Na Figura 6 é exibido o diagrama de pacotes do sistema desenvolvido.

Como comentado anteriormente, o chatterbot faz uso da ontologia para responder a determinadas perguntas. Para que isso ocorra, foi necessário adicionar novas tags a serem interpretadas pelo interpretador. O pacote programab agrupa os pacotes criados para

adicionar as novas funcionalidades ao interpretador AIML, que são o pacote extensão e o

pacote helper, visualizados na Figura 7.

(38)

37

Figura 6 - Diagrama de pacotes do sistema

Figura 7 - Diagrama de classes dos pacotes extensao e helper

O pacote extensao contém as classes que interpretam as novas tags criadas.

Pertencem a este pacote as classes DataExtensao, SparqlExtensao, SentencaExtensao e GerenciadorDeExtensao. Todas elas implementam a interface AIMLProcessorExtension.

Esta interface determina que deve ser implementado o método recursEval para interpretar

Referências

Documentos relacionados

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

Detectadas as baixas condições socioeconômicas e sanitárias do Município de Cuité, bem como a carência de informação por parte da população de como prevenir

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

Apesar da longa distância dos grandes centros urbanos do país, Bonito destaca- se, regionalmente, como uma área promissora dentro do Estado de Mato Grosso do Sul. Bonito,

dois gestores, pelo fato deles serem os mais indicados para avaliarem administrativamente a articulação entre o ensino médio e a educação profissional, bem como a estruturação

Após a colheita, normalmente é necessário aguar- dar alguns dias, cerca de 10 a 15 dias dependendo da cultivar e das condições meteorológicas, para que a pele dos tubérculos continue

• The definition of the concept of the project’s area of indirect influence should consider the area affected by changes in economic, social and environmental dynamics induced