Skip to content

RafaelGallo/Project-machine-learning---PLN

Folders and files

NameName
Last commit message
Last commit date

Latest commit

bd2310a · Apr 20, 2022

History

23 Commits
Apr 20, 2022
Feb 1, 2022
Feb 14, 2022
Jan 17, 2022
Feb 1, 2022
Jan 17, 2022
Jan 17, 2022
Jan 17, 2022
Jan 16, 2022
Jan 17, 2022
Feb 14, 2022
Jan 17, 2022
Jan 17, 2022
Jan 17, 2022
Jan 17, 2022

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 [email protected]

About

Projeto de machine learning voltado área PLN

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages