Skip to content

RafaelGallo/Project-machine-learning---PLN

Repository files navigation

Project machine-learning - Processo de linguagem natural

MIT License GPLv3 License AGPL License author

Logo

Projeto

Projetos voltados a processo de linguagem natrual. Modelos de análise de sentimentos aplicado dados do twitter, API, dados de e-commerce, marketing analytics, marketing digital. Objetivo fazer sentimentos das frases e tambem ser um produto está sendo mais avaliado loja virtual. Sentimento para sabe uma pessoa está gostando do produto x ou y.

  • Projeto de Análise de sentimento

  • Análise texto dados da covid19 - KMEANS

  • Análise de sentimento nas frases de feedback

  • Análise de sentimento com a base tweets

  • Análise de sentimento tweets da companhia United airlines

  • Análise de sentimento frases com TextBlob

  • Análise de sentimento tweets da vacina AstraZeneca

  • Análise de sentimento avaliações aplicativos da Google play store

Stack utilizada

Programação Python

Machine learning: Scikit-learn

Leitura CSV: Pandas

Análise de dados: Seaborn, Matplotlib

Modelo machine learning - Processo de linguagem natural: NLTK, TextBlob

Dataset

Dataset Link
NLP - Model sentimental analysis - Climate Change Projeto - Notebook
NLP - Covid K-MEANS Projeto - Notebook
NLP - Model sentimental analysis - Google Play Store Projeto - Notebook
NLP - Model sentimental analysis - IMDB Filmes Projeto - Notebook
NLP - Model sentimental analysis - TextBlob Projeto - Notebook
NLP - Model sentimental analysis - Trip Advisor Hotel Projeto - Notebook
NLP - Model sentimental analysis - Tweets sentiment 1.6 million Projeto - Notebook
NLP - Model sentimental analysis - Tweets Projeto - Notebook
NLP - Model sentimental analysis - United Airlines Projeto - Notebook
NLP - Model sentimental analysis - Vacina AstraZeneca Projeto - Notebook
NLP - Model sentimental analysis - Vacina Moderna Projeto - Notebook
NLP - Model sentimental analysis - Vacina Pfizer Projeto - Notebook
Twitter US Airline Sentiment Projeto - Notebook
COVID19 Fake News NLP Projeto - Notebook
NLP - Research Articles - Covid19 Projeto - Notebook
Wikipedia Promotional Articles https://www.kaggle.com/urbanbricks/wikipedia-promotional-articles/code
Amazon Product Reviews https://www.kaggle.com/yasserh/amazon-product-reviews-dataset

Variáveis de Ambiente

Para rodar esse projeto, você vai precisar adicionar as seguintes variáveis de ambiente no seu .env

API_KEY

ANOTHER_API_KEY

Instalação

Instalação das bibliotecas para esse projeto no python.

  conda install pandas 
  conda install scikitlearn
  conda install numpy
  conda install scipy
  conda install matplotlib

  python==3.6.4
  numpy==1.13.3
  scipy==1.0.0
  matplotlib==2.1.2

Instalação do Python É altamente recomendável usar o anaconda para instalar o python. Clique aqui para ir para a página de download do Anaconda https://www.anaconda.com/download. Certifique-se de baixar a versão Python 3.6. Se você estiver em uma máquina Windows: Abra o executável após a conclusão do download e siga as instruções.

Assim que a instalação for concluída, abra o prompt do Anaconda no menu iniciar. Isso abrirá um terminal com o python ativado. Se você estiver em uma máquina Linux: Abra um terminal e navegue até o diretório onde o Anaconda foi baixado. Altere a permissão para o arquivo baixado para que ele possa ser executado. Portanto, se o nome do arquivo baixado for Anaconda3-5.1.0-Linux-x86_64.sh, use o seguinte comando: chmod a x Anaconda3-5.1.0-Linux-x86_64.sh.

Agora execute o script de instalação usando.

Depois de instalar o python, crie um novo ambiente python com todos os requisitos usando o seguinte comando

conda env create -f environment.yml

Após a configuração do novo ambiente, ative-o usando (windows)

activate "Nome do projeto"

ou se você estiver em uma máquina Linux

source "Nome do projeto" 

Agora que temos nosso ambiente Python todo configurado, podemos começar a trabalhar nas atribuições. Para fazer isso, navegue até o diretório onde as atribuições foram instaladas e inicie o notebook jupyter a partir do terminal usando o comando

jupyter notebook

Demo Modelo PLN

# Importação das bibliotecas de nlp

import nltk
import string
import re
import warnings

nltk.download('stopwords')
nltk.download('punkt')

stopwords = nltk.corpus.stopwords.words("english") + list(string.punctuation)
stopwords

# Pre-processamento
numerical = []

for i in df.columns:
    if df[i].dtype != 'object':
        numerical.append(i)
        
def data_pre(data):
    df['Numero_words'] = df['Text'].apply(lambda x : len([x for x in x.split()]))
    df['Numero_stopwords'] = df['Text'].apply(lambda x : len([x for x in x.lower().split() if x in stopwords]))
    df['Numero_special_char'] = df['Text'].apply(lambda x : len([x for x in x.split() if x in '[\w\s]']))
    df['Numero_chars'] = df['Text'].apply(lambda x : len(''.join([x for x in x.split()])))
    df['Text'] = df['Text'].apply(lambda x : x.lower())
    df['Text'] = df['Text'].str.replace('[^\w\s]','')
    df['Text'] = df['Text'].apply(lambda x : ' '.join(x for x in x.split() if x not in stopwords))
    df['Text'] = df['Text'].apply(lambda x : ' '.join(x for x in x.split() if x.isdigit()==False))

    return data
df.head()

# Stemmer
from nltk.stem import PorterStemmer

PORTER_STEMMER = PorterStemmer()
df['Text'] = df['Text'].apply(lambda x : ' '.join(PORTER_STEMMER.stem(x) for x in x.split()))
most_common = nltk.FreqDist(' '.join(df['Text']).split()).most_common(2000)
print(most_common)

# Treino e teste
processed_features = df['Text']
labels = df['Sentimento']


# Dados de limpeza para modelo PLN
# Remove stop words: Removendo as stop words na base de dados

# Text stemming: Palavras derivacionalmente relacionadas com significados semelhantes, palavras para retornar documentos que contenham outra palavra no conjunto.
# Dados limpos: Limpeza na base de dados limpando dados de web com http e outros.
# Lemmatization: Em linguística é o processo de agrupar as formas flexionadas de uma palavra para que possam ser analisadas como um único item, identificado pelo lema da palavra , ou forma de dicionário.
# Preprocessing: Pré - processamento da base de dados que serão ser para análise de dados.

from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()

def remove_stop_words(instancia):
    stopwords = set(nltk.corpus.stopwords.words("english"))
    palavras = [i for i in instancia.split() if not i in stopwords]
    return (" ".join(palavras))

def dados_limpos(instancia):
    instancia = re.sub(r"http\S+", "", instancia).lower().replace('.','').replace(';','').replace('-','').replace(':','').replace(')','')
    return (instancia)


# Vectorizer NLP
# fidfVectorizer: Converta uma coleção de documentos brutos em uma matriz de recursos do TF-IDF.
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer_TFIDF = TfidfVectorizer(max_features=2500, min_df=7, max_df=0.8)
vectorizer_TFIDF_features = vectorizer_TFIDF.fit_transform(processed_features).toarray()
vectorizer_TFIDF_features

# Tokenização as palavras precisam ser codificadas como inteiros, 
# ou valores de ponto flutuante, para serem usadas como entradas para modelos machine learning.

from sklearn.feature_extraction.text import CountVectorizer

vetor = CountVectorizer(analyzer = "word", tokenizer = tweet_tokenizer.tokenize)
vetor_train = vetor.fit_transform(processed_features)
vetor_train.shape

# Modelo machine learning
# Modelo de regressão logistica 
from sklearn.linear_model import LogisticRegression

modelo_regression_logistic = LogisticRegression()
modelo_regression_logistic_fit = modelo_regression_logistic.fit(vetor_train, labels)
modelo_regression_logistic_score = modelo_regression_logistic.score(vetor_train, labels)

print("Model - Logistic Regression: %.2f" % (modelo_regression_logistic_score * 100))

# Previsão modelo com função predict de previsã das frases
modelo_regression_logistic_pred = modelo_regression_logistic.predict(vetor_train)
modelo_regression_logistic_pred

# Classification report
from sklearn.metrics import classification_report,confusion_matrix
print(classification_report(labels, modelo_regression_logistic_pred))

# Accuracy do modelo
from sklearn import metrics
accuracy_regressao_logistica = metrics.accuracy_score(labels, modelo_regression_logistic_pred)
print("Accuracy model Logistic Regression: %.2f" % (accuracy_regressao_logistica * 100))

# Confusion matrix
matrix_1 = confusion_matrix(labels, modelo_regression_logistic_pred)

x = ["Negativo", "Neutro", "Positivo"]
y = ['Negativo', "Neutro", "Positivo"]

matrix = pd.DataFrame(matrix_1, columns=np.unique(y), index = np.unique(x))
matrix.index.name = 'Actual'
matrix.columns.name = 'Predicted'

plt.figure(figsize = (10,7))
sns.set(font_scale=1.4)
plt.title("Matrix confusion - Logistic Regression")
matrix = sns.heatmap(matrix, cmap = 'Paired', annot=True, annot_kws = {"size": 20}, fmt = "")
}

Melhorias

Que melhorias você fez no seu código?

  • Ex: refatorações, melhorias de performance, acessibilidade, etc

Suporte

Para suporte, mande um email para rafaelhenriquegallo@gmail.com

About

Projeto de machine learning voltado área PLN

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages