Você está na página 1de 89

Processamento de Dados

FACULDADE DE TECNOLOGIA DE SO PAULO

JEFFERSON MENDES SILVA

Chatterbots podem ser teis?

So Paulo So Paulo Brasil 2012

Processamento de Dados

FACULDADE DE TECNOLOGIA DE SO PAULO

JEFFERSON MENDES SILVA

Chatterbots podem ser teis?

Monografia submetida como exigncia parcial para a obteno do Grau de Tecnlogo em Processamento de Dados Orientador: Prof. Dr. Maurcio Amaral de Almeida

So Paulo So Paulo Brasil 2012

Processamento de Dados

DEDICATRIA
Dedico este trabalho primeiramente a Deus, por permitir minha existncia, das pessoas ao meu redor e ao nosso mundo existir. Agradeo tambm minha esposa, apoiando-me em todos os momentos com um amor incondicional, ternura e aconchego. Aos meus dois filhos, com sua inocncia e alegria me dando um motivo para evoluir e aprimorar-me, com o foco de prover-lhes um melhor futuro. Agradeo aos meus pais, por permitirem minha existncia e me oferecerem a educao, tica e seu amor incondicional, essenciais para meu sucesso. Tambm aos meus irmos e irms, sogra e sogro e minha cunhada, por direta ou indiretamente pela torcida e apoio nos diversos momentos de minha vida. Aos meus amigos e colegas de faculdade, aos colegas e amigos do trabalho, demais parentes e outras pessoas do meu crculo social, em sua maioria torcendo e esperando a concluso de meus estudos com sucesso e futuro desenvolvimento. Tambm aos meus amigos e parentes falecidos, por estarem com certeza me observando e me apoiando de seu prprio modo, este sendo o mais misterioso e incerto, mas com o mesmo amor desempenhado por eles em vida. Agradeo aos meus professores, de toda a vida, ensinando-me quase tudo que sei, fornecendo a cultura e os conhecimentos utilizados hoje em dia nas diversas fases e necessidades na minha vida. Pode parecer inusitado, mas agradeo tambm as dificuldades e as adversidades, pois sem as mesmas no haveria superao, a necessidade, o desafio, e, sem estes, no seria possvel a superao e a evoluo.

Processamento de Dados

AGRADECIMENTO
Agradeo ao meu professor orientador por ter me ensinado os preceitos da linguagem AIML e incentivar o interesse em inteligncia artificial com suas magnficas aulas. Agradeo aos demais professores do curso por ensinarem-me as demais matrias necessrias para a confeco deste trabalho, tambm por seu apoio e os demais empurrezinhos para que me formasse e conclusse este trabalho. Em especial ao professor Arima, por ter me ensinado a parte de monografias e a me direcionar ante este projeto final, e pela descoberta do mundo acadmico. Tambm professora Elisabete, por ter criado um monstrinho em desenvolvimento web, de tanto estmulo durante suas aulas de desenvolvimento web, estas essenciais s necessidades ante a entrega deste trabalho.

Processamento de Dados

RESUMO
Este trabalho consiste no desenvolvimento ou adaptao de um programa de chatterbot a ser utilizado e aprimorado por alunos pela Fatec So Paulo. A principal necessidade do desenvolvimento deste apresentar a tecnologia e os preceitos da linguagem AIML, demonstrando como utiliz-la e desvendando sobre a sua real utilidade. Como o foco deste programa ser a utilizao em aplicaes web com multiusurios, ser utilizado o PHP associado ao MySQL. J existem dois programas desenvolvidos para trabalhar-se com AIML, o Program-O e o Program-E, ambos com suas particularidades, prs e contras, dentre estas duas opes, foi escolhido o Program-O, por ser mais atual e estar mais conciso. Sendo o AIML uma linguagem baseada em XML, tambm ser rapidamente abordado um pouco sobre a linguagem XML, para o entendimento e perfeita codificao da linguagem. A parte de banco de dados tambm ser abordada, em especial sobre o funcionamento do MySQL e um suprassumo de sua teoria, para poder programar o software desejado. O resultado alcanado foi um sucesso parcial. Foi possvel criar um chatterbot capaz de coisas alm de o simples falar, mas o desenvolvimento deste consome muito tempo, e necessita de aprimoramentos contnuos. Constatou-se que um chatterbot pode sim ser muito til e at vivel comercialmente, desde que tomados os devidos cuidados com sua implantao e manuteno. Este trabalho pode at ser utilizado como um manual em portugus sobre AIML e o Programa-O.

Processamento de Dados

ABSTRACT
This work consists in developing or adapting chatterbot software to be used and enhanced by FATECs Sao Paulo students. The main target of it is to introduce its technology and the principal concepts of the AIML style, showing how to use it and analyzing about your real utility. The focus is to use a program in multi-user web applications, so the choice is to use the PHP language with MySQL Database. There is already two programs to work with AIML using PHP and MySQL, theyre Program-E and Program-O, with their pros and cons and its particularities, was chosen the Program-O cause its the newer and more stable. AIML is an XML based language style, so will be explained a little about XML, to ease the understanding and to perfect coding the language. Database concepts will also be shown, in special about MySQL working and a little bit of database theory, required for implement the desired software. The result achieved was a partial success. It was possible to make a chatterbot do more than only talking, but a chatterbot developing takes too much time and need a continuous updating. However, was seen that a chatterbot can really be very useful and even commercial viable, taking care of with his implementation and maintenance. This work can even be used as an AIML and Program-O manual.

Processamento de Dados

SUMRIO
DEDICATRIA..............................................................................................................3 AGRADECIMENTO.......................................................................................................4 RESUMO.......................................................................................................................5 ABSTRACT....................................................................................................................6 SUMRIO......................................................................................................................7 INTRODUO............................................................................................................10 OBJETIVOS GERAIS..............................................................................................16 OBJETIVOS ESPECFICOS...................................................................................16 METODOLOGIA......................................................................................................17 JUSTIFICATIVA.......................................................................................................17 DESENVOLVIMENTO.................................................................................................18 LINGUAGEM XML...................................................................................................18 O QUE INTELIGNCIA ARTIFICIAL?.................................................................23 Introduo............................................................................................................23 Os ramos de estudo da IA...................................................................................25 O teste de Turing..................................................................................................27 O AIML versus processamento de linguagem natural.........................................28 O que o AIML em Inteligncia Artificial?...........................................................29 A LINGUAGEM AIML...............................................................................................31 Parte terica.........................................................................................................31 Parte tcnica........................................................................................................35 Parte prtica.........................................................................................................49 CONCEITOS BSICOS DE BANCO DE DADOS..................................................53

Processamento de Dados Introduo............................................................................................................53 Definies.............................................................................................................53 Linguagem SQL...................................................................................................58 CONCEITOS BSICOS DE AUTENTICAO, SEGURANA E UTILIZAO DE BANCO DE DADOS COM PHP..............................................................................64 AIML COM PHP, COMO UTILIZAR?......................................................................70 Dicas para instalao..............................................................................................70 Falhas do programa original....................................................................................71 Funcionamento do Programa-O..............................................................................72 Inicializao..........................................................................................................72 Descrio dos arquivos principais.......................................................................73 Modificaes no programa......................................................................................74 A tag system.........................................................................................................74 A tag solve............................................................................................................76 Limpeza dos padres...........................................................................................76 As alteraes para a autenticao atravs do AIML...............................................77 Alteraes na tag system.....................................................................................77 Alteraes no manipulador de dilogo e no formulrio do rob..........................77 O banco de dados do chatterbot.............................................................................78 Falsa normalizao atravs de recurso.............................................................79 Correo gramatical.............................................................................................80 Insero automtica de categorias durante a instalao....................................80 Arquivos AIML..........................................................................................................82 CONCLUSO..............................................................................................................83

Processamento de Dados REFERNCIAS...........................................................................................................85 PROGRAMAS UTILIZADOS.......................................................................................87 ANEXOS......................................................................................................................88

Processamento de Dados

INTRODUO
AIML (Artificial Intelligence Markup Language) uma linguagem que desafia os paradigmas da cincia da computao. Enquanto pensa-se ser extremamente complexo para uma mquina conversar com um humano sobre assuntos diversos, o Dr. Richard S. Wallace demonstra que no bem assim... Seres humanos gastam a maioria do seu tempo com palavras banais. Mesmo estas sendo de assuntos diversos, abrangendo vrias reas de interesse, com nveis de cultura, tanto de assuntos como de interlocutores muito variados, resume-se que a quantidade de palavras utilizadas nestas conversaes pequena, havendo muita repetio. Sempre quando em uma conversa convencional, formula-se uma pergunta com respostas bvias, possuindo a maioria das respostas para estas perguntas possuem as respostas genricas como: sim, no sei, no, talvez sim ou talvez no. O mesmo acontece com assuntos diversos. Ao estabelecer uma conversa padro sempre citado sobre assuntos corriqueiros, como o clima, algum evento circulando nas mdias ou at fofocas sobre alguma pessoa. Tirando proveito destas circunstncias, Dr. Richard Wallace e seus companheiros da ALICE (Artificial Linguistic Internet Computer Entity) software foundation desenvolveram o AIML, uma linguagem baseada em XML (Extensible Markup Language) utilizada para o fim de estimular e facilitar a programao de chatterbots. necessrio um entendimento prvio de XML para facilitar a programao em AIML, pois a mesma necessita que as cadeias XML estejam bem formatadas para o AIML funcionar corretamente. Um chatterbot, ou chatbot, um programa de computador que assume o lugar de um interlocutor, dialogando com pessoas comuns utilizando-se textos prprogramados. Em ingls bot a abreviao de robot, significando rob enquanto chatter significa conversador.

Jefferson Mendes Silva

Pgina 10 de 89

Processamento de Dados Da mesma maneira dos humanos, o chatterbot assume uma personalidade, possuindo tambm suas prprias opinies sobre um determinado assunto. So capazes de aprender coisas novas, como respostas para uma nova pergunta ou at mesmo sobre abordar um assunto de maneiras completamente diferentes. Sempre ao se estabelecer um dilogo entre dois interlocutores, na maioria das vezes, esta funciona como uma comunicao simplex. Na comunicao simplex existe apenas um canal de comunicao, onde um interlocutor faz a funo de emissor e outro de receptor, havendo a inverso desta sempre aps o trmino de uma orao. Ou seja, mesmo dispondo de duas bocas e dois pares de ouvidos, geralmente um humano fala e outro ouve, e raramente os dois falam e ouvem exatamente ao mesmo tempo. Diz-se o ditado: Quando um burro fala, o outro abaixa a orelha. Este tipo de comunicao a predominante em chats baseados em texto. Um chatterbot funciona com o mesmo princpio, ele espera uma entrada do usurio, processa a mesma e retorna um resultado. Neste caso no h a possibilidade de o usurio interromper a comunicao. Os estudos do Dr. Richard Wallace baseiam-se principalmente na criao do chatterbot ALICE, utilizando-se da lngua inglesa, sendo seu maior foco servir de psicloga. A ALICE o maior chatterbot baseado em texto j criado, pois conta com mais de 40.000 categorias. Uma categoria em AIML define-se em um conjunto de uma pergunta e uma ou mais respostas pr-programadas, podendo a mesma ser organizadas em assuntos diferentes ou dependerem da resposta anterior do chatterbot ou do usurio.
<aiml> <category>*</category> <template>Voc digitou <star/></template> </aiml> Um exemplo simples de AIML. O que for digitado pelo usurio ser repetido pelo bot.

Jefferson Mendes Silva

Pgina 11 de 89

Processamento de Dados

Figura 1 O crebro de ALICE. Cada linha uma pergunta associada a uma resposta ou conjunto de respostas. Aqui esto carregadas 24,637 categorias das quase 40.000 programadas. A linha da espiral representa a raiz, e as bifurcaes os tpicos e thats.

Assim como humanos, chatterbots tambm possuem personalidade, desejo comum em qualquer meta-humano. Existem tcnicas para simular esta personalidade e maneiras de express-las. Tambm ser exposto sobre isso no momento oportuno. H diferenas entre um chatterbot e um mecanismo de perguntas e respostas padro, como o Ask Jeeves, por exemplo. No primeiro estabelece-se um assunto e conversa-se sobre ele at que um novo assunto seja estabelecido ou cessar a conversao, enquanto no Ask responde-se apenas uma pergunta por vez, sem associao entre uma resposta e outra anteriormente dita. Chatterbots podem ser utilizados de diversas maneiras, e os tericos de Inteligncia Artificial definem em smula que uma das funes mais importantes de um metahumano seria a capacidade de o mesmo se comunicar de maneira independente. Qualquer mquina ou programa necessita de uma programao anterior, mas a Jefferson Mendes Silva Pgina 12 de 89

Processamento de Dados inteligncia artificial definida por vir a encontrar solues para necessidades sem resposta previamente conhecidas. Numa conversa entre um humano e um chatterbot, nunca se sabe ao certo o rumo desta conversao. Como se percebe, a criao de um chatterbot no exclusivamente tecnolgica, mas tambm terica e lingustica. Se durante uma conversao h inmeras repeties de palavras, como estabelecer um modelo para a mesma? Este mesmo modelo lingustico j existe e foi estudado pelo professor George Kingsley Zipf, que conhecido como Lei de Zipf. Cita-se a traduo de um trecho falando sobre esta lei: Pegue todas as palavras em um bloco de texto, como o exemplar de hoje do The New York Times, e conte quantas vezes uma palavra aparece. Se o histograma resultante for classificado por maior ocorrncia de cada palavra e assim por diante (um, uma, o, para, de, e) ento a forma da curva uma curva Zipf para este texto. Se esta curva fosse desenhada em uma forma logartmica, ela pareceria uma linha estreita com curvatura de -1. (WALLACE, 2003). Utilizando-se desta teoria, possibilita-se muito bem reduzir toda a infinidade de frases e assuntos a serem discutidos em um nmero muito menor de frases prprogramadas. Mesmo assim, esta uma tarefa extremamente rdua e cansativa, parecendo at impossvel, mas prova-se por este caminho a existncia de uma opo vivel e til computacionalmente. Uma coisa utilizar esta tecnologia de forma acadmica ou para fins de entretenimento, mas ser possvel a utilizao destes para algo realmente til? Ser possvel programar um chatterbot para que este se torne uma secretria, um vendedor, ou at um garoto propaganda valendo a pena o investimento? nisto que consiste este trabalho, ser discutida entre as diversas possibilidades a criao de um chatterbot realmente til em algo, realizando algum trabalho para os humanos, comeando das coisas mais simples at as mais complexas.

Jefferson Mendes Silva

Pgina 13 de 89

Processamento de Dados Para tanto, este dever ser acessvel a uma grande quantidade de pessoas, sendo possvel a distino de cada usurio utilizador deste chatterbot to como a memorizao de seus dados e preferncias. Ser utilizada a linguagem de programao PHP (Personal Home Page ou Hypertext Preprocessor), aliada ao Servidor Gerenciador de Banco de Dados MySQL. Como a linguagem PHP executa em ambiente servidor, sendo transparente aos browsers existentes no mercado, ele poder ser utilizado por qualquer usurio pela www (World Wide Web), desde que este possua os privilgios necessrios para utilizar o site. Como sero utilizados dados preferenciais de usurios, utilizam-se configuraes de autenticao e de segurana de usurios, assim como definidos por WELLING (2005) e por CONVERSE (2004). Ser analisado neste trabalho como utiliz-lo em conjunto com o AIML. Como todo o contedo da linguagem AIML e os dados de usurios sero armazenados em um banco de dados, conhecimento prvio de um SGBD e modelagem de banco de dados sero necessrios. J existem programas pr-fabricados para exercer a funo de chatterbot em PHP conjuntamente com MySQL, to como em diversas outras linguagens, mas ser que os mesmos supriro estas necessidades? Citou-se no incio do texto sobre inteligncia artificial, mas o que inteligncia artificial? O que a inteligncia artificial diz sobre o processamento da linguagem necessria para a programao de um chatterbot? Existe tambm um enorme vocabulrio abreviado utilizado durante as conversaes em chats convencionais, que devero ser conhecidas. Como o AIML lidar com estes fatores e estas diferenas? Quanto ao bot em si, este far o trabalho de simular um humano em uma conversao normal. Para tanto, o mesmo dever possuir um nvel de cultura e uma personalidade definida. PLANTEK demonstra alguns passos e dicas de como construir um humano virtual, no s na parte textual, mas tambm na parte de Jefferson Mendes Silva Pgina 14 de 89

Processamento de Dados criao de imagens e movimentos, alm da automatizao de processos e de funes. Quais seriam a personalidade e o nvel de conhecimento necessrio para o nosso chatterbot? Este trabalho ser com a anlise da viabilidade do desenvolvimento de um chatterbot para esta finalidade, e a possibilidade de facilitar sua criao, utilizao e adaptao por outros programadores.

Jefferson Mendes Silva

Pgina 15 de 89

Processamento de Dados

OBJETIVOS GERAIS
Este trabalho tem por definio desenvolver um sistema de chatterbot para ser utilizado e aprimorado para e pela Fatec-SP (Faculdade de Tecnologia de So Paulo). Este chatterbot no ser apenas um conversador, mas tambm um armazenador de informaes com autenticao. A ideia futura agregar servios e funes a esse chatterbot, fazendo com que o mesmo realize algumas tarefas especficas, como armazenar e abrir sites favoritos, guardar fotos e vdeos e tambm reproduzir diversos tipos de mdia, por exemplo.

OBJETIVOS ESPECFICOS
Sero abordados os seguintes tpicos: 1. Linguagem XML Ser abordado neste tpico o que o XML, e os elementos necessrios para codificar XML, utilizando-se de cadeias bemformatadas, essencial para a programao em AIML; 2. Conceitos Bsicos de Inteligncia Artificial O que a inteligncia Artificial e como uma mquina pode conversar com humanos? 3. Linguagem AIML O que o chatterbot e como program-lo? 4. Conceitos bsicos de Banco de Dados O que necessrio saber sobre Banco de Dados para o armazenamento de um chatterbot e dados relevantes para o programa a ser desenvolvido? 5. Autenticao, segurana e gesto de SGBD com PHP Como fazer com o chatterbot ser til para armazenar informaes com segurana em ambiente web multiusurio utilizando-se do PHP? 6. AIML utilizando o PHP Os principais passos para o AIML executar rotinas PHP. Quais os cuidados e truques relativos ao programa a ser utilizado? Alm destes tpicos, tambm ser analisado externamente a esta monografia os programas j existentes de AIML utilizando a linguagem PHP aliado ao MySQL, Jefferson Mendes Silva Pgina 16 de 89

Processamento de Dados sendo tambm realizadas adaptaes e/ou complementos destes com um incio da programao do nosso chatterbot.

METODOLOGIA
Ser utilizada pesquisa bibliogrfica para consulta dos temas envolvidos na criao de um chatterbot. Tambm ser utilizado o desenvolvimento de programa, ou a adaptao de um pr-existente a fim de obter-se o chatterbot desejado, com a consequente apresentao do mesmo.

JUSTIFICATIVA
Chatterbot uma ferramenta muito divulgada e utilizada em vrios outros pases, principalmente na Coria do Sul para o ensino e treinamento da lngua inglesa. Esta tecnologia pouco usada no Brasil, tendo apenas uma nica empresa especializada em seu desenvolvimento e poucos em execuo. Por oferecer um potencial enorme, poder ser utilizada em vrias plataformas de maneira independente e at automatizar algumas tarefas, sendo uma tecnologia que merece divulgao e aprofundamento. Algumas empresas, entre elas a Petrobrs, j utilizam um chatterbot como garoto propaganda, substituindo um garoto propaganda comum ou um atendente on-line.

Jefferson Mendes Silva

Pgina 17 de 89

Processamento de Dados

DESENVOLVIMENTO
O AIML uma linguagem baseada em XML. Mas o que o XML e qual sua utilidade? O que necessrio saber de XML para desenvolver-se AIML?

LINGUAGEM XML
A linguagem XML (Extensible Markup Language) uma linguagem de marcao. Para entender-se o que uma linguagem de marcao ser usado analogia de um supermercado. Uma rede de supermercados, sendo o Grupo Po de Mel um exemplo fictcio, possui diversos nomes fantasia para seus mercados, como o Prprio Po de Mel, o Noite% entre outros. Cada um destes mercados possuem diversas lojas, e cada loja possui um corredor que armazena uma determinada classe de produtos e cada corredor com seus respectivos tipos de produtos, subdivididos por marca e assim por diante. Uma linguagem de marcao uma linguagem hierrquica. Ou seja, esta pode possuir pais ou subordinados. O mercado Po de Mel loja 106 em seu corredor de laticnios e afins possui um achocolatado da marca Toddy de 500 gramas. Em outra loja da mesma rede, pode haver o mesmo achocolatado, mas com datas de validade e preos diferentes. Representando esta situao em uma lista hierrquica, usa-se esta topologia: 1. Grupo Po de Mel a. Mercado Po de Mel i. 106 1. Laticnios a. Achocolatados i. Toddy 1. 500g Jefferson Mendes Silva Pgina 18 de 89

Processamento de Dados 2. R$ 4,45 3. Sabor tradicional Para este exemplo, fica simples organizar este item, mas ao se inserir diversos itens para desconhecedores de supermercados, nesta topologia seria mais difcil de visualizar. Para um software, ter-se-ia o mesmo problema, pois tanto um humano como um software demorariam a procurar uma informao especfica,. Ter-se-ia ento a soluo de colocar-se um identificador do que esta sendo falado antes da informao, no havendo ento a necessidade de ficar tentando adivinhar o sentido da informao ali escrita. Insere-se ento, uma marcao nesta informao: 1. Empresa: Grupo Po de Mel a. Afiliada: Mercado Po de Mel i. Loja: 106 1. Setor: Laticnios a. Tipo: Achocolatados i. Marca: Toddy 1. Atributos: 500g, R$ 4,45. Analisando desta maneira, com todos os dados inclusos, ela parecer uma rvore, Onde h uma raiz, chamada de topo e suas subdivises. Outro exemplo abaixo ilustra esta situao:

Jefferson Mendes Silva

Pgina 19 de 89

Processamento de Dados

Figura 2 Um exemplo da topologia XML Fonte: PITTS-MOULTIS(1998)

O XML uma linguagem de marcao feita para armazenar e transportar dados em forma de texto simples. A w3schools diz que no futuro todos os bancos de dados, processadores de texto e planilhas deveriam poder interpretar e armazenar nativamente a linguagem XML, pois a mesma clara, portvel e facilitaria em muito a converso da informao em diversos sistemas e softwares diferentes. Como nota-se na figura 1, existem palavras entre os sinais < e >. Esta denominada de tag. Em qualquer linguagem, a tag funciona como uma palavrachave, ao qual se agrega uma funo especfica. Uma tag em XML serve para organizar-se o contedo dos dados, evitando deixa-los soltos ao vento. Para tanto se poderia definir a raiz de nosso primeiro exemplo como <Empresas>. Neste caso, <Empresas> denominado de elemento, como <Empresas> est no topo do documento, ele ser o elemento raiz, de onde todos os demais se ramificam. Esta mesma empresa poderia possuir um valor, denominado de atributo com o valor comrcio varejista. Um atributo prov informaes sobre o item armazenando valores referentes ao item em questo. Na Linguagem XML escrever-se-ia assim: <Empresas tipo: Comrcio Varejista>Grupo Po de Mel</Empresas> Jefferson Mendes Silva Pgina 20 de 89

Processamento de Dados Percebe-se a existncia de uma tag de fechamento </Empresas> informando o trmino das informaes referentes empresa. Como a empresa possui diversas informaes, a mesma possuir diversas tags, organizando os dados de maneira clara e concisa. Um elemento pode no possuir nenhuma informao relevante, pois apenas seu nome j bastaria como informao, no havendo nenhum filho ou ramificao e sem textos ou atributos. Pode-se incluir em um produto o elemento <Promoo/>, indicando que o produto, seu elemento pai, est em promoo. Podem ser inseridos comentrios em um texto XML. Da mesma maneira que em um documento HTML, eles comeam com <!-- e terminam com -->. A tabela abaixo um exemplo de documento XML bem formatado. O mesmo modelo abaixo ser necessrio para utilizar-se da linguagem AIML: <?XML version 1.0?> <Empresas tipo: Comrcio Varejista> <Grupo Po de Mel> <Lojas> <nmero =106> <Setores> <Laticnios> <Achocolatados> <Toddy> <Peso>500g</Peso> <Sabor>Chocolate ao Leite</Sabor> <Preo>R$ 4,45</Preo> <Promoo/> </Toddy> </Achocolatados> </Laticnios> </Setores> </Nmero> </Lojas> </Grupo Po de Mel> </Empresas> Para ser bem formatada, uma cadeia XML deve seguir algumas regras simples: 1. Toda tag deve possuir uma respectiva tag de fechamento, salvo caso esta seja uma tag simples como <promoo/>: 2. As tags filho devem ser fechadas antes de seus pais: Jefferson Mendes Silva Pgina 21 de 89

Processamento de Dados 3. No deve haver repetio de tags de mesmo nome no mesmo nvel, evitando desentendimentos e conflito de informaes: Estas informaes sobre XML so mais que suficientes para desenvolver um chatterbot. Existem muito mais informaes a respeito de XML na web e em vrias publicaes, podendo as mesmas ser consultadas posteriormente. Existem vrias verses da linguagem XML, com suas maneiras de se programar e suas especificaes. A primeira tag a <?XML Version=XXX?>, indicando a verso em uso no documento atual.

Jefferson Mendes Silva

Pgina 22 de 89

Processamento de Dados

O QUE INTELIGNCIA ARTIFICIAL?


Este tpico visa expor poucos comentrios sobre a inteligncia artificial. Este se faz necessrio para incluir o chatterbot na sua devida rea de atuao na IA (Inteligncia Artificial), expondo suas limitaes frente algumas das teorias comentadas neste captulo. No ser um assunto to aprofundado para evitar-se perda de foco.

Introduo
A Inteligncia Artificial considerada como uma nova cincia, cujo principal objetivo, definido por vrios tericos e obras, tornar um sistema ou um computador inteligente, semelhante aos humanos. Para tanto, necessrio definir o que inteligncia e por que os humanos so inteligentes. A inteligncia humana definida de vrias maneiras diferentes. H alguns anos a inteligncia era definida apenas pela capacidade de um ser humano resolver problemas lgicos, existindo at alguns testes como os de QI (quociente de inteligncia), servindo para calcular esta inteligncia. Atualmente considerado tambm o conceito de inteligncias mltiplas, onde cada indivduo pode possuir um elevado nvel em algumas delas e no to satisfatrios em outros. Uma maioria dos grandes atletas, como Pel, possuem uma inteligncia cintica exuberante, por preverem movimentos tanto de seus corpos como de objetos a serem manipulados por eles ou outras pessoas e execut-los com perfeio, mas podem no possuir a inteligncia lgica como um Einstein, sendo o inverso tambm verdadeiro. Em smula, define-se a inteligncia humana como a capacidade de executarem-se tarefas e resolver problemas de maneira eficiente, e de tambm possuir o dom da cognio, ou seja, o ato de conhecer e acumular novos conhecimentos. Esta cognio est intimamente relacionada maioria das funes do ser humano, como a de pensar, visualizar, entre outras, estando fortemente atrelada psicologia Jefferson Mendes Silva Pgina 23 de 89

Processamento de Dados e comportamento humanos, possuindo at mesmo um ramo da psicologia que a estuda. Nenhum humano nasce inteligente, esta inteligncia direcionada e acumulada ao longo da vida do indivduo, de acordo com seus ensinamentos e experincias vividas. A inteligncia artificial visa reproduzir esta inteligncia, ou pelo menos parte dela, em sistemas computacionais. Assim como as diversas reas de inteligncia humana, existem vrias vertentes sobre a inteligncia artificial, sendo este um campo extremamente amplo da cincia. A enorme maioria dos sistemas computacionais tem como finalidade receber uma entrada de informao e devolv-la da maneira adequada aps um tipo especfico de tratamento. O mesmo ocorre com ns humanos ao perceber-se algo em nosso exterior e executar alguma reao. Uma reao simples pode ser descrita como acender-se uma lmpada forte em nosso rosto e ter-se automaticamente a reao instintiva de proteger nossos olhos. Esta mais uma questo de reflexos que de inteligncia. Mas encontrar a fonte de tal iluminao, se analisar sobre a possibilidade e as consequncias de tentar elimin-la ou reduzi-la conforme a necessidade ou momento, ou decidir sobre outras atitudes diferenciadas, cabe a uma resoluo mais cognitiva. Esta , talvez, a grande diferena entre sistemas convencionais e sistemas utilizadores de inteligncia artificial, aproximar uma resoluo de problemas ou assumir comportamentos mais prximos dos humanos em determinadas situaes. Um humano completamente artificial s ser possvel aps solucionarem-se todos os itens inerentes ao comportamento e aes humanas em separado, e aps unirem-se todos eles em um nico sistema. Entretanto, os aspectos relacionados mente humana no foram desvendados na sua totalidade, e talvez nem possvel sejam. Outra questo interessantssima foi exposta por RUSSEL (2003) em sua obra, mesmo o computador podendo resolver um problema considerado possvel apenas Jefferson Mendes Silva Pgina 24 de 89

Processamento de Dados por humanos exigindo certo grau de raciocnio, como a totalidade dos testes de Turing, por exemplo, ele talvez no possa ser considerado inteligente, pois o mesmo pode no saber como chegou a esta concluso e no possa simular as mincias do pensamento humano. O mesmo ocorre com o nosso rob tagarela, ele pode responder devidamente as perguntas inseridas por um usurio, mas com certeza absoluta, ele no entende absolutamente nada sobre as mincias da pergunta do usurio e nem mesmo de sua prpria resposta, ou seja, no possui razo ao responder, a no ser razo imposta pelo seu mestre. Alternadamente, o mesmo pode processar expresses numricas e guardar devidos tipos de informaes com um desempenho impossvel a ns humanos. Um simples exemplo a criptografia de uma senha, um humano sem utilizar nenhum recurso tecnolgico poderia nunca conseguir realiz-la apenas com sua mente durante toda sua existncia, mas um computador pode faz-la em fraes de segundo.

Os ramos de estudo da IA
Para facilitar o estudo e o aprimoramento da IA, interessante dividi-la em partes. Cada grupo de pesquisadores e autores dividiu-a em ramos do conhecimento, sendo no aproprivel defini-la na sua totalidade com uma nica frase ou estuda-la seguindo apenas uma nica linha de pensamento, devido sua amplitude e dificuldade. RUSSEL (2003) definiu estas quatro formas de acordo com diversos autores que definiram o termo de IA de conforme seu ramo de pesquisa, organizando-as em uma tabela:

Jefferson Mendes Silva

Pgina 25 de 89

Processamento de Dados

Sistemas que pensam como seres humanos O novo e interessante esforo para fazer os computadores pensarem, [...] mquinas com mentes, no sentido total e literal. (Haugeland, 1985) [Automatizao de] atividades que associamos ao pensamento humano, atividades como a tomada de decises, a resoluo de problemas, o aprendizado... (Bellman. 1978) Sistemas que atuam como seres humanos A arte de criar mquinas que executam funes que exigem inteligncia quando executadas por pessoas. (Kurzweill, 1990) RUSSEL (2003) pag. 5)

Sistemas que pensam racionalmente O estudo das faculdades mentais pelo uso de modelos computacionais. (Charminak e McDermott, 1985) O estudo das computaes que tornam possvel perceber, raciocinar e agir. (Winston, 1992) Sistemas que atuam racionalmente A inteligncia Computacional o estudo do projeto de agentes inteligentes. (Poole et al., 1998)

Figura 3 Definies de inteligncia artificial agrupadas em quatro categorias distintas. (Fonte:

A maneira na qual est organizada esta tabela est citada abaixo: Em linhas gerais, as que esto na parte superior da tabela se relacionam a processos de pensamento e raciocnio, enquanto as definies da parte inferior se referem ao comportamento. As definies do lado esquerdo medem o sucesso e, termos de fidelidade do desempenho humano, enquanto as definies do lado direito medem o sucesso comparando-o a um conceito ideal de inteligncia, que chamaremos de racionalidade. Um sistema racional se faz tudo certo, com os dados que tem. (RUSSEL, 2003) SILVA define inteligncia artificial como apenas duas das expostas por RUSSEL (2003): utilizadores e acumuladores de conhecimentos e os simuladores de comportamentos humanos, sendo respectivamente, os sistemas da parte superior e da parte inferior da figura 3, sendo sua funo primordial a de simular-se conhecimento. Uma anlise mais profunda encaixa os chatterbots nos sistemas que pensam como seres humanos, pois atualmente os mesmos no obedecem s filosficas leis do pensamento, (no possui uma anlise racional da sada do rob ao se responder uma pergunta).

Jefferson Mendes Silva

Pgina 26 de 89

Processamento de Dados

O teste de Turing
Alan Turing foi um dos primeiros tericos a se preocupar com a inteligncia artificial comportamental. O mesmo, ao invs de questionar se as mquinas poderiam ser realmente inteligentes, props um teste de inteligncia comportamental. Este tem como base tentar enganar um humano, em uma conversa on-line de cinco minutos, por pelo menos 30% do tempo, fazendo-se passar por uma pessoa. O programa mais bem sucedido, em parte das vezes em uma verso apenas textual deste teste, foi a ALICE. Mas a mesma tambm apresentou dificuldades a ser examinada por julgadores treinados, no passando no teste, mas enganou alguns dos destreinados pelos cinco minutos, inclusive, segundo RUSSEL (2003), at um juiz na competio Loebner Prize. O teste de Turing na ntegra consiste tambm de movimentos e imagens, portanto, est ainda longe de ser alcanado com os recursos e tcnicas disponveis hoje, alm de no ser dada a devida importncia a passar neste teste hoje em dia. Entretanto, para criar-se um humano virtual, PLANTEK demonstrou como utilizar-se de diversos recursos de multimdia, indicando alguns softwares possveis de serem utilizados para este fim. Uma das tcnicas utilizadas foi de criar-se um modelo facial tridimensional, fazendo este parecer ainda mais com um ser humano. O reconhecimento e processamento de voz tambm foram citados e seriam muito interessantes, prendendo ainda mais o usurio em seu local. O chatterbot ALICE possui tambm um sistema de texto-para-udio e uma face que se movimenta ao se falar, assim como o rob Kirk, mas estes no simulam comportamentos faciais. Novas tecnologias, como o Microsoft Kinect, possibilitam a deteco de movimentos do usurio, e a mesma poderia muito ser tambm utilizada. Em uma utopia para a poca de sua publicao, PLANTEK imaginou um dilogo onde um rob poderia acender e regular a luminosidade das lmpadas de seu quarto, e isto perfeitamente possvel hoje se utilizando o AIML integrando-o a algum dispositivo ou software de controle, como os utilizado hoje em dia em hotelaria.

Jefferson Mendes Silva

Pgina 27 de 89

Processamento de Dados

AIML

versus

processamento

de

linguagem

natural
O significado de linguagem natural j est implcito em seu prprio nome. Ela diz respeito ao processo de comunicao de linguagem sem grandes esforos mentais, ou seja, uma comunicao comum do dia-a-dia. Esta comunicao consiste no processo de formularem-se frases, sendo estas elaboradas quase de maneira automtica na mente humana para expressar seus sentimentos. Ao expor uma frase, no h a preocupao com toda a anlise sinttica e/ou morfolgica inclusa nesta, saindo esta automaticamente da maneira correta para a comunicao no meio do qual se encontra, no necessariamente sendo plenamente culta. Para tanto, um processador de linguagem natural necessita de realizar as anlises sinttica e morfolgica da frase a ser formulada. Estas duas etapas da formulao da frase so as mais simples de se fazer na linguagem natural, pelo motivo de as mesmas obedecerem a regras definidas na norma culta. Alm de determinar-se uma frase est correta do ponto de vista da lngua portuguesa, h outro problema: uma frase pode estar correta nestes dois aspectos, mas pode conter falhas no aspecto semntico. A frase: Eu irei comer uma torta holandesa, pode referir-se tanto ao tipo da torta quanto ao seu local de fabricao, sendo as duas distintas e apresentando uma ambiguidade. Ou seja, a anlise semntica mexe com o significado da frase. Um PLN (processador de linguagem natural) sem esta funo pode gerar frases do tipo Eu vou comer um caf. A ltima, e mais difcil etapa a se solucionar a pragmtica. Alm de verificar toda a parte gramatical e o sentido da frase, a mesma verifica a coerncia desta. Uma frase pode satisfazer os trs etapas, mas a frase: A Alemanha tricampe da Copa Amrica totalmente fora de nexo, pois um pas europeu nunca pode disputar uma Copa Amrica. Aliando-se este a um contexto, exponencia-se este problema. O AIML no um processador de linguagem natural, por no formular ele prprio as suas frases completamente. As frases do AIML j vm pr-moldadas, sofrendo Jefferson Mendes Silva Pgina 28 de 89

Processamento de Dados poucas adaptaes no decorrer de sua utilizao, enquanto raramente um PLN repetir uma frase j dita. A vantagem de utilizar-se o AIML de que a anlise pragmtica da frase feita automaticamente pelo Botmaster durante sua programao, mas exige um esforo humano intenso para ensinar tudo o que o rob necessita falar. Entretanto, um PLN maduro pode responder uma infinidade de frases, mas o pode desviar o foco da conversao ou expor uma frase indesejvel, como No gosto de meu mestre. Fica provada a diferena de direes destas duas tecnologias: uma focada na gerao de frases, e outra em manter uma conversao. A satisfao na resoluo do teste de Turing s pode ser alcanada com uma unio destas duas vertentes de resoluo da linguagem, pois caso um chatterbot AIML no possua a devida resposta, o mesmo pode recorrer a um PLN para resolv-la.

O que o AIML em Inteligncia Artificial?


O AIML trata-se de um agente. Um agente tudo o que pode ser considerado capaz de perceber seu ambiente por meio de sensores e de agir sobre esse ambiente por intermdio de atuadores RUSSEL (2003). No caso de um agente inteligente, como um programa de computador, o ambiente pode ser especificado pelas tarefas a serem desempenhadas pelo programa, pois todo programa possui uma funo principal. Os sensores de um programa so definidos basicamente pelo seu hardware, no caso de um chatterbot baseado em texto, um teclado ou outro dispositivo de entrada e um dispositivo de sada, como vdeo ou outros. Existem diversos tipos de agentes inteligentes. O chatterbot pode ser enquadrado como um agente reativo, pois o mesmo executa uma operao de acordo com a percepo de seus sensores. Um agente reativo pode tambm conter sistemas de aprendizagem, como a tag <learn> no AIML. O sistema estudado enquadrado, na maneira mais apropriada, aos agentes baseados na utilidade, dentre os agentes citados por RUSSEL (2003). Evidencia-se este fato pela satisfao e interesse do usurio ao conversar com um rob, pois, se Jefferson Mendes Silva Pgina 29 de 89

Processamento de Dados o mesmo no estiver feliz com a conversa, o mesmo abandonar a conversa e o rob causar uma m impresso, afugentando os usurios ao invs de atra-los.

Jefferson Mendes Silva

Pgina 30 de 89

Processamento de Dados

A LINGUAGEM AIML
Este tpico estar organizado em trs partes: a parte terica, a parte tcnica e a parte prtica. A parte terica cercar sobre o estudo e as partes tericas de um chatterbot, enquanto a parte tcnica ser direcionada especificamente para os comandos a serem utilizados no desenvolvimento e manuteno de um chatterbot e como aperfeioar-se sua codificao. A parte prtica deste trabalho ser o contedo AIML do Programa. Esta a principal parte deste trabalho, onde ser dada maior nfase. Todos os assuntos j englobados anteriormente sero essenciais para o seu entendimento.

Parte terica
Elisa foi o primeiro chatterbot criado com sucesso. Ele possua um artifcio de linguagem arcaico, utilizando processamento de texto plano e puro, sendo muito trabalhosa sua organizao. Elisa tem como principal funo de ser uma psicloga, utilizando-se de perguntas, fazendo seu paciente buscar uma autorreflexo e interiorizao para soluo de seus problemas. O estilo de psicologia deste rob similar psicologia de Carl Rogers. Seu criador foi Joseph Weizenbaun em 1976, atravs de um conjunto reduzido de expresses em aproximadamente 204 linhas, Eliza conseguia estimular uma investigao sobre o assunto abordado (Silva). A partir deste trabalho, o Dr. Richard Wallace e seus parceiros da ALICE Software Foundation desenvolveram uma nova tcnica para escrever-se uma linguagem de um chatterbot, chamada de linguagem AIML. AIML nada mais do que uma linguagem de marcao, baseada na SGML e XML para a escrita dos roteiros de conversao de um chatterbot. simples e fcil de programar, em relao ao modelo da ELISA, podendo ser estruturada por pessoas no programadoras, com auxlio de softwares adicionais, como o pandorabots, por exemplo. Uma grande vantagem desta linguagem seu alto ndice de reaproveitamento. O chatterbot ALICE, desenvolvido pela equipe de Wallace, reutilizado na maioria dos bots existentes na linguagem inglesa para a criao e reaproveitamento em outros bots comerciais. Uma grande maioria dos bots programados hoje em dia tem como Jefferson Mendes Silva Pgina 31 de 89

Processamento de Dados base outro bot j mais amadurecido, modificado para atender s demandas do seu botmaster. Como j dito na introduo do trabalho, a realizao deste mtodo de linguagem foi elaborado a partir dos estudos de Zipf, atravs da percepo de um padro nos textos utilizados em uma conversao, dizendo que em grande parte das palavras utilizadas seria desnecessria para o entendimento da conversa, e tambm que vrias palavras so repetidas diversas vezes em uma conversao, como afirmaes positivas e negativas, artigos e entre outras coisas. Um paralelo a este estudo pode ser associado s tcnicas de leitura dinmica, nesta tcnica, o crebro humano treinado a ignorar algumas palavras na leitura de um texto, e tambm l-lo no apenas em uma direo ou sequncia, diminuindo em muito o tempo de leitura de um livro ou revista redigido de uma maneira simples e com palavras utilizadas no dia-a-dia. O AIML utiliza desta mesma tcnica. Ele procura em uma pergunta algumas palavras-chave inseridas pelo Botmaster, podendo ser atreladas a um assunto ou a resposta anterior, facilitando em muito o direcionamento da conversao. O Botmaster o programador do chatterbot, ele o responsvel por ensinar o rob a responder perguntas. importantssimo antes de exemplificarem-se comandos ou tcnicas da criao de um chatterbot, falar-se sobre as teorias envolvidas, tornando muito mais simples na etapa de codificao obter um melhor aproveitamento da linguagem reduzindo seu tempo de codificao e quantidade de categorias. Quanto aos Botmasters e comunidade de desenvolvedores da ALICE, Dr Wallace define dois tipos principais: os reducionistas e os experimentalistas. Estes dois tipos acabaram sendo criados ante a revoluo criada no campo de Inteligncia Artificial a partir do AIML, e tornaram-se mais at vertentes de um modo de direcionar o futuro e aprimoramento da linguagem do que simplesmente perfis de programadores. Parecem-se at como partidos polticos. Os reducionistas esto seguem a lgica aristotlica e matemtica, e seu principal foco de simplificar e manter a linguagem mais simples possvel. Estes podem ser Jefferson Mendes Silva Pgina 32 de 89

Processamento de Dados comparados a utilizadores de leitura dinmica, quanto mais simples e menos palavras forem utilizadas, melhor. Os experimentalistas esto, por sua vez, menos atrelados a teoria lgica da linguagem AIML, estando mais preocupados com a utilizao desta linguagem como a base de um novo e revolucionrio sistema, podendo ser atrelada a vrios outros sistemas, integrando-a a novas aplicaes e tecnologias, como reconhecimento de voz e at o de movimentos. SILVA cita em sua obra a existncia de pesquisas tentado desenvolver o iAIML. Este seria o AIML associado a intenes, onde se armazena tambm as intenes do usurio ou do bot, auxiliando a escrever roteiros mais simples e refinar-se ainda mais a eficincia do chatterbot. Para o sucesso de um chatterbot evidente a necessidade de unirem-se as duas propostas acima citadas. Todo programa de computador, por mais banal ou sofisticado que seja, tem a necessidade de tornar-se eficiente e eficaz, reduzindo-se seu tamanho, nmero de instrues, complexidade de leitura e interpretao do cdigo por outros programadores. Tambm necessria, no ambiente integrado com a web, e de posse de inmeros recursos tecnolgicos existentes, a interoperabilidade entre sistemas e estes recursos. Reforando, um bom Botmaster deve utilizar as duas tcnicas alinhadas e bem dosadas. A principal causa do funcionamento do chatterbot est na capacidade de oferecer as respostas-estmulo. Assim como no caso dos animais citados por SILVA no captulo sobre inteligncia artificial, os chatterbots tambm possuem respostas e executam aes de uma maneira quase instintiva, sendo estes agentes reativos. Como eles no possuem a capacidade natural de possurem o dom da razo, respondem a estmulos externos assim como um cardume de peixe age em conjunto ao serem atacados por predadores. Neste caso, como a conversao a partir de chatterbots funcionam numa comunicao half-duplex, so causados respostas-estmulo tanto do lado do programa como do lado do usurio. Um chatterbot tambm possui a capacidade de aprender coisas novas. Ou seja, a partir de uma conversao com um usurio, o Botmaster pode identificar conversas Jefferson Mendes Silva Pgina 33 de 89

Processamento de Dados ou frases mal respondidas e programar o chatterbot para respond-la devidamente. Ou permitir que o prprio usurio o ensine. O sucesso no desenvolvimento do AIML est na capacidade de realizar-se a execuo de um roteiro de conversao. O Botmaster define um roteiro bsico de uma possvel conversa entre o usurio e o chatterbot, e a partir deste roteiro, vai se refinando as habilidades do chatterbot. Em sua obra, SILVA d dicas importantssimas de como um iniciante pode definir um roteiro da linguagem AIML. Tal processo ser refinado e demonstrado no momento oportuno. muito fcil perder-se no desenvolvimento de um chatterbot, pois como um chatterbot necessita de vrias categorias, cerca de 10000 no mnimo para ser realmente eficiente, a partir das 5000, segundo SILVA, um iniciante j comea a se perder, travando e paralisando o projeto devido alta complexidade. Um botmaster deve ser organizado, possuir disciplina e mtodos para controlar-se e direcionar a programao do chatterbot. Ao se programar um chatterbot, deve-se ter em mente de que ele possuir inmeras categorias, e no somente as que se tm em mente para programar.

Jefferson Mendes Silva

Pgina 34 de 89

Processamento de Dados

Parte tcnica
Tipos de arquivos AIML
Existem algumas verses de arquivos AIML. Assim como arquivos HTML ou XML, este dever conter juntamente na tag de abertura do Arquivo um atributo contendo a sua verso. A falta deste atributo no implicar no mau funcionamento do programa, mas poder causar confuses quando de sua manuteno ou atualizao por terceiros.
<aiml version=1.0.1>

Cada verso possui seu prprio conjunto de tags com seu respectivo funcionamento, podendo ou no ser alterada de verso em verso. Atualmente existem as verses 0.9 1.0 e 1.0.1 dos arquivos AIML. Neste trabalho ser utilizada a verso 1.0.1, por esta estar mais concisa e atualizada. Alm destes tambm dever ser inserida uma tag de abertura de XML, pelo mesmo motivo da de AIML. Neste Caso ser feito o uso da verso 1.0 codificao UTF-8. Todos os nomes de arquivos AIML devem preceder da extenso aiml, para este ser identificado facilmente dentre outros arquivos.

Categoria
Uma categoria pode ser definida como a mnima parte de uma conversao verbal entre dois interlocutores. Esta mnima parte consiste de um envio de informao, podendo ser uma pergunta ou afirmao de um dos interlocutores e uma consequente resposta ou reao atravs de uma nova informao pelo outro interlocutor. Como ser trabalhado com texto, esta ao e reao sero escritas como texto. O site dictionary.com define o termo ingls categories como duas possibilidades para este caso de uso: uma delas de uma diviso de classes, e outra de um jogo de palavras, popularizado no Brasil com o nome de stop, onde se escolhe um tema, como carros, novelas e outros, em seguida os participantes escrevem vrias palavras a esta categoria relacionada. Como uma categoria precisa de no mnimo duas informaes, ela dever possuir, no mnimo, duas outras tags,

Jefferson Mendes Silva

Pgina 35 de 89

Processamento de Dados sendo estas a pattern e a template. Esta tag aberta com <category> e fechada com </category>.

Padres
Os padres so as informaes inseridas em uma categoria, sendo estas referidas ao que o usurio poder inserir em uma afirmao ou resposta. Como uma informao expressa pelo usurio pode no ser exatamente como estarem programadas ou como previstas pelo botmaster, elas pelo menos seguem ou sero pensadas como um determinado padro de entrada. Ao se programar um chatterbot, importante pensar sobre as diferentes possibilidades de um usurio dizer uma mesma coisa. Um padro pode servir como fonte de entrada para diversas frases pensadas por um humano. Para utilizar-se de um padro, segue o exemplo abaixo:
<pattern>Ola</pattern>

Onde Ola uma informao podendo ser expressa pelo usurio e <pattern> a tag do padro. Um padro tambm poder fazer uso de coringas. Os coringas facilitam em muito a simplificao de padres, fazendo com que vrias frases diferentes se enquadrem no mesmo padro. O mais utilizado deles o *, onde ele substitui uma cadeia de caracteres quaisquer que pode ser inserida pelo usurio. Neste caso <pattern>Bom dia, *</pattern> serve para as frases: Bom dia. Bom dia, tudo bem? Bom dia, como voc est hoje? E infinitas outras. O AIML sempre procura do especfico para o genrico, ou seja, primeiro localiza a frase mais esmiuada, como <pattern>Bom dia meu nome *</pattern>, e depois <pattern>bom dia *</pattern>, mais abrangente. Uma explicao mais aprofundada sobre coringas ser abordada no tpico oportuno.

Modelos
Os modelos so o contrrio dos padres, servindo para indicar o modelo de frase respondida por um chatterbot aps receber a entrada do usurio satisfazendo seu respectivo padro. Nota-se a necessidade de no mnimo uma unio de uma categoria, um padro e um modelo para a ocorrncia de um dilogo. Jefferson Mendes Silva Pgina 36 de 89

Processamento de Dados Na falta de um destes itens, a cadeia AIML no estar bem formatada e no ser possvel analisar uma categoria e, em alguns casos, nenhuma de um arquivo. Um modelo sempre vir logo aps um padro. Este modelo poder conter apenas um texto simples ou ser includo conjuntamente com vrios outros recursos do AIML, estes explicados mais adiante. Para utilizar-se um modelo, dever ser utilizada a tag <template>:
<category> <pattern>Ol</pattern> <template>Ol, j nos conhecemos?</template> </category>

Para um usurio no ficar solto ao vento aps inserir um texto no especificado com um padro distinto, dever ser inserido um padro genrico, podendo ser um padro com apenas um *, respondendo algo como, no entendi para o usurio receber pelo menos uma resposta, ao invs de uma linha em branco ou um erro. Uma tcnica bastante utilizada por botmasters, tambm utilizada por humanos com grande habilidade em conversao, sugerir de uma forma sutil outro assunto a ser abordado. Ao invs de responder-se um grosseiro no sei, poderia se perguntar-se ao usurio se ele gosta de carros, por exemplo. Ao invs de deixar-se o usurio insatisfeito com o desempenho do chatterbot, pode-se direcionar a sua conversa de uma maneira prtica e elegante.

Coringas
Foi falado anteriormente de utilizarem-se coringas como recurso para simplificar-se a utilizao dos padres, mas no se citou de como utilizar-se o contedo inserido pelo usurio para outros fins. Toda insero do usurio em uma conversao AIML armazenado pelo programa interpretador em variveis. No nosso caso, ele armazenar os valores de uma maneira possvel de ser recuperada utilizando-se XML. possvel ento, aps definir um padro utilizando-se curingas, resolver o que fazer com este dado armazenado em uma varivel, utilizando-se da tag <star/>.

Jefferson Mendes Silva

Pgina 37 de 89

Processamento de Dados Segue como exemplo a seguinte frase: Usurio: Ol, meu nome Jefferson. Bot: Ol Jefferson, sobre o que deseja conversar? Neste caso, codificara-se uma categoria da seguinte forma:
<category> <pattern>Ol, meu nome *</pattern> <template>Ol <star/>, sobre o que deseja conversar?</template> </category>

Na verso 0.9 da AIML, utilizava-se apenas a tag <star/>. Esta tag ficou obsoleta da verso 1.0 em diante, sendo substituda por <star index=X/>. Esta modificao possibilitou ao chatterbot distinguir entre diversos coringas, possibilitando uma maior robustez e utilizao. Neste caso pode-se utilizar a seguinte frase: Usurio: Quanto 3 mais 4. Bot: igual a 4 mais 3. Para codificar esta sentena, digita-se:
<category> <pattern>Quanto * mais * </pattern> <template> igual a <star index=2/> mais <star index=1/></template> </category>

Onde a numerao do ndice uma numerao inteira sequencial comeando do 1, sendo que seu limite varia de cada interpretador. Caso seja inserida uma tag star sem definio de ndice, nos moldes do AIML 0.9, este ser automaticamente referenciado como ndice um. Existe outro coringa alm do * que o _. A diferena entre os dois que o _ possui uma maior prioridade que o *, sendo este processado primeiro. Era muitssimo importante na verso 0.9, mas com o advento do ndice, acabou at perdendo sua principal utilidade.

Jefferson Mendes Silva

Pgina 38 de 89

Recurso

Processamento de Dados

O maior sucesso da linguagem AIML, conjuntamente com as tags de definio de contexto, a tag <srai>. A principal funo de servir de referenciar-se a um padro anterior, como uma funo recursiva, diminuindo em muito a quantidade de padres e modelos escritos economizando trabalho. Existem pelo menos sete significados ou funes para esta tag, separados desta maneira por Wallace (2003): 1. Reduo simblica; 2. Diviso; 3. Correo gramatical; 4. Sinnimos; 5. Deteco de palavras chave; 6. Condicionais; 7. Qualquer combinao das seis anteriores.

Reduo simblica
Consiste em pegar-se um padro e simplific-lo. Pode ser utilizada para pegar um padro enorme e simplificar por um menor j escrito, utilizando o mesmo modelo para responder vrias perguntas: Vai chover?, Vai chover hoje?, Ser que vai chover? ou Ser que vai chover hoje?. Neste caso codifica-se desta maneira:
<category> <pattern>Vai chover?</pattern> </template>No sei, no consigo olhar para o cu</template> </category> <category> <pattern>vai chover *?</pattern> <template><srai>vai chover?</srai></template> </category> <category> <pattern>Sera que *</pattern> <template><srai><star/></srai></template> </category>

Jefferson Mendes Silva

Pgina 39 de 89

Processamento de Dados Nota-se que o contedo dentro da tag <srai> a mesma do padro a ser referenciado. Como foi colocado uma <star> na ltima codificao, este padro servir para quaisquer padres que perguntem ser que..., localizando o contedo em qualquer outra pergunta.

Diviso
Outra funo da tag srai de dividir uma sentena em menores. Facilita-se em muito o trabalho caso o usurio apresentar mais de uma informao em uma mesma entrada. Um caso citado por Wallace (2003) o caso do Yes. Pois o mesmo pode indicar uma resposta afirmativa para uma pergunta, e, logo aps a pontuao, possibilitando inserir outra pergunta ou afirmao, ou at mesmo um novo assunto. Para tanto, basta responder uma pergunta com um texto normalmente, adicionandose uma tag <srai> aonde for conveniente para exibir-se a resposta de outro padro.

Correo Gramatical e Sinnimos


Assim como na reduo simblica, a tag srai tambm usada para correo gramatical. Assim, ao usurio usar grias utilizadas comumente em chats, pode-se substitu-las para o termo correto, verificando a sua existncia dentre vrias outras frases sem precisar reescrev-las. A mesma tcnica serve tambm para correes gramaticais na frase, possibilitando tambm a aprendizagem pelo usurio da grafia correta em alguns casos. Alguns chatterbots so especialistas nisso. Os sinnimos funcionam da mesma maneira, existem vrias palavras diferentes podendo significar uma mesma coisa em um determinado contexto.
<category><pattern>Voc est feliz hoje?</pattern> <template>Fico sempre feliz quando converso com voc!</template></category> <category><pattern>vc *</pattern> <template><srai>voc <star/></srai></template></category> <category><pattern>Bom dia * </pattern> <template>Ol, tudo bem?</template></category> <category><pattern> Boa tarde *</pattern> <template><srai>bom dia <star/></srai></template></category>

Deteco de palavras chave


Jefferson Mendes Silva Pgina 40 de 89

Processamento de Dados Outra grande utilizao da tag srai de utilizar as palavras-chave. Resume-se uma frase grande e complexa exprimindo uma ideia atravs de uma palavra simples. Exemplifica-se a criao de um algoritmo complexo para autenticao de usurio ou armazenamento de informaes em um banco de dados atravs de um padro AUTENTICARUSUARIO, onde seu modelo poderia ser um cdigo qualquer misturado com um texto a ser retornado ao usurio. Assim, ao utilizar-se qualquer combinao de texto para referenciar-se ao desejo de autenticar-se no sistema, pode-se redirecionar o padro para o padro apropriado:
<category><pattern>MEMORIZARDADO: * = *</pattern> <template><javascript>/*Esta </template></category> tag ser explicada mais adiante!*/</javascript>

<category><pattern>Lembre para mim: * = * </pattern> <template><srai>MEMORIZARDADO: </template></category> <star index=1/> = <star index=2/>

Variveis em AIML
Antes de falar-se sobre condicionais, deve-se explicar como o AIML armazena valores de variveis simples. Assim como qualquer linguagem de programao, variveis possuem um nome podendo ser variveis de ambiente, vindo pr-definidas no sistema operacional ou na prpria linguagem, ou variveis de programa, sendo estas definidas na prpria codificao do programa. No caso do AIML, o interpretador possui algumas variveis de ambiente servindo para armazenar informaes especficas, como o nome do Bot, o nome do usurio dentre outros aspectos da linguagem. Outras variveis podem ser definidas, sendo necessrio apenas definir-se o nome deste. Tambm, como nas linguagens de programao, estas podem ser inicializadas. O valor da varivel no inicializada depende da linguagem e do interpretador utilizado. Para definir-se a varivel ou atribuir-lhe um valor, basta utilizar-se da tag set. Para tanto se usa o nome da varivel de atributo e expressar-se o seu valor:
<category><pattern>Meu nome *</pattern> <template>Prazer em conhec-lo <set name=nome><star/></set> </template></category>

Jefferson Mendes Silva

Pgina 41 de 89

Processamento de Dados Quanto a utilizar-se o valor armazenado, basta utilizar-se da tag <get>, juntamente com o atributo do nome da varivel, assim
<category><pattern>Qual meu nome?</pattern> <template>Seu nome <get name=nome/></template></category>

Condicionais
Para usar condicionais simples com AIML, basta atrelar-se uma varivel. Caso a varivel possua um valor atribudo, pode testar-se este valor. Pode-se tanto atribuir um valor como falso ou verdadeiro como um valor literal, sendo este a ser testado:
<category><pattern>Eu gosto de carros</pattern> <template>Que bom que vc gosta de carros<set name=gostacarro>gostosim</set> </template></category> <category><pattern>No quero ter carro</pattern> <template><srai/>naoquerocarro <get name=gostacarro/></srai></template> </category> <category><pattern>naoquerocarro gostosim</pattern> <template>Por no quer ter um carro se voc gosta de carros? </template> </category>

Frases anteriores
Outra tcnica para utilizar-se o AIML de maneira mais eficiente de saber-se o que foi dito antes. Para tanto, referimo-nos os modelos anteriores com a tag that. Assim como a tag star, este tambm pode possuir ndices, dependendo do interpretador, para referenciar-se a diversas respostas anteriores. No se referencia aos padres por estes serem mais difceis de identificar, pois existe a recurso para facilitar-nos na parte do modelo. Basta simplesmente usar-se ento a tag <that> com o ndice antes do padro ou sem o mesmo, para evidenciar-se o ltimo modelo que possivelmente foi dito. Sempre quando em um modelo for inserida uma tag that, o padro s ser validado se o modelo anterior for tambm validado juntamente com o contedo de <that>, caso contrrio no haver a resposta desejada. Atravs deste artifcio, possibilita-se produzir duas respostas diferentes para a mesma pergunta, simplesmente analisando-se a resposta anterior. Uma categoria sem a tag that, pode ser assumir o valor simblico de * ou nulo em uma tag that.
<category><pattern>Eu sou *</pattern>

Jefferson Mendes Silva

Pgina 42 de 89

Processamento de Dados
<template>Prazer <set name=person><star/></set></template></category> <category><that>Prazer *</pattern> <set name=person><star/></set></that> <pattern> Eu sou

<template>Voc j se apresentou a mim, <get name=person/>! </template> </category>

Este exemplo poderia ser facilmente escrito somente com a utilizao de recurso e as tags <set>/<get>. Outro exemplo interessantssimo foi escrito por Silva (p. 35) sobre o desarmamento:
<category><pattern>faa uma pergunta</pattern> <template>voc favorvel ao desarmamento?</template></category> <category><pattern>sim</pattern> <that>voc favorvel ao desarmamento?</that> <template>eu tambm acho arma coisa perigosa</template></category>

Caso no haja um sim qualquer respondido pelo usurio, sem que a resposta anterior seja voc favorvel ao desarmamento?, a resposta do bot ser qualquer outra programada, diferentemente desta.

Tpicos
Talvez uma das tags mais importantes seja as tags de tpicos. Como nas conversas normais, situa-se primeiramente sobre um assunto especfico e conversa-se at a exausto sobre este assunto, at mudar-se este assunto para outro e assim sucessivamente, at o final de uma conversao. Os humanos tem a facilidade de identificar quando outra pessoa est em um assunto ou muda para outro, s vezes simplesmente pela feio do outro usurio ou simplesmente quando um dos interlocutores utiliza palavras-chave como mudando de assunto..., por exemplo. O mesmo pode acontecer com os bots, define-se um assunto inicial, sendo tratado como * ou assunto raiz, e da podem programar-se categorias agrupadas em diferentes assuntos, como futebol, filmes, games, tecnologia entre outros. Assim pode-se programar um chatterbot muito flexvel e bastante interessante, pois com mais assuntos possibilita-se prender mais o usurio e mant-lo interessado em continuar na conversao. Os humanos geralmente gostam de conversar com quem

Jefferson Mendes Silva

Pgina 43 de 89

Processamento de Dados fala sobre assuntos interessantes a si ou com pessoas mais cultas, conversando sobre vrios assuntos diferentes, aumentando o seu leque de conhecimento. Na parte prtica, ser falado em como concentrar assuntos diferentes em arquivos separados, facilitando em muito sua manuteno. Tambm ser falado sobre roteiros, melhorando em muito sua implantao. Para tanto, agrupa-se vrias categorias em uma tag chamada de <topic>. Esta tag receber um atributo name contendo o tpico a ser referenciado por este conjunto de categorias. Para utilizar-se este tpico, dever-se utilizar de uma tag topic, devendo englobar as categorias pertencentes a este tpico:
<set name=topic>nome do tpico</set> em um modelo. <category><pattern>Vamos falar sobre carros</pattern> <template>Ok, vamos falar sobre <set name=topic>carros</set></template> </category> <topic name =carros> <category><pattern>De qual voce gosta</pattern> <template>Gosto dos carros do Need for Speed</template></category> <category><pattern>Qual seu * favorito</pattern> <template>Gosto dos lamborghini</template></category> </topic>

Para retornar ao tpico raiz, basta declarar o nome do tpico com * ou nulo, dependendo o interpretador utilizado. Caso o interpretador no localizar nenhuma ocorrncia no tpico atual, ele automaticamente tentar localizar alguma no tpico raiz, dependendo da linguagem a ser utilizada. Atravs deste advento, pode-se ento separar os roteiros de maneira inteligente, executando-se a programao de um-a-um, simplificando e organizando ainda mais a programao. Ao falar-se na parte prtica da linguagem AIML, este assunto ser abordado com maior nfase. Segundo SILVA (p 40), utilizar-se de tpicos diminui em muito o tempo de procura do interpretador nas respectivas tags. Como o bot ALICE possui mais de 40.000 categorias, este deveria percorrer praticamente sua maioria para encontrar uma resposta, sem contar com as chamadas de recurso, para retornar esta resposta.

Jefferson Mendes Silva

Pgina 44 de 89

Processamento de Dados Utilizando-se tpicos, este nmero cair drasticamente, representando uma melhoria muito favorvel ao desempenho.

Verdadeiros condicionais
Em recurso foi falado sobre como condicionais podem ser utilizados atravs da tag <srai>. Mas, esta tag serve apenas para fazer-se condicionais simples. Outra forma de fazerem-se condicionais utilizar-se do bloco <condition>. Este bloco funciona da mesma maneira que o bloco case das linguagens baseadas em C. Define-se primeiramente uma condio, uma resposta padro e vrias outras apontando para respostas diferentes. WALLACE (2003, p. 8) diz que a linguagem AIML deve ser mais simples possvel, ento, simplesmente com esta tag pode-se alcanar nveis muito altos de complexidade utilizando somente as tags j existentes em AIML, deixando para as linguagens hospedeiras a tarefa de executar outras operaes, satisfazendo assim os experimentalistas. Assim como em outras linguagens, define-se a varivel a ser testada, define-se o valor padro a ser retornado, caso no haja uma correspondncia, e o valor a ser retornado de cada correspondncia programada. Segundo ANUPAMA (p 7-10) existem vrias maneiras de tratar condicionais, mas todas elas recaem sobre a maneira como descrita acima, enquanto SILVA demonstra apenas uma, sendo utilizada com todos os tipos. Para critrio de desempate, WALLACE (2003) em seu manual de referncia cita e demonstra exemplos dos trs tipos de condicionais definidos: os de testes mltiplos, os de lista e o nico. Os de testes mltiplos funcionam como se fossem feitos vrias afirmaes, testando todas as informaes e retornando todas com resultado verdadeiro. Fazendo-se um paralelo com outras linguagens convencionais, funciona como se houvessem vrios condicionais if em sequencia, sendo que em cada ocorrncia verdadeira executar o contedo do seu corpo. Uma condio mltipla pode ser referenciada por vrias tags <condition> contidas no mesmo modelo. Para tanto se utiliza a seguinte sintaxe: Jefferson Mendes Silva Pgina 45 de 89

Processamento de Dados
<condition name=nome da varivel value=valor a ser testado> RESULTADO SE VERDEDEIRO </condition>

Neste caso, pode-se retornar mais de uma resposta, possuindo pelo menos uma verdadeira. J nas de condies de lista mltipla e lista simples, sero testadas todas at a primeira ocorrncia de verdadeiro. A de listas mltiplas testam vrias variveis e vrios valores, parando seu processamento na primeira ocorrncia de verdadeiro, enquanto o de lista nica testa apenas uma varivel e vrios valores a serem atribudos a ela. Neste caso, ser retornada apenas uma mensagem de resposta.
<category><pattern>avaliaveiculo</pattern> <template><condition name=veiculo> <li value=bicicleta>Bicicleta um veculo saudvel e ecolgico</li> <li value=carro>Carro um veculo muito til</li> <li value=metro>Metr um veculo muito lotado</li> <li>Veculo interessante...</li> </template></category>

O ltimo item da lista aceitar qualquer valor, valendo como o valor padro da condio. Este valor padro pode ser incluso em qualquer tipo de condicional.

Transformaes
Um recurso muito interessante so as transformaes. muito simples programarse um chatterbot possuindo por referncia um nico gnero, nmero e grau, mas, e como necessrio satisfazer a todos? Quando programa-se um chatterbot, sempre o usurio ser tratado, por padro, como uma terceira pessoa do singular com o sexo indefinido. Acontece que, conforme a conversao fica mais profunda, pode-se tratar esta pessoa como uma do sexo masculino ou do feminino, por exemplo. Sendo assim, as programaes das categorias podem no ser muito eficientes quando da mudana de gnero. Para satisfazer estas necessidades, utiliza-se das tags transformadoras <gender/>, <person/> e <person2/>, onde as mesmas detectam palavras-chave como artigos e adjetivos e as substitui pelo gnero, nmero e/ou grau desejados. Para tanto, necessrio programao de um arquivo onde devero ser contidas estas Jefferson Mendes Silva Pgina 46 de 89

Processamento de Dados transformaes, podendo varias de cada interpretador, mas possuindo sempre o mesmo modelo. Quando um usurio introduz um padro, o interpretador, caso no encontre nenhuma ocorrncia, poder automaticamente utilizar-se do arquivo de substituies para procurar a ocorrncia parecida, e ento retorn-la. Assim, deve-se ter em mos todos os artigos, pronomes e at adjetivos mais utilizados e montar-se uma matriz para satisfazerem-se todas estas substituies. Na lngua portuguesa, h um problema muito maior: a conjugao verbal. Diferentemente da lngua inglesa, nossas transformaes so muito mais complexas, e no seguem um padro to definido como a da lngua inglesa, representando um desafio muito maior para os programadores utilizarem. Recomenda-se no incio pensar-se apenas em programar na terceira pessoa do singular, com o pronome voc, e utilizar-se das tags transformadoras o mnimo possvel, para s depois de definir-se uma sequncia de roteiro mais slida, fazerem-se as definies das substituies necessrias. Os transformadores tambm podem ser utilizados em conjunto com condicionais. Ao invs de programarem-se milhares de categorias para satisfazerem-se ambos os gneros, define-se apenas metade delas, utilizando-se os condicionais para direcionarem-se os modelos:
<category><pattern>Tenho os olhos azuis</pattern> <template>Voc parece muito <condition name="gender" value="female">simpatica</condition> <condition name="gender" value="male">lindo</condition> </template></category>

Como Miracle do sexo feminino, ela acha um homem lindo e uma mulher apenas simptica. O exemplo acima foi citado por Wallace (2003) na linguagem inglesa. Outra maneira de programar-se esta mesma categoria seria apenas de utilizar-se de substituies alinhadas a recurses:
<category><pattern>tenho os olhos azuis</pattern> <template>voc parece muito <srai>elogiagenero</srai></template></category>

Jefferson Mendes Silva

Pgina 47 de 89

Processamento de Dados
<category><pattern>elogiagenero</pattern> <template><condition name=gender> <li value=female>simpatica</li> <li value=male>lindo</li> <li>elegante</li></template></category>

Ocorre o mesmo resultado do anterior, mas neste caso, a recurso pode ser utilizada para vrias outras categorias podendo elogiar um gnero especfico. Caso no haja gnero especificado, ele ter como padro elogiar o usurio como elegante. As tags abordadas neste captulo so as essncias para efetuar-se uma boa programao de um bot. Existem inmeras outras a serem utilizadas, mas no faro parte deste trabalho.

Jefferson Mendes Silva

Pgina 48 de 89

Processamento de Dados

Parte prtica
Silva foi o autor mais interessado em como refinar a etapa de programao efetiva de um chatterbot. Ele define nove dicas bsicas de como se organizar um chatterbot passo a passo. As dicas e tcnicas mais interessantes, expostas neste estudo sero abordadas neste captulo.

Separao de arquivos
Todas as categorias contidas em um chatterbot devem estar armazenadas em um local seguro. Alm de estas estarem contidas nos respectivos arquivos ou banco de dados utilizados pelo interpretador, tambm devem possuir seu backup. A maneira mais simples de guarda-las em seu prprio arquivo de extenso aiml. O backup no deve ser efetuado apenas para contingenciamento do programa em si, mas tambm para facilitar sua alterao futura e organizao. Os arquivos de categorias do chatterbot Alice e de diversos outros esto organizados por assunto. Diferentemente dos tpicos, estas podem ser agrupadas indefinidamente sem possuir um tema especfico. Um arquivo cumprimentos pode ser criado contendo apenas as categorias utilizadas ao se reverenciar algum.

Comentrios e referncias de autor


Qualquer arquivo baseado em XML pode conter comentrios. Um comentrio, assim como em HTML, comea com <-- e termina com --!. Usar e abusar dos comentrios auxilia qualquer programador, at o botmaster criador do bot a localizar-se e entender o que foi programado. Referncias sobre o autor e autoria, como datas, e-mail de contato e descrio sucinta do funcionamento tambm auxiliam em muito a vida de quem ir reutilizar o cdigo. Um bot pode e deve ser programado tendo em vista sua alterao por qualquer usurio da comunidade livre e de novos pesquisadores.

Criao de roteiros
Ao invs de apenas sair programando vrias categorias a fio sem nenhum objetivo, prefervel possuir um ou vrios roteiros de conversao de um chatterbot. Um Jefferson Mendes Silva Pgina 49 de 89

Processamento de Dados grande facilitador ter bem definida a personalidade do chatterbot a ser desenvolvido, sendo mais fcil prever-se uma resposta a uma pergunta de cunho pessoal ao chatterbot. Da mesma maneira, necessrio saber-se do pblico alvo do chatterbot para faz-lo ser atrativo o suficiente, seno ningum ir acess-lo, ou outro pblico poder acess-lo, causando um desastre caso este chatterbot tenha um foco publicitrio ou comercial.

Substituies
A maioria dos interpretadores de AIML possuem arquivos de substituies, funcionando como um dicionrio de sinnimos, usando-os devidamente, economizase em muito a quantidade de categorias a serem utilizadas. A maioria dos interpretadores j vem com as categorias de ALICE carregadas e j possuem seu arquivo de substituies programado, possuindo este arquivo, fica muito mais fcil adapt-lo lngua portuguesa. Como a conversao assemelha-se a um chat, muito comum utilizao de abreviaes neste dilogo. Ento, as mesmas tambm devero estar contidas neste arquivo. Caso o interpretador utilizado no possua um arquivo de substituies, as mesmas devero ser programadas atravs de categorias utilizando recurso.

Personalidade do chatterbot
Assim como nos humanos, um chatterbot pode ter seus gostos e preferncias. Estas devem estar devidamente definidas no roteiro preliminar do bot. Alguns interpretadores possuem um conjunto de variveis associadas a preferncias, como filme preferido e etc. Estas preferncias devem estar alinhadas ao foco do chatterbot, potencializando seu desenvolvimento. Como o foco deste trabalho desenvolver um chatterbot para estudo em uma faculdade, prefervel a utilizao de uma linguagem formal, ser f da faculdade e conhecer vrias particularidades desta. Tambm deve possuir carisma, neste caso, prefervel um rob do sexo feminino. Jefferson Mendes Silva Pgina 50 de 89

Escritores de AIML e plataformas de teste


Uma boa pedida de um escritor de AIML off-line o Simple AIML Editor da RIOT software. Com ele possvel escrever vrios arquivos de AIML simultaneamente. No to simples de se visualizar, mas prefervel a editar o arquivo aiml diretamente como XML para os iniciantes. Um ambiente de teste magnfico, e tambm escritor on-line, o site do pandorabots. Com ele possvel criar um chatterbot do zero, test-lo e at divulga-lo para outras pessoas poderem utiliz-lo. Uma boa maneira de se programar, caso no possua muita experincia, escrever-se um dilogo comum e utilizar-se seu programa codificador, para transformar o dilogo em AIML. Uma desvantagem bvia deste no utilizar os mesmos mtodos ou funes de um programa executado localmente, mas, possuindo-se o foco na conversao, a arma mais poderosa a se utilizar. Assim como em outros softwares, extremamente recomendvel testar quaisquer modificaes no software em um ambiente de teste antes de coloc-lo em produo, evitando-se assim exibir falhas ao usurio. Um botmaster experiente pode ter maior facilidade escrevendo diretamente um arquivo aiml utilizando um editor de texto. Neste caso recomendado utilizar-se o notepad++, selecionando o tipo de arquivo como xml para melhorar-se a visualizao. Esta foi a opo escolhida neste trabalho.

Processamento de Dados

Monitore as conversas e visitas


A maioria esmagadora dos interpretadores atuais possui a facilidade de armazenar log. Isso facilita em muito o aprimoramento do chatterbot, pois as perguntas no respondidas ou respondidas indevidamente pelo chatterbot podem ser identificadas, e futuramente corrigidas pelo botmaster. A monotonia o maior adversrio de um botmaster, assim como em um site comum, afasta o usurio causando uma queda significativa de acessos pelo desinteresse. Um chatterbot deve ser capaz de entreter e informar o usurio da maneira adequada para seu pblico alvo. Jefferson Mendes Silva Pgina 51 de 89

Integrao entre sistemas

Processamento de Dados

Caso o chatterbot seja utilizado com alguma finalidade ou facilidades especficas demandando a utilizao de outros sistemas, como acionar dispositivos ou comunicar-se com alguma outra linguagem, estas devem estar muito bem definidas antes de sua codificao. Se forem programadas todas as categorias de um chatterbot, e aps as funcionalidades do sistema a ser integrado sem um projeto anterior, pode ser necessrio refazer-se vrias categorias novamente, visando suprir as necessidades deste sistema. Caso deseje antecipar a programao das categorias, deixe a parte a servir de integrao comentada e bem definida, visando sua mais fcil modificao futuramente.

Diagramao
Nenhuma das obras consultadas apresentou foi da utilizao de diagramao. No comeo deste trabalho foi exposto e comentado sobre o crebro de ALICE, sendo este em forma de espiral onde a linha de espiral representa o tpico raiz e os demais so alinhados. Alm deste desenho, no h nenhuma outra plotagem, nova tecnologia ou software criadora de uma diagramao. Apesar de desejar manter a programao de AIML mais simples possvel, uma diagramao auxiliaria em muito na hora de se escrever tags alinhadas com a tag that. Alm do mais, uma plotagem efetuada de uma maneira dinmica seria muito mais simples de visualizar e alterar-se caso necessrio um chatterbot mais amplo. Uma ideia neste projeto foi de, aps definir-se o roteiro bsico, rascunhar-se um diagrama de fluxo qualquer apenas para facilitar a programao, ainda mais se este chatterbot for integrado com outro sistema. No poder ser feito com todas as categorias, por demandar um tempo muito longo e talvez at ser feito em vo, mas pelo menos nas mais importantes pode auxiliar em muito a manuteno futura.

Jefferson Mendes Silva

Pgina 52 de 89

Processamento de Dados

CONCEITOS BSICOS DE BANCO DE DADOS


Ser ilustrado neste captulo de como utilizar o banco de dados necessrio ao nosso programa. Ser falado superficialmente sobre as teorias, apenas para facilitar a utilizao e adaptao do programa escolhido.

Introduo
Uma questo sempre levantada em qualquer curso bsico de banco de dados pelo instrutor aos alunos se estes sabem a diferena entre dado e informao. Um dado apenas uma sequncia qualquer de caracteres armazenada em algum lugar, enquanto informao um dado no qual algum sabe de sua utilidade. Nos sistemas de computao, os dados podem ser armazenados em memria permanente ou em memria voltil. Os dados salvos em uma memria permanente ficam armazenados at sua remoo ou modificao, enquanto os dados da memria voltil se perdem aps um desligamento do sistema ou do trmino da execuo de um programa. Os dados podem ser armazenados em arquivos simples ou em um sistema gerenciador de banco de dados, apresentando este maior segurana, confiabilidade, velocidade dentre outras vrias vantagens. Todas as categorias sero armazenadas em um banco de dados atravs de nosso interpretador, entretanto o mesmo deve ser preparado previamente para tanto. Novos esquemas devero ser desenvolvidos parte para utilizarem-se outras funes necessrias ao nosso programa, caso queira-se armazenar dados.

Definies
Um banco de dados (BD) gerenciado por um sistema gerenciador de banco de dados (SGBD). Existem vrios sistemas diferentes cada um com suas particularidades, seguindo estes as mesmas definies bsicas. Um SGBD pode conter inmeros bancos de dados diferentes. Este banco de dados pode ser denominado como esquema. Um banco de dados possui vrias tabelas, tambm chamados como relao ou entidade. Esta tabela por sua vez possui vrias

Jefferson Mendes Silva

Pgina 53 de 89

Processamento de Dados colunas, chamadas de atributos, e tambm possuem vrias linhas, recebendo o nome de tupla. As tabelas de um banco de dados recebem um nome identificador da tabela, e tambm podem possuir um relacionamento. Um relacionamento uma estrutura que diz que algumas linhas de uma relao podem ter correspondncia com outras de outras relaes. Uma maneira de representar um banco de dados pode ser feito tambm por diagramas, estes diagramas podem ser definidos como modelos de entidaderelacionamento (MER), pois neste so desenhados vrias entidades e linhas interligando-as demonstrando os relacionamentos. Existem vrias notaes deste diagrama, com suas particularidades. Como o foco deste trabalho de utilizar-se chatterbots, no sero abordados a fundo.

Tipos de atributos
Um atributo nada mais de que um tipo de valores. Um atributo pode possuir vrios tipos de dados diferentes, sendo numricos de vrias grandezas, booleanas ou alfanumricas, dentre outras. Um atributo possui fora: um atributo pode ser forte ou fraco dependendo de seu possvel contedo. Um atributo forte define-se por ausentar-se de repetio, ou seja, em nenhuma das tuplas de uma tabela este atributo estar repetido, havendo unicidade. A este atributo pode ser nomeado de chave candidata, pois a mesma capaz, por esta fora, de representar a tabela e suas linhas. Pode haver em uma tabela mais de uma chave candidata, mas apenas uma pode ser a eleita a representante, e esta denominada de chave primria. Da mesma maneira, um atributo pode ser utilizado para se referenciar um relacionamento entre sua entidade e outra. E esta coluna denominada e chave estrangeira, pois seus dados vm de outra tabela. extremamente recomendvel retalhar-se um banco de dados: quanto mais separada e organizadas estiverem suas entidades, muito mais simples e rpido

Jefferson Mendes Silva

Pgina 54 de 89

Processamento de Dados modificar-se o banco de dados, alm de facilitar em muito na hora de utilizarem-se os dados com o programa.

Relacionamentos
Os relacionamentos fazem a juno lgica de duas tabelas distintas. Um dos grandes motivos de utilizar-se banco de dados de diminuir-se o espao de armazenamento dos dados. A forma mais precisa de se alcanar esta diminuio evitar-se a redundncia. A tabela a seguir mostra um exemplo clssico de desperdcio:
CPF 322.123.123-12 322.123.123-12 322.123.123-12 NOME Feliciano Augusto dos Anjos Feliciano Augusto dos Anjos Feliciano Augusto dos Anjos Telefone 1122223344 1133334445 1155556666 Endereo Rua Verde, 12 Rua Azul, 55 Rua Rosa, 56 CEP 08333-234 08435-344 08243-180

Figura 4 - Tabela Confusa

Este cliente possui trs endereos distintos. Como seu nome est repetido vrias vezes, esto ocupando espao valioso, quase metade dos caracteres deste desperdiada. Uma maneira de se evitar este desperdcio desmembrar esta tabela em duas: uma de endereos e uma de clientes. Pode-se fazer o CPF, sendo nico neste caso, tornar-se nossa chave primria:
CPF 322.123.123-12 Figura 5 - Tabela clientes NOME Feliciano Augusto dos Anjos

Agora se define uma tabela de endereos, sendo o CPF seja uma chave estrangeira desta tabela, no havendo a necessidade de repetir todo o nome do cliente:

Jefferson Mendes Silva

Pgina 55 de 89

Processamento de Dados

CPF 322.123.123-12 322.123.123-12 322.123.123-12

Telefone 1122223344 1133334445 1155556666

Endereo Rua Verde, 12 Rua Azul, 55 Rua Rosa, 56

CEP 08333-234 08435-344 08243-180

Figura 6 - Tabela Endereos

Esta tabela no est plenamente normalizada, mas j possvel ter-se uma ideia de como reduzir-se espao e iniciar-se a normalizao.

Normalizao
Todos os dados em um banco de dados devem estar organizados de maneira clara e eficiente, visando garantir melhor desempenho e economia de espao, evitando-se a redundncia, como demonstrado utilizando as chaves estrangeiras, relacionamentos entre outras tcnicas. A este tipo de organizao d-se o nome de normalizao. Esta normalizao est dividida em cinco etapas, denominadas de formas normais (FN). Para normalizar-se um banco de dados completamente, devem ser normalizadas na sequencia da 1 FN (forma normal) at a 5 FN. Portanto, para normalizar-se um banco de dados na 2 FN, esta j deve estar na 1 FN.

Primeira forma normal


Para a primeira forma normal, removem-se os atributos multivalorados. Um exemplo de atributo multivalorado o presente na tabela confusa (Figura 4). Na tabela confusa, as tuplas so distintas, pois representam valores diferenciados, porm, nas trs primeiras colunas, os valores esto repetidos, portanto, no obedecem primeira FN. Para normaliz-la na 1 FN, proceder ao processo de dividi-la em duas e utilizar-se de relacionamentos, como mostrado nas figuras 5 e 6.

Segunda forma normal


Jefferson Mendes Silva Pgina 56 de 89

Processamento de Dados A segunda forma normal diz respeito s chaves primrias e seus atributos dependentes. Para uma tabela estar na segunda FN, esta deve ter todos os seus atributos no chave dependentes na totalidade de sua chave primria, ou seja, se no houver este atributo de chave primria, a tupla perder totalmente o seu sentido. Esta dependncia chamada de dependncia funcional, pois o funcionamento da tabela sem esta dependncia comprometida.

Terceira forma normal


A 3 FN fala sobre dependncia transitiva e as chaves candidatas. Uma dependncia transitiva funciona quando um atributo A depende de um atributo B, e este atributo B depende de outro atributo C em uma mesma tabela, mas continua dependendo de A por estar na mesma relao. Para normalizar-se esta tabela, remove-se esta dependncia transitiva, fazendo-se a dependncia ser de A para B e em outra tabela de B para C, assim C no depender transitivamente de A. Um exemplo pode ser dado na seguinte tabela: CodPed 1 CodCli 1 NomeCli Fulano NomeCidCli So Paulo

Figura 7 - Tabela No Normalizada

Neste caso, o cdigo da cidade do cliente e o nome da cidade do cliente dependem transitivamente do cdigo do pedido. Para eliminar-se esta dependncia transitiva, desmembra-se esta tabela em trs partes distintas: CodPed 1
Figura 8 Tabela Pedidos

CodCli 1 NomeCli Fulano NomeCidCli So Paulo CodCidCli 1

CodCli 1
Figura 9 - Tabela Clientes

CodCidCli 1

Figura 10 - Tabela Cidades-Clientes

Caso execute-se apenas a segunda forma normal, haveria apenas duas tabelas, sendo que a cidade do cliente ainda seria dependente do cdigo do pedido. Neste Jefferson Mendes Silva Pgina 57 de 89

Processamento de Dados caso, normaliza-se a terceira forma normal. Caso desejar encontrar a cidade do cliente do pedido 1, faz-se atravs do cliente, mas sem a necessidade de manter a relao no normalizada. As tabelas demonstradas como exemplo ainda podem ser completamente normalizadas e melhor organizadas podendo subdividi-la ainda mais e fazerem-se vrias adaptaes. No ser aprofundado tanto neste trabalho a ponto de efetu-la, mas se frisa esta necessidade caso queira deixa-las totalmente organizadas.

Linguagem SQL
A linguagem SQL (Structured Query Language), significando linguagem estruturada de consultas, foi desenvolvida pela IBM em meados dos anos 70, tendo como funo viabilizar a implantao de um modelo de banco de dados relacional. Esta composta por vrios comandos em modo de texto, sendo separado cada um por ponto-e-vrgula. Os comandos na linguagem SQL so separados em cinco subgrupos de linguagem, sendo alguns estes expostos neste captulo. Ser dada maior nfase apenas no contedo necessrio para programar nosso rob tagarela. A linguagem SQL pode ser interpretada por praticamente todos os SGBDs existentes no mercado. Tambm a linguagem no sensvel ao caso, ou seja, no faz distino entre maisculas e minsculas. Assim como o COBOL ( Common Business Oriented Language), ela muito similar ao ingls, sabendo-se ingls, fica muito fcil programar-se, pois os comandos so muito simples de escreverem-se.

DML Linguagem de Manipulao de dados


A Linguagem de manipulao de dados responsvel por todo o processo de manipular os dados de uma tabela. Atravs dela possvel criar novas tuplas, alterlas, apaga-las ou selecion-las. Os comandos da DML no alteram nada da estrutura do banco de dados ou da tabela, alterando apenas o seu contedo.

O comando Insert

Jefferson Mendes Silva

Pgina 58 de 89

Processamento de Dados O Comando Insert responsvel por inserir novos dados em uma tabela j existente. Para tanto, necessrio conhecer-se a tabela a inserir os dados. H duas maneiras de inserirem-se os dados: diretamente na tabela ou especificando os campos a serem inseridos. O comando INSERT possui a seguinte sintaxe:
INSERT INTO nome-da-tabela (<colunas>) VALUES <valores>

Tendo-se como exemplo uma tabela Alunos em um BD escola com trs campos: Cdigo, Nome do Aluno e Turma, pode-se inserir os dados diretamente da seguinte maneira:
INSERT INTO Escola.Alunos VALUES (1,Jefferson Mendes,1);

Caso no se recorde da ordem dos campos, insere-se diretamente da seguinte maneira:


INSERT INTO Escola.Alunos (Cdigo,Nome,Turma) VALUES (1,Jefferson Mendes,1);

Caso haja algum erro, o SGBD retornar uma falha, e no inserir esta linha na tabela, sendo obrigado o programador a corrigi-la. Isto funciona para qualquer comando a ser executado em SQL.

Jefferson Mendes Silva

Pgina 59 de 89

Processamento de Dados

O comando Delete
O comando delete responsvel por apagar-se linhas de uma tabela. Sendo necessrio especificar qual o critrio que o comando dever obedecer utilizando-se da clusula WHERE. Esta clusula ser detalhada em momento mais oportuno. O comando delete pode apagar desde apenas uma nica linha como os dados de uma tabela inteira, portanto, deve-se tomar cuidado quando de sua utilizao. Caso no seja inserido o critrio, todas as linhas da referida tabela sero apagadas. Alguns SGBDs impedem esta ao de apagar todos os dados da tabela atravs de uma configurao de segurana. A sintaxe do comande delete dada da seguinte maneira:
DELETE FROM nome-da-tabela WHERE <critrios>;

Este comando apaga apenas os dados da tabela, mesmo apagando-se todos os dados, a tabela ainda continuar existindo com todas suas colunas, mas apenas sem dados.

Atualizao de dados
Para ser realizada a atualizao de dados, utiliza-se o comando UPDATE, este comando atualiza uma linha ou sequncia de linhas a serem modificadas. Da mesma maneira que uma sequencia de dados deve ser selecionada antes de ser apagada, um dado a ser atualizado tambm precisa ser selecionado. Neste caso, a clusula where deve ser adicionada a este comando, contendo o critrio para a sua atualizao. No exemplo da tabela endereos, simplesmente pode-se modificar um nmero de uma rua, para tanto se solicita um nmero de CPF e um CEP para identific-la. A sintaxe deste comando como se segue:
UPDATE nome-da-tabela SET coluna1 = novovalor1, coluna2 = novovalor2,... WHERE critrios;

No nosso caso faz-se o seguinte:


UPDATE Endereos SET endereo = Rua Verde, 15 WHERE CEP = 08333-234 AND CPF = 322.129.038-12

Jefferson Mendes Silva

Pgina 60 de 89

Processamento de Dados

Apagar todos os dados de uma tabela


Caso deseja-se apagar todos os dados de uma tabela, mas desejando-se continuar com ela em branco inserida ainda no banco de dados, utilizar o comando truncate table. Este comando apaga todas as linhas da tabela, mas mantm todos os atributos dos campos, sendo possvel inserir os dados novamente. Este comando ser utilizado na manuteno do chatterbot para a parte de aiml.
TRUNCATE TABLE endereos;

DDL Linguagem de Definio de Dados


A Linguagem de Definio de Dados necessria para a manipulao da estrutura das tabelas em um banco de dados. Com ela possvel criar-se, alterar e apagar tabelas. necessrio existir um banco de dados e as tabelas a serem relacionadas antes de sua criao ou modificao.

Criao de banco de dados


Para criar-se um banco de dados, utiliza-se o comando CREATE SCHEMA. A partir desta criao, tabelas podem ser criadas, alternadamente, o comando DROP SCHEMA remove um banco de dados, com todas as suas tabelas e seus respectivos dados. Por razo de segurana, recomenda-se habilitar o modo seguro do banco de dados num ambiente de produo, evitando a execuo deste comando de excluso.
CREATE SCHEMA <nome do banco de dados>;

Criao de tabelas
Para as tabelas serem criadas atravs do SQL, devem-se ter previamente as seguintes informaes: Nome do banco de dados no qual a tabela ser inserida; Nome da tabela desejada; Os nomes dos campos (colunas); O tipo de dados dos campos (string, inteiro, real, booleano, etc.); Pgina 61 de 89

Jefferson Mendes Silva

Processamento de Dados De posse destas informaes, utiliza-se o comando CREATE TABLE para criar uma tabela em um campo de dados. Observar que cada SGBD pode possuir os tipos de campos diferenciados, alguns exigindo o tamanho do campo e outros no, e outros opcionais em determinados tipos. NOTA: os nomes no devem conter espaos e prefervel no utilizar-se acentos. A sintaxe do comando CREATE TABLE como se segue:
CREATE TABLE <nome do banco>.<nome da tabela>( <nome da coluna1> <tipo do campo1>(tamanho do campo1), <nome da coluna2> <tipo do campo2>(tamanho do campo2), ... );

Assim, cria-se a tabela de usurios de aiml, por exemplo:


CREATE TABLE miracle.aiml_users ( user_login varchar(50) PRIMARY KEY, user_name varchar(80));

Parmetros adicionais tambm podem ser inseridos logo aps o tamanho do campo para cada coluna, como o PRIMARY KEY, referenciando o campo como chave primria da tabela e os CONSTRAINT e REFERENCES para atribuir-se chave estrangeira a um campo. Lembre-se que cada SGBD possui suas particularidades e estas devero ser consultadas anteriormente.

Alterao de tabelas
Os campos das tabelas podem ser alterados, mesmo depois de criados. Podem ocorrer erros, excluses ou transformaes de dados de campos em algumas situaes, portanto, ao alterar-se o tipo de dados de um campo, devem analisar-se as consequncias. O mesmo ocorre com a alterao de nome de campos, pois se o mesmo for referenciado como chave primria ou estrangeira, pode haver falhas na consistncia do banco. A excluir-se um campo, excluem-se tambm os dados respectivos, s vezes sem opo de recuperao. Uma tabela pode ser alterada atravs do comando ALTER TABLE.

Jefferson Mendes Silva

Pgina 62 de 89

Processamento de Dados

Excluso de Tabelas
Uma tabela pode ser totalmente excluda atravs do comando DROP TABLE. Como ao excluir-se um banco de dados, os dados desta tabela tambm so excludos.

Jefferson Mendes Silva

Pgina 63 de 89

Processamento de Dados

CONCEITOS BSICOS DE AUTENTICAO, SEGURANA E UTILIZAO DE BANCO DE DADOS COM PHP.


Este tpico destinado a exemplificar como utilizar o PHP conjuntamente com banco de dados, tendo como principal foco a utilizao dos dois para criar-se um sistema de autenticao de usurios e como repositrio de dados pessoais. A princpio, distingue-se um usurio de outro, e a partir da possuir a certeza se este usurio quem diz realmente ser. Para tanto, precisa-se criar uma tabela contendo os dados destes usurios. Esta tabela deve possuir como identificador principal, ou chave primria, uma informao nica do usurio, podendo ser um nmero de CPF ou um nome de usurio, por exemplo. Neste caso, lidando-se com chatterbots, opta-se por selecionar o nome de usurio como chave primria desta tabela. Adicionalmente, necessita-se de adicionar um campo de senha em nossa tabela, pois o mesmo usurio dever ser validado, entende-se como validao uma confirmao de que o usurio que realmente diz ser. No se armazena a senha em sua forma pura, pois qualquer pessoa ou programa mal intencionado pode captur-la e utiliz-la sem grandes problemas. Utiliza-se, ento uma tcnica chamada de criptografia. A criptografia consiste em pegar-se uma sequncia de caracteres quaisquer e transform-la em outra praticamente indecifrvel. Para isso utiliza-se uma chave de criptografia. A este texto modificado d-se o nome de texto cifrado. Existem dois tipos de chaves de criptografia: a chave pblica e a chave privada. Uma chave pblica um algoritmo de criptografia destinada a distribuir-se a vrios usurios, para que os mesmos entrem com os dados a serem criptografados e que obtenham a sada deste texto cifrado.

Jefferson Mendes Silva

Pgina 64 de 89

Processamento de Dados Uma chave privada realiza o inverso: ela recebe um texto cifrado e retorna o dado original. Esta chave restrita a uma pequena quantidade de usurios e a aplicaes especficas. A principal finalidade de cifrar-se um texto a ser transmitido por via pblica, como na internet, sendo este texto recebido e decifrado no seu destino para ser posteriormente utilizado. Segredos de estado pode ser um bom exemplo disso. Abaixo ilustrado um exemplo deste processo:

Figura 11. Fonte: WELLING (2005) pag. 350

Entretanto, a nossa finalidade de criar-se um ambiente de autenticao seguro. Portanto, interessante utilizar-se de um algoritmo de criptografia que no possua um algoritmo de decriptao, ou seja, no possibilitando atravs de um texto j cifrado obter-se o texto original, pois este processo poderia ser utilizado por hackers para obt-lo, facilitando o trabalho deles. O PHP j possui um algoritmo concebido nativamente para esta finalidade, sendo o SHA1 (Secure Hash Algorithim 1). Este um algoritmo de tamanho fixo, ou seja, no importa o tamanho do texto puro a ser encriptado, ele sempre retornar um texto do mesmo tamanho com o texto cifrado, complicando ainda mais a sua decifragem. um mtodo to eficiente que nem seu prprio criador consegue reverter o processo. Como fazer ento para utilizar-se deste mtodo para armazenamento de senhas? Pegar a senha do usurio e cifr-la;

Jefferson Mendes Silva

Pgina 65 de 89

Processamento de Dados Armazenar-se este texto cifrado no banco de dados juntamente com o nome do usurio em outro campo; Ao autenticar-se o usurio, cifra-se a senha fornecida e compara-se com a j cadastrada no banco de dados. O algoritmo escolhido sempre retornar o mesmo texto cifrado para o mesmo texto plano, sem falhas. Se ambas forem iguais, a senha estar correta! A funo que no PHP faz o processo de criptografia do SHA1 a funo sha1(); Para tanto, fazer-se o seguinte:
$textocifrado = sha1($textooriginal);

Ento a varivel do PHP $textocifrado o texto cifrado do texto plano $textooriginal aps o processamento desta linha de cdigo. Primeiramente, necessrio conectar-se ao SGBD desejado. Como ser utilizado o MySQL, utiliza-se a funo mysql_connect(). O comando mysql_connect() possui a seguinte sintaxe:
$link = mysql_connect(nome do servidor, nome do usurio, senha);

A varivel $link serve para armazenarem-se os dados da conexo. Caso ela seja mal sucedida, ela retornar falso. Esta varivel pode ser utilizada em outros comandos ou para depurao. Sempre que uma conexo for aberta, o PHP a utilizar at o final do processamento do script, encerrando-a ao seu final automaticamente ou quando esta for alterada. H duas tarefas principais para o PHP nesta parte de autenticao de usurio: criarse um usurio e efetuar seu login. As consultas do PHP para o MySQL, tanto para a maioria de outros SGBD no PHP, so feitas atravs de SQL. Utiliza-se ento a consulta SQL do captulo anterior par criar-se o usurio no PHP utilizando a funo mysql_query(). Esta funo possui a seguinte sintaxe: $resultado = mysql_query ($sql, $link);

Jefferson Mendes Silva

Pgina 66 de 89

Processamento de Dados Onde $sql a consulta SQL a ser utilizada e o $link o link da conexo ao banco de dados, sendo opcional caso j foi feita a conexo anteriormente, mas necessria se forem feitas mais de uma conexo no mesmo script. $result o resultado da consulta, podendo ser verdadeiro, falso ou um dado especfico. Usa-se ento a seguinte sequncia para cadastrar-se um usurio:
$link = $mysql_connect(localhost,usuario,senha); $sehnhacripto = sha1($senha); $resultado = $mysql_query(INSERT INTO aiml_book.book_users (login, nome, senha) VALUES ($login,$nome,$senhacripto););

Para efetuar-se o login, utiliza-se a mesma funo mysql_query(), mas usando uma consulta SELECT ao invs de uma INSERT:
$resultado = mysql_query(SELECT (book_users.login = $login)); $dados = mysql_fetch_array($resultado); If (sha1($senhafornecida) == $dados[0]) echo (Senha correta! Voc est autenticado!); else echo (Senha incorreta! Tente novamente ou at a prxima!); senha FROM aiml_book.book_users where

Nota-se que o PHP reconhece qualquer varivel e retorna o valor da mesma dentro da sequncia de caracteres da consulta, e tambm da necessidade de cifrar-se a senha fornecida antes de compar-la a armazenada no banco de dados. Para completar todas as necessidades do programa, funes para substituio de senha, nome e excluso de usurio tambm devem ser previstas. Tais cdigos no sero exemplificados neste tpico por no apresentarem nada de muito diferente. Para alterar-se ou excluir-se uma tupla da tabela, basta usar-se dos comandos DELETE e UPDATE do SQL demonstrados no tpico sobre banco de dados na consulta utilizando o PHP. Outro recurso pode ser utilizado com alguma segurana chamam-se cookies. Os cookies so dados armazenados na mquina do usurio para uso posterior. Existe um tipo particular de cookie armazenado na mquina do usurio chamado de cookie de sesso. Segundo a Microsoft, um cookie de seo armazenado na memria enquanto o site visitado, e destrudo quando a conexo ao servidor web desfeita.

Jefferson Mendes Silva

Pgina 67 de 89

Processamento de Dados Este o melhor para utilizar-se em autenticao, pois ao invs de ser efetuado o login toda vez que o usurio necessitar de acessar algum recurso protegido, pode-se armazenar em um cookie de seo o login do usurio j autenticado consultando-o sempre quando necessrio. Como as pginas web perdem a informao armazenada nas variveis e campos ao recarregarem-se as pginas, este recurso pode muito bem ser utilizado. Outro tipo de cookie chamado de cookie persistente. Um cookie persistente armazena as informaes da pgina no disco rgido de maneira permanente. Portanto, sempre pode ser utilizado, enquanto estiver gravado na mquina do usurio, para guardar informaes para uma visita posterior pgina solicitada. No caso deste projeto, ele ser utilizado para armazenar dados do usurio, como nome, data de nascimento e outros, sem a necessidade constante de acessar-se o banco de dados. No PHP muito simples utilizar-se cookies de seo, basta utilizar-se da seguinte sintaxe:
$_SESSION[nome_do_cookie] = <valor>;

Para tanto a seo necessita ser inicializada para os cookies de seo poderem ser armazenados com a funo session_start(); H apenas um inconveniente de utilizar-se cookies, a prpria segurana! Como cookies armazenam texto puro, podem muito bem ser interceptados por hackers ou lidos localmente na mquina do usurio. Portanto, no recomendado guardar dados sigilosos neles, como nmero de carto de crdito ou senhas bancrias. Tendo cincia deste aviso, muitos usurios tem medo de os cookies poderem armazenar vrus, sendo isso impossvel, pois o cookie no executa cdigo. Um alerta feito por CONVERSE (2004) diz que todo o site deve prever que um usurio recuse-se a receber cookies. Neste caso, ou fora-se o usurio a receber cookies ou minimiza-se o desempenho de seu acesso, efetuando-se mais consultas no banco de dados.

Jefferson Mendes Silva

Pgina 68 de 89

Processamento de Dados No caso de utilizar-se os cookies persistentes, deve-se codificar a funo setcookie();com a seguinte sintaxe:
setcookie(nome,valor,validade,caminho,domnio,seguro);

Nome: o nome da varivel do cookie a ser salvo; Valor: o valor a ser guardado do cookie; Validade: a validade do cookie em segundos. Deve ser usado o formato do mktime() ou preferencialmente ser utilizada mktime() para programar a data, deve ser inteiro e representa a quantidade de segundos desde 0:00 de 01/01/1970; Caminho: o caminho relativo de onde deve ser armazenado o cookie. Ex: /pasta/; Domnio: o domnio a qual ser atrelado o cookie. Ex: localhost.miracle; Seguro: 0 para no seguro e 1 para seguro. Requer HTTPS ou SSL para conexes seguras. As mesmas precisam ser inicializadas anteriormente. A funo mktime possui a seguinte sintaxe:
$valor_em_segundos = mktime (horas, minutos, segundos, MS, DIA, ano);

Jefferson Mendes Silva

Pgina 69 de 89

Processamento de Dados

AIML COM PHP, COMO UTILIZAR?


Nesta parte do trabalho, sero expostas as particularidades do Program-O, tanto na parte desenvolvida previamente por Elisabeth Pearrau como na parte modificada para possibilitar o andamento de nosso projeto, pois sem as mesmas, no existiria esta possibilidade. Os nmeros das linhas em relao ao programa original podem estar diferentes, devido constante alterao.

Dicas para instalao


Primeiramente devero ser configurados um ambiente para desenvolvimento web em PHP e tambm um SGBD MySQL. A maneira mais simples de consegui-los instalar o programa EasyPHP disponvel no Sourceforge. Existem inmeros tutorias ensinando sua utilizao e instalao. Aps baixar o Program-O original ou outras verses modificadas, como a deste trabalho, e public-lo no servidor PHP e MySQL, ser necessrio criar-se o banco de dados a ser utilizado e os usurios do banco de dados do rob e do botmaster, utilizando qualquer uma das ferramentas preferidas e/ou disponveis pelo instalador. Aps ser efetuado o procedimento acima, ser necessrio modificar-se os arquivos de configuraes do bot com estas informaes em dois arquivos: um do rob e um do administrador. O caminho do arquivo do rob /bot/config.php. Acessando-o, preencher seus dados nas linhas de 26 a 29 neste arquivo, com o nome de host (geralmente localhost), do banco de dados, do usurio do bot e a senha deste usurio respectivamente. O mesmo dever ser feito para a interface do administrador no arquivo (/admin/funcs/config.php) nas linhas de 12 a 15 com os dados do botmaster. Assim, possvel instalar o programa atravs do link

(http://<host>/install_programo.php). Caso no haja falhas, a instalao ser completada. Havendo, corrija o problema e refaa a instalao, dependendo do passo, uma correo e posterior recarga da pgina j resolvem o problema. Jefferson Mendes Silva Pgina 70 de 89

Processamento de Dados Quanto interface do administrador, apenas clique em install my program-o admin area ao final da instalao do Program-O para que este seja instalado automaticamente. Neste passo ele pedir um nome de usurio e uma senha, devendo estes ser memorizados para se acessar a interface do administrador. Dependendo da verso instalada, o mesmo j possuir todas as categorias AIML padro inseridas no BD, sendo que a verso oficial possui o bot ALICE e a verso deste trabalho possui o bot Miracle. No desejando nenhuma delas, a tabela aiml dever ser apagada atravs de um comando SQL truncate table e depois de inserido o novo AIML pela interface de administrador do Program-O.

Falhas do programa original


Ao instalar-se o Program-O original em um ambiente executando o Xdebug, algumas falhas e avisos so expostos no browser do usurio. O Xdebug um programa que faz o mapeamento de erros do PHP, tambm dando algumas dicas sobre a m utilizao de funes e variveis. interessante san-las antes de publicar-se o site. Aqui se faz estas correes. Tais falhas j foram corrigidas no rob Miracle. Ao iniciar-se o Program-O ele apresenta uma falha na inicializao de sesso. Esta falha consiste em iniciar uma sesso com uma j iniciada por outro processo. Para sanar este erro, basta utilizar-se do curinga supressor de erro @ no incio da linha apresentadora da falha. Existem outras maneiras mais elegantes de san-la, utilizando um bloco if, por exemplo, no havendo necessidade neste caso, pois este erro no provoca nenhum efeito colateral no funcionamento do programa, alm de prejudicar sua estrutura. Este erro especfico ocorre no arquivo bot/response_handler.php na linha 2, devendo ficar da seguinte maneira:
@session_start();

Outra falha acontece ao se executar a interface do administrador. Ao execut-la, ele faz a leitura de uma varivel que no existe, e este gera um aviso do Xdebug, acabando com a formatao do site, para san-lo, basta inicializar a varivel com um valor nulo. Ento no arquivo admin/pages/inc/header_nav_class.php basta inicializar a varivel $bclass com na linha 14 assim: Jefferson Mendes Silva Pgina 71 de 89

Processamento de Dados
$bclass = ;

Funcionamento do Programa-O Inicializao


O Programa-O vem com um arquivo inicial chamado de index.php, este inicializando o nosso rob. Esse arquivo nada mais que um arquivo html padro incluindo o arquivo bot/chat.php, e ecoa o valor da string $res, sendo esta a interface de dilogo, um pulo de linha (<br/>) e a entrada do usurio e a $formchat, esta contendo o formulrio principal do chatterbot. Este arquivo pode ter seu nome alterado sem nenhuma consequncia. Alm destes, foi inclusa uma varivel $figura, com a funo de mostrar-se a face de nosso rob. Qualquer arquivo ou pgina pode conter invocar este arquivo e, por conseguinte, exibir estes formulrios, com o cuidado de no haver conflito de variveis e de funes. H tambm a possibilidade de incluir-se um Iframe e apont-lo para a pgina principal do rob, diminuindo assim o problema de conflito.

Alterar o formulrio do chatterbot


O programa-o original possui seu formulrio em ingls, visando traduo do programa para portugus, este deve ser modificado. Basta ento abrir o arquivo bot/response_handler.php e editar-se a funo formchat() a partir da linha 550. O rob Miracle j se encontra em portugus. Outras modificaes tambm foram feitas, mas sero explicadas mais adiante.

Alterar a interface de dilogo


Assim como no rob Miracle, possvel alterar tambm a interface de dilogo do rob. Este foi modificado em alguns trechos nas linhas 135 e 136 do arquivo bot/chat.php.

Jefferson Mendes Silva

Pgina 72 de 89

Processamento de Dados

Descrio dos arquivos principais


Foi descrito acima as funes dos arquivos config.php, tanto no bot como no administrador. Outros arquivos essenciais tambm sero explicados. A maioria destes esto contidas no diretrio bot/.

Bot/chat.php
Este arquivo o inicializador do bot. Ele invoca todo o processamento do chatterbot e tambm responsvel por faz-lo visvel ao usurio. Como o PHP um programa voltil, no ficando residente na memria do servidor, todas suas variveis so destrudas logo aps a pgina ser totalmente carregada. Ento, para passarem-se os valores de suas variveis de uma pgina para outra, podem ser utilizadas das variveis de sesso ou de passagem, atravs dos mtodos POST, GET ou SESSION. Todas as variveis de conversao do rob so passadas por um vetor multidimensional indexado por string denominado de response_Array. Este vetor passado a cada novo envio de dados ao rob e novo recarregamento de pgina atravs do mtodo POST. Este arquivo tambm possui a interface de dilogo a ser exibida no site. No final do arquivo, contm algumas instrues exibidoras de contedo das variveis de conversao do rob, caso estas sejam descomentadas.

Bot/response_handler.php
Este arquivo responsvel para tratar a entrada do usurio, processar e entregar a resposta ao arquivo chat.php. Ele formata a entrada do usurio, chama as funes de tratamento de tags AIML e consulta o banco de dados para localiz-las. Tambm expe o formulrio de resposta do bot.

Bot/check_aiml_part.php
Este arquivo o responsvel por verificar todas as tags inseridas no aiml e mandar execut-las caso encontre alguma correspondncia com as programadas.

Jefferson Mendes Silva

Pgina 73 de 89

Processamento de Dados Caso deseja-se inserir novas tags no rob, esta deve ser inclusa neste arquivo antes de ser programada no arquivo chamador.

Bot/tag_functions.php
Aps as tags serem identificadas, estas devero possuir funes para que as mesmas sejam executadas. Neste arquivo est a maioria destas funes. A inicializao da funo e trmino so muito parecidos e podem at ser copiadas, alterando-se poucas palavras para fazer-se novas tags.

Bot/getsetvars.php
Existem tambm as variveis globais do AIML set e get, sendo estas gerenciadas por este arquivo. Outras funes essenciais tambm so definidas neste arquivo, como gnero e star.

Bot/debugging.php
Este arquivo responsvel pelo controle de erro do bot. Todos os erros podem ser ecoados ou omitidos na sua execuo atravs deste arquivo. Para tanto basta comentar-se e descomentar-se as linhas 14 e 15 para obter o efeito desejado.

Modificaes no programa
Os arquivos acima descritos precisaram ser modificados para que a Miracle pudesse realizar as funes desejadas. Neste captulo estas sero demostradas e comentadas.

A tag system
A tag system original serve apenas para efetuar clculos matemticos simples e retornar seu resultado ao usurio. Como foi necessrio fazer os modelos executarem funes do php, sendo esta a utilidade padro desta funo no padro AIML, esta foi reprogramada no arquivo tag_functions.php. Utilizando-se a tag <system>, executar quase qualquer funo php sem a necessidade de utilizarem-se as tags de incio e trmino padro (<?php e ?>).

Jefferson Mendes Silva

Pgina 74 de 89

Processamento de Dados Esta faz a separao de todos os comandos e executa-os individualmente atravs de vrios comandos eval. Como os comandos precisam necessariamente ser inclusos no banco de dados pelo botmaster antes de serem executados, dificulta-se o a trabalho de usurios mal intencionados. Uma observao deve ser feita a trabalhar-se utilizando orientao a objetos ou ao utilizarem-se classes. Para referir-se a mtodos ou propriedades de um objeto instanciado no PHP, no sendo este esttico, utiliza-se o operador ->. O grande problema a interpretao pelo Program-O para orientao a objetos. Ao inserir-se o operador de objetos ->, ocorrer uma grande falha no programa, pois ele trata o sinal de maior como fechamento de tag. Para contorna-lo, utilize ao invs deste operador o operador -:, onde os dois-pontos sero substitudos pelo sinal de maior ao executar-se a tag system. A classe autenticar, responsvel por cadastrar e autenticar usurios foi propositalmente programada desta maneira para servir de exemplo. O mesmo ocorre com o operador de ndice de vetores =>, o mesmo deve tambm ser substitudo por =:.

Manipulando as respostas pela tag system


Para manipularem-se as respostas da tag system, ser necessrio saber previamente a utilidade do resultado. Caso deseja utilizar-se na resposta do rob, como parte da tag template, dever ser utilizado o comando return. O motivo de utilizar-se return deve-se ao fato do comando eval ser uma funo, e este valor s ser retornado funo chamadora aps a execuo deste comando. Contudo, se a necessidade for de utilizar-se o resultado para fora do formulrio de resposta do rob, como utilizar-se de javascript ou outros recursos, como digitar-se um texto na pgina, utilize-se do comando echo no seu lugar. Ecoando outros valores far com que o texto seja digitado antes da interface de dilogo do rob.

Jefferson Mendes Silva

Pgina 75 de 89

Processamento de Dados No utilizando nenhum destes dois comandos, o contedo da tag system ser executado, mas nada ser escrito nem no vdeo e nem no formulrio de resposta do rob.

A tag solve
interessante manter o funcionamento da tag system original, pois o usurio pode simplesmente perguntar ao bot quanto dois mais dois?, para solucionar este problema, foi criada uma nova tag solve, realizando esta funo. A mesma suporta resolver equaes aritmticas de adio, subtrao, multiplicao e diviso com suporte a parnteses, tambm transforma o texto das operaes em sinais. Como os nmeros podem ser escritos por extenso, os mesmos sero substitudos antes. No ser dada tanta nfase para efetuar operaes complexas ou para acertar sempre neste momento, pois o foco do programa a conversao. Caso o rob no conseguir responder a esta pergunta, ela utilizar de uma resposta padro. Esta tag ainda ser amadurecida para apresentar cem por cento de acerto e mais funes.

Limpeza dos padres


O programa original efetua a limpeza dos padres antes que estes sejam processados pelo aiml. Isto significa que alguns caracteres podem ser omitidos ou substitudos por outros. O mesmo acontece com algumas palavras. Os caracteres a serem limpos esto no arquivo response_handler.php, onde o mesmo apresenta vrias palavras e sequencias de caracteres a serem substitudos. Estes so feitos na sua maioria por dois comandos: o str_replace e o preg_replace. O primeiro procura uma sequencia de caracteres em uma string e a substitui pelo valor inserido no comando. O segundo procura por um padro de expresso regular e a substitui, na maioria dos casos as excluindo. Uma expresso regular serve para se localizar vrios caracteres de uma s vez, como alfabticos e numricos, por exemplo.

Jefferson Mendes Silva

Pgina 76 de 89

Processamento de Dados Todo o padro inserido pelo usurio do rob transferido para a varivel $tmp neste comando e em seguida so feitas as substituies. Caso deseje alter-las, basta modificar, excluir ou incluir novas linhas, utilizando a funo apropriada e as substituies desejadas.

As alteraes para a autenticao atravs do AIML


Alm da criao da classe para autenticaes e de bookmarks, outras alteraes no programa fonte do rob tambm foram necessrias torna-lo possvel. Aqui sero expostas estas alteraes.

Alteraes na tag system


A tag system foi previamente alterada para que os modelos executassem PHP, alm disso, ela tambm deve poder procurar as classes necessrias e outras funes essenciais. Para tanto necessria declarar, nesta funo, a incluso do arquivo onde estas funes residem atravs da diretiva include. Recomenda-se incluir apenas um arquivo include, sendo que estes tambm incluam outros diversos arquivos a serem carregados.

Alteraes

no

manipulador

de

dilogo

no

formulrio do rob
Ao implantar-se a autenticao, notaram-se trs problemas: 1. Mesmo aps definir o nome do usurio, o campo do dilogo continuava mostrando o nome do usurio voc; 2. Ao inserir-se qualquer senha, durante sua digitao, a mesma era mostrada no campo de texto do formulrio, possibilitando de outras pessoas a verem. 3. Aps digitar esta senha, a mesma mostrada integralmente na parte de dilogo do usurio. Estes problemas foram solucionados como se segue: Jefferson Mendes Silva Pgina 77 de 89

Processamento de Dados 1. Quanto ao problema nmero um, bastou-se atribuir uma varivel com o nome do usurio, definida como $nomeusuario com o valor padro de Voc. Tambm foi definida uma varivel de sesso nome de usurio, se esta for modificada modificar tambm o nome do usurio mostrado no dilogo. 2. J no segundo problema, o formulrio de conversao do rob no programa original, est definido estaticamente como um tipo de caixa de texto. Para tanto, basta-se modificar o tipo de um input para type=$tipotexto, por exemplo. Tambm foi definida uma varivel de sesso denominada tipotexto que a altera e mantm o estado da varivel $tipotexto. Mudando o valor da varivel para password, o problema est resolvido. 3. O terceiro problema foi o mais difcil de solucionar, pois no se sabia de onde vinham os valores expostos na sada do usurio por falta de documentao. Analisando as variveis, notou-se que a maioria das variveis do rob eram passadas atravs de mas um alm e vetor deste, vrios multidimensional h outro vetor outros valores denominado fora deste de $response_array, multidimensional vetor,

$_POST[response_array]

apresentando ligeira diferena quanto aos seus ndices. Percebeu-se ento, a existncia de um vetor input, responsvel por armazenar as entradas de texto pura do usurio, sem qualquer tipo de tratamento. Alterando o seu valor para ***** atravs da tag system, o mesmo esconde a senha digitada do usurio. Esta descoberta tambm abre diversas possibilidades de alteraes futuras conforme novas necessidades. Para alterar-se qualquer uma destas variveis, basta utilizar a tag system, atribuindo o valor desejado respectiva varivel. O valor desta varivel s ser ecoado na resposta caso seja incluso um comando return.

O banco de dados do chatterbot


Como toda aplicao web sofisticada, o programa-o possui um banco de dados relacional.

Jefferson Mendes Silva

Pgina 78 de 89

Processamento de Dados Contudo, este banco de dados no est normalizado, principalmente na tabela de aiml, pois possibilita a insero de dois ou mais modelos exatamente iguais, por possuir na mesma linha tanto o padro como o modelo, no satisfazendo nem mesmo a primeira forma normal. Por este motivo, as demais formas nem mesmo sero analisadas e expostas neste trabalho. Este acontecimento infelizmente comum de ser encontrado em aplicaes web, pois uma grande maioria de programadores ou no possuem o conhecimento tcnico necessrio para aperfeioar-se um banco de dados ou nem sequer se preocupam com ele. Alm do mais, no foi utilizada chave estrangeira em nenhuma das tabelas originais do programa-o, o que facilitaria em muito o impedimento da repetio de valores e aceleraria em muito o seu desempenho. Uma aplicao til seria utilizar-se a tag srai como um localizador de chaves estrangeiras. Caso queira-se alterar todos os padres que apontam para uma mesma sintaxe de modelo, bastaria alterar-se um nico. Por conseguinte, Elisabeth Pearrau fez o programa da maneira mais simples possvel, possibilitando no especialistas a modificarem seu programa fonte e seu aprimoramento. Alm do mais, caso fosse necessrio alterar-se alguma categoria se a mesma fosse normalizada, haveria dificuldades, ainda mais se duas categorias tivessem modelos iguais e posteriormente houvesse a necessidade de diferencilas. A leitura das mesmas tambm seria trabalhosa.

Falsa normalizao atravs de recurso


A falha de normalizao acima pode ser minimizada atravs da tag srai. Como dito na parte tcnica da linguagem aiml, usando-se da deteco de palavras-chave. Definem-se ento vrias categorias contendo padres de referncia, utilizando-se de palavras-chave, fazendo estes a funo de tabela normalizadora. Ento se declaram vrias outras categorias, apontando para estes padres de referncia fazendo esta falsa normalizao.

Jefferson Mendes Silva

Pgina 79 de 89

Processamento de Dados Este procedimento pode aumentar a quantidade de linhas no banco de dados ao invs de diminuir, mas faz a funo de facilitar a manuteno. Uma das aplicaes desta normalizao foi feita no rob Miracle atravs da palavra chave OQUEE. Assim sendo, as frases o que , o que significa, o que pode ser, qual o significado, entre outras, pontam para a categoria OQUEE, normalizando, assim, parte da procura. Uma frase programada com OQUEE chatterbot pode responder vrias outras perguntas similares.

Correo gramatical
A correo gramatical pode ser efetuada tanto atravs da tag srai como automaticamente pelo programa. Automaticamente menos trabalhoso e mais eficiente, para tanto, basta incluir ou modificar as linhas na tabela spellcheck. Os dados desta tabela sero modificados exatamente na maneira que forem inseridas, ou seja, ao colocar-se o pronome tu para substituir para voc, ao usurio digitar Tatuap, o bot entender Tavoceap, pela falta dos espaos no incio ou o final da palavra, evitar ao mximo utilizar lexemas sem os devidos espaos! Este problema minimizado pela utilizao da tag srai, mas a mesma aumentar, em muito, a quantidade de categorias da programao do rob.

Insero automtica de categorias durante a instalao


Para facilitar a instalao do rob em um novo ambiente, o mesmo deve conter todas as suas categorias em um arquivo SQL. Um arquivo SQL contm todos os comandos SQL separados pelo delimitador ;, possibilitando assim executar vrios comandos atravs de um nico arquivo. Para fazer com que este seja compatvel na hora da instalao do rob, deve-se pegar uma verso j operacional e instalada do contedo do banco de dados relacionado aos arquivos AIML.

Jefferson Mendes Silva

Pgina 80 de 89

Processamento de Dados Assim sendo, podem ser utilizadas diversas ferramentas para a extrao de seu contedo. Neste trabalho, por exemplo, foi utilizado o programa MySQL Workbench. Todo o contedo das categorias fica armazenado dentro do banco de dados selecionado para o rob na tabela aiml, sendo que esta contm o texto total da categoria, o padro e modelos aps o processamento do programa, o contedo de that e tambm o tpico. Alm disso, contm tambm o nome do arquivo no qual foram processadas as categorias. Os nicos detalhes so que este arquivo no deve possuir comentrios, deve conter um nico comando por linha e sem separao de um comando em diversas linhas. Quanto ao nome da tabela a ser inserido nos padres, insira somente o nome da tabela sem o nome do banco de dados, pois o programa se encarregar de inseri-lo no devido momento. Estes arquivos podem ser divididos em partes para facilitar a instalao do rob e sua manuteno. Todos os arquivos devem ser instalados na pasta aiml_sql. recomendvel manter-se somente os arquivos com extenso aiml nesta pasta, sem os respectivos arquivos de backup, pois o programa processar todos os arquivos desta pasta durante a instalao, sem distino da extenso ou do contedo do arquivo. Repeties ou arquivos no SQL ocasionaro uma m instalao. Caso deseje inserir dados para outras tabelas, dentro do mesmo banco de dados, pode ser utilizada a mesma pasta com arquivos SQL diferentes. Este procedimento foi utilizado para a insero da tabela de correo gramatical spellcheck. Caso deseje criar outras tabelas ou efetuar operaes que no sejam para a insero de dados, dever ser editado o arquivo install_programo.php e inserido o seu contedo conforme o exemplo das outras tabelas inseridas no arquivo. Este processo um pouco mais trabalhoso, mas possibilita uma maior segurana e maior robustez na instalao. O processo descrito foi efetuado com as tabelas do cadastro de usurios (book_users) e de links (book_links).

Jefferson Mendes Silva

Pgina 81 de 89

Processamento de Dados

Arquivos AIML
Na parte de XML, foi demonstrado que todos os arquivos XML devem conter um cabealho contendo o tipo do esquema utilizado e sua codificao de caracteres. A codificao de caracteres extremamente importante por tratar-se de dizer ao programa-o como proceder quanto aos acentos e caracteres especiais. Uma orientao de codificao errada pode, com toda a certeza, arruinar completamente um chatterbot, pelo mesmo no reconhecer o que o usurio digita ou que o mesmo observe uma resposta estranha. Para tanto, ao utilizarem-se editores de texto como o Notepad++, que talvez um dos melhores para esta finalidade, imprescindvel salvar o arquivo com a codificao UTF-8, correspondente ao formato UNICODE. Quanto ao conjunto de caracteres, pode-se utilizar qualquer um, pois o SGBD MySQL se encarregar de convert-lo para o formato correto, sendo este o formato Europeu ISO 8859-1. Ao criarem-se as categorias, no utilize acentos nos padres, pois caso o usurio no os utilizar ao formular-se a entrada, o mesmo no ser encontrado. Removendo-se os acentos atravs das substituies na entrada de dados, satisfazem-se as duas situaes. Como os modelos sero apenas ecoados no vdeo para o usurio, dentro da interface de dilogo do rob na esmagadora maioria dos casos, os acentos preferencialmente devem ser utilizados.

Jefferson Mendes Silva

Pgina 82 de 89

Processamento de Dados

CONCLUSO
Foram estudadas e testadas todas as possibilidades sobre como fazer um chatterbot exercer funes alm de apenas conversar com um usurio. Foi concludo que esta tarefa perfeitamente possvel atualmente com os recursos e programas j disponveis, necessitando apenas de uma bela preparao e planejamento, e tambm de algum esforo e empenho. A linguagem AIML perfeita para esta unio de funes, por possibilitar a chamada de rotinas atravs da tag <system> executando as funes desejadas. O exemplo utilizado nesse trabalho realiza a simples tarefa de cadastrarem-se usurios, guardarem-se bookmarks, abri-los para o usurio e tambm responder perguntas de pesquisa atravs da Wikipdia. O programa-o da maneira que foi concebido no possibilitaria a realizao destas funes, sendo necessrio modifica-lo drasticamente em algumas partes, e tambm de adapta-lo lngua portuguesa. O mesmo ainda possui algumas falhas a serem sanadas, por exemplo, ao se inserir a senha, a mesma no aparece para o usurio, mas aparece quando o administrador pede para ver o log da ltima conversa. Alm do mais, seria necessria uma reviso em todos os quesitos de segurana da informao, pois o mesmo ainda no foi devidamente testado. Quanto ao modelo textual da Miracle, este tambm precisa ser aprimorado, tanto para corrigir eventuais falhas do programa como para incrementar a sua capacidade de conversao. Esta talvez seja a tarefa mais trabalhosa, por demandar um maior tempo e uma sucesso de testes. O publicar-se na web uma verso deste programa, ficou muito mais fcil identificarem-se as falhas ou ausncias de categorias, pelo motivo de a lngua portuguesa permitir uma vasta flexibilidade de uso da linguagem e tambm de cada usurio possuir diferente nvel de cultura, idade e ideologias.

Jefferson Mendes Silva

Pgina 83 de 89

Processamento de Dados Foi indefinido tambm o tema principal e a personalidade do rob, deixando-a para os futuros programadores. A maior preocupao deste trabalho no foi de fazer-se um rob que conversasse por horas com um usurio, mas sim abrir caminho para que outros o faam e que possuam ferramentas para utilizar algo alm do simples conversar. Seria muito interessante fazer um programa novo utilizando completamente orientao a objetos, pois o Programa-O original no , possibilitando assim uma integrao muito maior com gerenciadores de contedo e outros programas j existentes, como o Joomla e o Wordpress, por exemplo. As definies tericas sobre os outros assuntos foram apenas superficiais, mas j podem expor aos leitores sobre as preocupaes ao se projetar um rob.

Jefferson Mendes Silva

Pgina 84 de 89

Processamento de Dados

REFERNCIAS
1. WALLACE, Dr Richard S. - The Elements of AIML Style 28 de maro de 2003 PDF em ingls; 2. SILVA, Jeferson Lus da - Chatterbots Simuladores de Dilogo 2 reviso Bookess Editora Impresso e em PDF-; 3. RUSSEL, Stuart e Peter Norvig - Inteligncia Artificial Traduo da Segunda Edio Editora Campus 2004; 4. WELLING, Luke & Thompson, Laura - PHP & MySQL Desenvolvimento Web Traduo da Terceira Edio Luke Welling & Laura Thomson Editora Campus 2005 Impresso e PDF em ingls; 5. WALLACE, Dr Richard S. - AIML 1.0 Tag Sets Disponvel em: www.alicebot.org/committees/architecture/resolutions/aiml10.html/ - HTML em ingls; 6. WALLACE, Dr Richard S. - AIML 1.0.1 tag set Disponvel em: http://www.alicebot.org/documentation/aiml101.html - HTML em ingls; 7. PLANTEK, Peter M. & Ray Kurzwell- Virtual Humans: A Build-It-Yourself Kit, Complete with Software and Step-by-Step Instructions Editora Amacon Impresso em ingls; 8. SESHAGIRI, Anupama Basic AIML User Manual - Disponvel em: http://pt.scribd.com/doc/46003752/Anupama-AIML-User-Manual - PDF em ingls; 9. CONVERSE, Tim & Joyce Park & Clark Morgan PHP5 and MySQL Bible and Wiley Publishing Abril 2004 PDF em ingls e impresso em portugus; 10. Manual do PHP Disponvel em www.php.net/download-docs.php/ em ingls e portugus;

Jefferson Mendes Silva

Pgina 85 de 89

Processamento de Dados 11.PITTS-MOULTIS Natanya & Cheryl Kirk - XML Black Book The Coriolis Group 11 de janeiro de 1998 CD-ROM HTML em ingls; 12. XML Tutorial Disponvel em http://www.w3schools.com/xml/default.asp com respectivos links de roteiro HTML em ingls; 13. Descrio de cookies persistentes e por seo no Internet Explorer Disponvel em: http://support.microsoft.com/kb/223799/PT em portugus.

Jefferson Mendes Silva

Pgina 86 de 89

Processamento de Dados

PROGRAMAS UTILIZADOS
Easy-PHP 5.3.5.0 Servidor Web Apache, SGBD MySQL, Interpretador PHP integrados - Disponvel em www.easyphp.org/; MySQL Workbench 5.2 CE Ferramenta de administrao, modelagem e query de Banco de dados MySQL Disponvel em http://wb.mysql.com/; Aptana Studio 3 IDE para desenvolvimento PHP Disponvel em

www.aptana.com/studio/; Notepad++ - Editor de textos utilizado para programao em diversas linguagens Disponvel em notepad-plus-plus.org/; Program-O um interpretador de linguagem AIML para PHP e MySQL Disponvel em http://www.program-o.com/; Simple AIML Editor um editor de arquivos AIML, simples, mas muito til Disponvel em http://riotsw.com/sae.html.

Jefferson Mendes Silva

Pgina 87 de 89

Processamento de Dados

ANEXOS
AIML TAG REFERENCE TABLE
AIML 0.9 <alice> <name/> (see Note 2.) <justbeforethat/> <that/> <that> <category> <justthat/> <beforethat/> <condition name="X" value="Y"> <condition> <gender> <date/> <get_ip/> <getname/> <getsize/> <star/> <thatstar/> <gettopic/> <topicstar/> <getversion/> <get_xxx/> <gossip> <load filename="X"/> <li name="X" value="Y"> <li value="Y"> <li> <pattern> <person/> <person2> <person2/> <person> <random> <setname> <settopic> <set_XXX> <sr/> AIML 0.9 <srai> AIML 1.0 <aiml> <bot name="name"/> <bot name="XXX"/> <that index="2,1"/> <that index="nx,ny"/> <that> <category> <input index="2"/> <input index="3"/> <condition name="X" value="Y"> <condition> <gender> <date/> <id/> <get name="xxx"/> <size/> <star index="n"/> <thatstar index="n"/> <get name="topic"/> <topicstar index="n"/> <version/> <get name="xxx"/> <gossip src="X"/> <learn>X</learn> <li name="X" value="Y"> <li value="Y"> <li> <pattern> <person/> <person2> <person2/> <person> <random> <set name="name"> <set name="topic"> <set name="XXX"> <sr/> AIML 1.0 <srai> Tag Type AIML block delimeter Built-in bot parameter Custom bot parameter Built-in predicate Built-in predicate AIML that pattern AIML category Built-in predicate Built-in predicate Conditional branch Conditional branch Gender substitution Built-in predicate Built-in predicate Built-in predicate Built-in predicate Built-in predicate Built-in predicate Built-in predicate Built-in predicate Built-in predicate Custom predicate Append to file AIML loading Conditional branch item Conditional branch item General list item AIML Pattern Prounoun transform macro Prounoun transform Prounoun transform macro Prounoun transform Random selection Built-in predicate Built-in predicate Custom predicate Recursion macro Tag Type Recursion used by <condition> used by <condition name="X"> used by <random>, <condition> contains AIML pattern <person><get_star/></person> swap 1st & 2nd person <person2><get_star/></person2> swap 1st & 3rd person Random uniform selection returns contents returns contents See Note 3. <srai><get_star/></srai> Note Exchange "he" and "she" date and time default "localhost" default "X-person" # of categories loaded binding of * binding of * in that default "you" binding of * in topic AIML program version Botmaster defined XXX, default (3) Note [Closing tags not shown] may appear in pattern <srai>BOT XXX</srai> See Note 4. default "that" contains AIML pattern

Jefferson Mendes Silva

Pgina 88 de 89

Processamento de Dados
<system> <template> <think> <topic name="X"> <system> <template> <think> <topic name="X"> <uppercase> <lowercase> <sentence> <formal> <if name="X" value=Y"> <else> <javascript> Execute OS shell AIML template Nullify output AIML topic group Text manipulation Text manipulation Text manipulation Text manipulation Conditional branch Conditional branch AIMLScript Javascript X is AIML pattern convert all text to Uppercase convert all text to Lowercase capitalize the first word capitalize every word platform-dependent

Fonte: 4 - AIML 1.0 Tag Sets

Jefferson Mendes Silva

Pgina 89 de 89