<jupyter_start><jupyter_text>ESTRUTURANDO DADOS NÃO ESTRUTURADOS **INFORMAÇÃO x DADO**Antes de entrarmos de fato na definição da estrutura dos dados, você deve saber o que são dados. Em resumo, um dado é a representação utilizada para armazenar uma informação (textos,fotos,videos,tabelas, por exemplo).![](https://www.oriresults.com/wp-content/uploads/Blog-Whats-Hiding-in-Your-Unstructured-Data-1000x592px.png)**DADOS ESTRUTURADOS**Como o próprio nome diz, os dados estruturados são aqueles que possuem estruturas bem definidas, rígidas, pensadas antes da própria existência do dado que será carregado naquela estrutura.Não permitem que tipos de dados diferentes das estruturas pré-estabelecidas sejam carregados. Por exemplo, se a coluna de uma tabela foi criada para ser numérica, ela não aceitará dados textuais.Em sua maioria, dentro de seus sistemas, existem bancos de dados criados diretamente pelos usuários de ambientes e tecnologias analíticas (arquivos Excel, por exemplo). **DADOS NÃO ESTRUTURADOS**Não possuem estruturas bem definidas, alinhadas, padronizadas, podendo ser compostos por diversos elementos diferentes dentro um todo (milhares de pixels únicos dentro de uma mesma foto de uma paisagem, por exemplo).Dados não estruturados são a forma mais frequente de representação de informação, exatamente porque são criados a partir do uso cotidiano das tecnologias na sociedade (mensagens de texto, selfies, áudios via WhatsApp, entre outros).Exemplos: fotos, áudios, vídeos, textos livres, emojis e stickers   3.ANÁLISE DE FREQUÊNCIA E A BIBLIOTECA PANDAS O Pandas é um biblioteca para manipulação e análise de dados, escrita em Python. Essa é a biblioteca perfeita para iniciar suas análises exploratórias de dados, pois ela nos permite ler, manipular, agregar e plotar os dados em poucos passos.  3.1. Tabelar informação<jupyter_code># Importar pandas
import pandas as pd

# Importar colletions
from collections import Counter
# Ler um arquivo de texto
rap_lord=open('Rap Lord.txt','r',encoding="utf8").read()
#Criar uma tabela
tabela=pd.DataFrame(Counter(rap_lord.split()).most_common(10000))
tabela
#Renomear colunas
tabela.rename(columns={0:"Palavra",1:"Contagem"},inplace=True)
tabela
#Total de palavras
total=sum(Counter(rap_lord.split()).values())
#Criar coluna de frequências 
tabela["Percentual"]=(tabela["Contagem"]/total)*100
#Visualizar
tabela<jupyter_output><empty_output><jupyter_text>3.1. Visualizar dados (*Seaborn*)Seaborn é uma biblioteca de visualização de dados Python baseada em matplotlib. Ele fornece uma interface de alto nível para desenhar gráficos estatísticos atraentes e informativos.<jupyter_code>import seaborn as sns
sns.set(rc={'figure.figsize':(15,5)})
ax = sns.barplot(x="Palavra", y="Percentual",palette='Greens_r', data=tabela.head(20))<jupyter_output><empty_output><jupyter_text>4.NORMALIZAÇÃO DE TEXTOS A normalização de texto é o processo de transformar o texto em uma única forma canônica . A normalização do texto antes de armazená-lo ou processá-lo permite a separação de prioridades, uma vez que a entrada é garantida como consistente antes que as operações sejam executadas nele.  4.1. Estabelecer um padrão para as letras (maiúsculas ou minusculas)<jupyter_code>#Aplicar padrão
rap_lord=rap_lord.lower()
rap_lord<jupyter_output><empty_output><jupyter_text>4.2. Remover acentos<jupyter_code>#Instalar biblioteca de simbolos
! pip install Unidecode
#Chamar a biblioteca instalada
import unidecode
#Remover acentos
rap_lord=unidecode.unidecode(rap_lord)
rap_lord<jupyter_output><empty_output><jupyter_text>4.3. Remover caracteres especiais<jupyter_code># Importar biblioteca de Regex
import re
#Remover caracteres especiais
rap_lord=re.sub('\W+',' ',rap_lord)
rap_lord<jupyter_output><empty_output><jupyter_text>4.4. Teste da seçãoCrie um gáfico de frequência das 20 palavras mais comuns no texto, pós normalização.<jupyter_code>#Formar tabela
tabela=pd.DataFrame(Counter(rap_lord.split()).most_common(10000))
#Renomear colunas
tabela.rename(columns={0:"Palavra",1:"Contagem"},inplace=True)
#Total de palavras
total=sum(Counter(rap_lord.split()).values())
#Criar coluna de frequências 
tabela["Percentual"]=(tabela["Contagem"]/total)*100
#Visualizar
tabela.head(10)
ax = sns.barplot(x="Palavra", y="Percentual",palette='Greens_r', data=tabela.head(20))<jupyter_output><empty_output><jupyter_text>5.BIBLIOTECA NLTK E REMOÇÃO DE PALAVRAS VAZIASNLTK é uma plataforma líder para a construção de programas Python para trabalhar com dados de linguagem humana. Ele fornece interfaces fáceis de usar para mais de 50 corpora e recursos lexicais, como WordNet, junto com um pacote de bibliotecas de processamento de texto para classificação, tokenização, lematização, marcação, análise e raciocínio semântico, wrappers para bibliotecas de NLP de força industrial, e um fórum de discussão ativo.  5.1. NLTK (*Natural Language Toolkit*)<jupyter_code>#Instalar biblioteca de nltk
! pip install nltk
# Chamar a biblioteca
import nltk
# Instalar modulos em português
nltk.download('stopwords')<jupyter_output>[nltk_data] Downloading package stopwords to /root/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!<jupyter_text>5.2. Remover palavras vazias (*stop words*)Palavras irrelevantes (stop words) são palavras em inglês que não acrescentam muito significado a uma frase. Eles podem ser ignorados com segurança sem sacrificar o significado da frase. Por exemplo, as palavras como "de", "da","que", etc.<jupyter_code>#Chamar biblioteca de stop words do nltk
stopwords = nltk.corpus.stopwords.words('portuguese')
#Visulizar exemplos
stopwords[:10]
#Remover
palavras_sem_stopwords = [palavra for palavra in rap_lord.split() if palavra not in stopwords]
#Visualizar em forma de tabela
tabela=pd.DataFrame(Counter(palavras_sem_stopwords).most_common(10000))
tabela<jupyter_output><empty_output><jupyter_text>5.3. Teste da seçãoCrie um gáfico de frequência das 20 palavras mais comuns no texto, pós remoção da stop words.<jupyter_code>#Formar tabela
pd.DataFrame(Counter(palavras_sem_stopwords).most_common(10000))
#Renomear colunas
tabela.rename(columns={0:"Palavra",1:"Contagem"},inplace=True)
#Total de palavras
total=sum(Counter(palavras_sem_stopwords).values())
#Criar coluna de frequências 
tabela["Percentual"]=(tabela["Contagem"]/total)*100
#Visualizar
tabela.head(10)
ax = sns.barplot(x="Palavra", y="Percentual",palette='Greens_r', data=tabela.head(20))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08737412858249419, 'fraction_numerical': 0.013168086754453912, 'mean_word_length': 7.130982367758186, 'pattern_counts': {'":': 0, '<': 36, '<?xml version=': 0, '>': 36, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '332117', 'license': 'MIT', 'n_tokens_mistral': 2404, 'n_tokens_neox': 2338, 'n_words': 661, 'path': 'Python/Machine Learning With Python/Natural Language Processing/Introductory Class - (UFPA)/NLP PARTE II.ipynb', 'repo_name': 'FelipeRamosOliveira/Portfolio', 'size': '6455'}