• Nenhum resultado encontrado

Figura 18 – Comparação com similaridade entre 80 e 89.9% na medida Jaro-Winkler

desenvolvimento envolve técnicas de aprendizagem de máquina que não foram aplicados neste trabalho.

Para trabalhos futuros, é possível elaborar novas estratégias, após dominar o domínio do problema, que ajudem a atingir um maior resultado de similaridade e que também seja mais performático.

Baseando-se nos resultados obtidos, é possível afirmar que a ferramenta possui um grau satisfatório de similaridade, porém precisa tratar exceções para produtos que não estão presente em todos os pontos de venda, a ferramenta sugere baseado na pontuação, mesmo que o produto seja completamente discrepante ou esteja indisponível. Na maioria das vezes a sugestão oferecida é um produto similar, com as mesmas características, porém não há garantias que funciona desta forma sem uma melhor definição das estruturas de dados, utilizar técnicas de aprendizagem de máquina podem contribui para melhor taxa de assertividade da ferramenta

REFERÊNCIAS

DATA Collector: Collect web data at scale with zero infrastructure. [S. l.], 2021. Disponível em: https://brightdata.com/products/data-collector. Acesso em: 10 mar. 2022

FAMILI, A; SHEN, Wei-Minb; WEBER, Richardc; SIMOUDIS, Evangelosd. Data

Preprocessing and Intelligent Data Analysis. Intelligent Data Analysis, Dataveesity, v. 1, ed.

1, p. 3-23, 1997.

FOOTE, Keith D. A Brief History of Analytics. Dataversity, 20 set. 2021. Disponível em:

https://www.dataversity.net/brief-history-analytics/. Acesso em: 4 jul. 2022.

GOMAA, Wael H.; FAHMY, Aly A. Survey of Text Similarity Approaches. International Journal of Computer Applications, [s. l.], v. 68, ed. 13, 2013. Disponível em:

https://research.ijcaonline.org/volume68/number13/pxc3887118.pdf. Acesso em: 13 jun.

2022.

GRAMI, Ali. Error-Control Coding. Introduction to Digital Communications, [s. l.], p.

409-455, 2016. Disponível em:

https://www.sciencedirect.com/science/article/pii/B9780124076822000107. Acesso em: 24 jun. 2022.

HUANG, Anna. Similarity Measures for Text Document Clustering. Department of Computer Science, New Zealand, 2008. Disponível em:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.332.4480&rep=rep1&type=pdf#:~:

text=The%20similarity%20of%20two%20documents,ferences%20between%20two%20proba bility%20distributions. Acesso em: 13 jun. 2022.

JARO, Matthew. Advances in Record-Linkage Methodology as Applied to Matching the 1985 Census of Tampa, Florida. Journal of The American Statistical Association, [s. l.], v.

84, 1989. Disponível em:

https://www.tandfonline.com/doi/abs/10.1080/01621459.1989.10478785. Acesso em: 24 jun.

2022.

JQUERY. [S. l.], 2022. Disponível em: https://api.jquery.com/category/selectors/jquery-selector-extensions/. Acesso em: 13 jun. 2022.

JÚNIOR, France. Delivery transformou tendência em necessidade e continua em

crescimento. Ribeirão Preto, 2021. Disponível em: https://jornal.usp.br/atualidades/delivery-transformou-tendencia-em-necessidade-e-continua-em-crescimento/. Acesso em: 22 fev.

2022.

LAUTERT, L. R.; SCHEIDT, M. M.; DORNELES, C, F. Web Table Taxonomy and Formalization. SIGMOD Records, 2013.

LEVENSHTEIN, V.I. "Binary Codes Capable of Correcting Deletions, Insertions, and Reversals." [S. l.], Soviet Physics Doklady, vol. 10, no. 8, pp. 707-710, 1966 Fevereiro.

Disponível em: https://nymity.ch/sybilhunting/pdf/Levenshtein1966a.pdf Acesso em: 20 jun.

2022.

MATHIAS, G. N. qFex: um crawler para busca e extração de questionários de pesquisa em documentos HTML. 2017. Trabalho de Conclusão de Curso – Curso de Sistemas de Informação, Universidade Federal de Santa Catarina, UFSC, Florianópolis, 2017.

MEUS Preços: Preços em Supermercados e Lojas. [S. l.], 2019. Disponível em:

https://www.meusprecos.com/. Acesso em: 10 jan. 2022.

MOSLEM, Yasmin. Edit Distance and Jaccard Distance Calculation with NLTK. [S. l.], 2018. Disponível em: https://python.gotrained.com/nltk-edit-distance-jaccard-distance/.

Acesso em: 20 jun. 2022.

MOONEY, S. J., WESTREICH, D. J., & El-Sayed, A. M. (2015). Epidemiology in the era of big data. Epidemiology, 26(3), 390.

PATTERN Matching: the Gestalt Approach. [S. l.], 1 jul. 1988. Disponível em:

https://www.drdobbs.com/database/pattern-matching-the-gestalt-approach/184407970?pgno=5. Acesso em: 09 jul. 2022.

PLAY Store: Resenhas: Meus Preços. [S. l.], 2019. Disponível em:

https://play.google.com/store/apps/details?id=br.com.priced.meusprecos&referrer=utm_sourc e%3Dsite&showAllReviews=true. Acesso em: 11 mar. 2022.

PYMONGO. 2.26.0. [S. l.], 2021. Disponível em: https://pypi.org/project/pymongo/4.0/.

Acesso em: 1 nov. 2021.

PYTHON. 3.9.0. [S. l.], 2020. Disponível em:

https://www.python.org/downloads/release/python-390/. Acesso em: 8 out. 2021.

REQUESTS: HTTP for Humans™. 2.26.0. [S. l.], 2022. Disponível em: https://docs.python-requests.org/en/latest/. Acesso em: 1 nov. 2021.

SAHINALP, Cenk; TASAN, Murat; MACKER, Jai; ZEHRA, Ozsoyoglu. Distance Based Indexing for String Proximity Search. Proceedings 19th International Conference on Data Engineering, [s. l.], n. 03, p. 125-136, 2003.

SANTOS, L. B. dos. FERRAMENTA PARA EXTRAÇÃO DE WEB FORMS. 2012.

Trabalho de Conclusão de Curso – Curso de Sistemas de Informação, Universidade Federal de Santa Catarina, UFSC, Florianópolis, 2012.

SCHEIDT, M. de M. FERRAMENTA PARA EXTRAÇÃO DE WEBTABLES E

CRIAÇÃO DE SCRIPTS SQL. 2013. Trabalho de Conclusão de Curso – Curso de Sistemas de Informação, Universidade Federal de Santa Catarina, UFSC, Florianópolis, 2013.

STRING Similarity Metrics:: Sequence Based. [S. l.], 2021. Disponível em:

https://www.baeldung.com/cs/string-similarity-sequence-based#:~:text=The%20longest%20common%20subsequence%20finds,to%20establish%20a%

20similarity%20measure. Acesso em: 3 jul. 2022.

XU, Peter. WrapApi V2. 2. [S. l.], 2021. Disponível em: https://wrapapi.com/. Acesso em: 8 out. 2021.

WEB Scraper API. [S. l.], 2021. Disponível em: https://oxylabs.io/products/scraper-api/web.

Acesso em: 10 mar. 2022.

APÊNDICE

ARTIGO

EXTRAÇÃO E COMBINAÇÃO POR SIMILARIDADE: UM ESTUDO DE CASO NAS REDES DE SUPERMERCADOS EM FLORIANÓPOLIS

EXTRACTION AND MATCHES BY SIMILARITY: FLORIANÓPOLIS SUPERMARKET’S STUDY CASE

Diogo Campos Viana Luiz RESUMO

Com a ascensão do comércio eletrônico, para bens de consumo básicos, a quantidade de ofertas na qual o consumidor final pode optar ao realizar compras de Supermercados aumentou muito. Considerando o cenário econômico brasileiro, cada vez mais se opta por formas de realizar economia financeira. Hoje em dia, é possível encontrar diversas ferramentas e plataformas online que realizam comparações de preços de produtos, mas a maioria das ferramentas disponíveis são focadas em eletrônicos, eletrodomésticos e outros bens que não são consumíveis. A proposta deste trabalho de conclusão de curso consiste em criar uma ferramenta para auxiliar a identificar, catalogar e classificar produtos similares através de diversos pontos de vendas de supermercados de Florianópolis. A solução proposta conta com o desenvolvimento de uma API que age como um Web scraper a fim de realizar a extração de preços de produtos de supermercados, que disponibilizam serviço de vendas online, localizados em Florianópolis. Os dados passam por um processo de transformação e normalização. Após o pré-processamento, os dados são processados por etapas definidas como integração e indexação, onde os dados extraídos são comparados através de algoritmos de similaridades a fim de combinar os produtos identificados como similares e salvar estas combinações. A ferramenta irá construir uma base de dados indexada e consolidada que facilitará a comparação de preços entre diferentes supermercados.

Palavras-chave: Wrapper; algoritmos de Similaridade; Comparação de preços; Extração de dados; Transformação de dados, Pré-processamento, Scraper, Web Scraping.

ABSTRACT

With the rise of electronic commerce, for basic consumer goods, the number of websites offer in which the final consumer can choose when making purchases from groceries stores has increased. Considering the Brazilian economic scenario, often more ways are being chosen to achieve financial savings. Nowadays, you can find several online tools and platforms that perform product price comparisons, but most of the tools available are focused on electronics, appliances and other goods that are not consumables. The purpose of this article is to develop a tool that will help to identify, catalog and classify similar products through different groceries stores. An api that acts as a Web scraper in order to extract prices from online retailers’ products, located in Florianópolis. The data will undergo a process of transformation and normalization then will the data goes through the steps of indexing and integrations, in order to identify and combine similar products. The tool will build an indexed database that will facilitate the comparison of prices between different groceries stores.

Keywords: Wrapper; Similarity algorithms; Price comparison; Data extraction; Data Transformation, Pre-processing, Scraper, Web Scraping;

1 INTRODUÇÃO

A extração de dados é fundamental para automatizar tarefas, obter informações e identificar oportunidades. Dado ao grande volume e diferentes tipos de dados disponíveis na internet existem diversas maneiras de coletar dados. OCR é uma ferramenta que permite fazer leitura de textos a partir de imagens, é possível combinar ferramentas de extração como um web crawlling e scrapping a fim de atingir os objetivos desejados.

Entre as abordagens possíveis para o desenvolvimento dessa tarefa, o objetivo deste projeto é desenvolver funcionalidades de captura, transformação e salvamento de dados através de técnicas já bem consolidadas.

O desafio é obter os dados extraídos da web, que representam entidades do mundo real, mas se apresentam em diferentes formas, sendo necessário o uso de técnicas de similaridades para identificar produtos que representam a mesma entidade, mensurando através de estratégias e algoritmos de similaridade o quão semelhantes dois produtos distintos na Web representam a mesma entidade no mundo real.

Este projeto apresenta uma estratégia para extração de dados, de produtos de redes de supermercados de Florianópolis e região. É considerado as informações disponibilizadas em suas lojas virtuais, os produtos são identificados e extraídos, além disso, é descrito o desenvolvimento de uma ferramenta responsável pelo processamento de dados e utilização de técnicas de similaridades de textos para identificar e indexar produtos considerados similares através de diferentes fornecedores. A proposta é possibilitar que seja possível identificar produtos realizar o “matching” de produtos iguais.

Como proposta de resolução para o problema de comparação de produtos entre diferentes redes de supermercados, é proposto o desenvolvimento de uma ferramenta de extração de dados de supermercados, pré-processamentos e indexação de dados.

Os objetivos são especificamente:

1. Extração de dados de redes de supermercados e gerar endpoints para extração através do WrapApi

2. Pré-processar os dados; identificar e remover dados sujos, transformar os dados para o formato adequado desejado.

3. Desenvolver uma ferramenta em Python que utiliza técnicas de medidas de similaridade para realizar matching de produtos

4. Construir uma base de dados com os valores obtidos das comparações e valores históricos dos produtos

5. Realização de experimentos para validar a abordagem definida.

2 DESENVOLVIMENTO

Web Data Extraction System, ou web scrapper é uma sequência de procedimentos utilizados para extração de dados de páginas da Web (LAENDER 2002). Encontrar e acessar os sites que possuam dados procurados, utilizando crawlers ou técnicas similares e utilizar técnicas, normalmente um wrapper, para extrair e manipular os dados, transformando-os em dados estruturados.

O processo de extração e combinação de conteúdos de interesse da Web de uma forma sistemática. Em tal processo, um agente de software, também conhecido como robô, imita a interação de navegação entre os servidores da Web e o

humano. Passo a passo, o robô acessa os sites conforme necessário, analisa seu conteúdo para encontrar e extrair dados de interesse e estruturar esses conteúdos conforme desejado (LOURENÇO, 2013).

Web Scrapping e Web Crawling, ambos são formas de usar ferramentas para automatizar o processo de extração de dados, o scrapping e mais assertivo em sua busca, é necessária uma inteligência sobre o domínio em que os dados serão extraídos e tratados.

Devido ao fato de que uma enorme quantidade de dados heterogêneos é constantemente gerada na internet, web scraping é amplamente reconhecido como uma técnica eficiente e poderá para coleta de big data

O processo de análise de dados se beneficiou muito com o avanço da tecnologia e o aumento do uso dos computadores. Em 1890, o inventor Herman Hollerith, com a ajuda de uma máquina de cartões perfurados, conseguiu acelerar o tempo de realização do censo dos Estados Unidos de 7 anos para 18 meses (FOOTE, 2021).

2.1 PROCESSAMENTO DE DADOS

Por mais avançada que esteja a tecnologia acerca da análise de dados atualmente, para que se possa obter conjuntos de dados mais enxutos, descritivos e que forneçam melhores resultados, o pré-processamento é de suma importância. Em adição a isso, é necessário saber que pré-processar uma base de dados do mundo real, pode solucionar problemas como atributos que não foram extraídos da melhor maneira possível, ou até mesmo ajudar a escolher atributos que forneçam mais informações para a sua análise. Ao realizar esse processo, é possível ter um maior entendimento da natureza dos dados, podendo inclusive auxiliar na construção de modelos mais robustos (FAMILI et al., 1997).

2.2 SIMILARIDADE DE TEXTO

Por Existem diferentes abordagens para calcular a similaridade entre textos, as palavras podem ser similares de duas formas, semanticamente e lexicamente. Lexicamente caso os textos tenham as mesmas sequenciais de caracteres. Semanticamente caso os textos tenham o mesmo contexto, mas são utilizados de forma diferentes (GOMAA; FAHMY, 2013).

2.3 PROCESSAMENTO DE DADOS

Os elementos pré-textuais são: título no idioma do documento, título em outro idioma, autor(es), resumo no idioma do documento, resumo em outro idioma, datas de submissão e aprovação do artigo e identificação e disponibilidade.

A distância de Levenshtein é uma métrica de distância de edição que tem como objetivo medir a diferença entre duas sequencias de strings através de operações simples como: inserção, remoção e substituição. A distância de Levenshtein é uma medida que calcula o número de operações mínimas necessárias para transformar uma sequência de caracteres em outra sequência de caracteres. Quanto menor o número, mais similares as sequências são.

(MOSLEM, 2018)

As métricas de similaridade Jaro e Jaro-Winkler pesam os erros nos inícios das sequencias de caracteres com maior valor que os erros que ocorrem nos finais das sequências

de caracteres, estes algoritmos também reduzem a penalidade para as letras que estão deslocadas nas sequências de caracteres (JARO, 1989).

O algoritmo Maior Subsequência Comum, é necessário saber que ele se baseia no algoritmo maior subsequência comum, que possui a seguinte definição. O comprimento da maior subsequência comum (LCCS) de duas ou mais strings é uma ótima medida de similaridade. O LCCS de um par de sequência de strings pode ser inclusive relacionado como uma unidade de medida de distância, ou número de mutações necessárias requeridas para passar de uma string para outra. (PATERSONJ; DANCÍK, 2005).

O algoritmo de maior substring (LCS) comum diferencia-se da maior subsequência comum, apenas pelo princípio de buscar strings inteiras e não apenas sequencias de caracteres. Em ambos os métodos, a similaridade da string é baseada no tamanho padrão.

Para encontrar a LCS entre duas sequencias de caracteres é necessário encontrar todas as substrings de uma das sequencias de strings, preferencialmente a menor e para cada uma destas substrings, determinar se ela é uma substring da segunda sequência de substrings.

(BLUROCK, 2021).

2.3.1 Desenvolvimento da Ferramenta

A ferramenta desenvolvida possui a arquitetura disposta conforme na Figura 1.

Figura 1 – Visão geral da arquitetura da ferramenta desenvolvida neste projeto.

Fonte: autor

Softwares e outros serviços apoiam o desenvolvimento desta ferramenta, estão são apresentadas a seguir.

WrapApi: É uma ferramenta para extração de dados da Web através de uma interface gráfica, adotando o padrão codeless (XU, 2021). A ferramenta abstrai a necessidade de conhecimentos específicos em determinada linguagem de programação para implementação de um wrapper, disponibilizando uma api API própria que retorna os dados selecionados a serem extraídos.

Python: O backend é desenvolvido utilizando Python 3.9.0 (PYTHON..., 2020). A plataforma utilizada para desenvolver a ferramenta de indexação e integração é PyCharm Community Edition 2021.1.3.

Bibliotecas: Para o backend atender as necessidades da ferramenta, foram utilizadas bibliotecas desenvolvidas por terceiros, sendo estas as mais relevantes:

Requests, versão 2.26.0, biblioteca que simplifica o desenvolvimento de envio e recebimento de requisições HTTP/1 (REQUESTS: ..., 2022);

PyMongo, versão 4.0, é uma ferramenta desenvolvida em Python, com maior número de recomendações, para trabalhar com banco de dados MongoDB em Python (PYMONGO..., 2021).

TextDistance, é uma biblioteca para Python que auxilia na comparação entre duas ou mais sequências de caracteres através de diversos algoritmos.

2.3.2 Extração dos dados

A ferramenta WrapApi é utilizada nesta etapa, Figura 10, que age conforme um wrapper, especificamente em sites de supermercado, não havendo a necessidade de implementação de um crawler, pois os domínios são conhecidos, extraindo das páginas Web os produtos que estão disponibilizados para compra.

Para cada supermercado é criada uma estrutura básica de um objeto com as características de um produto e as informações necessárias do produto. Independente do formato original interceptado, o Wrap Api constrói o objeto na estrutura desejada, apresentado na Figura 10, este objeto contém as informações relevantes baseado nos parâmetros desejados à extração.

O Extrator realiza a comunicação com a API disponibilizada pela ferramenta WrapApi, realiza a busca dos dados, o objeto já vem em um formato conhecido pelo extrator que então, realiza requisições para a API, essas requisições podem ser parametrizadas ou não, dependendo especificamente da abordagem utilizada para o site específico.

Os dados dos produtos são extraídos dos supermercados e então segue o seguinte fluxo: padronização, salvamento, transformação e disponibilização (Figura 2).

Figura 2 - Fluxo Geral da Ferramenta

Fonte: autor

A extração dos produtos é realizada através de outro endpoint, que utiliza os ids das categorias e subcategorias extraídos previamente como query params, realizando a extração de forma paginada, a cada requisição 30 produtos são extraídos, outro endpoint verifica se há nova página, se houver, o processo de extração de produtos é repetido.

A extração dos produtos é realizada através de outro endpoint, que utiliza os ids das categorias e subcategorias extraídos previamente como query params, realizando a extração de forma paginada, a cada requisição 30 produtos são extraídos, outro endpoint verifica se há nova página, se houver, o processo de extração de produtos é repetido.

Para determinados supermercados não é possível capturar o JSON trafegado, devido a programação utilizada no desenvolvimento do site, portanto, a estratégia para extrair os dados do Bistek requer conhecer o domínio do marketplace, identificar e selecionar os CSSs que contém as informações relevantes através da interface Web do Wrap Api, utilizando jQuery CSS Selectors (JQUERY, 2022), para realizar a extração das informações. O documento JSON extraído do Bistek é na verdade informações capturadas na página e montadas através do Wrap Api.

O backend, desenvolvido em Python executa a chamada para a API do WrapApi com a intenção de recuperar os dados dos produtos neste momento ocorre a primeira transformação dos dados, a fim de padronizá-los.

2.3.3 Limpeza dos dados

Não há muitos dados a serem limpos nesta etapa, isto ocorre devido a extração dos dados ser realizada somente para produtos disponíveis no site, mesmo que o produto não possua disponibilidade de estoque ou seu preço não esteja disponível, este produto ainda será considerado na base de dados para finalidade de dados de histórico. Mas alguns dados de produtos contém um documento incompletos, estes documentos são descartados e desconsiderados na segunda etapa da transformação.

2.3.4 Transformação dos dados

A primeira etapa da transformação dos dados inicia de forma estruturada já no momento da extração, visto que cada ecommerce possui uma estrutura de dados diferente, independente que incluir diferentes estratégias de obtenção de dados, neste momento, já se inicia a transformação dos dados a fim de aproximar a um modelo comum.

A segunda etapa de transformação dos dados ocorre no backend. Após a extração, mas antes de salvar os dados nos bancos, os produtos são salvos em suas respectivas collections no MongoDB por dia de extração, cada ponto de venda possui sua collection e cada extração de dados gera um documento único (Tabela 1).

Tabela 1 – Modelo de dados do objeto produto salvo product_list Nome do

atributo

Tipo do Atributo

Descrição

thumbnail String String que contém url para

acessar uma imagem do produto

link String String que contém url para

acessar o produto no ecommerce

name String Nome do produto

price String Preço do produto

on_sale String Indica se produto está ou não

em promoção

Fonte: autor

Para cada documento de cada ponto de venda é iterado sobre todos os produtos deste documento a fim de gerar o documento de histórico do produto. Durante este processo, são realizadas validações sobre os atributos do produto.

Nesta etapa, ocorrem as transformações necessárias que foram observadas através da exploração inicial dos dados, esta transformação tem como objetivo padronizar os dados para obter maior número de similaridades durante a indexação do catálogo com o histórico de produtos. O modelo de dicionário de transformação de strings é apresentado na Tabela 2

Tabela 2 – Dicionário de transformação

Padrão Identificado Estado após transformação

Cx/cx caixa

Pct/pct pacote

Und/und unidade

Ferm/ferm fermentado

Achoc/achoc achocolatado

Choc/choc chocolate

Sorv/sorv sorvete

[$Número] seguido do caractere ‘l’. Ex.: 1,0l [$Número] litro. Ex.: 1,0 litro [$Número] seguido do caractere ‘ l’. Ex.: 1,0 l [$Número] litro. Ex.: 1,0 litro

Fonte: autor

2.3.5 Histórico de produtos

O histórico de produtos é criado no após a limpeza e transformação dos dados, o objetivo do histórico de produtos é manter, para cada produto, de cada PDV, um histórico de preços e data da extração. Criando somente um registro por produto para cada PDV. Este processo ocorre após a extração dos dados. Os produtos extraídos são lidos e então identificado o mesmo produto na tabela de histórico para aquele PDV, o documento de histórico é editado então com as novas informações obtidas. Tabela 3.

Tabela 3 – Modelo de dados do documento de histórico de produto

Nome do atributo

Tipo do Atributo

Descrição

_id ObjectId Url para imagem do produto

name String Nome do produto

update_at datetime Data da última atualização do documento

category String Nome da categoria do produto

subcategory String Nome da subcategoria

thumbnail String String que contém url para acessar uma imagem do produto

link String String que contém url para acessar

o produto no ecommerce

price_history Array Array de preços que contém o

preço em formato Double e a data em formato datetime

dates_process Array Array de data em formato

Documentos relacionados