<<

INSTITUTO FEDERAL DO PARANÁ CAMPUS PINHAIS CURSO TÉCNICO EM INFORMÁTICA INTEGRADO AO ENSINO MÉDIO

ACHILLES MACARINI NETO ISADORA BOTASSARI DE SOUZA MILENA MENDES FRANCISCO VÍCTOR TRUCOLO RIBEIRO

SINOP. - UM MECANISMO DE PESQUISA DE UTILIZANDO LINGUAGEM NATURAL

PINHAIS 2019 I

ACHILLES MACARINI NETO ISADORA BOTASSARI DE SOUZA MILENA MENDES FRANCISCO VÍCTOR TRUCOLO RIBEIRO

SINOP.ANIME - UM MECANISMO DE PESQUISA DE ANIMES UTILIZANDO LINGUAGEM NATURAL

Trabalho apresentado ao Curso Técnico em Informática do Campus Pinhais, do Instituto Federal do Paraná, como requisito parcial para aprovação nos componentes curriculares Trabalho de Conclusão de Curso e Metodologia Científica.

Professor Responsável: Prof. Me. Eduardo Tieppo.

PINHAIS 2019

II

RESUMO

Em razão da fácil e veloz comunicação entre pessoas e culturas, é comum termos acesso aos meios de entretenimento de diferentes lugares do mundo. Com essa situação, aliada ao desenvolvimento de jogos, um tipo de entretenimento asiático que se consagrou famoso entre vários públicos (e permanece nesse processo) são os animes, cujo conceito genérico se refere a produções de animação japonesas. No universo dos animes, tal como em filmes e séries, há uma grande variedade de gêneros (aventura, ação, ficção científica, esportes, fantasia, romance, etc.), autores e de títulos. Portanto, comum é a situação em que um interessado não se lembra do nome de um anime assistido já há algum tempo, ou então, apenas poucos detalhes são recordados. A menos que um dado seja importante ou uma constante no cotidiano de alguém, uma informação como um nome de um anime desconhecido dificilmente permanecerá na memória de longo prazo do indivíduo. Com base neste problema, foi desenvolvido o projeto “Sinop.Anime”, um aplicativo de pesquisa no qual o usuário busca por alguma informação ou descreve um elemento da obra aleatório, do qual possui lembranças. A pesquisa emprega as abordagens de processamento de linguagem natural (NLP) e machine learning, formando um sistema capaz de tratar a linguagem natural fornecida pelos usuários, aprender e aprimorar-se com diversas buscas. Assim, a aplicação rapidamente retorna uma lista de animes, cuja descrição tem relação com a informação digitada. Sua função específica pode economizar horas e paciência de muitos usuários, porque não será necessário que ele saiba os termos avançados sobre a obra que quer encontrar, ou de pesquisa em geral. Com um aplicativo capaz de assimilar descrições simplórias de obras, o processo de identificar animes interessantes para o usuário torna-se muito mais simples, podendo também conduzi-lo a novos conhecimentos. Outro meio de utilizar o aplicativo Sinop.Anime seria não somente como ferramenta para encontrar um anime específico, mas também para descobrir obras com teores semelhantes, uma vez que as assimilações feitas de acordo com a entrada de dados do usuário podem conduzi-lo a novas obras, intencionalmente ou por coincidências.

Palavras-chave: Anime, Processamento de Linguagem Natural, machine learning, Pesquisa, Problema, Usuário, Aplicativo.

III

ABSTRACT

Due to evolution and globalization of the communication media, accessing foreign entertainment has become an easy task. This situation, allied to videogame development, promoted a certain element of the Asian culture worldwide anime (short for “animation”). In , its generic concept refers to any Japanese animation work. Within the universe of anime, as in movies and series, there is a plethora of genres (adventure, action, science fiction, sports, fantasy, romance, etc.), authors and titles. Therefore, it’s not unusual for a person to watch a show and then, later, forget its name or remember no more than a few details. Unless someone is interested or has recurring contact with any kind of data, information such as an unknown anime’s name will hardly remain in the individual's long-term memory. Based on this problem, we developed the "Sinop.Anime" project, a search engine in which the user provides some general information or describes a random story element, according to their memory. The search employs natural language processing and machine learning approaches, creating a system capable of dealing with natural language data given by the users, learning and improving itself with a large amount of searches. Thus, the system returns an anime list, whose characteristics (like plot, characters or aesthetics) are related to the typed information. This specific function can save time for many users, seeing that they won’t need to know advanced or exact terms about the work they want to find, or then, rely on imprecise searching methods. With an application able to assimilate simple descriptions of works, the process of identifying interesting anime becomes much simpler for anyone, and can also lead to new findings. Another way to use the Sinop.Anime application would be not only as a tool to find a specific anime, but also to discover works with similar content, since assimilations according to the user's data entry can lead to new works, intentionally or by chance.

Keywords: Anime, Natural Language Processing, Machine learning, Search, Problem, User, App

IV

LISTA DE CÓDIGOS

Código 1 - Relatório (SP: Animes_de_uma_tag)...... 37 Código 2 - Exemplo de utilização do arquivo ws_read_pesquisa_anime_tag...... 40 Código 3 - Exemplo de utilização do Web Service...... 41 Código 4 - selectAllFromAnime...... 52 Código 5 - insertIntoUsuarios...... 52 Código 6 - diogenes...... 56

Código: Apêndice E 1 - removeDangerWords...... 112 Código: Apêndice E 2 - makeAnimeArray...... 113 Código: Apêndice E 3 - minusUpdater...... 115 Código: Apêndice E 4 - finish...... 116

V

LISTA DE FIGURAS

Figura 1 - Omocha Bako Series Dai 3 Wa: Ehon 1936-hen, propaganda em animação durante a era imperial, em 1936...... 11 Figura 2 - Primeira animação seriada de Astro Boy (Mushi Productions, 1963)...... 12 Figura 3 - Artigo da revista Veja, 1994, comentando a importância da série Os Cavaleiros do Zodíaco para a revitalização da emissora Rede Manchete...... 13 Figura 4 - Edição especial do refrigerante Guaraná Antarctica com o tema de Pokémon, lançada pela primeira vez em 2000...... 14 Figura 5 - Primeira edição do mangá de Cavaleiros do Zodíaco, tiragem de 2000, pela Conrad...... 15 Figura 6 - Representação da Gramática da Estrutura Frasal...... 19 Figura 7 - Cenário do sistema...... 24 Figura 8 - Diagrama da arquitetura da aplicação...... 30 Figura 9 - Captura de tela Android Studio...... 31 Figura 10 - Versões do Android...... 31 Figura 11 - Diagrama Entidade-Relacionamento...... 34 Figura 12 - Diagrama Relacional de Sinop.Anime...... 36 Figura 13 - Resultado do exemplo de utilização do Web Service...... 41 Figura 14 - Diagrama de Casos de Uso...... 43 Figura 15 - Diagrama de Classes...... 44 Figura 16 - Mecanismo de pesquisa do sistema...... 56 Figura 17 - Diagrama de telas...... 58 Figura 18 - Função login...... 59 Figura 19 - Função cadastro de usuários...... 59 Figura 20 - Função pesquisa...... 60 Figura 21 - Função acesso a tela de cada anime...... 61 Figura 22 - Função comentário...... 61 Figura 23 - Função menu...... 62 Figura 24 - Função alterar dados do perfil...... 63 Figura 25 - Função lista de animes...... 64 Figura 26 - Função configurar conta...... 64 Figura 27 - Função configurar linguagem...... 65 Figura 28 - Configurar tema...... 66 Figura 29 - Função ajuda...... 66 Figura 30 - Função acessar notícias...... 67

Figura: Apêndice D 1 - Tela 1: LoginActivity...... 94 Figura: Apêndice D 2 - Tela 2: CadastroActivity...... 95 Figura: Apêndice D 3 - Tela 3: InicioActivity...... 96 Figura: Apêndice D 4 - Tela 4: ResultadoActivity...... 97 Figura: Apêndice D 5 - Tela 5: AnimeActivity...... 98 Figura: Apêndice D 6 - Tela 6.1: MenuDrawer - Usuário comum...... 99

VI

Figura: Apêndice D 7 - Tela 6.2: MenuDrawer - Usuário Moderador...... 100 Figura: Apêndice D 8 - Tela 7: PerfilActivity...... 101 Figura: Apêndice D 9 - Tela 8: Tela de Alterações de informações...... 102 Figura: Apêndice D 10 - Tela 9: ListaAnimesActivity...... 103 Figura: Apêndice D 11 - Tela 10: ConfiguracaoActivity...... 104 Figura: Apêndice D 12 - Tela 11: NotificationSettingsActivity...... 105 Figura: Apêndice D 13 - Tela 12: LanguagesActivity...... 106 Figura: Apêndice D 14 - Tela 13: Tela de alteração de tema...... 107 Figura: Apêndice D 15 - Tela 14: HelplActivity...... 108 Figura: Apêndice D 16 - Tela 15: AccountSettingsActivity...... 109 Figura: Apêndice D 17 - Tela 16: ListaNoticiasActivity...... 110 Figura: Apêndice D 18 - Tela 17: NoticiaActivity...... 111

VII

LISTA DE TABELAS

Tabela 1 - Distribuição de funções e carga horária necessária para o desenvolvimento do projeto...... 26 Tabela 2 - Resultado (SP: Animes_de_uma_tag)...... 37

Tabela: Apêndice B 1 - Dicionário de dados (Tabela: Anime)...... 81 Tabela: Apêndice B 2 - Dicionário de dados (Tabela: Anime_Tag)...... 81 Tabela: Apêndice B 3 - Dicionário de dados (Tabela: Comentario)...... 82 Tabela: Apêndice B 4 - Dicionário de dados (Tabela: Conquista)...... 82 Tabela: Apêndice B 5 - Dicionário de dados (Tabela: Denuncia_comentario)...... 82 Tabela: Apêndice B 6 - Dicionário de dados (Tabela: Denuncia_resposta)...... 82 Tabela: Apêndice B 7 - Dicionário de dados (Tabela: Gênero)...... 83 Tabela: Apêndice B 8 - Dicionário de dados (Tabela: Genero_Anime)...... 83 Tabela: Apêndice B 9 - Dicionário de dados (Tabela: Moderador)...... 83 Tabela: Apêndice B 10 - Dicionário de dados (Tabela: Moderador_Noticia)...... 83 Tabela: Apêndice B 11 - Dicionário de dados (Tabela: Moderador_Tag)...... 84 Tabela: Apêndice B 12 - Dicionário de dados (Tabela: Notícia)...... 84 Tabela: Apêndice B 13 - Dicionário de dados (Tabela: Palavras proibidas)...... 84 Tabela: Apêndice B 14 - Dicionário de dados (Tabela: Resposta)...... 84 Tabela: Apêndice B 15 - Dicionário de dados (Tabela: Tag_Pesquisa)...... 85 Tabela: Apêndice B 16 - Dicionário de dados (Tabela: Tipo_Tag)...... 85 Tabela: Apêndice B 17 - Dicionário de dados (Tabela: Usuário)...... 85 Tabela: Apêndice B 18 - Dicionário de dados (Tabela: Usuario_Conquista)...... 86 Tabela: Apêndice B 19 - Dicionário de dados (Tabela: Usuario_Tag)...... 86 Tabela: Apêndice B 20 - Dicionário de dados (Tabela: Usuario_Testerino)...... 86

Tabela: Apêndice C 1 - Vista geral (Tabela: Anime)...... 87 Tabela: Apêndice C 2 - Vista geral (Tabela: Anime_Tag)...... 87 Tabela: Apêndice C 3 - Vista geral (Tabela: Comentario)...... 88 Tabela: Apêndice C 4 - Vista geral (Tabela: Conquista)...... 88 Tabela: Apêndice C 5 - Vista geral (Tabela: Denuncia_comentario)...... 88 Tabela: Apêndice C 6 - Vista geral (Tabela: Denuncia_resposta)...... 88 Tabela: Apêndice C 7 - Vista geral (Tabela: Gênero)...... 89 Tabela: Apêndice C 8 - Vista geral (Tabela: Gênero_Anime)...... 89 Tabela: Apêndice C 9 - Vista geral (Tabela: Moderador)...... 89 Tabela: Apêndice C 10 - Vista geral (Tabela: Moderador_Notícia)...... 90 Tabela: Apêndice C 11 - Vista geral (Tabela: Moderador_Tag)...... 90 Tabela: Apêndice C 12 - Vista geral (Tabela: Notícia)...... 90 Tabela: Apêndice C 13 - Vista geral (Tabela: Palavras_proibidas)...... 91 Tabela: Apêndice C 14 - Vista geral (Tabela: Resposta)...... 91 Tabela: Apêndice C 15 - Vista geral (Tabela: Tag_Pesquisa)...... 91 Tabela: Apêndice C 16 - Vista geral (Tabela: Tipo_Tag)...... 91

VIII

Tabela: Apêndice C 17 - Vista geral (Tabela: Usuário)...... 92 Tabela: Apêndice C 18 - Vista geral (Tabela: Usuário)...... 92 Tabela: Apêndice C 19 - Vista geral (Tabela: Usuário_Tag)...... 92 Tabela: Apêndice C 20 - Vista geral (Tabela: Usuário_testerino)...... 93

IX

SUMÁRIO

1. INTRODUÇÃO ...... 11 1.1 APRESENTAÇÃO DO PROBLEMA ...... 11 1.2 OBJETIVOS ...... 21 1.2.1 Objetivo geral ...... 21 1.2.2 Objetivos específicos ...... 21 2. METODOLOGIA ...... 22 2.1 CENÁRIO ...... 22 2.2 FUNCIONALIDADES ...... 24 2.3 ARQUITETURA GERAL ...... 25 2.3.1 Recursos necessários ...... 25 2.3.2 Tecnologias utilizadas ...... 26 2.3.3 Arquitetura da aplicação ...... 29 2.3.4 Requisitos para instalação e uso da aplicação ...... 30 2.4 BANCO DE DADOS ...... 31 2.4.1 Modelagem conceitual ...... 32 2.4.2 Modelagem Lógica e Física ...... 35 2.4.4 Relatórios através de visões ou procedimentos armazenados ...... 37 2.5 WEB SERVICE ...... 38 2.5.1 Descrição de função ...... 38 2.5.2 Estrutura básica ...... 38 2.5.3 Exemplo de utilização ...... 40 2.7 ESPECIFICAÇÃO ORIENTADA A OBJETOS ...... 41 2.7.1 Diagrama de Casos de Uso ...... 41 2.7.2 Diagrama de Classes ...... 43 2.7.3 Descrição Textual das Classes e seus Relacionamentos ...... 45 2.7.4 Descrição do código das telas...... 50 2.7.5 Relacionamento Android – Banco de Dados ...... 51 2.8 MECANISMO DE BUSCA DO APLICATIVO ...... 54 2.8.1 Funcionamento...... 54 2.8.2 Códigos específicos ao banco de dados ...... 56 3.RESULTADOS ...... 57

X

3.1 O APLICATIVO SINOP.ANIME ...... 57 3.1.1 Diagrama de telas ...... 57 3.1.2 Funções do aplicativo ...... 58 4.CONCLUSÃO ...... 67 4.1 LIMITAÇÕES ...... 68 4.2 APRIMORAMENTOS FUTUROS ...... 69 REFERÊNCIAS ...... 72 APÊNDICE A - LEVANTAMENTO DE REQUISITOS DA APLICAÇÃO ...... 76 APÊNDICE B - DICIONÁRIO DE DADOS ...... 81 APÊNDICE C - VISTA GERAL DAS TABELAS ...... 87 APÊNDICE D - TELAS EM DESTAQUE ...... 94 APÊNDICE E - CÓDIGOS EM JAVA REFERENTES AO MECANISMO DE PESQUISA ...... 112

11

1. INTRODUÇÃO

1.1 APRESENTAÇÃO DO PROBLEMA

Um dos elementos presentes no século XXI é a constante ascensão e evolução dos meios de comunicação, sejam eles individuais (pautados na comunicação interna, interpessoal, como a carta e telefone), sejam em massa (mais ampla e externa, como intuito de comunicar um grande número de pessoas, como a internet). A difusão de informação e a conexão entre pessoas multiplicou-se a níveis gigantescos. Como consequência, o acesso a entretenimento e produção cultural feita em outros continentes tornou-se factível e até mesmo corriqueiro. A arte da animação no Japão data do início do século XX, na década de 10. Entre este período e a era imperial japonesa (até 1945), tal atividade encontrava concorrência acirrada da emergente Disney, que possuía mais público, recursos e tecnologia disponível. Durante a Segunda Guerra Mundial, por mais que a indústria interna do Japão tenha sido incentivada e valorizada, a função da animação consistia em incorporar a propaganda militarista e nacionalista, características do regime imperial, no entretenimento infantil. Apresentava fortes mensagens indenitárias e antagonização dos “inimigos da Pátria” no contexto da Guerra; em especial, em relação aos Estados Unidos da América (simbolizado, por exemplo, pelo personagem Mickey Mouse na figura 1 abaixo).

Figura 1 - Omocha Bako Series Dai 3 Wa: Ehon 1936-hen, propaganda em animação durante a era imperial, em 1936.

Fonte: MyAnimeList (2018).

Entretanto, a partir do período pós-guerra, no contexto de reconstrução e liberdade civil, a animação retomou seus trilhos artísticos. 1948 trouxe a fundação do

12

estúdio , que persiste como nome dominante da indústria até os dias de hoje, e que idealizou várias táticas para que o anime se convertesse num produto viável. “Anime” é um termo universal que, de acordo com Luís Eduardo Azuma e Ana Akemi Ikeda (2006, p. 3), “é abreviação da palavra inglesa animation e pronuncia-se ‘animê’. É o desenho japonês exibido em formato de desenho animado”. Em 1961, nasce a , liderada por Osamu Tezuka. Este foi um dos primeiros estúdios a conseguir uma exibição nos Estados Unidos, em 1963, com o título Astro Boy, visível na figura 2. Originou-se, então, a paulatina inserção da cultura do anime no Ocidente.

Figura 2 - Primeira animação seriada de Astro Boy (Mushi Productions, 1963).

Fonte: SyFy Wire, 2017.

A nível nacional, o entretenimento nipônico começou a ganhar espaço concomitantemente aos Estados Unidos: nos anos 60. Durante a primeira leva, os desenhos vieram junto aos tokusatsu (gênero de mídia que se caracteriza, essencialmente, por ser um filme/produção seriada com uso de efeitos especiais), destacando-se National Kid (marco inicial, a primeira série japonesa no Brasil, e que foi censurada durante a Ditadura Militar por uma lei que detinha todas as séries que possuíam heróis voadores) e Ultraman (anos 70). Todavia, nesta década, essas obras ainda eram apreciadas somente por um nicho específico, não representando grande impacto para a população brasileira. Os animes eram exibidos principalmente pela Rede Record e pela extinta TV Tupi. Além dos tokusatsu, os componentes dessa primeira leva na área da animação são Eight Man, A Princesa e o Cavaleiro, Zoran, o Garoto do Espaço e Speed Racer. Não obstante o público restrito e a censura do regime, os desenhos japoneses voltariam com ainda mais força na década de 90. Em 1994, a Rede Manchete exibe o

13

primeiro episódio Os Cavaleiros do Zodíaco, que imediatamente se configura como um sucesso por todo o Brasil, como é possível ver no artigo da revista Veja de 1994, presente na figura 3. Havendo um enorme aumento nas vendas de produtos como bonecos, revistas (como a revista Herói, de 1994, publicada pela editora Conrad em parceria com a Nova Sampa) e brindes, e o desenho torna-se parte essencial de toda uma geração infanto-juvenil. Este êxito também garantiu a expansão da demanda por animes, o que incentivou a Manchete a trazer obras como Yu Yu Hakusho, Sailor Moon, Super Campeões e Shurato.

Figura 3 - Artigo da revista Veja, 1994, comentando a importância da série Os Cavaleiros do Zodíaco para a revitalização da emissora Rede Manchete.

Fonte: CavZodiaco (2018).

É possível caracterizar essa década como a primeira geração “otaku” no Brasil. “Otaku” é um termo que se popularizou após a virada do século, no entanto, é importante ressaltar a diferença entre os termos no Ocidente e no Japão. No primeiro,

14

a palavra indica meramente um fã de anime, mangá (história em quadrinhos japonesas) e outras produções culturais japonesas. Enquanto isso, no Oriente, segundo Azuma e Ikeda (2006, p. 2), o termo designa “indivíduo anti-social, que não sai de casa, fanático por um assunto específico e que utiliza esse passatempo para extravasar toda a pressão que a sociedade japonesa lhe impõe”. Em 1999, o fenômeno de Cavaleiros se repete com Pokémon, cuja série animada gera a mesma avalanche de merchandising (oficial e pirata), além de alavancar as vendas da série de jogos no país. Tamanho foi seu crescimento dentro do território nacional que se tornou propaganda de produtos, como o caso da edição especial do refrigerante Guaraná Antarctica, visível na figura 4. Este foi o último grande aumento do anime na TV aberta, que entraria em decadência após a ascensão dos canais privados (exemplos desses canais que inseriram animes na programação nesta época são: Locomotion, , Animax) e da internet.

Figura 4 - Edição especial do refrigerante Guaraná Antarctica com o tema de Pokémon, lançada pela primeira vez em 2000.

Fonte: Poltrona Nerd (2016).

Validando o nicho fã de anime definitivo no Brasil, é possível mencionar o nascimento do Anime Friends em 2003, evento voltado a esta temática que persiste anualmente até hoje, já alicerçado como o maior evento de anime da América Latina. Igualmente, o mercado de mangás brasileiro passou a se desenvolver após os anos 2000, com o lançamento dos volumes de franquias já popularizadas aqui, como Cavaleiros do Zodíaco (a capa de sua primeira edição, pela Conrad, está disponível para visualização na figura 5), Dragon Ball e Samurai X. Não foram estas as primeiras publicações de gibis japoneses no país; entretanto, as publicadas previamente

15

tratavam-se de obras clássicas e aclamadas, como Akira e Lobo Solitário, e não receberam tanto foco, promoção e atenção como os representantes da febre do anime.

Figura 5 - Primeira edição do mangá de Cavaleiros do Zodíaco, tiragem de 2000, pela Conrad.

Fonte: Mercado Livre (2018).

Desde a crescente ascensão da internet como elemento mundial, essa se consolidou como o habitat dos fãs brasileiros. Atualmente, são serviços de streaming como o e, mais recentemente, a , que dominam a reprodução deste conteúdo no Brasil. Igualmente, não há como negar que a pirataria (prática de vender ou distribuir produtos sem expressa autorização dos proprietários de uma marca/produto) também consiste em um dos principais meios de consumo, o que é um risco à integridade do computador ou smartphone (e configura crime). Os canais de comunicação entre esses fãs seguiram fielmente a já mencionada evolução global da comunicação. Redes sociais, fóruns, blogs, canais de vídeo, grupos de conversação online. Websites cruciais para a cultura otaku, como o

16

Crunchyroll e o MyAnimeList, de acordo com a revista online Digiday, registram números de mais de 45 milhões de usuários cadastrados e, segundo dados da revista Forbes, no ano de 2015 teriam 120 milhões de visitantes mensalmente em seu site, respectivamente. No universo dos animes, tal como em filmes, séries e livros, há uma grande variedade de gêneros (aventura, ação, ficção científica, esportes, fantasia, romance, etc.), autores e de títulos. Desde os anos 2000, o modelo da indústria do anime prioriza a produção sazonal em quantidades cada vez maiores. No Inverno de 2018, foram 43 títulos lançados, além de 11 que seguiam em exibição desde a temporada anterior (Primavera de 2017). E esses dados ainda se referem somente às obras exibidas na televisão japonesa; concomitantemente, por exemplo, ocorreu o lançamento de (SCIENCE SARU, 2018), criação original da Netflix e disponibilizado em streaming universal para os usuários. Desse modo, os grandes números existem tanto nos interessados quanto na indústria do anime. Levando em consideração a integração virtual e a acachapante quantidade de material, o cenário em que se pergunta “qual é esse anime?” tornou-se comum em fóruns, blogs, grupos em redes sociais e websites de pergunta e resposta. Ou seja, nos mesmos ambientes em que o público otaku “convive” e comunica-se em boa parte do tempo. A Internet pode oferecer várias listas vastas com nomes de obras relacionadas às palavras-chave tentadas pelo usuário, contudo, o procedimento pode levar muito tempo, ou até mesmo ser inviável, por não retornar resultados relacionados ao que está sendo procurado. Quando não se têm o nome do anime ou pelo menos parte dele, a busca se torna muito complicada. Além disso, muitas séries possuem nomes consideravelmente grandes, como “Ano Hi Mita Hana no Namae o Bokutachi wa Mada Shiranai” (A-1 Pictures, 2011) e “Mondaiji-tachi ga Kara Kuru So Desu yo?” (Diomedea, 2014), fator que dificulta a memorização. Finalmente, para qualquer um sem familiarização com a língua japonesa, como fãs mais moderados, recentes ou sem domínio do idioma, as palavras por si tornam-se incabíveis. Por fim, a menos que o interesse seja muito grande, uma informação como um nome de um anime desconhecido dificilmente permanecerá como lembrança de um indivíduo. Faz-se necessário citar que o cérebro possui dois modos de armazenar dados: memória de curto prazo e memória de longo prazo. Ivan Izquierdo (2004, p.23-

17

25; 2006, p. 293) afirma que: No primeiro tipo, uma informação apreendida dura cerca seis horas, que poderá ou não ser armazenada ou não como uma mais estável. É o segundo tipo que contempla informações perenes, desde costumes e regras sociais até eventos com lugar e tempo fixos. O determinante para alocar um dado na memória permanente pode ser sua relevância ou repetição, a maioria dessas memórias possuem uma carga emocional acarretada, pois de acordo com Izquierdo (2004, p. 294), os humanos têm uma tendência muito menor a esquecer memórias com alto teor emocional. Portanto, numa situação corriqueira, como entre uma conversa entre amigos, é difícil valorizar tanto um nome aleatório de uma língua estrangeira. Também convém aduzir o cenário de uma pessoa que esbarra com uma série de fotos de uma obra que lhe interessam visualmente, mas que não possuem identificação. Uma última menção vai para os casos em que um interessado não se lembra do nome de um anime assistido já há algum tempo, ou então, apenas poucos detalhes são recordados. Um resumo informal de uma obra pode dizer muito mais sobre ela do que seu nome. Tomando como exemplo, temos “Re:Zero kara Hajimeru Isekai Seikatsu” (, 2016). Traduzindo para o português, temos “Re:Zero - Começando uma Vida em Outro Mundo”. Por mais que seja possível teorizar um eixo de enredo, dificilmente é dedutível que a história apresenta um adolescente “otaku” que repentinamente surge em um mundo de fantasia marcado por uma disputa política, onde conhece pessoas misteriosas e possui a singular “habilidade” de voltar no tempo ao morrer. Em meio a tantos recursos de pesquisa encontrados para quem deseja encontrar essas obras, seja com o máximo ou mínimo de informação, o mais utilizado é a internet. Porém um grande problema nasce com isto: como se expressar tendo um conhecimento tão raso e perante a um número tão vasto de resultados? Em contrapartida, parte do problema descrito também consiste numa possível solução. O vasto número de resultados mencionado pode ser tratado como um enorme corpus. Este termo se refere a elemento linguístico que consiste em agrupados extensos de textos em uma determinada língua, coletados e escolhidos com o objetivo de estudar o idioma ou variações dentro dele. Tal prática data de épocas muito mais remotas, como o Corpus Helenístico definido por Alexandre, o Grande, ou os corpora de citações da Bíblia na Idade Média. Apenas nos anos 1950, esse método empírico de linguística sofreu decadência. Sardinha (2000) aponta duas

18

razões principais: o processo levantamento dos corpora, que era manual, exigia equipes de analistas que chegavam a contar com 5000 pessoas, e criava um procedimento sujeito a falhas e custos grandes demais; e o domínio de uma nova vertente acadêmica, linguística gerativa, que possuía teor racionalista. Ainda segundo Sardinha (2000), o advento da computação revelou-se a solução ideal para reviver o interesse na construção de corpora. De certa forma, tratou-se de uma coevolução com a área de processamento de linguagem natural, que também foi incentivada pela nova abundância de material textual disponível. Em 1964, foi criado o primeiro corpus eletrônico, o Brown, com 1 milhão de palavras. O Processamento de Linguagem Natural é uma das abordagens escolhidas para este projeto. Seu nascimento, tal como aponta Lichtig (2011), remonta ao contexto da Segunda Guerra Mundial e da posterior Guerra Fria, encaixando-se como parte do intenso desenvolvimento da computação como ferramenta de guerra. Foi um computador britânico, Colossus, o responsável pela decriptação da máquina Enigma, que criptografava mensagens entre o exército nazista. Desta forma, estudiosos propuseram que computadores totalmente dedicados à tradução seriam capazes de realizá-la de maneira mais rápida e eficiente do que equipes de humanos; havia muito otimismo em relação às possibilidades dos eletrônicos na área linguística. Vale notar que a linguística, enquanto ciência, era uma novidade na época: considera-se a publicação de Curso de Linguística Geral (1916), por Ferdinand de Saussure, como o parâmetro fundador. Este livro propõe a dicotomia “langue et parole” (do francês, “linguagem e fala”); langue se refere ao sistema linguístico enquanto conhecimento, parole se refere à prática vocálica desses sistemas. Uma é epistemológica, a outra, executiva. Um idioma, tanto em seu estado formal quanto no cotidiano (natural), existe como langue no cérebro de quem o sabe. Portanto, o segmento teórico utilizado na computação era a langue. Portanto, o processamento de linguagem natural (NLP) surge no final dos anos 40, na forma de machine translation (MT), focando na tradução de textos do russo para o inglês (JONES, 1994, p.2). Nesta época, este segmento era muito mais ligado à estatística e à linguística do que à Inteligência Artificial, como hoje ocorre. O método envolvia combinar estatísticas e regras de linguagem (específicos do idioma ou pertences à gramática geral). Em 1954, um experimento rudimentar foi exibido na IBM- Georgetown Demonstration, contando com sessenta sentenças do russo para o inglês. O consenso entre os pesquisadores era de que, em quatro anos, a evolução

19

seria notável e positiva, os erros e obstáculos seriam superados, de modo a atender as expectativas iniciais. É importante destacar que esses estudos recebiam financiamento governamental, devido ao que ofereciam ao contexto geopolítico. Entre 1957 e 1966, se deram vários eventos promissores para a NLP; a conferência de Dartmouth, na qual John McCarthy (criador da linguagem Lisp) propôs o termo “Inteligência Artificial” e promoveu um brainstorming de tópicos correlatos; a publicação de Syntatic Structures (1957) por Noam Chomsky, que desenvolveu a Gramática de Estrutura Frasal (gramática gerativa), uma modalidade de gramática capaz de converter sentenças em linguagem natural para um formato usável para máquinas, representada visualmente na figura 6; e, em 1964, a criação do ELIZA, máquina que, através de permutas dentro de sentenças e fidelidade a algumas regras gramaticais, conseguia personificar um psiquiatra com tal êxito que pacientes humanos confiaram segredos a ela (RICHTIG, 2011).

Figura 6 - Representação da Gramática da Estrutura Frasal.

Fonte: Ebah (2012).

Não obstante, em 1966, o relatório do grupo ALPAC (Automatic Language Processing Advisory Committee), fundado pelo Conselho Nacional de Pesquisa dos Estados Unidos (principal responsável pelos estudos na área) avaliou negativamente os progressos da MT até então. Mesmo após 12 anos de investimento por parte do governo, a tradução feita por computadores ainda não apresentava a mesma

20

eficiência de um tradutor humano, além de custar muito mais. Julgadas como demasiado lentas, caras e ineficientes, as pesquisas relativas ao processamento de linguagem natural sofreram cortes no financiamento, situação que desacelerou razoavelmente as investigações nesse campo. Desta forma, o processamento de linguagem natural desvinculou-se da machine translation e iniciou um processo de integração com outras áreas e objetivos. Essa nova fase, que pode ser considerada até o fim dos anos 70, foi marcada pelo uso da Inteligência Artificial e do foco em semântica. As décadas de 80 e 90 representaram uma importante mudança nas dinâmicas do NLP. Até então, observamos um processo ainda dependente de construções manuais no que se refere à gramática e semântica. Entretanto, como aponta Màrquez (2000), alguns fatores incentivaram a aliança com a área de aprendizado de máquina (machine learning), conceituada por Monard e Baranauskas (2003):

aprendizado de Máquina é uma área de IA cujo objetivo é o desenvolvimento de técnicas computacionais sobre o aprendizado bem como a construção de sistemas capazes de adquirir conhecimento de forma automática. Um sistema de aprendizado é um programa de computador que toma decisões baseado em experiências acumuladas através da solução bem-sucedida de problemas anteriores.

Ainda, vale citar a evolução das performances de hardware e software em relação a quantidades massivas de dados, tais como os expostos anteriormente. Màrquez, em seu periódico Machine Learning and Natural Language Processing (2000), salienta o drástico aumento de publicações na área da Linguística Computacional relacionadas ao tratamento de corpora. Estatísticas referentes ao documento Proceedings of the Annual Meeting of the Association for Computational Linguistics demonstram que, em 1997, os trabalhos nessa vertente compuseram 63,5% do total, comparados ao 12,8% de 1990. No mesmo periódico, Màrquez afirma que, embora a aliança entre NLP e machine learning estivesse ganhando notoriedade na época, muitas das pesquisas sobre processamento de linguagem natural, até então, encontravam-se abrangidas apenas pela Linguística Computacional. Na prática, isso significa que essa vertente estava intrinsecamente unida a um campo em que se prioriza a estatística e o conhecimento linguístico em si, e que o intercâmbio produtivo de experiências entre machine learning e NLP ainda apresentava muito o que evoluir.

21

Isto posto, verifica-se que os corpora podem cumprir o papel de material de aprendizagem para um sistema de machine learning e, com o auxílio da NLP, é possível obter um refinamento no trato desse tipo de dado. A proposta do Sinop.Anime reside em ser um aplicativo de busca capaz de assimilar descrições simplórias de obras utilizando linguagem humana (natural) e, a partir delas, retornar uma série de resultados referentes à descrição. Com isso, o processo de identificar animes interessantes para o espectador torna-se muito mais simples, podendo também conduzi-lo a novos conhecimentos. Dessa forma, o usuário poderia ter mais praticidade no cotidiano: em vez de preocupar-se com nomes específicos, o foco seria a parte importante do anime, o enredo. Para tal, exploramos o nicho da aliança entre NLP e machine learning. As pesquisas dos usuários servem tanto de dados a serem tratados e analisados com algum viés linguístico quanto de material para aprendizagem de máquina. Como não existem aplicativos específicos do tipo, o “Sinop” será de grande ajuda para todos que se interessam em conhecer um pouco mais desse elemento da cultura japonesa, que faz tanto sucesso no mundo por ser algo diferente dos demais estilos de animações, e que fez parte da infância de muitas pessoas. Sua função dedicada pode economizar horas e paciência de muitos usuários, porque não será necessário que ele saiba termos avançados sobre a obra que quer encontrar, ou de pesquisa em geral. Também constarão filtros para tornar mais fácil a pesquisa e opções de outros sites oficiais onde os episódios estão disponíveis para se assistir online (Como “Netflix”, “Crackle”, “Crunchyroll”, “Hulu” “Youtube”, “Google Play Filmes”). Outro meio de utilizar o aplicativo Sinop.Anime seria não somente como ferramenta para encontrar um anime específico, mas também para descobrir obras com teores semelhantes, uma vez que as assimilações feitas de acordo com a entrada de dados do usuário podem conduzi-lo a novas obras, intencionalmente ou por coincidências.

1.2 OBJETIVOS

1.2.1 Objetivo geral

22

Desenvolver um sistema de gerenciamento e busca de animes utilizando uma descrição em linguagem natural.

1.2.2 Objetivos específicos

Os objetivos específicos deste projeto são: a) Desenvolver um banco de dados para armazenamento dos animes e de suas tags baseadas em categorias, como cenário, personagens e sinopse curta; b) Desenvolver um meio de pesquisa através de tags dos dados dos animes, sinopses e personagens, a partir de uma pesquisa em linguagem natural; c) Desenvolver um aplicativo Android para o uso da ferramenta de pesquisa; d) Desenvolver um Web Service para requisição de informações do banco de dados e imagens.

2. METODOLOGIA

2.1 CENÁRIO

Todas as informações do cenário foram idealizadas a partir da análise de necessidades e requisitos, disponível no apêndice A deste documento, formando o esquema ilustrado na figura 7. Inicialmente, é possível realizar o login no aplicativo, com nome e senha. Caso se trate do primeiro contato com o software, o usuário poderá realizar seu cadastro de imediato, clicando no botão “Desejo me cadastrar”. Para este processo, são necessárias apenas as informações básicas de sua conta, como nome, e-mail, senha e uma foto de perfil. Com seu cadastro ou login efetivados, o cliente é redirecionado imediatamente até a tela principal do app, junto da barra de pesquisa utilizada pelo usuário para encontrar a animação desejada, que coincida com as palavras inseridas no momento da busca. Como referencial, mencionam-se as ferramentas de pesquisa do Google (busca de sites e arquivos), do Facebook (rede social que, como o Sinop.Anime, utiliza de uma funcionalidade de busca com o desígnio de ajudar os usuários a encontrar outros usuários) e Bing (ferramenta de busca de sites e arquivos, assim como o Google). Ao realizar uma pesquisa na barra, o cliente é direcionado à uma tela

23

chamada de “Resultado”, contendo uma lista de animes compatíveis com a pesquisa realizada. A partir do clique no nome de determinado anime contido nessa lista, retorna- se a página do anime com suas informações: título, sinopse, número de episódios, estúdio, etc. Outro modo de acessar essa tela de animes consiste em acionar, no menu lateral, o botão “Lista de animes”. A diferença dessa lista para a da tela “Resultado” é que são exibidos todos os animes presentes no banco de dados do aplicativo. Em seguida, ao clicar em dado título, a página específica é encontrada. No menu lateral, há o botão “Perfil”, que encaminha o usuário a uma página com suas principais informações. O botão “Notícias” também é encontrado nesse menu, ele é a via para uma listagem de notícias presentes do banco de dados, podendo acessar uma página sua com seu conteúdo. Por fim, o menu lateral possui botões voltados para as configurações do software, tais como “Sair”, que desconecta o usuário de sua conta e retorna-o para a tela inicial. Da mesma forma, ainda será moldada a opção das “Configurações”, onde estarão disponibilizadas as configurações de conta, tema e de notificações. Todas as informações do cenário foram idealizadas a partir da análise de necessidades e requisitos, disponível no apêndice A deste documento.

24

Figura 7 - Cenário do sistema.

Fonte: Os autores (2019).

2.2 FUNCIONALIDADES

O projeto possui, como objetivo e funcionalidade principal, a pesquisa de animes que o usuário do aplicativo tenha interesse em descobrir ou lembrar o nome, situação a qual já foi proposta e exemplificada como comum. Para concretizar isso, o Sinop.Anime possui uma ferramenta de busca de animes relacionada a uma lista contendo diversos animes, baseada em informações de outros sites livres e informativos, como o “MyAnimeList”, “Wikipedia” e “AniList”. Essa listagem também é disponibilizada independentemente para visualização, auxiliando, assim, o usuário a encontrar um anime que ainda não conhece para assistir. É possível que o visitante se cadastre como usuário e crie um perfil; este é o requisito para adicionar tags em cada título. Nos perfis, há itens como o nome, e-mail,

25

biografia, patente (usuário comum, moderador, administrador, etc.), conquistas e número de tags cadastradas. Cada título das listas possui uma página própria, na qual consta nome, estúdio, data de lançamento, status, diretor, sinopse, número de episódios, classificação indicativa, providenciando o mínimo de conhecimento sobre a obra. Ainda, de acordo com o anime, serão apresentados seus serviços legais de distribuição (como os já mencionados Crunchyroll, Netflix ou editoras de mangá, como a Panini e JBC). Portanto, o Sinop possui diversas funcionalidades, as quais a lista abaixo sumariza. ● Pesquisa através de tags; ● Opção de encontrar novos animes; ● Cadastro de usuários (e-mail, senha); ● Login; ● Cadastro de animes por moderadores e administradores; ● Opção de cadastro de tags pelo usuário; ● Opção de inserção de autobiografia pelo usuário; ● Patente; ● Conquistas; ● Número de tags cadastradas pelo usuário; ● Página do anime com nome, sinopse, características (gênero, faixa etária, número de episódios); ● Portal de notícias com relação aos animes.

2.3 ARQUITETURA GERAL

2.3.1 Recursos necessários

Inicialmente, os recursos humanos foram compostos pelo próprio grupo, sendo necessária a presença de quatro pessoas. Entre os integrantes foram distribuídas e empregadas as funções de programador e desenvolvedor mobile, manipulador de banco de dados, desenhista (designer), documentarista e diagramador. Os ambientes utilizados como locais de trabalho foram, em suma, o espaço da organização de apoio (IFPR - Campus Pinhais) e as próprias residências dos integrantes do grupo, com o auxílio e utilização de recursos tecnológicos, sendo

26

computadores e smartphones, e acesso à internet. Os recursos elencados são ou próprios ou pertencentes e disponibilizados sem cobrança pela instituição de ensino. Vale frisar que nenhum recurso empregado no projeto requereu investimentos financeiros destinado exclusivamente a ele. Abaixo, tabela com a distribuição de funções entre os quatro integrantes da equipe e tempo médio empregado para o desenvolvimento do projeto, adquirido através de um cálculo da carga horária das aulas utilizadas para tal fim somadas às médias de horas gastas à parte durante os três anos dedicados ao projeto.

Tabela 1 - Distribuição de funções e carga horária necessária para o desenvolvimento do projeto.

N° Integrantes Funções Carga horária empenhada necessário

Programador e desenvolvedor mobile 1 1256 horas

Manipulador de banco de dados 4 1056 horas

Desenhista (designer) 1 20 horas

Documentarista 3 1044 horas

Diagramador 2 260 horas Fonte: Os autores (2019).

2.3.2 Tecnologias utilizadas

No que concerne dispositivos físicos, foram necessários oito computadores (quatro pessoais e quatro fornecidos pela instituição), um smartphone de versão Android 7.0 para realização de testes, conexão Wi-Fi com a Internet. No tocante aos softwares, no projeto Sinop.Anime, o Android Studio foi empregado para a construção da estrutura da aplicação, formação de suas telas e lógica, atribuição de tecnologias de processamento em linguagem natural e aprendizado de máquina, além da construção da maior parte lógica e interativa da aplicação. O software MySQL Workbench, foi utilizado para o desenvolvimento e manipulação do banco de dados do projeto, consistindo na inserção de informações e criação de tabelas referentes aos animes listados no aplicativo. Outra parte do desenvolvimento consistiu na troca de informações e dados entre a aplicação e um WebService (serviço Web). Para assim poder relacionar o

27

aplicativo as informações armazenadas no banco de dados. Assim, finalizando a ligação entre a aplicação e o banco de dados, foi utilizado o WampServer, um interpretador de scripts para a simulação de um servidor local, sendo necessário, por fim, a criação de um WebService Global do aplicativo em PHP e Json. Os códigos referentes nessas linguagens foram escritos na plataforma Notepad++, focando-se na transcrição de dados e completando a interação entre os dados da internet e o aplicativo. Em relação a parte de design do aplicativo, no aspecto da criação e edição de imagens e de áudio, ou seja, constituindo toda a parte visual e sonora do software foram empregados os softwares GIMP e o Audacity. Finalizando com o site e aplicativo Documentos Google, no qual foi redigido em sua plenitude o documento escrito do projeto. Abaixo, segue descrição referente a cada um dos softwares citados.

2.3.2.1 Android Studio

O Android Studio1, é um ambiente de desenvolvimento integrado (IDE) oficial para criação e manipulação de aplicativos Android, desenvolvido pela Google e lançado em 2013. É disponibilizado gratuitamente sob a licença Apache 2.0 e está disponível para download em dispositivos Windows, Mac OS X e Linux. O software, em suma, é voltado para o desenvolvimento de aplicações na linguagem Java Android e XML.

2.3.2.2 MySQL Workbench

O MySQL Workbench2, é um software que integra o desenvolvimento, arquitetura, design e manipulação de banco de dados em SQL em um mesmo ambiente, pertencente a Oracle Corporation e disponibilizado de forma gratuita, com disponibilidade para Mac OS X, Windows e Linux.

1 ANDROID DEVELOPERS. Conheça o Android Studio. Disponível em: . Acesso em: 30 abr. 2019. 2 MYSQL. MySQL Workbench. Disponível em: . Acesso em: 30 abr. 2019.

28

2.3.2.3 WampServer

É uma plataforma de desenvolvimento de Web disponível desde 2004 para Windows que, utilizando Apache2, PHP, MySQL e MariaDB permite a criação de uma aplicação Web. O WampServer3 instala automaticamente todos os requisitos necessários para facilitar a configuração do software interpretador de scripts local e do banco de dados no próprio sistema, ou seja, auxilia no teste da aplicação, visto que, assim, torna-se possível efetuar um teste da aplicação sem necessidade de conexão à internet.

2.3.2.4 Notepad ++

Notepad ++4 é um software gratuito lançado em 2003, sob licença GPL, disponível para Windows. Com a funcionalidade de edição de código, que suporta diversas linguagens de programação, sendo elas C, C++, Java, C#, XML, HTML, PHP, JavaScript, makefile, ASCII art, doxygen, ASP, VB/VBScript, Unix Shell Script, BAT, SQL, Objective-C, CSS, Pascal, Perl, Python, Lua, Tcl, Assembly, Ruby, Lisp, Scheme, Smalltalk, PostScript e VHDL.

2.3.2.5 GIMP

Gimp5 é um software gratuito de edição e composição de imagens, lançado em 1996, hoje disponível para diversos sistemas operacionais, como GNU, Linux, Mac OS X e Windows.

2.3.2.6 Audacity

Audacity6 é um software gratuito de criação e edição de áudio, disponível para diversos sistemas operacionais, como GNU, Linux, Mac OS X e Windows.

3 SOURCEFORGE. WampServer. Disponível em: . Acesso em: 30 abr. 2019. 4 NOTEPAD++. Home. Disponível em: . Acesso em: 07 maio 2019. 5 GIMP - GNU Image Manipulation Program. Home. Disponível em: . Acesso em: 07 maio 2019. 6 AUDACITY. Home. Disponível em: . Acesso em: 07 maio 2019.

29

2.3.2.7 Documentos Google

Documentos Google7 é um Website com função de escritório (criação e edição de arquivos de texto) gratuito, lançado pela própria Google em 2005. O mesmo pode ser editado online, simultaneamente por diversas pessoas em diferentes localizações. Os documentos editados através do Documentos Google, também podem ser acessados e editados sem acesso à internet através de aplicativos para dispositivos mobile e extensões para o próprio navegador de internet em computadores convencionais.

2.3.3 Arquitetura da aplicação

O seguinte diagrama descreve o funcionamento da arquitetura da aplicação. Esse em que o usuário precisará fazer o download do aplicativo com seu dispositivo Android (2) através da loja Google Play Store (1). Com o software já baixado e instalado, o cliente ao abrir o aplicativo se encontrará em uma tela inicial, onde é possível realizar o login e cadastro, funções estas que exigem conexão à internet (3) em razão da necessidade de um WebService global (6), onde será disponibilizado os dados do Banco de dados (7), selecionados a partir de uma query em PHP (5) e transformados em um Array de objetos JSON (4), para a leitura dentro do aplicativo em Java (3) e apresentados na interface por códigos XML (3). Na tela home, é possível pesquisar animes a partir de tags dentro de um banco local e acessar notícias, guia de temporada, informações dos animes e perfis de usuário. Novamente, somente caso esteja com acesso à internet, pois tais funcionalidades necessitam de controle e comunicação com o banco de dados (7), o qual armazena todas as informações dos anime em linguagem SQL (8). Na condição de que uma conta esteja vinculada ao software, além das finalidades já citadas, é possível visualizar o próprio perfil.

7 Documentos Google. Sobre. Disponível em: . Acesso em: 23 set. 2019.

30

Figura 8 - Diagrama da arquitetura da aplicação.

Fonte: Os autores (2019).

2.3.4 Requisitos para instalação e uso da aplicação

Praticamente qualquer Smartphone que utiliza como sistema operacional o Android, de versão igual ou superior a 4.0.3, com conexão à internet e a Google Play Store, poderá executar o aplicativo Sinop.Anime. O aplicativo não requer um grande poder de processamento de dados ou de gráfico. Portanto, não é necessário um dispositivo topo de linha. Qualquer dispositivo intermediário ou até mesmo de entrada consegue executar o app de forma satisfatória, desde que o mesmo esteja conectado a uma rede de internet. Nossa decisão de utilizar como base o Android 4.0.2, ocorreu devido às funcionalidades disponíveis nessa versão e superiores, que eram requeridas pelo aplicativo. Além, dos dados disponibilizados pela Google, detentora dos direitos do Android, com o intuito de auxiliar os desenvolvedores na decisão da versão do Android para ser usada como base para o desenvolvimento do aplicativo. Os gráficos e tabelas apresentados pela empresa mostram que 99,6% dos usuários de Android possuem uma versão igual ou superior a 4.0.3, como é visível nas figuras 9 e 10, o que influenciou na decisão de adotá-lo como versão do aplicativo. Abaixo segue tabelas e gráficos disponibilizados pela empresa:

31

Figura 9 - Captura de tela Android Studio.

Fonte: Os autores (2019).

Figura 10 - Versões do Android.

Fonte: Android Developer (2019).

2.4 BANCO DE DADOS

32

2.4.1 Modelagem conceitual

2.4.1.1 Descrição do modelo de dados

Sinop.Anime possui diversos animes guardados em seu banco de dados. São representados, integralmente, por uma tabela homônima. Cada anime possui os seguintes atributos: Título, Sinopse, Data de Lançamento, Número de Episódios, Estúdio, Classificação Indicativa, Diretor e Imagem. O Título é dado como chave primária. Cada anime pode possuir um ou mais gêneros, que variam entre os mais comuns e conhecidos como ação e romance. Além da pesquisa poder ser feita pelo nome, também serão utilizadas Tags, que serão sugeridas por um usuário comum e cadastradas por usuário do tipo moderador. A partir disso, o usuário que sugeriu as novas Tags começa a selecionar conquistas como “Fate”, “Novato”, “Pirata das Tags” e “Quando cheguei aqui era tudo mato”, de acordo com o número de Tags aceitas. O moderador possui todos os atributos de um usuário normal: E-mail, Nick, Biografia, Senha, Data de Cadastro e Quantidade de Tags cadastradas, porém além de cadastrar novas Tags, outra função do mesmo é a de publicar Notícias, que são compostas por uma Manchete, Conteúdo, Data de publicação e Imagem. Também é possível que o usuário do tipo moderador realize ações como cadastro, login e a alteração da conta de usuários comuns para do tipo moderadora. Por fim, o sistema permite a postagem de comentários sobre os animes, que podem ser respondidos ou denunciados por outros usuários dependendo do conteúdo do mesmo.

2.4.1.2 Diagrama Entidade-Relacionamento

Um anime possui diversas características como status do anime, nome, estúdio, diretor, sinopse, data de lançamento, número de episódios, classificação indicativa e imagem. Cada anime pode possuir um ou vários gêneros e também está relacionado a Tags para pesquisa, que são compostas por conteúdo e atividade, além de estar conectado ao tipo de tag. O usuário é composto por “nick”, e-mail, biografia, data de cadastro e quantidade de tags. O usuário é especializado em moderador e usuário, sendo que só ao primeiro é permitido o cadastro de novas tags e a postagem

33

de notícias, que são formadas por manchete, data e conteúdo, enquanto o segundo pode obter conquistas, que possuem nome e tipo, de acordo com o número de Tags sugeridas para cadastro, sendo que uma atividade comum aos dois tipos é a publicação de comentários sobre os animes, a resposta dos mesmos e a possível denúncia de um comentário com conteúdo inadequado.

Essas informações são provenientes do Diagrama Entidade-Relacionamento, disponível na figura 11. É possível ter uma melhor visualização do diagrama acessando o link: .

34

Figura 11 - Diagrama Entidade-Relacionamento.

Fonte: Os autores (2019).

35

2.4.2 Modelagem Lógica e Física

2.4.2.1 Diagrama Relacional

No banco de dados do sistema, um anime possui diversas características como status do anime, nome, estúdio, diretor, sinopse, data de lançamento, número de episódios, classificação indicativa e imagem. O gênero também pertence a um ou muitos animes que também estão relacionados a Tags para pesquisa, compostas por conteúdo, atividade (se a tag está ativa ou inativa) e tipo de tag, ou seja, tag de cenário, sinopse ou personagem. O usuário é composto por “nick”, e-mail, biografia, data de cadastro e quantidade de tags. Comum a todos os usuários é a possibilidade de obter conquistas, que possuem nome e tipo, publicar comentários, enviar respostas e se necessário enviar denúncias, caso o conteúdo de um comentário seja inadequado. Entretanto, os usuários também são especializados em moderador ou cadastrado. Os moderadores detêm mais permissões, como a de cadastrar tags, adicionar notícias, formadas por manchete, data e conteúdo, e avaliar as tags cadastradas. Pode-se ter acesso ao dicionário de dados do banco e também a uma vista geral das tabelas acessando os apêndices B e C deste documento. Essas informações são provenientes do Diagrama Relacional, disponível na figura 12. É possível ter uma melhor visualização do diagrama acessando o link: < https://drive.google.com/drive/folders/1v4G2Fi_WIN4jb5tKm2rMsyWzVhbjPSl?usp=s haring>.

36

Figura 12 - Diagrama Relacional de Sinop.Anime.

Fonte: Os autores (2019).

37

2.4.4 Relatórios através de visões ou procedimentos armazenados

O código 1 mostra o passo-a-passo realizado para recuperar a lista de animes relacionados a uma tag dada, utilizando um exemplo de um procedimento armazenado do banco de dados do sistema.

Código 1 - Relatório (SP: Animes_de_uma_tag).

DELIMITER //

CREATE PROCEDURE Animes_de_uma_tag(IN tag varchar(50))

BEGIN

select anime_tag.Tag_Conteudo, Anime_Nome from anime_tag where Tag_Conteudo = tag;

END //

DELIMITER ;

call Animes_de_uma_tag("Deuses astecas fitness");

Fonte: Os autores (2019).

A partir do uso de um procedimento, é retornado o que foi requisitado. Como exemplo, foi utilizado a procedure para recuperar os animes de uma determinada tag, “Deuses astecas fitness”, por consequência são retornados todos os animes que possuem essa tag. Esse resultado é representado pela tabela 2 - Resultado.

Tabela 2 - Resultado (SP: Animes_de_uma_tag).

Tag_Conteudo Anime_Nome

Deuses astecas fitness JoJo’s Bizarre Adventure

Fonte: Os autores (2019).

38

2.5 WEB SERVICE

2.5.1 Descrição de função

Para a disponibilização de informações no aplicativo, é necessário o uso de um Web Service (Serviço Web), esse serviço terá as seguintes funções: ● Funções de Leitura (Read): o Terá uma função de leitura para cada tabela, encontrando-se um tratamento de dados no próprio aplicativo. o O principal parâmetro de entrada para essas funções, são os atributos de determinada tabela. ● Funções de inserção (Insert): o Essa função é exclusiva da entidade ‘Usuário’ e ‘Anime’, encontrando- se um tratamento de dados no próprio aplicativo. Funcionando para a adição de tags na tabela Anime ou cadastramento de usuários. o Seu principal parâmetro é o nome da tabela. Tanto na tabela Usuário, quanto na Anime. ● Funções de apagar (Delete): o Essas funções também são exclusivas das entidades ‘Usuário’ e ‘Anime’. Funcionando-se preferencialmente, para exclusão de contar e de tags em animes, feita por moderadores. o Seu principal parâmetro é o nome da tabela. Tanto na tabela Usuário, quanto na Anime. ● Funções de atualização (Update): o Essa função é aplicável para todas as entidades, utilizada em caso de alteração de dados de quaisquer tabelas. o Seu principal parâmetro é o nome do atributo alterado em determinada tabela.

2.5.2 Estrutura básica

39

2.5.2.1 Esquema de diretórios

Todos os arquivos do Web Service são encontrados no diretório root “ws_otaku” tendo uma pequena hierarquia entre eles. ● ws_otaku ○ ws_db ■ connection.php ○ ws_read ■ ws_read_anime.php ■ ws_read_anime_nome.php ■ ws_read_tag.php ■ ws_read_conquista.php ■ ws_read_genero.php ■ ... ○ ws_insert ■ ws_insert_usuario.php ■ ws_insert_anime.php ■ ws_insert_comentario.php ■ ws_insert_comentario_denuncia.php ○ ws_delete ■ ws_delete_usuario.php ■ ws_delete_comentario.php ■ ws_delete_resposta.php ○ ws_update ■ ws_update_usuario.php ■ ws_update_testerino.php ○ ws_images_users ■ getImages.php ■ upload.php ○ ws_images_animes ■ getImages.php ■ upload.php ○ ws_images_news ■ getImages.php

40

■ upload.php

2.5.2.2 Tecnologias utilizadas

Para o desenvolvimento do Web Service, foram utilizados os softwares: Notepad++, para desenvolvimento de scripts em PHP, baseando-se no banco de dados feito em MySQL. Por fim, seu uso no aplicativo, feito em Java pelo software Android Studio.

2.5.3 Exemplo de utilização

Pode ser dado um exemplo do Web Service com a chamada do código 2, o PHP requisita, por meio de um GET, o termo ‘tagAnime’, para retornar o resultado da chamada do procedimento armazenado no banco de dados.

Código 2 - Exemplo de utilização do arquivo ws_read_pesquisa_anime_tag.

Animes_de_uma_tag(".$_GET['tagAnime'].")";

$result = mysqli_query($_DB['connection'],$sql);

$result = mysqli_fetch_all($result, MYSQLI_ASSOC);

echo json_encode($result);

mysqli_close($_DB['connection']); ?>

Fonte: Os autores (2019).

Após isso, na url do navegador, como no código 3, utilizando como root o Web Service ‘ws_otaku’, é realizada a chamada do Script em PHP, junto de seu parâmetro requisitado, “tagAnime”, necessitando também a adição de um valor para o mesmo.

41

Código 3 - Exemplo de utilização do Web Service.

http://localhost/ws_otaku/ws_read/ws_read_pesquisa_anime_tag.php?tagAnime=’ Anos 80’

Fonte: Os autores (2019).

Por fim, todos os animes que coincidem com tais requisitos - a relação com a tag_conteudo “Anos 80” - são retornados para a tela do navegador, como um Array de objetos JSON, visível na figura 13.

Figura 13 - Resultado do exemplo de utilização do Web Service.

Fonte: Os autores (2019).

2.7 ESPECIFICAÇÃO ORIENTADA A OBJETOS

2.7.1 Diagrama de Casos de Uso

A figura abaixo apresenta os casos de uso referentes aos atores Usuário e Administrador dentro da aplicação Sinop.Anime, demonstrando seus papéis dentro do sistema. Um usuário, este podendo ser um usuário comum ou um moderador, para utilizar o sistema necessita estar cadastrado e ter realizado o login, para uso do sistema.

● Usuário comum: Em seu primeiro fluxo, o usuário comum é capaz de pesquisar por um anime, onde o sistema faz uma verificação em busca dos melhores resultados, retornando-os ao cliente, onde o mesmo pode acessar a página deste, fazendo o sistema aprender uma nova pesquisa e melhorando a relação do anime com suas tags. O usuário também é capaz de acessar diretamente um anime em um fluxo alternativo.

42

Em ambos os casos, o usuário é capaz de: comentar em um anime, responder um comentário, adicionar tags neste, acessar o perfil de um usuário que já tenha comentado, e denunciar. Ao denunciar, essa informação é enviada para os moderadores. O usuário, por fluxos alternativos, também é capaz de: acessar uma notícia, além de alterar e apagar sua conta. ● Moderador: O moderador, por ser uma especialização do usuário comum, recebe todas suas funções. O sistema envia as denúncias feitas por usuários para ele, podendo a partir delas: penalizar um usuário, apagar o comentário realizado. Porém, as mesmas podem ser realizar como fluxos alternativos, caso o moderador por si próprio encontre irregularidades no sistema, podendo agora com isso apagar tags também. Os moderadores têm a possibilidade de adicionar novos animes, novas notícias e por fim, dar permissão a usuários, podendo adicionar novos moderadores.

43

Figura 14 - Diagrama de Casos de Uso.

Fonte: Os autores (2019).

2.7.2 Diagrama de Classes

É possível ter uma melhor visualização do diagrama da figura 15 acessando o link: .

44

Figura 15 - Diagrama de Classes.

Fonte: Os autores (2019).

45

2.7.3 Descrição Textual das Classes e seus Relacionamentos

As classes do aplicativo se compreendem da seguinte maneira: ● LoginActivity: ○ Essa é a primeira tela a ser apresentada no aplicativo, onde o login é efetuado e o cliente é direcionado ou à classe InicioActivity, ou à Activity de cadastro (CadastroActivity); ○ Essa classe possui cinco atributos, sendo eles: a entrada de e-mail (inEmail), entrada de senha (inSenha), o botão que realiza o login (irInicio), o botão que direciona o usuário à tela de cadastro (irCadastroBtn) e o objeto onde as informações do usuário são armazenadas, em caso de login efetuada (loginPreferences); ○ Seus métodos são muito simples. O verificarLogin recebe os dois parâmetros de entrada e compara com os dados do banco de dados, salvando as informações do usuário em uma Shared Preferences (Preferências compartilhadas), a partir do método sp. Assim, esse método é chamado pelo método onClick irInicio, realizando um intent para sua próxima tela (MainActivity). No entanto, o usuário, caso queira criar uma conta, pode selecionar o botão irCadastroBtn, onde é redirecionado à CadastroActivity, por meio de um Intent no método onClick cadastrar; ● CadastroActivity: ○ Essa tela é a responsável pelo cadastro de novos usuários, bem como suas informações. A CadastroActivity, que possui funções para receber dados dos usuários e inserir no banco com o auxílio do método ‘inserirIntoUsuario’ criado no Controlador de banco de dados (classe BDHelper). Assim, no final, um botão com um Intent é acionado realizando a inserção e direcionando o usuário à tela de início (InicioActivity), sem a necessidade de realizar uma verificação de conta. ○ Seus atributos são 4 PlainTexts: inEmail, inSenha, inSenhaConfirmar e inBiografia, seguidos de dois botões, sendo eles: inFoto e irInicio e o objeto onde as informações do usuário são armazenadas, em caso de login efetuada (loginPreferences).

46

○ Existem 3 métodos: Estes são o cadastrar, responsável pela comunicação com o Banco de Dados, inserindo as informações do usuário e o OnClick irInicio, que chama o cadastrar, salva as informações do usuário em uma Shared Preferences e realiza um Intent com a tela inicial. ● Usuario: ○ Essa é uma classe responsável pela criação dos parâmetros de um objeto Usuario. ○ A classe Usuario possui seis atributos, sendo eles: email, nickname, biograph, senha, dataCadastro e qtdTags. ● InicioActivity: ○ É a tela principal do aplicativo, responsável pela inicialização do Menu lateral pela primeira vez e pela pesquisa de animes. ○ Seus atributos um SearchBar searchBar, o inPesquisa, um botão toggle, do tipo ActionBarDrawerToggle, um ListView chamado arrayNoticias e o objeto onde as informações do usuário são armazenadas, em caso de login efetuada (loginPreferences). ○ Existem três métodos: arrayNoticia, que realiza a construção da lista de notícias na tela; onNavigationItemSelected, recebe o botão toggle para a interação usuário com o menu expansível; e verificar moderador, que realiza a verificação se o usuário é um moderador, podendo ter permissão para mais ações dentro do menu expansível ● menuDrawer: ○ Essa é uma classe abstrata, utilizada para representar a existência do recurso Menu Drawer e sua ligação com as activities. ● ListaNoticiasActivity: ○ Essa activity é a responsável por listar as notícias encontradas no banco de dados em um Array, onde é possível ser redirecionado à tela da respectiva notícia. ○ Dentre seus atributos podem ser citados um ListView chamado newsList, um botão (ActionBarToggle) toggle e uma String de posição do ListView. ○ Para a realização de suas funções, utilizam-se três métodos: arrayNoticias, criando um ArrayList com todas as notícias e aplicando

47

ele na tela de Layout, recebendo o newsList como parâmetro de saída; essa lista pode receber interações a partir do método onClickItem que pega a posição que o usuário selecionou (position) e retorna em um bundle seu conteúdo. Por fim, para interações com o menu expansível é utilizado o método onNavigationItemSelected. ● NoticiaActivity: ○ Essa é a tela de resultado para a NoticiasActivity, onde retornará as informações da notícia selecionada. ○ Seus atributos são similares aos do objeto Noticia no banco de dados. Existem TextViews para a exposição de dados da notícia na tela e um ArrayList chamado listaNoticias. Assim como o método anterior, é aplicado o botão ActionBarToggle, para interação com o menu. ○ Seus métodos são simples, existe o recebimento de dados do banco de dados, compreendido como arrayNoticias que recebe o arrayNoticias. Após isso, com dados do bundle e do arrayNoticias, é possível a construção da notícia no método construirNoticia, recebendo uma posição para onClick e o Array listaNoticias. Assim é possível colocar os dados em suas respectivas listViews pelo método settarNoticia. ● PerfilActivity: ○ É a Activity responsável por retornar as informações do usuário atual da aplicação, como seu nome, e-mail e biografia. ○ O perfil só possui seus TextViews: userNickView, userEmailView e userBiographView; um ImageView userImageView, um botão do tipo Fab para a edição do perfil, junto ao botão toggle para a inicialização do menu. Esta também apresenta um objeto AlertDialog, onde é realizado a edição do perfil do usuário. ○ Seus métodos são o construtor de usuário (construirUsuario) recebendo os dados do Shared Preferences em uma interação direta com a entidade Usuario, utilizando outros três métodos: nickUser, emailUser, biographUser; recebendo como seus parâmetros todos os TextViews e aplicando-os na tela. Existem também os editUser, utilizado para a edição das informações do usuário em um AlertDialog, e conquistasOpen, responsável pela construção do Array de conquistas do usuário.

48

● ResultadoActivity: ○ Ao realizar a pesquisa na MainActivity, a ResultadoActivity fará a busca no banco de dados e retornará os animes que batem com os parâmetros desejados (nome e tag). ○ Seus atributos são um ListView chamado arrayResultado, dois ArrayLists chamados nomesParecidos e forbiddenWords, que recebem as Strings do banco que são iguais as inseridas, um Button para iniciação do menu idêntico ao das outras telas com ligações ao menu drawer e uma String position, para receber dados do item selecionado. ○ Seus métodos são: ListView arrayAnimes, recebendo o ArrayList nomesParecidos, ListView myAnimeist e o PlainText inserirSearch recebido da MainActivity. Seguidamente, é iniciado o limparPalavras, para a limpeza e divisão da pesquisa em tags, e um onClickItem, recebendo o arrayResultado e uma posição que será retornada. ● ListaAnimesActivity: ○ Essa Activity, similar à ResultadoActivity, realiza um mapeamento do banco de dados retornando uma lista com todos os títulos dos animes, realizando um onClickItem para o Cliente poder visualizar a tela do Anime selecionado (AnimeActivity). ○ Seus atributos são um ListView chamado myAnimeList, que recebe as Strings do banco que são iguais as inseridas; um Button para iniciação do menu idêntico ao das outras telas com ligações ao menu drawer e uma String position, para receber dados do item selecionado. ○ Seus métodos são: a ListView arrayAnimes e o ArrayList myAnimeList, recebido da MainActivity. Seguidamente, é iniciado um onClickItem, recebendo o myAnimeList e uma posição que será retornada. ● AnimeActivity: ○ Essa classe é responsável por mostrar todos os dados do anime selecionado anteriormente. ○ Seus atributos são como os atributos da entidade anime, sendo eles todos PlainTexts identificados por animeNameView, diretorView, estudioView, statusView, classificacaoView e numEpView. Também encontra-se o botão toggle, para iniciação do menu, um botão de

49

inserção de tags para usuário chamado btnAddTag e um ArrayList compreendida como listaNomesAnimes. ○ Seus métodos são: um para a inserção de tags, chamado addTag, recebendo o botão btnAddTag, e um receptor dos dados do banco, que recebe como parâmetro o ArrayList listaNomesAnimes, chamado arrayAnimes. O construirAnimes utiliza da posição enviada pela Activity anterior junto aos dados do arrayAnimes. Assim, todas as informações dos animes são colocadas em seus respectivos TextViews, a partir do método settarAnimeView, que recebe como parâmetros todos os TextViews. ● SettingsActivity: ○ Essa é a classe responsável pela interação do usuário com suas configurações de conta e aplicativo. ○ Seus atributos são um TextView chamado alterarSenha, que funciona como um botão, e o botão Toggle para a chamada do menu expansível. ○ Seus métodos são Intents dentro de onClicks, sendo um userConfigBtn, recebendo o alterarSenha para o Intent para a alterarSenhaActivity; e um onItemSelected para a interação com o menu drawer. ● AccountSettingsActivity: ○ Essa é a classe responsável por atualizar a tabela Usuario, funcionando para a modificação de senha. ○ Seus atributos são 3 PlainTexts (compreendidos nesse caso específico como “Passwords”, por conta de sua criptografia). O botão toggle, para inicialização do menu expansível também está presente nessa tela. ○ Na atual versão do aplicativo, o update ainda não foi realizado no código da aplicação, assim sendo, seu único método funcional é o de onItemSelected para interação usuário-menu. ● NotificationSettingsActivity: ○ Essa é a classe responsável por controlar a emissão de notificações no dispositivo do usuário. ○ Seus atributos são três botões switch, cada um referente a um tipo de notificação que pode ser ativada: notificações de animes novos, notificações de respostas a comentários e notificações de novas conquistas conseguidas.

50

○ Seus métodos são três: newAnime, noticias e respostas. newAnime recebe o botão novosAnimes e ativa ou desativa notificações de animes novos na temporada; conquistas recebe o botão conquistas e ativa ou desativa notificações de conquistas do usuário; respostas recebe o botão respostas e ativa ou desativa notificações de respostas a comentários do usuário. ● HelpActivity: ○ Essa é a tela responsável por oferecer ao usuário mais informações sobre o aplicativo. ○ Possui três atributos: dois botões, um identificado por about e outro identificado por contact, e um AlertDialog nomeado dialog. ○ São três os métodos: openAbout, openContact e construirAlertDialog. openAbout recebe o botão about enquanto o openContact recebe o botão contact. ● LanguagesActivity: ○ Essa é a classe responsável por configurar o idioma da aplicação. ○ Possui dois atributos, dois botões identificados como portugues e english. ○ Este possui os métodos: changeLanguge, recebendo o botão clicado como parâmetro, alterando a linguagem da aplicação. ● Anime: ○ Essa é uma classe responsável pela criação dos parâmetros de um objeto Anime. ● Noticia: ○ Essa é uma classe responsável pela criação dos parâmetros de um objeto Noticia.

2.7.4 Descrição do código das telas

Foi construído um aplicativo Android através do software Android Studio, empregando a linguagem orientada a objetos Java. Além da composição das classes Java, o Android Studio oferece a composição de Activities (módulos únicos e independentes, geralmente associados a interfaces de telas de aplicações) e Layouts de telas em arquivo xml.

51

Destarte, orientando-se a objetos e à elaboração de telas, foram criadas diversas Activities, cada uma com suas respectivas classes, métodos e atributos. Dentre esses métodos, podem ser citados o ‘onCreate’, no qual as funções elementares para a inicialização de uma tela são geradas, tais como os links com seus Layouts e a chamada dos métodos mais importantes para a efetivação das ações da Activity. Os layouts, diferentemente da orientação para objetos em Java, são engendrados para a estética da tela e/ou aplicativo, além de portar funções em conjunto. Isso se dá pela necessidade de uma interface gráfica entre o Cliente e o aplicativo, para seu uso ideal. Finalmente, para um melhor funcionamento total da aplicação, é fundamental o acesso a um Banco de dados global, onde há relações entre entidades similares aos presentes no programa. Para tanto, são usados servidores e códigos em PHP, transformando os dados das tabelas criados em SQL em arquivos do formato Json, proporcionando, assim, sua funcionalidade em formato de Strings em uma aplicação Java.

2.7.5 Relacionamento Android – Banco de Dados

Compreendendo-se a complexidade de manter tamanha quantidade de dados dentro de um aplicativo e em razão de operações imprescindíveis, como o cadastramento de usuários, atualização de contas ou animes, entre outras atividades que necessitam de um suporte externo, proveniente da internet e de uma fonte de dados, justifica-se a integração entre o aplicativo Android e um banco de dados, movido a SQL, externo. Para a criação do banco de dados, povoamento de suas entidades e para a criação de uma instância de conexão para o uso de um Web Service, foi utilizado o software MySql Workbench. O Web Service, ou web serviço, é crucial para a ação de resgatar dados do banco. Ele se serve da linguagem PHP para a criação de arquivos no formato JSON, procedendo, dessa maneira, um vínculo com a classe do controlador de banco de dados do aplicativo, chamada BDHelper. Isso permite desempenhar ações a partir do script em PHP, de suas consultas e seus parâmetros. Desse modo, ainda com base nos scripts do Web Service, são criados métodos para a realização de leituras (read), inserções (inserts), remoções (delete) e

52

atualizações (update). Essas leituras recebem, dos arquivos em PHP, Arrays de objetos JSON que podem ser lidos ou utilizados em outros objetos. Este é o caso da classe Anime, que recebe todos os dados da entidade Anime do banco de dados. Desse modo, a classe adquire, dependendo da realização do método e dos parâmetros, um determinado nome, diretor, estúdio, número de episódios, sinopse e etc. O mesmo ocorre com as classes usuário e notícia. No entanto, para a viabilização dos métodos do BDHelper, é indispensável a sua instância em todas as activities, iniciando assim um novo BDHelper em cada tela, junto de seus métodos, para serem utilizados como necessário. Dentre seus métodos podemos citar os exemplos de: selectAllFromAnime (código 4) e insertIntoUsuarios (código 5).

Código 4 - selectAllFromAnime.

public JSONArray selectAllFromAnime(Context context) throws JSONException, IOException { if (!checkNetworkConnection(context)) { return null; } checkThreadPolicy(); URL url = new URL(URL_GLOBAL_DB + "ws_read/ws_read_anime.php"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); StringBuilder sb = new StringBuilder(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); String json; while ((json = bufferedReader.readLine()) != null) { sb.append(json + "\n"); } JSONArray jsonArray = new JSONArray(sb.toString().trim()); return jsonArray;

}

Fonte: Os autores (2019).

Código 5 - insertIntoUsuarios.

public int insertIntoUsuarios(Context context, String email, String

53

nickname, String biograph, String senha, String dataCadastro, String qtdTags) throws IOException { if (!checkNetworkConnection(context)) { return 0; } checkThreadPolicy(); String values = "Email="+email+"&"+"Nickname="+nickname+"&"+"Biograph="+biograph+"&"+"sen ha="+senha+"&"+"Data_cadastro="+dataCadastro+"&"+"Quant_tags="+qtdTags; URL url = new URL(URL_GLOBAL_DB + "ws_insert/ws_insert_usuario.php?"+values); HttpURLConnection con = (HttpURLConnection) url.openConnection(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); String response = bufferedReader.readLine(); if (response.equals("false")) { Toast.makeText(context, "Erro no BD Global!", Toast.LENGTH_LONG).show(); return 0; } else { return 1; } }

Fonte: Os autores (2019).

Métodos que afetam a estrutura dos dados no banco necessitam do uso de parâmetros de entrada, como pode ser notado no exemplo do insertIntoUsuarios. Nele, são recebidos os atributos do usuário que deseja realizar seu cadastro. Então, esses parâmetros são colocados em uma URL dentro de determinado script do Web Service, no qual, a partir da função de PHP “GET”, torna possível sua a inserção no banco. Em virtude da primordialidade de tal funcionamento, a aplicação Sinop.Anime apresenta diversos métodos para a leitura de dados e inserção, assegurando que os principais da aplicação estejam disponíveis ao cliente e que ele possa executar ações com muito mais eficácia. De acordo com o planejamento da equipe, futuramente, mais funções devem ser adicionadas, certificando o progresso da aprimoração da experiência do usuário com o aplicativo.

54

2.8 MECANISMO DE BUSCA DO APLICATIVO

2.8.1 Funcionamento

As pesquisas realizadas no Sinop.Anime, idealmente, devem ser uma descrição genérica, em linguagem natural, de algum elemento relacionado a um anime. Exemplo: "anime antigo com protagonista ruivo que não entra no robô". Cada palavra, espaçamento e pontuação torna-se um token. O primeiro tratamento das frases envolve desconsiderar os dois últimos elementos mencionados, deixando apenas as palavras. Após essa primeira “limpeza”, o grupo de tokens passa por dois filtros para remoção de termos desnecessários para o processamento (ruído): o primeiro consiste num dicionário próprio do projeto, apontado na tabela do banco de dados “palavras_proibidas”; o segundo serve-se da biblioteca SNOWBALL8, que oferece um dicionário extra e mais preciso para este tipo de funcionalidade. Alguns tipos de palavra imediatamente descartados são preposições, conjunções e artigos. O exemplo utilizado no outro parágrafo geraria os seguintes tokens: “protagonista”, “antigo”, “ruivo”, “entra”, “robô”. O texto “limpo” é passado para o banco de dados na forma de um insert na tabela “usuario_testerino”. O número de tokens define a quantidade de campos preenchidos, e todos os tokens de uma dada pesquisa são relacionados ao usuário responsável. Após, aciona-se a Stored Procedure que verifica quais animes possuem tags correlatas aos tokens, seja apenas uma, sejam várias. O primeiro critério de ordenação é o nível de similaridade entre cada anime retornado e os termos pesquisados, dado em porcentagem. No caso de uma busca com 7 tokens, um anime que possui 7 tags correspondentes é 100% similar, e terá prioridade em relação aos que possuem menos correspondências. Ainda neste passo, animes com porcentagem menor que 40% são descartados, pois são considerados ruído. Caso dois ou mais animes apresentem a mesma porcentagem, o segundo critério de ordenação depende de um fator nomeado Relação, existente na tabela

8 SNOWBALL. Snowball. Disponível em: . Acesso em 18 jun. 2019.

55

“anime_tag”. Trata-se de um número que reflete a força de determinada relação entre anime e tag. Num cenário em que a relação entre “robô” e “Mobile Suit Gundam 0079” seja valorada em 3, ao passo em que “robô” e “JoJo’s Bizarre Adventure” tenha valor 1, o primeiro anime receberia prioridade na disposição. No que diz respeito ao machine learning, o principal processo de aprendizagem se dá após uma busca. Os valores dos já citados campos “Relação” podem ser aumentados a partir de algumas situações no aplicativo como clique do usuário em determinado anime, o tempo gasto na página do anime, e avaliações positivas, que podem ser dados por um botão na tela da obra. Essas pontuações não são excludentes entre si, e aplicam-se a todas as tags pesquisadas e relativas ao anime clicado/avaliado. No caso do tempo gasto, se o usuário passa um tempo abaixo de 1,5 segundo na página do anime, a pontuação não aumenta. No caso botão de avaliação, se ela for negativa, reduz-se a pontuação. Para representação visual do funcionamento do mecanismo de pesquisa foi utilizado o diagrama da figura 16, que se refere ao processo completo da busca, desde a inserção de dados até o retorno de resultados. A descrição em linguagem natural inserida pelo usuário passa por uma limpeza, na qual cada palavra é transformada num token e filtrada para a eliminação de ruídos. Logo após, os token restantes são passados para o banco de dados, e uma Stored Procedure verifica animes que possuem tags relacionadas a esses tokens, esse funcionamento de filtro feito em Java dentro da aplicação, pode ser visto em códigos no apêndice E. Os animes que se enquadram na situação descrita são organizados de acordo com: a quantidade de tags, pela força da tag para o anime e pela quantidade de acesso na página deste anime. Após o término da busca, o processo de aprendizagem ocorre através do machine learning, que pode alterar o valor da relação de força de uma tag devido à, por exemplo, avaliações positivas de usuários.

56

Figura 16 - Mecanismo de pesquisa do sistema.

Fonte: Os autores (2019).

2.8.2 Códigos específicos ao banco de dados

O procedimento armazenado “diogenes”, presente no código 6, é extremamente importante quanto a listagem dos resultados da pesquisa, fazendo a discriminação das tags com baixa porcentagem em relação ao banco e com a pesquisa, reduzindo ainda mais o ruído. Por fim, esta agrupa os resultados e ordena as obras, a partir das de maior similaridade com a busca para as de menor.

Código 6 - Retorno de animes após a pesquisa das tags (diogenes).

CREATE DEFINER=`root`@`localhost` PROCEDURE `diogenes` (IN email VARCHAR(255)) BEGIN

SELECT COUNT(Testerino_conteudo) into @total from usuario_testerino where Usuario_Email LIKE email;

SELECT a.Anime_Nome AS Anime_Nome, (COUNT(t.Testerino_conteudo) / @total) *100 + '%' AS porcentagem, Relacao FROM (anime_tag a

57

JOIN usuario_testerino t ON ((a.Tag_Conteudo LIKE CONCAT('%', t.Testerino_conteudo, '%')))) where t.Usuario_Email like email GROUP BY a.Anime_Nome ORDER BY a.Relacao DESC; END

Fonte: Os autores (2019).

3.RESULTADOS

3.1 O APLICATIVO SINOP.ANIME

3.1.1 Diagrama de telas

O diagrama abaixo (figura 17) corresponde às interações feitas entre as telas. Desde a tela inicial, o diagrama mostra todas as possíveis escolhas que o usuário pode fazer no aplicativo. Para uma melhor visualização das telas e seus atributos, é possível encontrá-las em destaque no apêndice D deste documento. A partir da primeira tela, o usuário pode efetuar seu login (1) ou se cadastrar (2) no aplicativo. Dessa forma, ele é direcionado para a tela de início (3), onde pode buscar por um anime e abrir o menu, que é diferente para usuários comuns (6.1) e moderadores (6.2). Caso opte pela busca, são retornados animes relacionados à busca que foi feita (4), e nesta tela o usuário pode clicar sobre o anime desejado e obter mais informações sobre ele (5). Caso o menu seja aberto, todos os usuários têm a opção de visualizar (7) e editar (8) seu próprio perfil, de ir para a tela lista de animes (9), de ir para a tela de configurações (10), de ir para a tela lista de notícias (16) e obter mais informações sobre ela (17) e de sair do aplicativo. Dentre as opções em configurações estão notificações (11), linguagem (12), tema (13), ajuda (14) e conta (15).

58

Figura 17 - Diagrama de telas.

Fonte: Os autores (2019).

3.1.2 Funções do aplicativo

Login: A função de login (presente na figura 18) de usuários está disponível na tela “LoginActivity”. Através da inserção do e-mail e senha pessoais do usuário e clique no botão “login”, é feita uma verificação no banco de dados e caso haja um registro correspondente o usuário é direcionado para a próxima tela do app (InicioActivity).

59

Figura 18 - Função login.

Fonte: Os autores (2019).

Cadastro de usuários: A função de cadastro de novos usuários (presente na figura 19) está disponível na tela “CadastroActivity”. Através da inserção pelo usuário dos seguintes dados: “Nickname”, “E-mail”, “Senha”, “Confirmar senha” e “Biografia”, é realizado o cadastramento desse novo usuário no banco de dados do aplicativo.

Figura 19 - Função cadastro de usuários.

Fonte: Os autores (2019).

60

Pesquisa: A função de pesquisa (presente na figura 20) está disponível na tela “InicioActvity”. Através dela o usuário insere a pesquisa do que ele lembra do anime desejado. Terminada a inserção, o mesmo deve clicar no botão “Search” (a lupa), consumando a operação e conduzindo-o à tela de resultados.

Figura 20 - Função pesquisa.

Fonte: Os autores (2019).

Acesso a tela de cada anime: Cada título possui a função de botão para o acesso à tela com as informações mais detalhadas da obra pretendida (presente na figura 21), estando disponível na tela “ResultadoActivity” e “ListaAnimesActivity”. Quando o usuário executa sua busca por um anime e encontra o desejado, ao acessar a tela desse anime, a força das tags usadas por ele são alteradas com o anime.

61

Figura 21 - Função acesso a tela de cada anime.

Fonte: Os autores (2019).

Comentário: A função de comentário (presente na figura 22) está disponível na tela “AnimeActivity”, na qual o usuário pode adicionar comentários referentes ao anime que deseja.

Figura 22 - Função comentário.

Fonte: Os autores (2019).

62

Menu: A função menu (presente na figura 23) está disponível em todas as telas do aplicativo (salvo as telas “InicioActivity” e “CadastroActivity”). Ao clicar no botão “toggle” é aberta uma aba de opções de direcionar o usuário para a tela de início, de perfil, lista de animes, notícias referentes ao universo dos animes no momento correspondente à atividade do usuário no app, configurações e para sair do aplicativo.

Figura 23 - Função menu.

Fonte: Os autores (2019).

Abrir AlertDialog para alterar dados de perfil: Essa função (presente na figura 24) está disponível na tela “PerfilActivity”, na qual o usuário ao clicar no botão flutuante (símbolo de lápis), será disponibilizado um AlertDialog no qual o usuário poderá alterar as suas informações pessoais do perfil. Para salvar as novas informações, basta o mesmo clicar no botão “ACEITAR”.

63

Figura 24 - Função alterar dados do perfil.

Fonte: Os autores (2019).

Lista de animes: Ao acessar a tela “ListaAnimesActivity” o usuário terá acesso a lista integral de animes disponíveis no banco de dados (presente na figura 25). A listagem segue o critério da ordem alfabética. Cada título possui a função de botão para o acesso à tela com as informações mais detalhadas da obra pretendida.

64

Figura 25 - Função lista de animes.

Fonte: Os autores (2019).

Configurar conta: Essa função (presente na figura 26) está disponível na tela “AccountSettingsActivity”. Na qual possui as opções de alterar senha e de desativar a conta.

Figura 26 - Função configurar conta.

Fonte: Os autores (2019).

65

Configurar linguagem: Essa função (presente na figura 27) está disponível na tela “LanguagesActivity”. Na qual o usuário pode alterar o idioma do aplicativo. Vale ressaltar que na versão atual do mesmo, a única linguagem disponível é o Português (Brasil).

Figura 27 - Função configurar linguagem.

Fonte: Os autores (2019).

Configurar tema: Essa função (presente na figura 28) está disponível em um AlertDialog na tela “ConfiguracaoActivity”. Na qual é possível alternar entre temas escuros e claros no aplicativo, sendo utilizado um botão switch para tal.

66

Figura 28 - Configurar tema.

Fonte: Os autores (2019).

Ajuda: Tela de Ajuda. Oferece as opções de entrar em contato com os desenvolvedores (presente na figura 29), no caso de algum problema, e de acessar os Termos e Política de Privacidade do aplicativo.

Figura 29 - Função ajuda.

Fonte: Os autores (2019).

67

Acessar notícias: Essa função (presente na figura 30) está disponível na tela Tela “ListaNoticiasActivity”. Ao clicar em um título de uma das notícias citadas na lista, o usuário será conduzido à página com as informações completas referentes ao assunto em questão.

Figura 30 - Função acessar notícias.

Fonte: Os autores (2019).

4.CONCLUSÃO

Tendo em vista o problema da busca de animes dentro da atual Internet, o projeto Sinop.Anime tem como produto final um aplicativo Android, com a finalidade de pesquisa de animes em que o usuário busca por informações ou descreve um elemento da obra, do qual possui lembranças em linguagem natural (linguagem humana), sendo retornado assim uma lista dos possíveis resultados. Para resultados ainda mais precisos, idealizou-se o uso de aprendizado de máquina (machine learning). Sendo assim, Sinop.Anime disponibilizaria resultados cada vez mais precisos para pesquisas diferentes, conforme o número de uso desse aumentasse. Dentre os objetivos específicos da aplicação, foram cumpridos o desenvolvimento de um banco de dados para armazenamento dos animes e suas tags baseadas em categorias, como cenário, personagens e sinopse curta; desenvolvimento do meio de pesquisa através de tags dos dados dos animes,

68

sinopses e personagens, a partir de uma pesquisa em linguagem natural; desenvolvimento de um aplicativo Android para o uso da ferramenta de pesquisa; desenvolvimento de um Web Service para requisição de informações do banco de dados e imagens. Com isso o trabalho propicia uma solução eficaz para a busca de animes, na qual mesmo que o usuário esteja sem informações específicas sobre a obra, o mesmo consegue obter êxito em sua busca.

4.1 LIMITAÇÕES

Nesta seção são descritos fatores que limitam o uso do aplicativo, que ainda não foram aplicadas ou encontradas soluções:

● Não foram realizados testes com outros meios de busca: Para a comprovação do uso do Sinop.Anime o melhor seria um estudo com base no uso desse versus o uso de outros meios de busca, como Google, Bing e MyAnimeList. Ainda nos estágios desse trabalho, não foram efetuadas essas verificações, visando apenas a construção e realização dos objetivos específicos.

● Testes com demais dispositivos: O aplicativo foi desenvolvido utilizando ferramentas para smartphones com sistema operacional Android 4.0.2 ou superior, onde foram privilegiados o uso dos próprios smartphones. Sabendo- se da existência de outros dispositivos que utilizam Android, como tablets e laptops, além de outros sistemas que poderiam ter acesso ao Sinop, foi reconhecido a criação e testes apenas em celulares como uma limitação do aplicativo.

● Povoamento do banco de dados: O banco de dados, como uma parte essencial para o funcionamento do aplicativo, é limitado pela forma como esse é povoado. Ainda não foram implementados meios de povoamento orgânicos, sem a necessidade de um agente administrador adicionando dados no sistema.

● Português como único idioma: A busca por animes, não sendo um problema unicamente brasileiro, poderia ser um nicho a ser aproveitado em outros países, onde a adição de outros idiomas seria um grande diferencial. Apesar da possibilidade de alterar o idioma da aplicação, o banco de dados como um

69

todo, não foi recriado em outros idiomas, assim sendo, tanto a visualização de notícias e animes, quanto a pesquisa não funcionaram perfeitamente em outros países, como os saxônicos, hispânicos e asiáticos.

● Funções não implementadas como o prototipado: As funções de alterar tema, alterar idiomas e de pedir ajuda, previamente citadas, não foram implementadas como o imaginado no início do projeto, tendo problemas de desempenho ou sequer funcionando.

● Possível má eficiência dos moderadores como supervisores: Para garantir um bom uso do Sinop.Anime foi idealizado o uso de moderadores para verificarem tags e comentários, podendo penalizar usuários que tenham desobedecido às regras ou recebido muitas denúncias por meio de outros usuários.

4.2 APRIMORAMENTOS FUTUROS

Sinop.Anime, desde sua concepção anos atrás, passou por modificações em sua aparência, estrutura e funcionalidades, para atender as necessidades e requisitos do sistema, aperfeiçoando-se com o passar do tempo. Mesmo após sua conclusão como projeto acadêmico, hão de existir melhorias que podem ser atribuídas à aplicação. Dessas, podem ser citadas:

● Adição de parsers para povoamento de banco de forma orgânica: Uma das atuais limitações do aplicativo é a necessidade da adição de animes e tags de forma manual, seja por SQL ou diretamente pela aplicação. Como possível solução para isso, existe a viabilidade da implementação de meios mais orgânicos de alimentar o banco de dados, entre esses, o uso de parsers e frameworks para inserção do conteúdo diretamente da internet, vindo de sites onde as animações estão hospedadas, fóruns ou wikis. Exemplo de tecnologias que podem ser implementadas são:

a) Neko HTML Parser9: É um parser que permite o escaneamento e tagueamento de páginas HTML, estando disponível para implementação em sistemas JAVA.

9 Neko HTML Parser. CyberNeko HTML Parser 1.9.21. Disponível em: . Acesso em: 9 set. 2019.

70

b) jsoup - JAVA HTML Parser10: jsoup é uma biblioteca JAVA que oferece APIs para extração e manipulação de dados em HTML. Esse utiliza parsers para a leitura de documentos HTML e manipulá-los, no mesmo modelo de documentação que navegadores de internet utilizam; c) VietSpider Web Data Extractor11: Parser que permite a extração de dados de sites, blogs e artigos, suportando também a inserção em bancos de dados como Oracle, mySQL e PostgreSQL. Tendo também como função um tagueamento de informações e correção de texto.

● Expansão para outras línguas: O problema da busca por animes não é exclusivo do território brasileiro, sendo também decorrente de outros países. O aplicativo Sinop.Anime, tendo por idioma geral apenas o português, limita seu uso apenas para localidades onde a população é familiar ou tem essa língua como nativa. A expansão para o inglês, por exemplo, seria uma grande adição ao Sinop, garantindo que mais pessoas ao redor do mundo - interessada nas funcionalidades do aplicativo - possam ter acesso a ele e seu uso com maior facilidade, por conta da grande variedade de indivíduos que têm afinidade com a língua inglesa. ● Melhorias de desempenho: O aplicativo, assim como muitos outros em seu estágio de testes e lançamento, ainda possui problemas de desempenho. Entre esses estão crashes, bugs e problemas de adaptação para alguns smartphones. Problemas que devem ser melhorados com o decorrer do tempo, a partir do feedback de usuários e uso do sistema. ● Anúncios e parcerias como fonte de renda: Como possível fonte de renda para o aplicativo, foi idealizado como aprimoramento para o futuro, a inclusão de anúncios direcionados para o público alvo e de forma que não atrapalhem o uso e imersão do usuário para com a aplicação. Ou seja, desejamos adicionar anúncios selecionados especificamente para o público e dispostos em locais da tela que não prejudiquem o uso do aplicativo. Além, de existir também a possibilidade de aquisição de parcerias com sites, empresas e plataformas que

10 jsoup: Java HTML Parser. jsoup: Java HTML Parser. Disponível em: . Acesso em: 9 set. 2019. 11 VietSpider Web Data Extractor. Java HTMLParser - VietSpider Web Data Extractor. Disponível em: . Acesso em: 9 set. 2019.

71

exibam os animes de maneira legal, direcionando o usuário que estiver na tela específica da animação para os serviços de streaming que possuem essa obra em seu catálogo. ● Desenvolvimento para demais dispositivos: O aplicativo Sinop.Anime foi criado para atender as demandas dos indivíduos em busca de suas animações, utilizando dispositivos Android com versão de no mínimo 4.0.2 (Ice Cream Sandwich). Porém, ao mesmo tempo de esse abranger uma maioria dos modelos de smartphones atuais, torna-se uma desvantagem, sabendo-se da grande variedade de dispositivos, e de seus sistemas operacionais, com acesso à internet no mercado mundial. Uma maneira para contornar essa limitação, seria o desenvolvimento da aplicação para outros dispositivos e sistemas, tais como: PCs (Windows); os tantos modelos de computadores da Apple, utilizando Mac OS; e iPhones (IOS). Para tal, é necessário a aquisição de diferentes ferramentas para a construção do aplicativo para esses diferentes dispositivos.

72

REFERÊNCIAS

ANDROID DEVELOPERS. Conheça o Android Studio. Disponível em: . Acesso em: 30 abr. 2019.

ANDROID DEVELOPERS. Painéis. Disponível em: . Acesso em: 16 abr. 2019.

ANICHART. AniChart: Seasonal Anime Charts. Disponível em: . Acesso em: 19 nov. 2018.

AUDACITY. Home. Disponível em: . Acesso em: 07 maio 2019.

AZUMA, Luís Eduardo; IKEDA, Ana Akemi. Consumo de Desenhos Japoneses: uma pesquisa exploratória. São Paulo, 2006. Acesso em 20. nov 2018.

CLEMENTS, Jonathan; MCCARTHY, Helen. Anime Encyclopedia: A century of japanese animation. Stone Press. 2014. p. 616.

CRUNCHYROLL. Largest Anime Streaming Service Crunchyroll Surpasses One Million Paid Subscribers. Disponível em: . Acesso em: 20 nov. 2018.

DOCUMENTOS GOOGLE. Sobre. Disponível em: . Acesso em: 23 set. 2019.

GIMP - GNU Image Manipulation Program. Home. Disponível em: . Acesso em: 07 maio 2019.

ENGINEERING AND TECHNOLOGY HISTORY WIKI. LICHTIG, Ryan. The History of Natural Language Processing. Disponível em: . Acesso em: 12 abr. 2019.

IZQUIERDO, Ivan. A arte de esquecer. São Paulo: Vieira & Lent, 2004. ISBN 85- 88782-14-6.

IZQUIERDO, I.; BEVILAQUA, L.; & CAMMAROTA, M. (2006). A arte de esquecer. Estudos Avançados, 20(58), 289-296. Disponível em: . Acesso em 23 set. 2019.

JONES, Karen Sparck. Natural Language Processing: A Historical Review. Current Issues in Computational Linguistics: In Honour of Don Walker. Linguistica Computazionale, vol. 9. Springer, Dordrecht, 1994. ISBN 978-0-585-35958-8.

JORNAL O DIA. Dublagem: Vozes famosas tornam profissionais íntimos para as crianças. Disponível em:

73

10/dublagem-vozes-famosas-tornam-profissionais-intimos-para-as-criancas.html>. Acesso em: 19 nov. 2018.

JOUP: JAVA HTML PARSER. jsoup: Java HTML Parser. Disponível em: . Acesso em: 9 set. 2019.

MÀRQUEZ, Lluis. Machine learning and natural language processing. Sória, p.3- 5, 2000. Disponível em:. Acesso em: 10 abr. 2019.

MONARD, Maria Carolina; BARANAUSKAS, José Augusto. Conceitos Sobre Aprendizado de Máquina. Sistemas Inteligentes Fundamentos e Aplicações. 1 ed. Barueri-SP: Manole Ltda, 2003. p. 89--114. ISBN 85-204-168.

MYSQL. MySQL Workbench. Disponível em: . Acesso em: 30 abr. 2019.

Neko HTML Parser. CyberNeko HTML Parser 1.9.21. Disponível em:. Acesso em: 9 set. 2019.

NOTEPAD++. Home. Disponível em: . Acesso em: 07 maio 2019.

OBVIOUS. Invasão Animê - A história da animação japonesa no Brasil. Disponível em: . Acesso em: 19 nov. 2018.

PARREIRA, M. S. A importância do pensamento de Saussure e da teoria de Chomsky para a Linguística Moderna. Domínios de Linguagem, v. 11, n. 3, p. 1024-1044, 1 out. 2017. Disponível em: . Acesso em 10 maio 2019.

REVISTA FORBES. MyAnimeList Passes Third Day Of Unexpected Downtime. Disponível em: . Acesso em: 23 set. 2019.

REVISTA DIGIDAY. While other niche streaming services falter, Crunchyroll crosses 2 million subscribers. Disponível em: . Acesso em: 23 set. 2019.

RIGHTSTUF. Global . Disponível em: . Acesso em: 19 nov. 2018.

SARDINHA, Tony Berber. Linguística de Corpus: histórico e problemática. DELTA, São Paulo, v.16, n.2, p.323-367, 2000. Disponível em:

74

. Acesso em: 01 maio 2019.

SECRETARIA DA EDUCAÇÃO DO ESTADO DO PARANÁ. Anime no Brasil. Disponível em: . Acesso em: 19 nov. 2018.

SOURCEFORGE. WampServer. Disponível em: . Acesso em: 30 abr. 2019.

THOUGHTCO. A Brief History of Anime - Part 1: From It's Origins to the Early 1980s. Disponível em: . Acesso em: 19 nov. 2018.

TOKYO OTAKU MODE NEWS. Exclusive Interview with the Founder of MyAnimeList, a Colossal Site with 120 Million Monthly PVs. Disponível em: . Acesso em: 20 nov. 2018.

UFRGS - REDES DE COMPUTADORES E APLICAÇÕES NA EDUCAÇÃO. O Processo de Fabricação de Memória. Disponível em . Acesso em: 20 nov. 2018.

VietSpider Web Data Extractor. Java HTMLParser - VietSpider Web Data Extractor. Disponível em: . Acesso em: 9 set. 2019.

YAMAGUSHI, Katsunori; WATANABE, Yasushi. Nihon animēshon eigashi. Japão: Yūbunsha. 1978. p. 38–44.

75

APÊNDICES

76

APÊNDICE A - LEVANTAMENTO DE REQUISITOS DA APLICAÇÃO

Necessidades

NC001 - Deve existir cadastramento de perfil “usuário”; NC002 - Deve existir cadastramento de “usuário moderador”; NC003 - Usuários moderadores devem possuir a função de cadastrar e alterar informações referentes aos animes; NC004 - Todos animes devem possuir tags; NC005 - Usuários devem poder cadastrar tags; NC006- O usuário deve poder colocar a própria biografia; NC007 - O usuário deve possuir login; NC008 - O usuário deve possuir senha; NC009 - O usuário comum deve ter acesso a lista de animes; NC010 - O usuário comum deve ter acesso a página de notícias; NC011 - Usuários moderadores podem ver perfis de usuários; NC012 - Os usuários podem comentar na página do anime; NC013 - Os usuários moderadores devem avaliar comentários; NC014 - O sistema deve exibir informações referentes aos animes; NC015 - Usuários moderadores devem possuir a função de banir usuários comuns; NC016 - Os animes devem possuir gênero; NC017 - As notícias devem possuir gênero; NC018 - O usuário deve ter facilidade no manuseio e utilização da aplicação; NC019 - O usuário deve poder fazer pesquisas dentro do aplicativo; NC021 - O usuário pode obter conquistas (de acordo com o número de tags cadastradas, entre outros); NC022 - Usuários moderadores devem possuir a função de cadastrar e alterar informações referentes aos usuários; NC023 - Os usuários podem responder comentários na página do anime; NC024 - Os usuários podem denunciar comentários na página do anime; NC025 - Os usuários moderadores devem avaliar tags; NC026 - Os usuários moderadores devem poder inserir notícias no aplicativo; NC027 - Os usuários moderadores podem excluir usuários; NC028 - Os usuários, mesmo os moderadores, não devem ter acesso às senhas de outros usuários;

77

NC029 - O sistema deve enviar uma notificação referentes a animes finalizados e em andamento; NC030 - O sistema deve notificar moderadores sobre denúncias de usuários; NC031 - O aplicativo deve estar disponível online; NC032 - O sistema deve definir as forças das tags dependendo da pesquisa feita; NC033 - Palavras de baixo calão devem ser removidas da pesquisa; NC034 - As pesquisas e os resultados devem ser armazenados.

Requisitos Funcionais

RF001 - O sistema deve realizar cadastros de pessoas, contendo: e-mail, nome de usuário e senha; RF002 - O sistema deverá prover a capacidade do usuário inserir tags; RF003 - O sistema deve receber informações referentes aos animes, como nome, sinopse, número de episódios, data de lançamento, classificação indicativa, status (finalizado/em andamento), estúdio, diretor; RF004 - O usuário pode possuir conquistas; RF005 - O sistema deve possuir página de notícias referentes aos animes; RF006 - Os usuários moderadores devem poder inserir notícias no aplicativo; RF007 - Os usuários moderadores podem alterar o tipo de usuários; RF008 - Os usuários moderadores podem excluir usuários; RF009 - O sistema deve permitir aos usuários fazer pesquisas por animes em linguagem natural; RF010 - O sistema deve possibilitar a inclusão de comentários por usuários; RF011 - O sistema deve possibilitar a inclusão de respostas para comentários de usuários; RF012 - O sistema deve possuir denúncia de comentários pelos usuários; RF013 - O sistema deve possuir dois tipos de usuários (moderador e comum).

Requisitos não funcionais

RNF001 - Segurança: Apenas usuários moderadores podem adicionar notícias; RNF002 - Segurança: Apenas usuários moderadores podem bloquear usuários comuns; RNF003 - Segurança: Usuários não podem ter acesso a manipulação de dados pela aplicação;

78

RNF004 - Segurança: A senha de qualquer usuário do sistema é confidencial, nenhum outro usuário pode ter acesso a mesma, independente da hierarquia; RNF005 - Desempenho: Alerta de notificação referentes a animes finalizados e em andamento; RNF006 - Desempenho: Alerta de notificação para moderadores, sobre denúncias de usuários; RNF007 - Usabilidade: O sistema deverá ser baixado na loja de aplicativos Android Google Play Store; RNF008 - Usabilidade: O sistema deve fazer uma média de força de tags. RNF009 - Usabilidade: O sistema deve bloquear pesquisas que tenham palavras proibidas (palavrão/palavras de baixo calão) RNF010 - Usabilidade: O sistema deve armazenar os dados de pesquisa e resultado gerado a partir da mesma;

Regras de Negócio

RN001 - Usuários que cadastram tags inadequadas devem ser penalizados; RN002 - Todas informações devem ser armazenadas; RN003 - Todas as tags devem ser aprovadas por um moderador.

Matriz de Rastreabilidade

Requisito Regra de Negócio Necessidade

NC001 NC002 RF001 RN002 NC007 NC008

RN001 NC004 RF002 RN002 NC005 RN003 NC025

NC003 RF003 RN002 NC004 NC012

79

RF004 RN002 NC021

NC010 RF005 - NC017 NC026

NC010 RF006 RN002 NC017 NC026

NC002 RF007 RN002 NC022

NC015 RF008 RN002 NC022 NC027

NC018 NC019 RF009 - NC032 NC034

NC012 RF010 RN002 NC013 NC023

NC013 RF011 RN002 NC023

RF012 RN002 NC024

NC001 RF013 - NC002

RNF001 RN002 NC026

RN001 RNF002 NC027 RN002

RNF003 - NC003

80

RNF004 - NC028

RNF005 - NC029

RNF006 - NC030

RNF007 - NC031

RNF008 RN002 NC032

RN001 RNF009 NC033 RN002

RNF010 RN002 NC034

81

APÊNDICE B - DICIONÁRIO DE DADOS

Tabela: Apêndice B 1 - Dicionário de dados (Tabela: Anime).

Tabela: Anime Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Nome VARCHAR(100) PK, NN X(100) Monster Estúdio VARCHAR(50) NN X(50) Finalizado Status VARCHAR(15) NN X(15) Diretor VARCHAR(50) NN X(50) Masayuki Kojima Kenzo Tenma possui Sinopse TEXT NN XXXX uma vida invejável... Data de 2004-04-06 DATE NN XXXX-XX-XX lanç. Número de 74 INT NN X ep. Class. 17 anos CHAR(7) NN XXXXXXX indicativa anime_ NULL VARCHAR(255) NN XXX(255) imagem

Fonte: Os autores (2019).

Tabela: Apêndice B 2 - Dicionário de dados (Tabela: Anime_Tag).

Tabela: Anime_Tag Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Anime_Nome VARCHAR(100) PK, FK,NN X(100) Shingeki no Kyojin Tag_Conteudo VARCHAR(100) PK, FK,NN X(100) Anime de macho Relação FLOAT XXX 3

Fonte: Os autores (2019).

82

Tabela: Apêndice B 3 - Dicionário de dados (Tabela: Comentario).

Tabela: Comentario Coluna Tipo de dado Restrições Formato padrão Exemplo de instância IDcomentario INT(20) PK,NN X(20) 1

usuario_Email VARCHAR(45) PK, FK,NN X(45) [email protected]

anime_Nome VARCHAR(100) PK,FK,NN X(100) Akira comentario_ TEXT NN XXXXX Muito bom :) cont num_like INT(11) NN X(11) 0

Fonte: Os autores (2019).

Tabela: Apêndice B 4 - Dicionário de dados (Tabela: Conquista).

Tabela: Conquista Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Quando cheguei aqui Nome VARCHAR(50) PK, NN X(50) era tudo mato Tipo VARCHAR(50) NN X(50) Fundador conquista VARCHAR(255) XXXXX _imagem

Fonte: Os autores (2019).

Tabela: Apêndice B 5 - Dicionário de dados (Tabela: Denuncia_comentario).

Tabela: Denuncia_comentario Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Usuario_ VARCHAR(45) PK, NN X(45) 1 Email comentario_ IDcomentari INT(20) PK,FK,NN XX(20) [email protected] o

Fonte: Os autores (2019).

Tabela: Apêndice B 6 - Dicionário de dados (Tabela: Denuncia_resposta).

Tabela: Denuncia_resposta Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Usuario_ VARCHAR(45) PK, NN X(45) 1 Email resposta_ INT(20) PK,FK,NN XX(20) [email protected]

83

Resposta_id

Fonte: Os autores (2019).

Tabela: Apêndice B 7 - Dicionário de dados (Tabela: Gênero).

Tabela: Gênero Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Tipo VARCHAR(45) PK, NN X(45) Aventura

Fonte: Os autores (2019).

Tabela: Apêndice B 8 - Dicionário de dados (Tabela: Genero_Anime).

Tabela: Genero_Anime Formato Coluna Tipo de dado Restrições Exemplo de instância padrão Anime_Nome VARCHAR(100) PK, FK,NN X(100) Naruto Genero_Conteudo VARCHAR(45) PK, FK,NN X(45) Artes Marciais

Fonte: Os autores (2019).

Tabela: Apêndice B 9 - Dicionário de dados (Tabela: Moderador).

Tabela: Moderador Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Usuario_Email VARCHAR(45) PK, FK,NN X(45) [email protected]

Fonte: Os autores (2019).

Tabela: Apêndice B 10 - Dicionário de dados (Tabela: Moderador_Noticia).

Tabela: Moderador_Noticia Formato Coluna Tipo de dado Restrições Exemplo de instância padrão Moderador_Usuario VARCHAR(45) PK, FK,NN X(45) [email protected] _Email Noticia_Manchete VARCHAR(50) PK, FK,NN X(50) Aho Girl – Comédia sobre garota idiota será encerrado em Dezembro

Fonte: Os autores (2019).

84

Tabela: Apêndice B 11 - Dicionário de dados (Tabela: Moderador_Tag).

Tabela: Moderador_Tag Formato Coluna Tipo de dado Restrições Exemplo de instância padrão Moderador_Usuario VARCHAR(45) PK, FK,NN X(45) [email protected] _Email Tag para VARCHAR(45) PK, FK,NN X(45) Batata pesquisa_Conteudo noticia_imagem

Fonte: Os autores (2019).

Tabela: Apêndice B 12 - Dicionário de dados (Tabela: Notícia).

Tabela: Notícia Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Osama Bin Laden era fã de Animes, Hentais Manchete VARCHAR(50) PK, NN X(50) e Games segundo arquivo da CIA Data DATE NN XXXX-XX-XX 2017-11-05 A cia liberou um arquivo a público com Conteúdo TEXT NN XXXXXX os dados do HD do PC que estava junto com Osama Bin Laden,...

Fonte: Os autores (2019).

Tabela: Apêndice B 13 - Dicionário de dados (Tabela: Palavras proibidas).

Tabela: Palavras proibidas Coluna Tipo de dado Restrições Formato padrão Exemplo de instância id_palavra VARCHAR(255) PK, NN X(50) _proibida

Fonte: Os autores (2019).

Tabela: Apêndice B 14 - Dicionário de dados (Tabela: Resposta).

Tabela: Resposta Coluna Tipo de dado Restrições Formato padrão Exemplo de instância resposta_id INT(20) PK, NN X(45) 1

85

PK, bota_tira_coturno@ usuario_Email VARCHAR(45) X(20) FK,NN coisor.com

comentario_ PK, INT(20) X(250) 1 idcomentario FK,NN resposta_cont TEXT NN X(20) É mentira num_like INT(20) NN XXXX-XX-XX 0

Fonte: Os autores (2019).

Tabela: Apêndice B 15 - Dicionário de dados (Tabela: Tag_Pesquisa).

Tabela: Tag_Pesquisa Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Conteúdo VARCHAR(100) PK, NN X(100) Alemanha Atividade TINYINT(1) NN TINYINT(1) 1 Tag_Tipo VARCHAR(20) PK, FK,NN X(20) Cenario

Fonte: Os autores (2019).

Tabela: Apêndice B 16 - Dicionário de dados (Tabela: Tipo_Tag).

Tabela: Tipo de tag Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Tipo VARCHAR(20) PK, NN X(20) Cenario

Fonte: Os autores (2019).

Tabela: Apêndice B 17 - Dicionário de dados (Tabela: Usuário).

Tabela: Usuário Coluna Tipo de dado Restrições Formato padrão Exemplo de instância Email VARCHAR(45) PK, NN X(45) [email protected] Nick VARCHAR(20) NN X(20) Milla-Dragnell Biografia VARCHAR(250) NN X(250) Nallu > all Senha CHAR(20) NN X(20) milla8552 Data de DATE NN XXXX-XX-XX 2017-11-07 Cadastro Quantidade INT NN XXX 10 de tags

Fonte: Os autores (2019).

86

Tabela: Apêndice B 18 - Dicionário de dados (Tabela: Usuario_Conquista).

Tabela: Usuario_Conquista Formato Coluna Tipo de dado Restrições Exemplo de instância padrão

Usuario_Email VARCHAR(45) PK, FK,NN X(45) [email protected]

Conquista_Nome VARCHAR(50) PK, FK NN X(50) Novato

Fonte: Os autores (2019).

Tabela: Apêndice B 19 - Dicionário de dados (Tabela: Usuario_Tag).

Tabela: Usuario_Tag Formato Coluna Tipo de dado Restrições Exemplo de instância padrão

Usuario_Email VARCHAR(45) PK, FK,NN X(45) bota_tira_coturno@cois or.com

Tag para VARCHAR(45) PK, FK,NN X(45) Cyborg Nazista pesquisa_Conteudo

Fonte: Os autores (2019).

Tabela: Apêndice B 20 - Dicionário de dados (Tabela: Usuario_Testerino).

Tabela: Usuario_Testerino Formato Coluna Tipo de dado Restrições Exemplo de instância padrão

Testerino_cont VARCHAR(45) PK, NN X(45) ruivo

Usuario_Email VARCHAR(45) PK, FK,NN X(45) bota_tira_coturno@ coisor.com

Fonte: Os autores (2019).

87

APÊNDICE C - VISTA GERAL DAS TABELAS

Tabela: Apêndice C 1 - Vista geral (Tabela: Anime).

Data de N de Class. anime_ Nome Status Estudio Diretor Sinopse Lanç. ep. Indicativa imagem

Akira Finaliz Katsuhir Em 1988, o 1988-07- 1 17 anos ado Movie o Otomo mundo é 16 Shinsha imerso numa Terceira Guerra Mundial...

Ao Finaliz Producti Ai Yoshioka 2017-07- 12 13 anos Haru ado on I.G Yoshimu Futaba tem 08 Ride ra algumas razões pelas quais ela quer...

Boruto Em Noriyuki Naruto era 2017-04- 31 13 anos and. Abe um jovem 05 shinobi com um talento incorrigível.. .

......

Fonte: Os autores (2019).

Tabela: Apêndice C 2 - Vista geral (Tabela: Anime_Tag).

Anime_Nome Tag_Conteudo Relação

Akira Pos apocalipse 12

Ao Haru Ride Garoto da mae morta 2

Boruto Bandana 3

88

......

Fonte: Os autores (2019).

Tabela: Apêndice C 3 - Vista geral (Tabela: Comentario).

idcomentario usuario_Email anime_Nome comentario_cont num_like

1 capivarar@coisor. Akira Muito bom :) 0 com

......

Fonte: Os autores (2019).

Tabela: Apêndice C 4 - Vista geral (Tabela: Conquista).

Nome Tipo conquista_imagem

Fate Você colocou 50 tags para fate_01 “Cenário”

Novato Você colocou sua primeira tag novato_01

Pirata das tags Você colocou 50 tags pirata das tags_01

Quando cheguei aqui era Fundador tudo mato_01 tudo mato

......

Fonte: Os autores (2019).

Tabela: Apêndice C 5 - Vista geral (Tabela: Denuncia_comentario).

Usuario_email comentario_idcomentario

[email protected] 2

Fonte: Os autores (2019).

Tabela: Apêndice C 6 - Vista geral (Tabela: Denuncia_resposta).

Usuario_email resposta_resposta_id

89

[email protected] 2

Fonte: Os autores (2019).

Tabela: Apêndice C 7 - Vista geral (Tabela: Gênero).

Tipo

Ação

Artes Marciais

Aventura

...

Fonte: Os autores (2019).

Tabela: Apêndice C 8 - Vista geral (Tabela: Gênero_Anime).

Anime_Nome Genero_Conteudo

Akira Ação

Naruto Aventura

Gintama Comedia

......

Fonte: Os autores (2019).

Tabela: Apêndice C 9 - Vista geral (Tabela: Moderador).

Usuario_Email

[email protected]

[email protected]

[email protected]

...

Fonte: Os autores (2019).

90

Tabela: Apêndice C 10 - Vista geral (Tabela: Moderador_Notícia).

Moderador_Usuario_Email Noticia_Manchete

[email protected] Aho Girl – Comédia sobre garota idiota será encerrado em Dezembro

[email protected] Osama Bin Laden era fã de Animes, Hentais e Games segundo arquivo da CIA

[email protected] Fate/Stay Night: Heavens – Filme chega a 1 bilhão na terceira semana em cartaz

......

Fonte: Os autores (2019).

Tabela: Apêndice C 11 - Vista geral (Tabela: Moderador_Tag).

Moderador_Usuario_Emai Tag para pesquisa_Conteudo

[email protected] Batata

Fonte: Os autores (2019).

Tabela: Apêndice C 12 - Vista geral (Tabela: Notícia).

Manchete Conteudo Data noticia_imagem

Aho Girl – Comédia O criador do mangá 2017-10-28 AhoGirl_2017_10_28 sobre garota idiota Aho Girl anunciou em será encerrado em seu site oficial que a Dezembro obra pode ser encerrada no 12° volume, cujo lançamento está previsto para 15 de dezembro no Japão.

......

Fonte: Os autores (2019).

91

Tabela: Apêndice C 13 - Vista geral (Tabela: Palavras_proibidas).

id_palavras_proibidas

A

Anime

Antes

...

Fonte: Os autores (2019).

Tabela: Apêndice C 14 - Vista geral (Tabela: Resposta).

resposta_id usuario_Email comentario_ resposta_cont num_like idcomentario

1 bota_tira_coturno 1 É mentira 0 @coisor.com

......

Fonte: Os autores (2019).

Tabela: Apêndice C 15 - Vista geral (Tabela: Tag_Pesquisa).

Conteudo Atividade Tipo_Tag_Tipo

2 Protagonistas 1 Personagem

Akira 1 Personagem

Batata 0 Personagem

......

Fonte: Os autores (2019).

Tabela: Apêndice C 16 - Vista geral (Tabela: Tipo_Tag).

Tipo

Cenario

Personagem

92

Sinopse

Fonte: Os autores (2019).

Tabela: Apêndice C 17 - Vista geral (Tabela: Usuário).

Email Nickname Biograph Senha Data de Quant. Usuario_ cadastro de tags imagem

bota_tira_ Botassauro Chilopoda não n40t3nh0 2017-11-07 32 bota_tira_ coturno@c -Rex presta! coturno@ oisor.com coisor.co m

capivarar Capivara Contemplem o senha123 2017-11-07 8 capivarar @coisor.c DoAcre otaku supremo @coisor.c om om

extermina Exterminad Eu… esqueci esqueci00 2017-11-07 8 extermina dora_a@c ora_a dora_a@c oisor.com oisor.com

......

Fonte: Os autores (2019).

Tabela: Apêndice C 18 - Vista geral (Tabela: Usuário).

Usuario_email Conquista_Nome

[email protected] Novato

[email protected] Novato

[email protected] Quando cheguei aqui era tudo mato

......

Fonte: Os autores (2019).

Tabela: Apêndice C 19 - Vista geral (Tabela: Usuário_Tag).

Usuario_Email Tag_para_pesquisa_Conteu do

93

[email protected] 2 Protagonistas

[email protected] Alemanha

[email protected] Alquimia

......

Fonte: Os autores (2019).

Tabela: Apêndice C 20 - Vista geral (Tabela: Usuário_testerino).

Usuario_Email Testerino_conteudo

[email protected] Ruivo

Fonte: Os autores (2019).

94

APÊNDICE D - TELAS EM DESTAQUE

Primeira tela do aplicativo, a qual possui função de login e direcionamento para o cadastro de novos usuários. Na caixa “E-mail” e “Senha”, o usuário, já cadastrado, insere seus dados e clica no botão “LOGIN”, verificando se o e-mail e senha inseridos correspondem a algum usuário previamente cadastrado no Banco. Se sim, o usuário é direcionado para a InicioActivity. Caso o mesmo não possua um cadastro, deve clicar em “cadastre-se”, que o direcionará à tela de cadastro.

Figura: Apêndice D 1 - Tela 1: LoginActivity.

Fonte: Os autores (2019).

95

Tela de cadastro, o usuário insere suas informações nos respectivos campos, “Nickname”, “E-mail”, “Senha”, “Confirmar senha” e “Biografia”. São esses os dados empregados na inserção da conta no Banco de Dados, sendo que, nos campos “Senha” e “Confirmar senha”, devem ser incorporados os mesmos dados, garantindo o êxito da operação.

Figura: Apêndice D 2 - Tela 2: CadastroActivity.

Fonte: Os autores (2019).

96

Tela Inicio é a tela principal do aplicativo. Nela, existe o campo de pesquisa; neste item, o usuário insere o nome ou tags do anime que deseja encontrar. Terminada a inserção, o mesmo deve clicar no botão “Search” (a lupa), consumando a operação e conduzindo-o à tela de resultados. Além disso, há o botão “Toggle”, localizado no canto superior esquerdo na tela. Ao ser clicado, este elemento abre uma aba de opções. Além disso, expõe as notícias referentes ao universo dos animes no momento correspondente à atividade do usuário no app.

Figura: Apêndice D 3 - Tela 3: InicioActivity.

Fonte: Os autores (2019).

97

Tela Resultado, onde é retornado os animes de determinada busca feita pelo usuário. A listagem segue os critérios de: força das tags pesquisadas e melhor pontuação para a pesquisa em relação ao nome. Cada título possui a função de botão para o acesso à tela com as informações mais detalhadas da obra pretendida, podendo alterar a relação da tag com o anime, caso este seja o anime pretendido pelo usuário.

Figura: Apêndice D 4 - Tela 4: ResultadoActivity.

Fonte: Os autores (2019).

98

Tela Anime. Após o usuário inserir, pesquisar ou apenas selecionar “akira” na Lista de animes, uma tela contendo informações sobre o anime em questão retorna.

Figura: Apêndice D 5 - Tela 5: AnimeActivity.

Fonte: Os autores (2019).

99

Aba Drawer, ainda na tela Inicio. Exibe uma barra de opções de acordo com a imagem acima. Seus elementos são: as informações do usuário (Nickname e E-mail) na parte superior; o botão “Inicio”, o qual retorna para a tela principal do aplicativo (se o cliente não estiver nela); o botão “Perfil”, que encaminha a uma tela de informações do usuário; botão “Lista de animes”, que dirige a uma tela com a lista completa de todos os animes já inseridos no Banco de Dados; botão “Noticias”, o qual direciona o usuário para uma tela com as últimas notícias inseridas no App; o botão “Configurações”, que dirige a tela de configurações do Aplicativo e, finalmente, o botão “Sair” faz o logout da conta do usuário.

Figura: Apêndice D 6 - Tela 6.1: MenuDrawer - Usuário comum.

Fonte: Os autores (2019).

100

Aba Drawer, ainda na tela Inicio, para usuários do tipo Moderador. Além de exibir todas as opções que a aba de um usuário comum, possui a opção “Denuncias”.

Figura: Apêndice D 7 - Tela 6.2: MenuDrawer - Usuário Moderador.

Fonte: Os autores (2019).

101

Tela de Perfil do usuário, nela são apresentadas as informações referentes ao usuário logado, como nickname, biografia, imagem, quantidade de tags sugeridas e conquistas adquiridas.

Figura: Apêndice D 8 - Tela 7: PerfilActivity.

Fonte: Os autores (2019).

102

Tela Alterar Informações, nessa tela o usuário pode alterar sua imagem de perfil, seu nickname, e sua biografia. Para salvar as novas informações, basta clicar no botão “OK”.

Figura: Apêndice D 9 - Tela 8: Tela de Alterações de informações.

Fonte: Os autores (2019).

103

Tela Lista de Animes, a qual mostra a lista integral dos animes disponíveis no banco de dados. A listagem segue o critério da ordem alfabética. Cada título possui a função de botão para o acesso à tela com as informações mais detalhadas da obra pretendida.

Figura: Apêndice D 10 - Tela 9: ListaAnimesActivity.

Fonte: Os autores (2019).

104

Tela de configurações. Possui as funções de configuração utilizadas pelo usuário, dentre elas, Configuração de conta, Configuração de notificações, Configuração de temas, Configuração de linguagem e Ajuda.

Figura: Apêndice D 11 - Tela 10: ConfiguracaoActivity.

Fonte: Os autores (2019).

105

Tela Configurações de Notificação. Possui as opções de ativar ou desativar as “Notificações de lançamento”, “Notificações de resposta a comentários” e “Notificações sobre conquistas”.

Figura: Apêndice D 12 - Tela 11: NotificationSettingsActivity.

Fonte: Os autores (2019).

106

Tela de configurações de linguagem. Na versão atual do aplicativo, a única linguagem disponível é o Português (Brasil).

Figura: Apêndice D 13 - Tela 12: LanguagesActivity.

Fonte: Os autores (2019).

107

Tela onde é possível alternar entre temas escuros e claros no aplicativo, sendo utilizado um botão switch para tal.

Figura: Apêndice D 14 - Tela 13: Tela de alteração de tema.

Fonte: Os autores (2019).

108

Tela de Ajuda. Oferece as opções de entrar em contato com os desenvolvedores, no caso de algum problema, e de acessar os Termos e Política de Privacidade do aplicativo.

Figura: Apêndice D 15 - Tela 14: HelplActivity.

Fonte: Os autores (2019).

109

Tela Configurações de conta, possui as opções de alterar senha e de desativar a conta.

Figura: Apêndice D 16 - Tela 15: AccountSettingsActivity.

Fonte: Os autores (2019).

110

Tela de Lista de notícias. Ao clicar em um título de uma das notícias citadas na lista correlata, o usuário será conduzido à página com as informações completas referentes ao assunto em questão.

Figura: Apêndice D 17 - Tela 16: ListaNoticiasActivity.

Fonte: Os autores (2019).

111

Tela de Notícias individual. Expõe a notícia selecionada na Lista de Notícias, revelando o autor, a data de publicação e seu conteúdo.

Figura: Apêndice D 18 - Tela 17: NoticiaActivity.

Fonte: Os autores (2019).

112

APÊNDICE E - CÓDIGOS EM JAVA REFERENTES AO MECANISMO DE PESQUISA

● removeDangerWords: é o principal agente na busca pela redução de ruído em uma pesquisa, fazendo uma exclusão de tokens que não são interessantes para o funcionamento da busca, como espaçamentos, preposições, conjunções. O método, por fim, armazena os tokens restantes em uma lista, que é inserida na tabela “usuario_testerino”, relacionando-se com o e-mail do usuário.

Código: Apêndice E 1 - removeDangerWords.

public void removeDangerWords() throws IOException, JSONException { String s = handleIntent(getIntent()); portugueseStemmer stemmer = new portugueseStemmer(); String[] words = s.split("\\s+");

JSONArray jsonForbidden = bdHelper.selectAllFromForbidden(getApplicationContext()); String [] palavras = new String[jsonForbidden.length()];

if (jsonForbidden != null) { for (int i=0;i

for (int i = 0; i < words.length; i++) { words[i] = words[i].replaceAll("[^\\w]", ""); list.add(words[i]); for (int j=0; j

113

list.remove(words[i]); } } }

for (int j=0; j < list.size(); j ++){ bdHelper.insertIntoTesterinoUsuario(getApplicationContext(), list.get(j), getUserEmail().toLowerCase()); } }

Fonte: Os autores (2019).

● makeAnimeArray: é utilizado para exibir na tela do usuário os resultados de sua pesquisa. Este requisita do Web-Service os resultados da pesquisa do “usuario_testerino” e disponibiliza esses resultados em um ListView, onde o usuário é capaz de selecionar um dos resultados. Um Intent fará a ligação do resultado com a próxima Activity, podendo verificar as informações da obra. É importante ressaltar que neste ato de selecionar a animação, é atualizada a relação de cada uma das tags pesquisadas com o anime, aumentando sua “força”, garantindo resultados mais precisos no futuro.

Código: Apêndice E 2 - makeAnimeArray.

public void makeAnimeArray() throws IOException, JSONException{

JSONArray jsonPesquisas = bdHelper.selectAllFromPesquisinha(getApplicationContext(), getUserEmail()); JSONArray jsonTesterino = bdHelper.selectAllFromTesterino(getApplicationContext(), getUserEmail());

if (jsonTesterino != null) { for (int i=0;i

114

JSONObject userObject = jsonTesterino.getJSONObject(i); arrayPesquisas.add(userObject.getString("Testerino_conteudo")); } }

for (int i = 0; i < jsonPesquisas.length(); i++) { JSONObject animeObject = jsonPesquisas.getJSONObject(i); String nomeAnime = animeObject.getString("Anime_Nome"); listaNomes.add(nomeAnime); }

ListView neoListView = (ListView) findViewById(R.id.listViewResultado); ArrayAdapter adapter = new ArrayAdapter(this, R.layout.list_style, R.id.textview, listaNomes);

neoListView.setOnItemClickListener(this); neoListView.setAdapter(adapter); }

@Override public void onItemClick(AdapterView parent, View v, int position, long id) { String nomeAnime = listaNomes.get(position); Bundle b = new Bundle(); Intent intent = new Intent(this, AnimeActivity.class); b.putString("nomeAnime", nomeAnime.toString()); intent.putExtras(b);

for (int i=0; i

115

} } intent.putExtra("myKey", arrayPesquisas); startActivity(intent); }

Fonte: Os autores (2019).

● minusUpdater: Para uma melhor eficácia da relação entre as tags e os animes, foi construído também o método “minusUpdater”. Este por sua vez, tem a função de diminuir a relação entre as tags pesquisadas e um anime, sendo utilizado caso um dos animes que o usuário escolheu não tenha sido ele desejava ou um engano do sistema, também garantindo resultados mais precisos conforme aumenta o número de pesquisas.

Código: Apêndice E 3 - minusUpdater.

public void minusUpdater(){ Intent in = getIntent(); Bundle b = in.getExtras(); String abcd[] = b.getStringArray("myKey"); for (int i = 0; i < abcd.length; i++) { try { bdHelper.updateMinusRelacao(getApplicationContext() , abcd[i] , getUserEmail().toLowerCase()); } catch (IOException e) { e.printStackTrace(); } } }

Fonte: Os autores (2019).

● finish (alterado): O método “finish” é um método nativo de programação em Java Android, estando diretamente ligado ao seu ciclo de vida, este é um dos

116

métodos responsáveis pela “destruição” da Activity corrente. Assim, foram realizadas alterações nesta, para que caso o usuário feche ou destrua a página do anime selecionado, a atualização da relação entre as tags de pesquisa e essa obra seja desfeita, isso por intermédio do método “minusUpdater”.

Código: Apêndice E 4 - finish.

@Override public void finish() { long endTime = System.nanoTime(); long totalTime = NANOSECONDS.toSeconds(endTime - startTime); Intent in = getIntent(); Bundle b = in.getExtras(); String abcd[] = b.getStringArray("myKey"); if (totalTime < 1.5) { minusUpdater(); } super.finish(); }

Fonte: Os autores (2019).