<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 1. Análise de Sentimentos
1. Objetivo
Determinar o valor subjetivo de um documento de texto, ou seja, como positivo ou negativo é o conteúdo de um documento de texto.
1. Problema
A empresa Amazon deseja obter um sistema inteligente para processar os comentários
de seus clientes sobre os seus produtos, podendo classificar tais comentários dentre as
categorias
Step1:  1. Tokenization
Para a criação de um dicionário, precisa-se transformar o texto em tokens. Para auxiliar nessa tarefa pode-se utilizar uma biblioteca para processamento de linguagem natural, no exemplo abaixo, usa-se o nltk. O nltk é uma biblioteca Python de código aberto que realiza esta função.
Step2:  1. Dicionário
Para criar um dicionário, precisamos usar apenas a coluna que contém as sentenças no arquivo e ignorar a coluna da polaridade. Novamente, o nltk facilita esse processo. Obtidas as sentenças, usaremos o nltk para quebrá-las em tokens.
Step3:  1.  Vetorização
Usa-se a vetorização para tornar possível o trabalho dos classificadores. Na vetorização do texto, cada palavra é tratada como uma característica
Step4:  1. Word normalization
Uma abordagem comum na análise de sentimentos é o uso de digramas ou trigramas, isso auxilia na classificação de sentenças. Dado um vetor de tokens onde já se foram eliminados as repetições e stop words, podemos criar digramas como segue
<ASSISTANT_TASK:>
Python Code:
import pandas
imdb = pandas.read_csv('data/imdb_labelled.txt', sep="\t", names=["sentences", "polarity"])
yelp = pandas.read_csv('data/yelp_labelled.txt', sep="\t", names=["sentences", "polarity"])
amazon = pandas.read_csv('data/amazon_cells_labelled.txt', sep="\t", names=["sentences", "polarity"])
big = pandas.DataFrame()
big = big.append([imdb, yelp, amazon])
big.to_csv('big.csv', index=False, encoding='utf-8')
Explanation: 1. Análise de Sentimentos
1. Objetivo
Determinar o valor subjetivo de um documento de texto, ou seja, como positivo ou negativo é o conteúdo de um documento de texto.
1. Problema
A empresa Amazon deseja obter um sistema inteligente para processar os comentários
de seus clientes sobre os seus produtos, podendo classificar tais comentários dentre as
categorias: positivo ou negativo. Para isso ela disponibiliza três bases de dados com
sentenças rotuladas.
1. Os Dados
Os dados estão organizados em sentença e rótulo, sendo 0 negativo e 1 positivo
As bases são provenientes dos seguintes sites:
* imdb.com
* amazon.com
* yelp.com
1. Preparação
```Dockerfile
FROM python:3 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD . /code/
RUN pip install scikit-learn pandas matplotlib scipy jupyter nltk
RUN chmod +x boot.sh
EXPOSE 8888
CMD ["/bin/sh", "./boot.sh"]
```
Boot.sh:
```
python << END
import sys
import nltk
nltk.download('punkt')
nltk.download('stopwords')
END
jupyter notebook --ip=0.0.0.0 --allow-root
```
Build:
docker build -t machine-learn .
Para executar, use o comando:
docker run --name machine-learn-container -p 8888:8888 -v ~/amazon/jeferson:/code machine-learn:latest /bin/sh ./boot.sh
1. Pré-processamento
As três bases de dados do problema devem ser usadas em conjunto. A biblioteca pandas pode ser usada para facilitar esse processo. O código abaixo importa as bases e as concatena em uma base maior. Ao final, é gerado um arquivo com extensão csv, o qual será usado para os treinos e análises futuras.
End of explanation
import nltk
sentence = 'My test for nltk library!!'
tokens = nltk.word_tokenize(sentence)
print(tokens)
Explanation: 1. Tokenization
Para a criação de um dicionário, precisa-se transformar o texto em tokens. Para auxiliar nessa tarefa pode-se utilizar uma biblioteca para processamento de linguagem natural, no exemplo abaixo, usa-se o nltk. O nltk é uma biblioteca Python de código aberto que realiza esta função.
End of explanation
import nltk
sentences = big['sentences']
sentences_strings = sentences.str.lower()
sentences_tokens = [] # Has all sentences tokens
for sentence_string in sentences_strings:
	token = nltk.word_tokenize(sentence_string)
	sentences_tokens.extend(token)
    
dictionary = set()
dictionary.update(sentences_tokens)
Explanation: 1. Dicionário
Para criar um dicionário, precisamos usar apenas a coluna que contém as sentenças no arquivo e ignorar a coluna da polaridade. Novamente, o nltk facilita esse processo. Obtidas as sentenças, usaremos o nltk para quebrá-las em tokens.
End of explanation
import numpy
tuplas = zip(dicionario, range(len(dicionario)))
mapa = {sentence_tokens:indice for sentence_tokens, indice in tuplas}
def vetorizar_texto(texto, mapa):
    vetor = [0] * len(mapa)
    for sentence_tokens in texto:
        if sentence_tokens in mapa:
            posicao = mapa[sentence_tokens]
            vetor[posicao] += 1
    return vetor
vetoresdeTexto = [vetorizar_texto(texto, mapa) for texto in sentences_tokens]
X = numpy.array(vetoresdeTexto)
Explanation: 1.  Vetorização
Usa-se a vetorização para tornar possível o trabalho dos classificadores. Na vetorização do texto, cada palavra é tratada como uma característica
End of explanation
dictionary = set()
tokens = ['teste1', 'teste2', 'teste3', 'teste4']
for x in range(len(tokens)):
    if x + 1 < len(tokens):
        digram = [tokens[x]+' '+tokens[x+1]]
        dictionary.update(digram)
        
print(dictionary)
Explanation: 1. Word normalization
Uma abordagem comum na análise de sentimentos é o uso de digramas ou trigramas, isso auxilia na classificação de sentenças. Dado um vetor de tokens onde já se foram eliminados as repetições e stop words, podemos criar digramas como segue:
End of explanation
<END_TASK>