UNIVERSIDADE REGIONAL DE BLUMENAU
CENTRO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE SISTEMAS DE INFORMAÇÃO – BACHARELADO
B3-FEED: FEED DE NOTÍCIAS DA BOLSA DE VALORES
BASEADO EM SENTIMENTO
MARCELO WIPPEL
BLUMENAU
2020
MARCELO WIPPEL
B3-FEED: FEED DE NOTÍCIAS DA BOLSA DE VALORES
BASEADO EM SENTIMENTO
Trabalho de Conclusão de Curso apresentado
ao curso de graduação em Sistemas de
Informação do Centro de Ciências Exatas e
Naturais da Universidade Regional de
Blumenau como requisito parcial para a
obtenção do grau de Bacharel em Sistemas de
Informação.
Prof. Marcel Hugo, Mestre – Orientador
BLUMENAU
2020
B3-FEED: FEED DE NOTÍCIAS DA BOLSA DE VALORES
BASEADO EM SENTIMENTO
Por
MARCELO WIPPEL
Trabalho de Conclusão de Curso aprovado
para obtenção dos créditos na disciplina de
Trabalho de Conclusão de Curso II pela banca
examinadora formada por:
______________________________________________________
Presidente: Prof(a). Marcel Hugo – Orientador(a), FURB
______________________________________________________
Membro: Prof(a). Roberto Heinzle – FURB
______________________________________________________
Membro: Prof(a). Aurélio Faustino Hoppe – FURB
Blumenau, 17 de julho de 2020
Dedico este trabalho aos meus pais, meu
irmão, amigos e, especialmente, aos meus
professores que me ajudaram a chegar até aqui
e executá-lo com sucesso.
AGRADECIMENTOS
Aos meus pais e meu irmão pelo apoio que sempre me foi fornecido.
Aos meus amigos que sempre estiveram presentes desde o início do curso.
Aos meus colegas de trabalho que me auxiliaram nos momentos de dificuldade deste
trabalho.
À Andreza Sartori, por ter me auxiliado na primeira etapa deste trabalho, sempre
dando o apoio necessário.
Ao meu orientador, Marcel Hugo, que foi muito atencioso e prestativo durante todo o
desenvolvimento deste trabalho, sempre disposto a ajudar e propor melhorias.
Stay hungry, stay foolish.
Steve Jobs
RESUMO
Este trabalho apresenta o desenvolvimento de um aplicativo móvel que disponibiliza um feed
de notícias da Bolsa de Valores classificado por sentimento. Como motivação para o
desenvolvimento deste trabalho, tem-se o crescimento da quantidade de pessoas físicas na
Bolsa de Valores bem como a carência da população brasileira no campo da educação
financeira. Dessa forma, este trabalho visa desenvolver um aplicativo contendo um feed de
notícias classificado por sentimentos com objetivo de auxiliar os investidores da Bolsa de
Valores nas suas transações no mercado acionário. A aplicação foi desenvolvida utilizando
uma arquitetura cliente-servidor. Na camada cliente, o aplicativo móvel utilizado pelo usuário
foi implementado utilizando o framework Flutter, possibilitando a utilização em dispositivos
Android e iOS. A camada de servidor é dividida em dois serviços, o Web Scraper e o
backend: o Web Scraper foi implementado em Python, salvando as notícias num banco de
dados SQL Server hospedado na Azure; o backend foi implementado em Java utilizando o
framework Spring Boot, fazendo a análise de sentimentos através do serviço Amazon
Comprehend. Os dois artefatos da camada de servidor rodam em imagens Docker no serviço
de Aplicativos Web para Contêineres da Azure. O levantamento das informações foi realizado
através de busca na literatura sobre a educação financeira no Brasil, Web Scrapers e
processamento de linguagem natural, mais especificamente, análise de sentimentos. Foram
utilizados diagramas da Unified Modeling Language (UML) para representar os fluxos e a
estrutura do que foi desenvolvido, bem como foi realizado um questionário on-line com
objetivo de avaliar o aplicativo desenvolvido. Assim, foi possível inferir que o trabalho
realizado atingiu todos os objetivos propostos, além de facilitar os investidores no processo de
leitura de notícias antes de seus investimentos. Por fim, foram levantadas extensões e
melhorias futuras para este trabalho.
Palavras-chave: Análise de sentimentos. Web Scraping. Feed de notícias. Bolsa de Valores.
ABSTRACT
This project presents the development of a mobile application that provides a stock market
news feed classified by sentiment. As a motivation for the development of this project, there
is an increase in the number of stock investors in Brazil as well as the lack of the Brazilian
interested in the field of financial education. Considering that, this work aims to develop an
application containing a news feed classified by sentiment with the objective of assisting
stock exchange investors in their stock market transactions. The application was developed
under a client-server architecture. In the client layer, the mobile app was implemented using
the framework Flutter, enabling use on Android and iOS devices with a single code base. The
server side layer is divided into two services, the Web Scraper and the backend: the Web
Scraper was implemented in Python, saving the news in a SQL Server database hosted in
Azure; the backend was implemented in Java as the programming language and Spring Boot
as the main framework, analyzing the sentiment with Amazon Comprehend. Both artifacts of
the server side run in a Docker image on Azure Web App for Containers. The information
gathering was done through search in the literature about the financial education in Brazil,
Web Scrapers, and the natural language processing, more specifically its subfield, sentiment
analysis. UML diagrams were used to present the developed structures and flows, as well as
an online questionnaire that was applied in order to rate the developed app. It was possible to
conclude that this project accomplished all the proposed objectives, in addition to making the
daily news reading easier for investors. At last, extensions and future improvements were
raised for this project.
Key-words: Sentiment analysis. Web Scraping. News feed. Stock market.
LISTA DE FIGURAS
Figura 1 – Três perspectivas diferentes da estrutura de páginas web ....................................... 17
Figura 2 – Coletando informações da página através de um agente scraper utilizando XPath 18
Figura 3 – Buscas pelo termo sentiment analysis ..................................................................... 20
Figura 4 – Tela de Coleta de Tweets ........................................................................................ 21
Figura 5 – Tela de Predição da Ação ........................................................................................ 22
Figura 6 – Tela inicial do Brand Feeling .................................................................................. 23
Figura 7 – Tela de resultado da pesquisa do Brand Feeling ..................................................... 23
Figura 8 – Tela de polarização de sentenças extraídas do Twitter ........................................... 24
Figura 9 – Diagrama de Caso de Uso do aplicativo móvel ...................................................... 30
Figura 10 – Diagrama de Sequência do Web Scraper .............................................................. 32
Figura 11 – Diagrama de Sequência do aplicativo móvel ........................................................ 33
Figura 12 – Diagrama de sequência da API ............................................................................. 34
Figura 13 – Diagrama de classes do Web Scraper ................................................................... 35
Figura 14 – Diagrama de Classes da tela de log in do aplicativo móvel .................................. 36
Figura 15 – Diagrama de Classes da tela principal do aplicativo móvel .................................. 37
Figura 16 – Diagrama de Classes da tela de detalhe da notícia ................................................ 38
Figura 17 – Diagrama de Classes da tela de histórico de cotação do ativo .............................. 38
Figura 18 – Diagrama de Classes – domínio de notícias da API ............................................. 39
Figura 19 – Diagrama de Classes – domínio de parágrafos da API ......................................... 40
Figura 20 – Diagrama de Classes – domínio de tarefas agendadas .......................................... 41
Figura 21 – Diagrama de Implantação da aplicação ................................................................. 42
Figura 22 – Modelo Entidade Relacionamento ........................................................................ 44
Figura 23 – Protótipo das telas iniciais da aplicação ................................................................ 44
Figura 24 – Protótipo das telas de notícia e detalhes da notícia ............................................... 45
Figura 25 – Repositórios Github .............................................................................................. 47
Figura 26 – Tela de Log in e Registro do B3-Feed .................................................................. 54
Figura 27 – Tela de Últimas Notícias ....................................................................................... 55
Figura 28 – Tela de detalhe da notícia ...................................................................................... 56
Figura 29 – Tela de Histórico de Cotação ................................................................................ 57
Figura 30 – Primeira Pergunta .................................................................................................. 59
Figura 31 – Segunda Pergunta .................................................................................................. 59
Figura 32 – Terceira Pergunta .................................................................................................. 59
Figura 33 – Quarta Pergunta ..................................................................................................... 60
Figura 34 – Quinta Pergunta ..................................................................................................... 60
Figura 35 – Sexta Pergunta ....................................................................................................... 60
Figura 36 – Sétima Pergunta .................................................................................................... 61
Figura 37 – Primeira parte do questionário aplicado ................................................................ 66
Figura 38 – Segunda parte do questionário aplicado ................................................................ 67
Figura 39 – Terceira parte do questionário aplicado ................................................................ 68
Figura 40 – Quarta parte do questionário aplicado................................................................... 69
Figura 41 – Quinta parte do questionário aplicado................................................................... 70
Figura 42 – Sexta parte do questionário aplicado..................................................................... 71
Figura 43 – Sétima parte do questionário aplicado .................................................................. 72
LISTA DE QUADROS
Quadro 1 – Comparativo entre os trabalhos correlatos ............................................................ 25
Quadro 2 – Requisitos Funcionais do aplicativo móvel e sua relação com os UC .................. 28
Quadro 3 – Requisitos Não Funcionais do aplicativo móvel ................................................... 28
Quadro 4 – Requisitos Funcionais do Web Scraper ................................................................. 29
Quadro 5 – Requisitos Não Funcionais do Web Scraper ......................................................... 29
Quadro 6 – Requisitos Funcionais da API................................................................................ 29
Quadro 7 – Requisitos Não Funcionais da API ........................................................................ 30
Quadro 8 – Registro da execução das varreduras ..................................................................... 47
Quadro 9 – Busca de notícias e parágrafos do Exame.com...................................................... 48
Quadro 10 – Busca de notícias e parágrafos da Suno Notícias ................................................ 49
Quadro 11 – Busca das notícias e parágrafos do InfoMoney ................................................... 50
Quadro 12 – Registro do timer de execução da análise de sentimento das notícias................. 51
Quadro 13 – Registro do timer de execução da análise de sentimento das notícias................. 52
Quadro 14 – Serviço de detecção de sentimento ...................................................................... 53
Quadro 15 – Comparação do sistema desenvolvido com os trabalhos correlatos .................... 58
LISTA DE ABREVIATURAS E SIGLAS
API – Application Programming Interface
APK – Android Application Package
AVD – Android Virtual Device
AWS – Amazon Web Services
CSS – Cascading Style Sheets
DOM – Document Object Model
HTML – HyperText Markup Language
HTTP – Hyper Text Transfer Protocol
HTTPS – Hyper Text Transfer Protocol Secure
MER - Modelo de Entidade Relacionamento
ORM – Object-relational mapping
PLN – Processamento de Linguagem Natural
RF – Requisitos Funcionais
RNF – Requisitos Não Funcionais
SDK – Software Development Kit
SGBD – Sistema Gerenciador de Banco de Dados
SVM – Support Vector Machine
UC – Caso de Uso
UML – Unified Modeling Language
XHTML – eXtensible Hypertext Markup Language
XML – Extensible Markup Language
SUMÁRIO
1 INTRODUÇÃO .................................................................................................................. 14
1.1 OBJETIVOS ...................................................................................................................... 15
1.2 ESTRUTURA .................................................................................................................... 15
2 FUNDAMENTAÇÃO TEÓRICA .................................................................................... 16
2.1 EDUCAÇÃO FINANCEIRA NO BRASIL ...................................................................... 16
2.2 WEB SCRAPERS ............................................................................................................. 17
2.3 PROCESSAMENTO DE LINGUAGEM NATURAL: ANÁLISE DE SENTIMENTOS
19
2.4 TRABALHOS CORRELATOS ........................................................................................ 20
2.4.1 Um modelo para predição de Bolsa de Valores baseado em mineração de opinião ....... 20
2.4.2 Brand Feeling: um sistema para analisar o sentimento dos usuários em relação a uma
marca ............................................................................................................................... 22
2.4.3 Uso de técnicas de computação social para tomada de decisão de compra e venda de
ações no mercado brasileiro de Bolsa de Valores ........................................................... 24
2.4.4 Comparativo entre os trabalhos correlatos ...................................................................... 25
3 DESENVOLVIMENTO .................................................................................................... 27
3.1 LEVANTAMENTO DE INFORMAÇÕES ...................................................................... 27
3.2 ESPECIFICAÇÃO ............................................................................................................ 28
3.2.1 Diagrama de Caso de Uso do aplicativo móvel .............................................................. 30
3.2.2 Diagrama de Sequência do Web Scraper ........................................................................ 31
3.2.3 Diagrama de Sequência do aplicativo móvel .................................................................. 32
3.2.4 Diagrama de Sequência da API....................................................................................... 33
3.2.5 Diagrama de Classes do Web Scraper ............................................................................ 34
3.2.6 Diagrama de Classes do aplicativo móvel ...................................................................... 35
3.2.7 Diagrama de Classes da API ........................................................................................... 39
3.2.8 Diagrama de Implantação ............................................................................................... 41
3.2.9 Modelo Entidade Relacionamento .................................................................................. 43
3.2.10 Protótipo de telas da aplicação B3-Feed ........................................................................ 44
3.3 IMPLEMENTAÇÃO ........................................................................................................ 45
3.3.1 Técnicas e ferramentas utilizadas .................................................................................... 45
3.3.2 Desenvolvimento do sistema........................................................................................... 47
3.3.2.1 Web Scraper de notícias ............................................................................................... 47
3.3.2.2 Análise de sentimentos ................................................................................................. 51
3.3.3 Operacionalidade da implementação .............................................................................. 53
3.4 RESULTADOS E DISCUSSÕES ...................................................................................... 57
4 CONCLUSÕES .................................................................................................................... 62
4.1 EXTENSÕES ..................................................................................................................... 63
REFERÊNCIAS...................................................................................................................... 64
APÊNDICE A – QUESTIONÁRIO APLICADO VIA GOOGLE FORMS ..................... 66
14
1 INTRODUÇÃO
O número de novos investidores na Bolsa de Valores brasileira no ano de 2019
representa mais que o dobro de investidores registrados no fim do ano de 2018, demonstrando
que mais pessoas físicas estão buscando investir seu dinheiro no mercado de capitais
(BRASIL BOLSA BALCÃO, 2020). De acordo com dados de Brasil Bolsa Balcão (2020),
em 2018, 633.889 pessoas físicas investiam na Bolsa, em dezembro de 2019 1.292.536 de
pessoas físicas possuíam o CPF cadastrado em alguma corretora da Bolsa de Valores
(BRASIL BOLSA BALCÃO, 2020).
Ferreira (2017) reforça essa questão, apontando que o povo brasileiro está num
momento de ascensão econômica, e, que, com a democratização da informação, cada vez mais
a população deve estar a par do que é informado pelos grandes bancos e mídia de massa. Com
isso, as pessoas podem passar a estar numa posição de controle do seu dinheiro, além da
ciência dos investimentos que mais se encaixam com o seu perfil.
Ainda, pode-se cruzar a esses dados o fato de grande parte dos movimentos do
mercado acionário serem influenciados por notícias dos mais diversos tipos (SILVA;
CARVALHO; NUNES, 2012). Conforme evidenciado por Silva, Carvalho e Nunes (2012), os
ativos listados na Bolsa de Valores possuem a característica de oscilarem de preço baseado
em acontecimentos ocorridos na política, economia e sociedade, que geralmente são
veiculados através de notícias. Como cada vez mais o acesso à informação está
democratizado, o mercado tende a refletir a curtíssimo prazo os noticiários que, normalmente,
são acessados pelos investidores em seus portais na internet.
Silva, Carvalho e Nunes (2012) também apontam que os principais movimentos que
acontecem a curto prazo em algum ativo, tanto para altas quanto para baixas, estão
relacionados às notícias que causam uma oscilação, devido a um sentimento de nervosismo no
mercado. Esses movimentos de altas e baixas são os que possibilitam os investidores a
gerarem suas margens de lucro através da venda após a valorização de seus ativos, ou até
mesmo através de uma operação vendida, no qual o lucro é feito através da desvalorização de
um ativo.
Diante desse cenário, este trabalho tem como objetivo desenvolver um sistema capaz
de extrair informação dos principais portais de notícias referentes ao mercado de capitais,
analisar o sentimento do conteúdo extraído da notícia e disponibilizá-la num aplicativo,
contendo o feed de notícias. Com isso, os investidores brasileiros serão capazes de consumir
suas notícias diárias sobre o mercado financeiro de forma fácil e intuitiva, já com o viés da
matéria sem a necessidade de uma leitura detalhada.
15
1.1 OBJETIVOS
O objetivo deste trabalho é desenvolver um sistema capaz de extrair informação dos
principais portais de notícias e disponibilizar num aplicativo contendo um feed de notícias
classificado por sentimentos, a fim de auxiliar os investidores da Bolsa de Valores nas suas
transações no mercado acionário.
Os objetivos específicos são:
a) extrair as informações das últimas notícias de revistas on-line sobre economia,
política, finanças, ações, Bolsa de Valores e investimentos através da extração do
conteúdo das páginas web;
b) efetuar o processamento dos dados vindos das páginas web, buscando no texto o
nome de ativos e empresas listadas na Bolsa de Valores para efetuar uma
classificação;
c) classificar o sentimento das informações coletadas utilizando a API do serviço
Amazon Comprehend para a de análise de sentimentos, visando medir
automaticamente o sentimento relatado na notícia, para que possa ser previsto um
viés de alta ou baixa para o ativo;
d) disponibilizar um aplicativo que apresenta um feed de notícias diárias classificadas
por seu sentimento, utilizando o framework Flutter para o desenvolvimento.
1.2 ESTRUTURA
Este trabalho está dividido em quatro capítulos. O primeiro capítulo apresenta a
introdução do trabalho desenvolvido, a justificativa, os objetivos e a definição de sua
estrutura.
No segundo capítulo, são abordados os fundamentos e conceitos mais relevantes para o
desenvolvimento deste trabalho. São abordados os temas referentes à educação financeira no
Brasil, Web Scrapers, processamento de linguagem natural, mais especificamente sobre
análise de sentimentos, por fim, são apresentados os trabalhos correlatos.
O terceiro capítulo aborda o desenvolvimento do trabalho, sendo apresentados o
levantamento de requisitos, os diagramas de sequência, a atividade, a implantação e o modelo
de entidade e relacionamento; também é apresentada a implementação, as técnicas e
ferramentas utilizadas e a operacionalidade da implementação. Assim como os resultados e
discussões.
16
2 FUNDAMENTAÇÃO TEÓRICA
Neste capítulo, serão apresentados os principais conceitos e fundamentos para a
pesquisa proposta, organizados da seguinte forma: a seção 2.1 aborda sobre a educação
financeira no Brasil; a seção 2.2 apresenta o conceito de Web Scrapers; e a seção 2.3
contextualiza a parte da análise de sentimentos.
2.1 EDUCAÇÃO FINANCEIRA NO BRASIL
Conforme Savoia, Saito e Santana (2007), existe uma situação muito preocupante
quanto à educação financeira no Brasil, requisitando uma urgência com relação à inserção
desse tema para a população brasileira. Por ser um país com uma distribuição de renda
desigual, no qual a maioria dos recursos são direcionados ao Estado, a propagação de uma
educação financeira de qualidade é essencial para seu povo, para que possa existir uma
excelência na administração dos recursos contidos pelos indivíduos e famílias, os quais são
escassos (SAVOIA; SAITO; SANTANA, 2007).
Conforme Silva et al. (2017), mesmo que as instituições governamentais de educação
não obriguem o ensino de uma disciplina específica de educação financeira, ela poderia ser
espalhada de forma multidisciplinar, sendo suficiente para os indivíduos conseguirem
administrar sua vida financeira. Todavia, a educação financeira, não estando presente
diretamente na base educacional das crianças, também não estará presente no dia a dia das
famílias, dificultando a fixação dessa disciplina na base populacional.
Silva et al. (2017) adicionam que a questão da previdência também influencia
diretamente na educação financeira da população, já que boa parte dela conta com a
aposentadoria para se manter no futuro. Por outro lado, as políticas de aumento da
contribuição mínima e o aumento da idade mínima para a aposentadoria evidenciam cada vez
mais a necessidade de o povo estar no controle da administração do seu próprio dinheiro.
Ferreira (2017) complementa que nos últimos tempos o povo brasileiro está passando
por uma ascensão econômica, aumentando o poder de compra da população, e, cada vez mais,
aumenta o acesso à informação. Por outro lado, os grandes bancos abrem cada vez mais um
leque de possibilidades de investimento, o que dificulta o entendimento de tudo isso pela
grande massa. Apesar desse movimento ser muito bom, o autor afirma que isso tudo pode
piorar a situação financeira da maioria da população, que não possui o conhecimento básico
sobre o assunto, o que pode se tornar desastroso para a vida deste indivíduo, ou até mesmo
para a economia de todo o país.
17
2.2 WEB SCRAPERS
Web Scrapers são um conjunto de técnicas de extração de dados desestruturados de
páginas da internet, incluindo o processamento e a transformação desses dados, finalizando
com a persistência numa base estruturada de dados. Normalmente, o conceito de Web
Scrapers caminha junto ao conceito de Web Crawlers – programas que possuem uma rotina
de extração de dados automatizada, de diferentes tipos de sites, em que esses robôs varrem os
links para outros sites, e, assim, extraem dados, através de uma busca recursiva na web
(VARGIU; URRU, 2013).
Conforme Adams e McCrindle (2008), os Web Crawlers são robôs que visam extrair
dados específicos do máximo de páginas possíveis, normalmente com o objetivo de indexar as
páginas para serem usadas em motores de busca, como o Google. Os Web Scrapers extraem
dados de páginas específicas, tendo em vista a obtenção de dados para um caso de uso
característico. Quando uma API provendo dados estruturados não é disponibilizada, os Web
Scrapers são uma boa alternativa para extração de dados (VARGIU; URRU, 2013).
De acordo com Saurkar, Pathare e Gode (2018), as páginas web são documentos
escritos em Hypertext Markup Language (HTML) ou em eXtensible Hypertext Markup
Language (XHTML). Os documentos web são representados por uma estrutura de elementos
em árvore (Figura 1), chamada de Document Object Model (DOM). Nessa estrutura, todo o
conteúdo da página é disposto através de elementos que exibem o conteúdo da página.
Figura 1 – Três perspectivas diferentes da estrutura de páginas web
Fonte: Saurkar, Pathare e Gode (2018).
Saurkar, Pathare e Gode (2018) observam que, do ponto de vista operacional, o Web
Scraper atua como se fosse uma cópia e cola de dados, porém, a diferença é que esses passos
são feitos através de um script, em que o primeiro passo é a extração do HTML da página
através de um agente, que também pode ser chamado de robô. Esse agente interage com a
18
página da mesma forma que um ser humano interagiria, acessando links, submetendo
formulários, navegando em diferentes páginas (SAUKAR; PATHARE; GODE, 2018).
Após efetuar a extração do HTML da página, o agente busca na página o conteúdo que
for especificado no script através de seletores CSS ou XPaths. Cascading Style Sheets (CSS) é
uma linguagem utilizada para adicionar estilo numa página, dessa forma, é possível encontrar
elementos numa página através do estilo que esse elemento possui ou através dos atributos
class e id. Outra forma existente de extrair conteúdo é através da XPath, uma linguagem de
consulta utilizada para selecionar elementos em documentos baseados em Extensible Markup
Language (XML) (SAUKAR; PATHARE; GODE, 2018). Esse processo de busca de
elementos pode ser representado através da Figura 2.
Figura 2 – Coletando informações da página através de um agente scraper utilizando XPath
Fonte: Saurkar, Pathare e Gode (2018).
Após extrair os conteúdos de interesse utilizando os seletores CSS ou XPaths, Glez-
Peña et al. (2013) observam que o agente pode extrair qualquer propriedade de uma tag
HTML. Porém, é importante que a implementação do agente seja feita da forma mais genérica
possível, para que o agente se torne menos vulnerável a alterações nas páginas HTML ou
seletores do CSS. Esse é um problema que é recorrente na implementação de Web Scrapers,
já que os robôs extraem o conteúdo de uma página por meio de sua estrutura. Caso ela sofra
alterações pelo provedor da página, o robô pode não encontrar determinado dado (GLEZ-
PEÑA et al., 2013).
Sobre a segurança e os direitos autorais dos dados coletados, Vargiu e Urru (2013)
citam a importância da verificação da política de privacidade e termos de uso dos websites
que são extraídos através de Web Scrapers, para que a extração seja feita de forma consciente,
a fim de não existirem problemas legais na utilização dos dados extraídos. Outro ponto
19
levantado é quanto aos anúncios contidos em páginas web, que, se forem considerados na
extração e transformação dos dados, podem trazer imprecisões e ruídos à base de dados, já
que os anúncios normalmente não estão relacionados ao assunto que está sendo extraído na
página (VARGIU; URRU, 2013).
2.3 PROCESSAMENTO DE LINGUAGEM NATURAL: ANÁLISE DE SENTIMENTOS
De acordo com Rosa (2011), o Processamento de Linguagem Natural (PLN) pode ser
definido como a capacidade de uma máquina interpretar e processar a mesma linguagem que
os seres humanos utilizam. Finatto, Lopes e Silva (2015) citam também que, para o PLN, o
objetivo é criar soluções para problemas relativamente pontuais, sempre considerando uma
margem de erro, bem como uma abrangência de atuação pré-definida do algoritmo.
De acordo com Liu (2012), a análise de sentimentos, também conhecida como
Mineração de Opinião, é o processo de extrair o sentimento de determinada sentença, que é
um desafio do PLN. Como a análise de sentimentos possui grande aplicabilidade para a área
de serviços e indústria, houve uma explosão de pesquisas acadêmicas nesta área, trazendo
diversas APIs para o mercado.
Liu (2012) afirma também que extrair os sentimentos das sentenças de forma precisa é
uma tarefa difícil, já que, em muitos casos, as sentenças podem possuir mais de uma opinião
retratada, ou, até mesmo, diversos sentimentos serem expressos numa mesma sentença. Essa
dificuldade é também retratada por Fersini et al. (2016), que descrevem os três níveis da
análise de sentimentos: message level (nível de mensagem), a análise é feita baseada no texto
completo; sentence level (nível de sentença), o texto é fragmentado em sentenças e depois
analisado; por fim, entity level (nível de entidade), toda a análise é feita somente nas entidades
que a sentença possui, sendo a menor parte que uma sentença pode possuir.
Uma abordagem da análise de sentimentos é a classificação entre texto objetivo e
subjetivo. Em casos em que o texto é identificado como objetivo, por exemplo: “Não sei se o
nome dela é Maria.”, a análise de sentimentos não se faz necessária, já que o texto não possui
opinião e não deve ser considerado para influenciar no sentimento do texto completo. Já no
texto subjetivo, por exemplo: “Os óculos de Maria são tão lindos!”, normalmente são
encontradas as opiniões sobre determinado assunto no qual a análise de sentimentos pode ser
aplicada para descobrir a polaridade do texto (FERSINI et al., 2016).
De acordo com Fersini et al. (2016), é possível verificar o quanto a análise de
sentimentos está se tornando cada vez mais relevante em termos de pesquisa. O gráfico
apresentado na Figura 3 retrata as buscas no Google referente ao termo sentiment analysis
20
(análise de sentimentos), na qual é possível visualizar que o interesse na área é crescente,
trazendo inovação e mais possibilidades nas diversas abordagens.
Figura 3 – Buscas pelo termo sentiment analysis
Fonte: Fersini et al. (2016).
2.4 TRABALHOS CORRELATOS
Neste capítulo, são apresentados três trabalhos correlatos, os quais possuem
características diretamente relacionadas ao trabalho proposto. A seção 2.4.1 detalha o trabalho
de Lima (2016), que propõe um modelo de predição de preços de ações da Bolsa de Valores
baseado em mineração de opinião no Twitter. A seção 2.4.2 descreve um sistema para análise
de sentimentos dos usuários sobre determinada marca, utilizando dados do Twitter (COPPI
JUNIOR, 2017). Finalmente, a seção 2.4.3 apresenta um modelo de decisão de compras e
vendas na Bolsa de Valores baseado em opinião no Twitter (ALVES, 2015).
2.4.1 Um modelo para predição de Bolsa de Valores baseado em mineração de opinião
Lima (2016) propôs um modelo para predição de valores da Bolsa de Valores, baseado
na mineração de opinião do Twitter. Para isso, técnicas de PLN e Support Vector Machine
(SVM) foram utilizadas para prever o valor de determinada ação. Foi utilizado a API
Sentiment140 para efetuar a análise de sentimentos dos dados extraídos do Twitter, junto a
uma aplicação Java utilizando Weka, para a mineração e tratamento dos dados.
Segundo Lima (2016), o trabalho tem a finalidade de estabelecer um relacionamento
direto entre o sentimento das pessoas expressos via redes sociais com os movimentos de
mercado que acontecem na Bolsa de Valores. Além disso, Lima (2016) evidencia que o
trabalho possui a finalidade de ser uma ferramenta para auxiliar os investidores na tomada de
decisão em suas decisões de compra e venda de ativos no mercado acionário.
Após fornecer as credenciais e efetuar o log in, o usuário é redirecionado para a tela de
coleta de Tweets (Figura 4), na qual será informado uma palavra-chave que servirá de
argumento para a API do Twitter efetuar a pesquisa de Tweets relacionados. Após todo o
processo de coleta e processamento das informações, os dados são gravados no banco de
21
dados, bem como é apresentado um gráfico contendo o percentual de polaridade do
sentimento.
Figura 4 – Tela de Coleta de Tweets
Fonte: Lima (2016).
Por fim, o sistema disponibiliza a informação das predições através da tela de Predição
da Ação (Figura 5), na qual apresenta o ativo que foi pesquisado e o período de coleta dos
dados do Twitter. Também são apresentados os resultados numa tabela contendo as
informações de data, Tweets positivos, Tweets negativos, valor de fechamento, bem como o
viés, junto à informação de acerto ou erro do viés previsto pelo sistema.
22
Figura 5 – Tela de Predição da Ação
Fonte: Lima (2016).
2.4.2 Brand Feeling: um sistema para analisar o sentimento dos usuários em relação a uma
marca
O trabalho de Coppi Junior (2017) tem como objetivo efetuar a análise de sentimentos
de usuários em relação a uma marca baseada em mineração de opinião no Twitter. Para isso,
utilizou a API do Twitter para efetuar a extração dos Tweets, e a biblioteca SentiWordNet
para verificar os sentimentos relacionado a determinado Tweet. Para implementação do
sistema foi utilizado Java na parte de servidor e a interface foi implementada em PHP e
AngularJs.
Na solução proposta pelo autor são disponibilizadas duas telas para os usuários. Na
tela inicial do sistema (Figura 6), é disponibilizada uma interface com um campo para efetuar
a pesquisa sobre a marca informada, as últimas pesquisas efetuadas, bem como o histórico das
marcas, no qual é possível filtrar pelos resultados de sentimento positivo e negativo.
23
Figura 6 – Tela inicial do Brand Feeling
Fonte: Coppi Junior (2017).
Após efetuar a pesquisa, o usuário é redirecionado para a outra tela do sistema (Figura
7), no qual é apresentado o resultado da pesquisa de diversas maneiras, dispondo ao usuário
uma maior flexibilidade na leitura dos dados. Essa tela, além de apresentar os resultados
obtidos, apresenta também as palavras com mais ocorrências, numa estrutura de nuvem de
palavras.
Figura 7 – Tela de resultado da pesquisa do Brand Feeling
Fonte: Coppi Junior (2017).
24
2.4.3 Uso de técnicas de computação social para tomada de decisão de compra e venda de
ações no mercado brasileiro de Bolsa de Valores
Alves (2015) descreve a aplicação de técnicas de Computação Social para a tomada de
decisões nas operações de compra e venda de ativos da Bolsa de Valores. Para a aplicação
deste trabalho, foram coletados Tweets de agosto de 2013 a abril de 2015 que continham
palavras semelhantes ao nome de nove empresas listadas na Bolsa selecionadas pelo autor.
Para efetuar a tomada de decisões de compra e venda, foi analisado o sentimento dos Tweets,
juntamente aos dados históricos para a aplicação de tendências de valor.
De acordo com Alves (2015), para efetuar a análise de sentimentos, foi utilizada a
ferramenta LingPipe. Essa biblioteca foi escolhida por permitir ao usuário efetuar o
treinamento através de dois conjuntos de dados próprios, um de treinamento e outro de teste.
Para efetuar o treinamento da aplicação, é necessária uma classificação manual de um
conjunto de sentenças, para que a ferramenta possa posteriormente classificar os sentimentos
baseado no que foi aprendido (ALVES, 2015).
Para efetuar a polarização de um conjunto de treinamento, Alves (2015) implementou
uma ferramenta em Java que disponibiliza uma interface (Figura 8) para que um especialista
possa, manualmente, polarizar um conjunto de sentenças previamente extraídas do Twitter.
Desse modo, são gerados dois arquivos, um com as informações polarizadas positivamente, e,
outro, com as informações polarizadas negativamente (ALVES, 2015).
Figura 8 – Tela de polarização de sentenças extraídas do Twitter
Fonte: adaptado de Alves (2015).
O trabalho não apresenta uma interface gráfica amigável ao utilizador do sistema, já
que o objetivo é fornecer um modelo para a previsão da cotação de ativos da Bolsa de Valores
somente para fins acadêmicos. Por fim, Alves (2015) descreve que os resultados obtidos no
emprego da análise de sentimentos utilizando dados obtidos do Twitter é promissor.
25
Entretanto, faz-se necessário o cruzamento dessas informações obtidas em redes sociais com
dados oriundos de análises técnicas, para que se possa ter um resultado mais preciso.
2.4.4 Comparativo entre os trabalhos correlatos
No Quadro 1 é apresentado um comparativo entre os trabalhos correlatos de Lima
(2016), Coppi Junior (2017) e Alves (2015), no qual as linhas representam as funcionalidades
e as colunas representam os trabalhos relacionados.
Quadro 1 – Comparativo entre os trabalhos correlatos Correlatos
Características Lima (2016) Coppi Junior (2017) Alves (2015)
Objetivo Prever os valores de
ativos
Analisar o
sentimento da
população sobre
alguma marca
Tomar decisões de
compra e venda de
ativos
Extração de dados API do Twitter API do Twitter API do Twitter
Extração de dados de portais
de notícia Não Não Não
Algoritmo de aprendizado de
máquina
Support Vector
Machine (SVM) Não
Regressão
Logística
Algoritmo de Análise de
Sentimento Sentiment140 SentiWordNet LingPipe
Dicionário de dados utilizado
pelo algoritmo de análise de
sentimentos
Não possui
Fornecido pela
biblioteca
SentiWordNet
Possui uma
interface para
classificar o
dicionário de dados
que será utilizado
para a análise de
sentimentos
Interface para a apresentação
dos resultados obtidos após a
análise de dados
Web Web Não possui
Disponível para dispositivos
móveis Não
Sim, através de
página Web
responsiva
Não
Fonte: elaborado pelo autor.
Conforme demonstrado no Quadro 1, pode-se verificar que os três trabalhos
compartilham as características de extração de dados do Twitter bem como a análise de
sentimentos dos dados extraídos, utilizando diferentes frameworks. Enquanto Lima (2016) e
Alves (2015) buscam prever os valores de ativos da Bolsa e tomar decisões de compras e
vendas, Coppi Junior (2017) analisa o sentimento da população sobre determinada marca.
Além disso, Alves (2015) utiliza dados históricos da Bolsa de Valores para efetuar
uma verificação cruzada de dados técnicos sobre ativos bem como dados sobre o sentimento
de determinado ativo na rede social Twitter. Para a análise de sentimentos, enquanto Alves
(2015) e Coppi Junior (2017) utilizam frameworks que analisam o sentimento baseado num
26
dicionário de dados que pode ser customizado, Lima (2016) utiliza uma API que efetua a
análise de sentimentos sem a necessidade de uma pré-informação de um dicionário de dados.
Referente ao dicionário de dados, Alves (2015) disponibiliza uma interface
implementada em Java para que um especialista faça a leitura de diversos Tweets coletados e
os classifique conforme seu sentimento, para que sirva como fonte de dados para a biblioteca
LingPipe. Neste ponto, Alves (2015) se diferencia dos outros dois trabalhos, já que é o único
que oferece uma interface na qual o especialista pode fazer um treinamento preliminar de
forma mais fácil, já baseando-se em Tweets reais que foram previamente coletados pela
ferramenta.
Quanto à interface disponibilizada para os usuários consultarem os resultados, Coppi
Junior (2017) disponibiliza uma interface web para os usuários, com uma experiência
agradável aos usuários, disponibilizando os dados coletados sobre uma marca de diversas
formas: gráficos, nuvem de palavras e tabelas com dados históricos. Lima (2016) também
disponibiliza uma interface web, apresentando os resultados obtidos através da análise de
sentimentos, cruzando com o fechamento do ativo no dia em questão. Alves (2015) não
disponibiliza uma interface para os usuários consultarem os resultados da aplicação, isto é, os
seus resultados são disponibilizados somente através de dados brutos e planilhas. A aplicação
de Coppi Junior (2017) é a única que oferece uma interface responsiva para ser acessada
também via dispositivos móveis.
27
3 DESENVOLVIMENTO
Neste capítulo, será apresentado o conteúdo referente ao desenvolvimento da
aplicação. A seção 3.1 apresenta o levantamento de informações; a seção 3.2 aponta a
especificação dos Requisitos Funcionais (RF) e Requisitos Não Funcionais (RNF) do Web
Scraper e do aplicativo móvel. Nesta seção ainda são apresentados outros diagramas da
Unified Modeling Language (UML) utilizados para a representação do fluxo da aplicação, sua
estrutura de classes e arquitetura. A seção 3.4 aborda os resultados e discussões, apresentando
a comparação entre o trabalho desenvolvido e os trabalhos correlatos.
3.1 LEVANTAMENTO DE INFORMAÇÕES
Este trabalho apresenta o desenvolvimento de um feed de notícias do mercado
financeiro classificado por sentimento, intitulado B3-Feed. A aplicação é composta por três
partes. A primeira parte se trata de um Web Scraper, responsável por buscar as notícias de três
portais diferentes e armazená-las no banco de dados. A segunda parte é a API, que é
responsável por classificar o sentimento das notícias e disponibilizar para o consumo da
aplicação cliente. A terceira parte se trata da aplicação cliente, um aplicativo móvel que é
utilizado pelo usuário final e permite a visualização das notícias e os detalhes sobre o
sentimento dela.
O Web Scraper é responsável por extrair as notícias sobre o mercado acionário de três
portais: Exame.com1, Suno Notícias2 e InfoMoney3. Para cada portal, o Web Scraper busca a
listagem das últimas notícias, e, após isso, extrai o conteúdo de cada uma delas. O título, os
parágrafos e os metadados da notícia são gravados no banco de dados para serem acessados
pela API.
A API possui a responsabilidade de extrair o sentimento dos títulos das notícias e seus
parágrafos, além de disponibilizar os dados estruturados para serem consumidos pelo
aplicativo móvel. O processo de extração de sentimento funciona mediante integração com o
serviço de análise de sentimentos da Amazon Web Services (AWS), titulado AWS
Comprehend. Após o processo de análise de sentimentos, todos os dados analisados são
novamente atualizados no banco de dados.
O aplicativo móvel permite ao usuário final visualizar todas as notícias extraídas dos
portais, podendo filtrar por título da notícia, ativos associados e por data de postagem. Além
1 Exame.com – Disponível em: https://exame.com/. Acesso em: 1° jun. 2020. 2 Suno Notícias – Disponível em: https://www.sunoresearch.com.br/noticias/. Acesso em: 1° jun. 2020. 3 InfoMoney – Disponível em: https://www.infomoney.com.br/. Acesso em: 1° jun. 2020.
28
disso, o usuário pode visualizar os detalhes da notícia, contendo a lista de ativos citados na
notícia, gráfico com a média dos sentimentos dos parágrafos, link para a leitura da matéria na
íntegra e também um gráfico interativo para a visualização da cotação de algum ativo que
tenha sido citado na notícia.
3.2 ESPECIFICAÇÃO
Nesta seção é apresentada a especificação da ferramenta, contendo os requisitos
funcionais e não funcionais das três partes da aplicação, além do diagrama de caso de uso do
aplicativo móvel, diagramas de sequência, diagramas de classes, diagrama de implantação e o
Modelo de Entidade Relacionamento (MER). Para o desenvolvimento dos diagramas foi
utilizada a ferramenta Visual Paradigm Community Edition4.
O Quadro 2 apresenta os RFs do aplicativo móvel e o respectivo Caso de Uso (UC)
referente ao requisito a partir da matriz de rastreabilidade. Os UCs referenciados nesse quadro
encontram-se na Figura 9. Além disso, o Quadro 3 apresenta os RNFs do aplicativo móvel.
Quadro 2 – Requisitos Funcionais do aplicativo móvel e sua relação com os UC Requisitos Funcionais Caso de Uso
RF01: O aplicativo deve permitir ao usuário realizar o cadastro. UC01
RF02: O aplicativo deve permitir ao usuário realizar o log in. UC02
RF03: O aplicativo deve permitir ao usuário visualizar as notícias. UC03
RF04: O aplicativo deve permitir ao usuário filtrar as notícias por título. UC04
RF05: O aplicativo deve permitir ao usuário filtrar as notícias por noticiário. UC05
RF06: O aplicativo deve permitir ao usuário filtrar as notícias por data de
postagem. UC06
RF06: O aplicativo deve permitir ao usuário filtrar as notícias pelos ativos
relacionados. UC07
RF07: O aplicativo deve permitir ao usuário visualizar o gráfico de sentimento. UC08
RF08: O aplicativo deve permitir ao usuário visualizar os ativos relacionados
com a notícia. UC09
RF08: O aplicativo deve permitir ao usuário visualizar a cotação do ativo. UC10
RF09: O aplicativo deve permitir ao usuário ler a notícia na íntegra. UC11 Fonte: elaborado pelo autor.
Quadro 3 – Requisitos Não Funcionais do aplicativo móvel Requisitos Não Funcionais
RNF01: O aplicativo deve ser desenvolvido utilizando o framework Flutter.
RNF02: O aplicativo deve efetuar a autenticação utilizando o Firebase Authentication.
RNF03: O aplicativo deve estar disponível para as plataformas Android e iOS.
RNF05: O aplicativo deve mostrar a cotação do ativo através do site TradingView5.
RNF06: O aplicativo deve se comunicar apenas via HTTPS com a API Fonte: elaborado pelo autor.
4 Visual Paradigm Community Edition – Disponível em: https://www.visual-paradigm.com/. Acesso em: 1° jun.
2020. 5 TradingView – Disponível em: https://br.tradingview.com/. Acesso em: 2 jun. 2020.
29
O Quadro 4 apresenta os RFs do Web Scraper.
Quadro 4 – Requisitos Funcionais do Web Scraper Requisitos Funcionais
RF01: O Web Scraper deve varrer as últimas notícias do portal InfoMoney.
RF02: O Web Scraper deve varrer as últimas notícias do portal Exame.com.
RF03: O Web Scraper deve varrer as últimas notícias do portal Suno Notícias.
RF04: O Web Scraper deve dividir o conteúdo da notícia em parágrafos.
RF05: O Web Scraper deve remover parágrafos não referentes à notícia.
RF06: O Web Scraper deve salvar as notícias no banco de dados.
RF07: O Web Scraper deve salvar os parágrafos no banco de dados. Fonte: elaborado pelo autor.
O Quadro 5 apresenta os RNFs do Web Scraper.
Quadro 5 – Requisitos Não Funcionais do Web Scraper Requisitos Não Funcionais
RNF01: O Web Scraper deve ser implementado em Python.
RNF02: O Web Scraper deve extrair o conteúdo das utilizando a biblioteca BeautifulSoup.
RNF03: O Web Scraper deve salvar as notícias e parágrafos num banco de dados SQL Server.
RNF04: O Web Scraper deve executar a varredura de novas notícias a cada 15 minutos.
RNF05: O Web Scraper deve ser executado em uma imagem Docker.
RNF06: O Web Scraper deve ser implantado no serviço de Aplicativos Web para Contêineres da
Azure. Fonte: elaborado pelo autor.
O Quadro 6 apresenta os RFs da API.
Quadro 6 – Requisitos Funcionais da API Requisitos Funcionais
RNF01: A API deve permitir manter notícias.
RNF02: A API deve permitir manter parágrafos.
RNF03: A API deve analisar o sentimento dos parágrafos.
RNF04: A API deve buscar os ativos relacionados às notícias.
RNF05: A API deve permitir manter os ativos relacionados às notícias. Fonte: elaborado pelo autor.
30
O Quadro 7 apresenta os RNFs da API.
Quadro 7 – Requisitos Não Funcionais da API Requisitos Não Funcionais
RNF01: A API deve ser implementada utilizando a linguagem Java.
RNF02: A API deve ser implementada utilizando o framework Spring Boot.
RNF03: A API deve utilizar a API do serviço Amazon Comprehend para efetuar a análise de
sentimentos.
RNF04: A API deve ser executada em uma imagem Docker.
RNF05: A API deve ser implantado no serviço de Aplicativos Web para Contêineres da Azure.
RNF06: A API deve executar a análise de sentimentos de novas notícias a cada 15 minutos. Fonte: elaborado pelo autor.
3.2.1 Diagrama de Caso de Uso do aplicativo móvel
A Figura 9 apresenta o diagrama de caso de uso do aplicativo móvel desenvolvido. No
diagrama são apresentados dois atores envolvidos: o Usuário e o Firebase
Authentication.
Figura 9 – Diagrama de Caso de Uso do aplicativo móvel
Fonte: elaborado pelo autor.
31
O ator Usuário é quem realiza todas as interações no aplicativo utilizados pelo usuário
final. O caso de uso referente à tela de cadastro é o UC02 – Efetuar Registro, inclui-se
também o UC01 – Efetuar Log in, responsável por permitir o usuário efetuar log in. Em
ambos os casos, o ator Firebase Authentication também possui associação, pois é um
serviço de autenticação fornecido pela Google.
Após efetuar o log in na aplicação, a tela de listagem de leituras é demonstrada através
dos casos de uso UC03 – Visualizar Notícias, a qual é a tela inicial do sistema, em que
são apresentadas todas as notícias dos três portais, agrupadas por data de postagem e
ordenadas de forma decrescente, para fornecer uma melhor experiência ao usuário. O ator
Usuário também pode ter acesso a quatro tipos de funcionalidades de filtro, sendo eles: UC04
– Filtrar Notícias por título; UC05 – Filtrar por portal de notícias; UC06 –
Filtrar por data de postagem e UC07 – Filtrar Notícias por ativo relacionado.
Ao clicar em uma notícia, para ver seus detalhes, o Usuário tem acesso aos casos de
uso de visualização de detalhe da notícia, sendo eles: UC08 – Visualizar gráfico de
sentimento; UC09 – Visualizar cotação do ativo; UC10 – Visualizar ativos
relacionados e UC11 - Ler notícia na íntegra. Os casos de uso UC08 – Visualizar
gráfico de sentimento e UC10 – Visualizar ativos relacionados podem ser vistos
nessa mesma tela, já o caso de uso UC09 – Visualizar cotação do ativo redireciona o
Usuário para uma web view contendo um gráfico interativo com a cotação do ativo
selecionado. Por fim, no UC11 – Ler notícia na íntegra o Usuário poderá clicar no que
o redireciona para o link da notícia original.
3.2.2 Diagrama de Sequência do Web Scraper
Uma parte da aplicação desenvolvida pode ser ainda representada pelo diagrama de
sequência (Figura 10), que apresenta o fluxo de execução do Web Scraper em nível de
implementação, explicando também a periodicidade de execução do Web Scraper. Pela Figura
10 pode-se observar que a cada 15 minutos é iniciado o processo de varredura das últimas
notícias, sendo que esse processo é executado para cada um dos três portais suportados pela
aplicação.
32
Figura 10 – Diagrama de Sequência do Web Scraper
Fonte: elaborador pelo autor.
É possível observar que os métodos get_link e get_title são chamados fora do
loop para cada notícia, já que, primeiramente, todas as últimas notícias são extraídas da
página, para depois executar os métodos de extração do conteúdo de detalhe da notícia. No
loop de execução para cada notícia pode-se verificar que as notícias são salvas no banco
de dados através de uma única operação, a fim de tornar o código mais otimizado, gravando
os dados em uma única transação.
3.2.3 Diagrama de Sequência do aplicativo móvel
O detalhamento do fluxo de execução do aplicativo móvel pode ser visto através da
Figura 11, que apresenta a interação do usuário final com o aplicativo, e as chamadas que são
executadas para o backend e para o serviço de autenticação do Firebase. Através da Figura 11
também pode-se observar que o usuário efetua log in na aplicação: o método
loginWithEmail é executado de forma assíncrona, apresentando um componente de
carregamento, para dar o feedback ao usuário. O mesmo comportamento acontece na
33
chamada do método fetchNews, em que são recuperadas todas as informações das notícias,
para apresentar na tela de últimas notícias (Figura 27).
Figura 11 – Diagrama de Sequência do aplicativo móvel
Fonte: elaborado pelo autor.
3.2.4 Diagrama de Sequência da API
Esta subseção apresenta o diagrama de sequência da API (Figura 12), no qual é
exposto a ordem de execução do processo de análise de sentimentos das notícias. Da mesma
forma que é apresentado no diagrama de sequência do Web Scraper (Figura 10), a API atua de
forma similar, a cada 15 minutos é iniciado o processo de análise de sentimentos, através da
busca no banco de dados por notícias que ainda não foram analisadas. Essa busca é feita pelo
método findByPositiveIsNull.
Após recuperar todas as notícias que ainda não foram analisadas, é executado o loop
para cada notícia, em que é feito a chamada do método detectSentiment do SDK do
Amazon Comprehend para Java. Esse mesmo processo é executado no loop para cada
parágrafo. Feita a análise, todas as notícias são atualizadas no banco, alimentando o campo
que armazena o sentimento médio da notícia, informação que é necessária para que a notícia
seja apresentada no aplicativo móvel.
34
Figura 12 – Diagrama de sequência da API
Fonte: elaborado pelo autor.
3.2.5 Diagrama de Classes do Web Scraper
A Figura 13 contempla o diagrama de classes do Web Scraper. A classe CronJob é a
responsável por fazer o controle do temporizador de execução das varreduras, executadas
pelas classes ScraperInfoMoney, ScraperExame e ScraperSuno. Apesar da similaridade
semântica entre as três classes responsáveis pela varredura, não foi implementada uma classe
abstrata contendo o comportamento genérico, pois no caso da linguagem Python se faz
necessária a importação de uma biblioteca a parte para que seja possível implementar uma
classe abstrata.
As classes com o sufixo Utils são utilitárias da aplicação, contendo métodos estáticos
que são utilizados dentre as três classes de varredura das notícias. A classe NewModel é
utilizada como modelo para persistência das notícias no banco de dados, de acordo com o
estereótipo ORM Persistable. Para efetuar a persistência da notícia, utiliza-se a classe
Database, que contém os métodos de conexão e interação com o banco de dados.
35
Figura 13 – Diagrama de classes do Web Scraper
Fonte: elaborador pelo autor.
3.2.6 Diagrama de Classes do aplicativo móvel
Nesta subseção serão apresentados três diagramas de classes do aplicativo móvel, um
para cada tela. Para implementação do aplicativo móvel foi utilizado a linguagem Dart6 com o
framework Flutter7, possibilitando a disponibilização do aplicativo para Android e iOS
utilizando apenas uma base de código. Utilizou-se a arquitetura Flux8 para a implementação
do aplicativo, junto à biblioteca MobX9 para gerenciar o estado da aplicação. O MobX é
utilizado para que o desenvolvedor possa focar somente na parte de implementação da tela,
sem se preocupar com a sincronização dos dados entre a página e a store.
No padrão de arquitetura Flux com o MobX, as stores são utilizadas em conjunto às
páginas, armazenando os valores que são utilizadas por elas. Dessa forma, quando um valor é
atualizado na store, a página é automaticamente notificada, atualizando os dados que são
apresentados. A MainStore é a store principal da aplicação, que possui associação com todas
stores da aplicação. Esse é o padrão de implementação recomendado pela biblioteca e isso
6 Dart – Disponível em: https://dart.dev/. Acesso em: 3 jun. 2020. 7 Flutter – Disponível em: https://flutter.dev/. Acesso em: 3 jun. 2020. 8 Flux – Disponível em: https://facebook.github.io/flux/. Acesso em: 3 jun. 2020. 9 MobX – Disponível em: https://mobx.netlify.app/. Acesso em: 3 jun. 2020.
36
ocorre para que as páginas não precisem se associar a todas as stores existentes, e sim
somente com a principal, acessando as stores filhas através da MainStore.
De acordo com a primeira tela que é apresentada ao abrir o aplicativo, tem-se o
diagrama de classes da tela de log in (Figura 14). Conforme é visto no diagrama, a classe
LoginPage se associa com a MainStore, para que possa acessar a LoginStore, onde estão os
atributos que armazenam os valores que são digitados na tela pelo usuário. Para efetuar o log
in e o registro na aplicação, criou-se a classe AuthenticationService, que encapsula o
comportamento de log in, registro, log out e busca do usuário autenticado.
Figura 14 – Diagrama de Classes da tela de log in do aplicativo móvel
Fonte: elaborado pelo autor.
Após o usuário autenticar-se na aplicação, ele é redirecionado para a tela home. Na
Figura 15 é apresentado o seu diagrama de classes. Da mesma forma que é representado na
Figura 14, a tela home também se associa com a MainStore, para pode acessar a HomeStore,
que possui os atributos que armazenam as notícias vindas da API. Além de armazenar, a
classe HomeStore também é responsável por controlar os valores informados nos filtros e
fazer o acesso a API, através da classe HomeService. As classes de sufixo service são as
classes que se encontram na camada de serviço da aplicação, em que toda a regra de negócio
referente a determinado domínio deve estar escrita.
37
Figura 15 – Diagrama de Classes da tela principal do aplicativo móvel
Fonte: elaborado pelo autor.
Seguindo o mesmo modelo de arquitetura e desenvolvimento das outras telas, na
Figura 16 é apresentado o diagrama de classes da tela de detalhe da notícia. Nela é
apresentado o sentimento médio da notícia, gráfico de sentimentos dos parágrafos e os papéis
relacionados a ela, além do botão que permite ao usuário acessar a notícia na íntegra.
38
Figura 16 – Diagrama de Classes da tela de detalhe da notícia
Fonte: elaborado pelo autor.
Por fim, na Figura 17, é apresentado o diagrama de classes da tela de histórico de
cotação do ativo, que apresenta um gráfico interativo com a cotação do ativo selecionado na
tela de detalhe da notícia.
Figura 17 – Diagrama de Classes da tela de histórico de cotação do ativo
Fonte: elaborado pelo autor.
39
3.2.7 Diagrama de Classes da API
Nesta subseção são apresentados os três diagramas de classe da API. Cada diagrama
possui as especificações referentes a cada domínio da aplicação para que os diagramas não
fiquem muito extensos. O objetivo da separação da implementação por domínio é tornar o
código mais legível para os desenvolvedores, pois cada domínio deve representar uma
unidade em nível de regra de negócio.
A Figura 18 detalha as classes envolvidas no domínio de notícia. A classe
NewsController é responsável por lidar com as requisições Hypertext Transfer Protocol
(HTTP) vindas do aplicativo móvel, para isso, ela acessa os métodos de busca no banco de
dados definidos pela interface NewsRepository.
Figura 18 – Diagrama de Classes – domínio de notícias da API
Fonte: elaborado pelo autor.
O domínio de notícia possui dependência do domínio de parágrafo, apresentado na
Figura 19, pois o objeto retornado para o aplicativo móvel pelo NewsController inclui os
parágrafos e seu sentimento, para que o gráfico de sentimentos possa ser montado. A API
também expõe o ParagraphController, para caso seja necessário retornar os dados de
algum parágrafo específico ou visualizar os ativos citados no parágrafo.
40
Figura 19 – Diagrama de Classes – domínio de parágrafos da API
Fonte: elaborado pelo autor.
Por fim, é apresentado o diagrama de classes do domínio de tarefas agendadas (Figura
20), na qual é executada a tarefa de análise de sentimento das notícias e parágrafos,
representados por duas classes: ParagraphSentimentAnalyzerScheduler e
NewsSentimentAnalyzerScheduler. As duas tarefas são executadas de forma concorrente, a
classe ParagraphSentimentAnalyzerScheduler analisa o sentimento de todos os
parágrafos que ainda não foram analisados, já a classe NewsSentimentAnalyzerScheduler
analisa o sentimento de todas as notícias que ainda não foram analisadas.
Para a execução de ambos os timers é utilizada a classe SentimentService, onde são
encontrados os métodos contendo a regra de negócio para análise de sentimentos, que, nesse
caso, é o acesso ao serviço AwsComprehendService, em que são chamados os métodos de
análise de sentimento do SDK do Amazon Comprehend. A aplicação foi desenvolvida em
camadas para diminuir o acoplamento entre as classes, por exemplo: caso seja necessário
alterar o serviço de análise de sentimento, por algum motivo, é necessário efetuar a troca
somente na classe SentimentService, acessando um novo serviço de análise de sentimentos.
Dessa forma, o código se torna mais manutenível.
41
Figura 20 – Diagrama de Classes – domínio de tarefas agendadas
Fonte: elaborado pelo autor.
3.2.8 Diagrama de Implantação
A Figura 21 apresenta o diagrama de implantação da aplicação como um todo. É
possível visualizar todos os artefatos implantáveis, parte das tecnologias que foram utilizadas
para o desenvolvimento da aplicação, bem como o relacionamento entre os artefatos, com a
descrição do protocolo de comunicação utilizado.
42
Figura 21 – Diagrama de Implantação da aplicação
Fonte: elaborado pelo autor.
Na Figura 21 é possível visualizar os componentes da arquitetura e a seção 3.3
descreve em maiores detalhes o funcionamento de cada componente, bem como a tecnologia
utilizada durante o desenvolvimento, sendo:
a) Firebase Authentication: serviço de autenticação utilizado para registrar e
autenticar usuários no aplicativo móvel, utilizado através do protocolo HTTP.
b) AWS Comprehend: serviço de análise de sentimentos, utilizado pela API através do
protocolo HTTP.
c) Azure SQL Database: serviço de banco de dados em nuvem da Azure10, utilizado
pelo Web Scraper e API.
10 Azure – Disponível em: https://azure.microsoft.com/. Acesso em: 4 jun. 2020.
43
d) Web Scraper: artefato responsável por extrair as notícias dos portais, implantado
numa imagem Docker no ambiente de Web App for Containers na Azure11, faz
operações de escrita no banco de dados via conexão ODBC.
e) API: artefato responsável por expor os dados das notícias para o aplicativo móvel,
implantado numa imagem Docker no ambiente de Web App for Containers na
Azure, faz operações de leitura e escrita no banco de dados via conexão ODBC.
f) B3-News App: aplicativo móvel utilizado pelo usuário final, interage com a API via
protocolo HTTP. Possui dois artefatos: b3_news.apk disponibilizado para
dispositivos Android; b3_news.ipa disponibilizado para dispositivos iOS.
Na Figura 21 também é possível observar a legenda do diagrama, explicando alguns
termos utilizados no desenvolvimento e implantação da aplicação.
3.2.9 Modelo Entidade Relacionamento
O MER (Figura 22) representa as entidades persistentes da aplicação no banco de
dados SQL Server. Cada entidade é representada por uma tabela no banco de dados, a seguir é
apresentada uma breve descrição de cada entidade utilizada pela aplicação:
a) news: entidade que armazena as informações das notícias e seu respectivo
sentimento de forma detalhada, através dos campos mixed, negative, neutral e
positive. O campo sentiment armazena o sentimento médio da notícia;
b) paragraphs: entidade que armazena as informações dos parágrafos e seu
respectivo sentimento de forma detalhada, seguindo o mesmo padrão de colunas da
entidade news;
c) stocks: entidade que armazena todas as ações listadas na Bolsa, junto à razão
social e ao nome fantasia da empresa;
d) stocks_news: entidade intermediária resultante da cardinalidade N para N entre as
entidades stocks e news, armazena os ativos citados na notícia.
11 Aplicativos Web para Contêineres – Disponível em: https://azure.microsoft.com/pt-br/services/app-
service/containers/. Acesso em: 4 jun. 2020
44
Figura 22 – Modelo Entidade Relacionamento
Fonte: elaborado pelo autor.
3.2.10 Protótipo de telas da aplicação B3-Feed
Para o levantamento das informações ainda foi utilizado uma abordagem de
prototipação na ferramenta Draw.io12 para simular a usabilidade do aplicativo móvel e o fluxo
de negócio que ele possui. Para a parte inicial do aplicativo foram feitos dois protótipos,
apresentados na Figura 23, detalhando a página de log in (A) e a página de registro (B).
Figura 23 – Protótipo das telas iniciais da aplicação
Fonte: elaborado pelo autor.
Após autenticar-se na aplicação, o usuário é redirecionado para a tela home, onde são
listadas as últimas notícias agrupadas por data e ordenadas de forma decrescente, podendo
12 Draw.io – Disponível em: https://app.diagrams.net/. Acesso em: 5 jun. 2020.
45
também filtrar as notícias pelo título, ativos relacionados e data (Figura 24A). O usuário
também pode clicar numa notícia, sendo redirecionado para a tela de detalhe da notícia
(Figura 24B), em que é possível visualizar o gráfico de sentimentos da notícia, ler a notícia na
íntegra e visualizar os ativos relacionados. Caso o usuário clique em algum ativo relacionado,
ele será redirecionado para a tela de histórico de cotação (Figura 24C), no qual é apresentado
um gráfico interativo do histórico de cotação do ativo.
Figura 24 – Protótipo das telas de notícia e detalhes da notícia
Fonte: elaborado pelo autor.
3.3 IMPLEMENTAÇÃO
Nesta seção são apresentadas as técnicas e as ferramentas utilizadas para o
desenvolvimento da aplicação B3-Feed (subseção 3.3.1), junto à operacionalidade da
implementação (subseção 3.3.2).
3.3.1 Técnicas e ferramentas utilizadas
Para desenvolver o projeto intitulado B3-Feed foram utilizados como linguagem de
programação Java para a API, Python para o Web Scraper e Dart para o aplicativo móvel.
46
Para o desenvolvimento Java, utilizou-se a IDE Eclipse junto ao plugin Spring Tool Suite13,
para facilitar o desenvolvimento utilizando o framework Spring Boot14. Para gerenciar as
dependências em tempo de compilação, utilizou-se o Apache Maven15.
Na implementação do Web Scraper foi utilizado o editor Visual Studio Code16 em
conjunto à extensão para desenvolvimento em Python. Para criar um ambiente virtual de
desenvolvimento e gerenciar as dependências da aplicação foi utilizado o Pipenv17. No
desenvolvimento do aplicativo móvel utilizou-se a linguagem Dart, adotada pelo framework
Flutter, utilizada para implementar aplicativos para Android, iOS e web com uma única base
de código.
Para o desenvolvimento do aplicativo móvel também foi utilizado o editor Visual
Studio Code, junto à extensão disponibilizada pelo Flutter para agilizar o desenvolvimento.
Durante a etapa de desenvolvimento e testes foram utilizados dois Android Virtual Device
(AVD), criado através da plataforma Android Studio, para simular a aplicação em duas
versões diferentes da API do Android18.
Para armazenamento de dados da aplicação utilizou-se o banco de dados SQL Server
fornecido pelo serviço Banco de Dados SQL do Azure19. O Sistema Gerenciador de Banco de
Dados (SGBD) utilizado foi o DBeaver20. A fim de manter os artefatos da aplicação na
mesma plataforma que o banco de dados também foi utilizado o Azure para fazer a
implantação dos artefatos em servidores remotos, sendo executados no serviço Aplicativos
Web para Contêineres do Azure. As imagens Docker21 executadas no Azure estão
armazenadas no DockerHub22, uma plataforma de hospedagem de imagens Docker.
Todo o código implementado está disponível no website Github23, uma plataforma de
hospedagem de código-fonte que utiliza o Git24 como controlador de versão (GITHUB, 2020).
Na Figura 25 é possível visualizar que a aplicação B3-Feed está separada em três repositórios,
um para cada parte da aplicação: b3-news-api, b3-news-scraper e b3_news_app.
13 Spring Tool Suite – Disponível em: https://spring.io/tools. Acesso em: 6 jun. 2020. 14 Spring Boot – Disponível em: https://spring.io/projects/spring-boot. Acesso em: 6 jun. 2020. 15 Apache Maven – Disponível em: https://maven.apache.org/. Acesso em: 6 jun. 2020. 16 Visual Studio Code – Disponível em: https://code.visualstudio.com/. Acesso em: 6 jun. 2020. 17 Pipenv – Disponível em: https://pipenv.pypa.io/en/latest/. Acesso em: 6 jun. 2020. 18 Android – Disponível em: https://www.android.com/. Acesso em: 6 jun. 2020. 19 Banco de Dados SQL do Azure – Disponível em: https://azure.microsoft.com/pt-br/services/sql-database/.
Acesso em: 6 jun. 2020. 20 DBeaver – Disponível em: https://dbeaver.io/. Acesso em: 6 jun. 2020. 21 Docker – Disponível em: https://www.docker.com/. Acesso em: 6 jun. 2020. 22 DockerHub – Disponível em: https://hub.docker.com/. Acesso em: 6 jun. 2020. 23 Github – Disponível em: https://github.com/. Acesso em: 6 jun. 2020. 24 Git – Disponível em: https://git-scm.com/. Acesso em: 6 jun. 2020.
47
Figura 25 – Repositórios Github
Fonte: elaborado pelo autor.
3.3.2 Desenvolvimento do sistema
Nesta seção são apresentadas as principais funcionalidades que constituem a
arquitetura da aplicação, bem como as partes integrantes necessárias para seu funcionamento.
3.3.2.1 Web Scraper de notícias
O Web Scraper é responsável por extrair as notícias e seus parágrafos de três portais de
notícias: Exame.com, Suno Notícias e InfoMoney. Para isso, na primeira etapa de execução
do Web Scraper são registradas as tarefas de execução de varredura de notícias a cada 15
minutos, como pode ser visto no Quadro 8.
Quadro 8 – Registro da execução das varreduras
Fonte: elaborado pelo autor.
48
Conforme apresentado no Quadro 8, a execução periódica é registrada na linha 9,
através do modulo schedule que é disponibilizado pela linguagem Python. O callback da
execução periódica é o método scrap, em que são invocadas as varreduras do Exame.com,
Suno Notícias e InfoMoney, respectivamente, cada uma sendo executada em sua classe
específica conforme apresentado na Figura 13.
A execução da varredura de notícias é feita em classes separadas, uma para cada portal
noticiário. É possível visualizar no Quadro 9, Quadro 10 e Quadro 11 que o código, nos
métodos get_news_ignoring_fetched_links e get_news_content_by_href, é muito
semelhante, variando somente as classes CSS que são utilizadas para a busca de textos dentro
de elementos HTML. O Quadro 9 apresenta a busca de notícias e parágrafos do portal
Exame.com, primeiro a ser executado na chamada do callback scrap.
Quadro 9 – Busca de notícias e parágrafos do Exame.com
Fonte: elaborado pelo autor.
49
Como pode ser visualizado no Quadro 9, o método
get_news_ignoring_fetched_links é responsável por buscar as notícias na página de
últimas notícias do portal. Nesse caso, pode-se observar que na linha 42 são extraídos todos
os elementos HTML li que possuam como classe CSS algum valor no padrão “post-”, por
exemplo: <li class=”post-123”> Algum texto </li>.
Após buscar todas as últimas notícias, é invocado o método
get_news_content_by_href, responsável por buscar o conteúdo de uma notícia. Na linha
57, é extraído o elemento que possua como classe CSS o texto “article-content”, após isso,
são buscados todos os parágrafos dentro deste elemento, que representam todo o conteúdo da
notícia.
O Quadro 10 apresenta os métodos de busca para o site Suno Notícias, o próximo a ser
varrido após o término da execução da extração do Exame.com.
Quadro 10 – Busca de notícias e parágrafos da Suno Notícias
Fonte: elaborado pelo autor.
50
Como pode ser visualizado no Quadro 10, os métodos de busca de notícias e
parágrafos são muito similares aos do Quadro 9, alterando somente os elementos HTML e os
seletores CSS que são utilizados para a busca na página. Para extrair as últimas notícias, são
extraídos todos os elementos h3 que sejam da classe post__title e estejam dentro de uma
div com a classe list-item. Na extração dos parágrafos, são extraídos todos os elementos de
parágrafo dentro do elemento div com classe articleBody.
No Quadro 11 pode-se visualizar a extração de notícias e parágrafos do último portal a
ser varrido, o InfoMoney. Todas as execuções são feitas de forma síncrona, ou seja, a ordem
de varredura dos portais é sempre a mesma e a próxima varredura só acontece se a anterior já
tiver sido finalizada.
Quadro 11 – Busca das notícias e parágrafos do InfoMoney
Fonte: elaborado pelo autor.
51
Por fim, pode-se observar no Quadro 11 que na busca das notícias são extraídos todos
os elementos HTML div que possuam como classe CSS algum valor no padrão “post-”, para
buscar todas as últimas notícias do portal. Para cada notícia, são buscados todos os elementos
parágrafos dentro do elemento HTML article que contenha a classe CSS no padrão “post-”.
Também é possível observar que é utilizado o módulo de expressões regulares do Python,
intitulado re, para facilitar a busca de seletores CSS que seguem determinado padrão na
página.
3.3.2.2 Análise de sentimentos
A análise de sentimentos das notícias e parágrafos são feitas através de dois timers
separados, um para a análise da notícia e outro para a análise dos parágrafos. Ambas tarefas
executam a cada 15 minutos de forma paralela, buscando as notícias que ainda não foram
analisadas no banco de dados e analisando-as, através do serviço AWS Comprehend.
No Quadro 12 é apresentado o processo de registro do timer de execução da análise de
sentimento das notícias, já no Quadro 13 pode-se observar o registro do timer de execução da
análise de sentimento dos parágrafos.
Quadro 12 – Registro do timer de execução da análise de sentimento das notícias
Fonte: elaborado pelo autor.
52
Quadro 13 – Registro do timer de execução da análise de sentimento das notícias
Fonte: elaborado pelo autor.
Conforme é apresentado no Quadro 12 e no Quadro 13, pode-se visualizar algumas
anotações do framework Spring Boot que definem o comportamento principal dessa classe,
sendo elas:
a) @EnableScheduling: anotação que garante que as anotações @Schedule presentes
nessa classe serão detectadas pelo Spring Boot;
b) @Schedule: anotação que marca o método que é executado no intervalo definido
através do parâmetro fixedRate.
No Quadro 13 também é possível observar que, além da análise de sentimentos do
parágrafo, na linha 28 é invocado o serviço responsável por analisar o texto dos parágrafos e
encontrar os ativos da Bolsa que estejam citados nele, para que sejam apresentados
posteriormente no aplicativo móvel.
Por fim, no Quadro 14 é possível visualizar o processo de análise de sentimentos,
efetuado através do método detectSentiment presente na classe AwsComprehendService, a
qual é responsável por encapsular o código responsável pelo acesso ao serviço de análise de
53
sentimentos da AWS, acessado através do seu SDK disponibilizado para Java. As credenciais
de acesso a API ficam armazenadas em variáveis de ambiente e são automaticamente lidas
pelo SDK de dentro da imagem Docker, externalizando-as do código-fonte.
Quadro 14 – Serviço de detecção de sentimento
Fonte: elaborado pelo autor.
Como pode-se visualizar no Quadro 14, na linha 16 as credenciais são carregadas
das variáveis de ambiente pela própria biblioteca na criação do objeto
AWSCredentialsProvider, que é injetado na criação do cliente de detecção de sentimentos,
apresentado na linha 17. Na linha 20 é possível visualizar a definição do idioma de
detecção do sentimento e, por fim, na linha 21 é inferido a análise do sentimento.
3.3.3 Operacionalidade da implementação
Nesta subseção será apresentado o funcionamento da implementação através de telas e
menus do aplicativo móvel. A primeira tela apresentada pelo usuário é a tela de log in da
aplicação, conforme pode ser visto na Figura 26A. Caso o usuário já tenha feito log in na
aplicação previamente, ele é automaticamente redirecionado para tela de últimas
notícias. Nessa tela, pode-se observar os botões de Entrar e Crie sua conta!, para o
usuário entrar na aplicação, deverá informar os campos E-mail e Senha, ou registrar-se na
aplicação.
54
Figura 26 – Tela de Log in e Registro do B3-Feed
Fonte: elaborado pelo autor.
Conforme pode ser observado na Figura 26, o usuário também pode criar sua conta
através do botão Crie sua conta!, em que será redirecionado para a tela de registro
(Figura 26B). Na tela de registro, o usuário informa o seu e-mail e senha e, após efetuar o
cadastro, este é automaticamente redirecionado para a tela de últimas notícias.
Na Figura 27 é apresentado a tela de últimas notícias, que é acessada pelo usuário após
efetuar o log in na aplicação ou registrar-se nela. Nessa tela, o usuário pode visualizar as
últimas notícias agrupadas por data e ordenadas de forma decrescente, em que as últimas
notícias aparecem primeiro. O usuário também pode efetuar uma pesquisa pelo título de
notícia, portal de notícia ou pelos ativos citados nela, além de poder filtrar por período de data
de postagem.
55
Figura 27 – Tela de Últimas Notícias
Fonte: elaborado pelo autor.
Conforme pode ser observado na Figura 27, o usuário pode clicar em qualquer notícia,
ou rolar para baixo na lista para visualizar notícias mais antigas. Ao clicar em uma notícia, o
usuário é redirecionado para a tela de detalhes da notícia (Figura 28). Nessa tela, o usuário
pode visualizar o gráfico de sentimento dos parágrafos e os papéis citados na notícia.
O usuário também pode visualizar a postagem original da notícia, através do botão Leia na
Íntegra, em que é redirecionado para o website do portal através do navegador padrão
configurado no dispositivo móvel.
56
Figura 28 – Tela de detalhe da notícia
Fonte: elaborado pelo autor.
Na Figura 28 são apresentados os detalhes da notícia selecionada, sendo possível
acessar a tela de histórico de cotação (Figura 29) através do clique em algum ativo
citado na tela de detalhes da notícia. Na tela de histórico de cotação é apresentado um
gráfico interativo disponibilizado pelo website TradingView, em que o usuário pode
selecionar o tipo de gráfico, visualizar o preço do ativo, plotar ferramentas de análise do
gráfico, bem como outras opções que a ferramenta disponibiliza.
O gráfico é apresentado com a cotação da hora atual, porém, é possível visualizar os
dados histórico e selecionar algum período específico para fazer uma análise mais profunda.
Dessa forma, o usuário pode relacionar os dados que visualizou na tela de detalhe da notícia
com a respectiva cotação do ativo para poder identificar um viés de alta ou baixa do papel.
57
Figura 29 – Tela de Histórico de Cotação
Fonte: elaborado pelo autor.
3.4 RESULTADOS E DISCUSSÕES
Nesta seção são apresentados os resultados e as discussões do trabalho. Sendo que
todos os objetivos e requisitos foram alcançados.
Em comparação com os trabalhos correlatos, é possível analisar que o trabalho
desenvolvido fornecerá uma melhor experiência ao usuário, já que este está disponível para
plataformas móveis e flexibiliza a utilização através de filtros e buscas das notícias. No
Quadro 15, pode-se visualizar a comparação do sistema desenvolvido com os trabalhos
correlatos.
58
Quadro 15 – Comparação do sistema desenvolvido com os trabalhos correlatos
Lima (2016) Coppi Junior
(2017) Alves (2015)
Aplicação
desenvolvida
Fonte de dados
Twitter Twitter Twitter
Exame.com,
Suno Notícias
e InfoMoney
Análise de Sentimento Sentiment140 SentiWordNet LingPipe
AWS
Comprehend
Versão Desktop? Possui Possui Não Possui Não Possui
Aplicativo Móvel? Não Possui Não Possui Não Possui Possui
Filtros e Buscas? Possui Possui Não Possui Possui
Interface para apresentação dos
dados de sentimento? Possui Possui Não Possui Possui
Fonte: elaborado pelo autor.
O trabalho desenvolvido poderia diferenciar-se ainda mais dos demais trabalhos
correlatos caso fosse disponibilizado uma versão web da aplicação ampliando ainda mais o
número de plataformas suportadas, para atingir o máximo de usuários possíveis.
Nas Figuras 30 até 36 são apresentadas as sete perguntas realizadas, através de um
questionário on-line via Google Forms25 com objetivo de avaliar o resultado do trabalho. O
questionário foi enviado para um grupo público do Economista Sincero no Telegram26, com
foco em investimentos em ações e discussões da Bolsa de Valores.
O aplicativo para Android foi disponibilizado no formulário por meio de um link
disponível no início dele, redirecionamento diretamente para o download do APK (Android
Application Pack). Não foi disponibilizado a versão para iOS devido a não dispor de um
equipamento MacOS para fazer a implantação do aplicativo. Para suprir a não
disponibilização do aplicativo para usuário iOS foram apresentadas todas as capturas de tela
do aplicativo.
O questionário completo pode ser encontrado no Apêndice A. Como primeira pergunta
(Figura 30), tem-se o questionamento do histórico do respondente sobre o investimento na
Bolsa de Valores. Essa pergunta tem o objetivo de descobrir o percentual dos respondentes
que investem na Bolsa de Valores, ou seja, que são o público-alvo da aplicação desenvolvida
neste trabalho. O número de respondentes que já investiram ou investem na Bolsa de Valores
corresponde a 84,4%.
25 Google Forms – Disponível em: https://www.google.com/forms/about/. Acesso em: 18 jun. 2020. 26 Economista Sincero no Telegram – Disponível em: https://t.me/economistasincero. Acesso em: 21 jun. 2020.
59
Figura 30 – Primeira Pergunta
Fonte: elaborado pelo autor.
A Figura 31 demonstra que 53,1% dos respondentes consomem notícias
frequentemente, enquanto 12,5% leem notícias de forma muito frequente, sendo um bom sinal
considerando a proposta do aplicativo de fornecer um feed de notícias da Bolsa de Valores.
Figura 31 – Segunda Pergunta
Fonte: elaborado pelo autor.
Figura 32 – Terceira Pergunta
Fonte: elaborado pelo autor.
60
Figura 33 – Quarta Pergunta
Fonte: elaborado pelo autor.
Figura 34 – Quinta Pergunta
Fonte: elaborado pelo autor.
Figura 35 – Sexta Pergunta
Fonte: elaborado pelo autor.
61
Figura 36 – Sétima Pergunta
Fonte: elaborado pelo autor.
Por fim, pode-se observar, na Figura 36, que 78,1% dos respondentes indicariam o
aplicativo para outros investidores, dessa forma, pode-se concluir que o aplicativo possui um
impacto na vida dos investidores e certamente facilitaria o processo de leitura de notícias
antes de seus investimentos.
62
4 CONCLUSÕES
Como observado na seção 1 deste trabalho, é possível verificar o tamanho do mercado
que ainda existe para a modalidade de Bolsa de Valores, e a fonte de informações e notícias
neste tipo de investimento é crucial. Por isso, este sistema teve como objetivo disponibilizar
um feed de notícias a fim de facilitar o consumo de notícias diário, disponibilizando detalhes
da notícia e seu sentimento, além da possibilidade de visualizar a cotação dos ativos citados.
A aplicação B3-Feed alcançou a expectativa do trabalho descrita nos objetivos
específicos. A extração dos dados das notícias foi concluída devido à implementação do Web
Scraper; a busca dos ativos listados na Bolsa citados na notícia também foi concluída e pode
ser vista na tela de detalhe da notícia; a classificação do sentimento é feita pela API
utilizando o serviço AWS Comprehend e, por fim, o objetivo de disponibilizar um aplicativo
que apresenta um feed de notícias classificado por sentimento utilizando Flutter foi atendido
através do aplicativo B3-Feed.
A fundamentação teórica da educação financeira no Brasil foi de suma importância
para entender o cenário atual do país, servindo de motivação para o desenvolvimento da
aplicação. A fundamentação teórica dos Web Scrapers foi fundamental para o melhor
entendimento das ferramentas de extração de dados não estruturados em páginas web,
possibilitando a implementação de três Web Scrapers de notícias.
As ferramentas utilizadas se mostraram adequadas para o desenvolvimento da
aplicação. A utilização de Python para o Web Scraper facilitou muito o trabalho de extração
de notícias. O Java e Spring Boot demonstraram bom desempenho e uma boa utilização de
memória, além de facilitar o desenvolvimento da API e a integração com o SDK do AWS
Comprehend. O uso do Flutter para o aplicativo se mostrou adequado, o desenvolvimento foi
muito rápido e sem complicações com o framework, facilitando o desenvolvimento
multiplataforma com uma única base de código.
A utilização de Docker para o Web Scraper e a API facilitou muito a implantação dos
serviços, além da utilização da Azure como provedor de serviços em nuvem, por já possuir
um ambiente pronto para a execução de imagens Docker. De forma geral, a escolha de todas
as tecnologias e frameworks foi adequada, atendendo todos os requisitos e cumprindo os
objetivos propostos.
As dificuldades encontradas no desenvolvimento deste trabalho foram relativas à
implementação do Web Scraper, devido ao grande número de alterações nas páginas durante
o desenvolvimento. Os portais Exame.com e Suno Notícias sofreram mudanças na sua
63
estrutura de página, acarretando alterações que foram necessárias no Web Scraper, para que a
extração permanecesse correta.
4.1 EXTENSÕES
Como extensões para trabalhos futuros, sugere-se:
a) disponibilização da aplicação para plataformas web;
b) aumentar a quantidade de portais utilizados para a extração;
c) implementar um modelo específico do mercado financeiro para a análise de
sentimentos;
d) prever o viés do ativo pelo seu sentimento utilizando aprendizado de máquina.
64
REFERÊNCIAS
ADAMS, A.; McCRINDLE, R. Pandora's box: social and professional issues of the
information age. Nova Jersey: John Wiley & Sons, 2008.
ALVES, D. S. Uso de técnicas de Computação Social para tomada de decisão de compra
e venda de ações no mercado brasileiro de Bolsa de Valores. 2015. Tese (Doutorado em
Engenharia de Sistemas Eletrônicos e Automação) – Departamento de Engenharia Elétrica,
Faculdade de Tecnologia, Universidade de Brasília, Brasília. 133 p. Disponível em:
https://repositorio.unb.br/bitstream/10482/19345/1/2015_DeborahSilvaAlves.pdf. Acesso em:
29 jun. 2020.
BOLSA BRASIL BALCÃO (B3). Histórico pessoas físicas. 2020. Disponível em:
http://www.b3.com.br/pt_br/market-data-e-indices/servicos-de-dados/market-
data/consultas/mercado-a-vista/historico-pessoas-fisicas/. Acesso em: 29 jun. 2020.
COPPI JUNIOR, L. C. Brand Feeling: um sistema para analisar o sentimento dos usuários
em relação a uma marca. 2017. 64 f. Trabalho de Conclusão de Curso (Bacharelado em
Ciências da Computação) – Universidade Regional de Blumenau, Blumenau.
FERREIRA, J. C. A importância da educação financeira pessoal para a qualidade de vida.
Caderno de Administração: Revista da Faculdade de Administração da FEA, v. 11, n. 1, p.
1-17, 2017. Disponível em: https://revistas.pucsp.br/caadm/article/view/33268. Acesso em: 29
jun. 2020.
FERSINI, E. et al. Sentiment Analysis in Social Networks. Cambridge: Todd Green, 2016.
FINATTO, M. J. B.; LOPES, L.; SILVA, A. C. Processamento de Linguagem Natural,
Linguística de Corpus e Estudos Linguísticos: uma parceria bem-sucedida. Domínios de
lingu@gem, Uberlândia, v. 9, n. 5, p. 41-59, dez. 2015. Disponível em:
http://www.seer.ufu.br/index.php/dominiosdelinguagem/article/view/28670/17075. Acesso
em: 29 jun. 2020.
GITHUB. Built for developers. 2020. Disponível em: https://github.com. Acesso em: 6 jun.
2020.
GLEZ-PEÑA, D. et al. Web scraping technologies in an API world. Briefings in
bioinformatics, v. 15, n. 5, p. 788-797, 2013. Disponível em: https://bityli.com/kyzzp.
Acesso em: 29 jun. 2020.
LIMA, M. L. Um modelo para predição de Bolsa de Valores baseado em mineração de
opinião. 2016. Dissertação (Pós-graduação em Engenharia de Eletricidade) – Universidade
Federal do Maranhão, São Luís. Disponível em:
https://tedebc.ufma.br/jspui/bitstream/tede/297/1/Dissertacao_MilsonLouseiroLima.pdf.
Acesso em: 1º jun. 2020.
LIU, B. Sentiment analysis and opinion mining. Synthesis lectures on human language
technologies, v. 5, n. 1, p. 1-167, 2012. Disponível em:
https://www.cs.uic.edu/~liub/FBS/SentimentAnalysis-and-OpinionMining.pdf. Acesso em: 1º
jun. 2020.
ROSA, J. L. G. Fundamentos da Inteligência Artificial. Rio de Janeiro: LTC, 2011.
SAURKAR, A.; PATHARE, K.; GODE, S. An Overview On Web Scraping Techniques And
Tools. International Journal on Future Revolution in Computer Science &
Communication Engineering, v. 4, n. 4, p. 363-367, 2018. Disponível em:
http://www.ijfrcsce.org/download/browse/Volume_4/April_18_Volume_4_Issue_4/15246389
55_25-04-2018.pdf. Acesso em: 29 jun. 2020.
65
SAVOIA, J. R. F.; SAITO, A. T.; SANTANA, F. de A. Paradigmas da educação financeira no
Brasil. Revista de Administração Pública, Rio de Janeiro, v. 41, n. 6, p. 1121-1141, 2007.
SILVA, C. A. T.; CARVALHO, C. C. de; NUNES, D. M. S. O que move o preço da ação?
uma abordagem sobre a influência das notícias no mercado acionário. REUNIR: Revista de
Administração, Contabilidade e Sustentabilidade, v. 2, n. 3, p. 1-13, 2012. Disponível em:
https://www.researchgate.net/publication/277797373_O_Que_Move_o_Preco_da_Acao_Uma
_Abordagem_sobre_a_Influencia_das_Noticias_no_Mercado_Acionario. Acesso em: 1º jun.
2020.
SILVA, T. P. da et al. Financial education level of high school students and its economic
reflections. Revista de Administração, São Paulo, v. 52, n. 3, p. 285-303, 2017.
VARGIU, E.; URRU, M. Exploiting web scraping in a collaborative filtering-based approach
to web advertising. Artif. Intell. Research, v. 2, n. 1, p. 44-54, 2013. Disponível em:
http://www.sciedu.ca/journal/index.php/air/article/view/1390/0. Acesso em: 29 jun. 2020.
66
APÊNDICE A – Questionário Aplicado via Google Forms
Este Apêndice apresenta o questionário de avaliação do aplicativo B3-Feed,
representado através da Figura 37 até a Figura 43.
Figura 37 – Primeira parte do questionário aplicado
Fonte: elaborado pelo autor.
67
Figura 38 – Segunda parte do questionário aplicado
Fonte: elaborado pelo autor.
68
Figura 39 – Terceira parte do questionário aplicado
Fonte: elaborado pelo autor.
69
Figura 40 – Quarta parte do questionário aplicado
Fonte: elaborado pelo autor.
70
Figura 41 – Quinta parte do questionário aplicado
Fonte: elaborado pelo autor.
71
Figura 42 – Sexta parte do questionário aplicado
Fonte: elaborado pelo autor.
72
Figura 43 – Sétima parte do questionário aplicado
Fonte: elaborado pelo autor.
Top Related