Skip to content

otaviosilvadev/python-pln-nltk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

PLN para Análise de Sentimentos com Python

Sumário

Tecnologias e Ferramentas:

PLN (Processamento de Linguagem Natural)

PLN é uma área de Inteligência Artificial (IA) que estuda e desenvolve métodos para que computadores possam entender, interpretar e gerar linguagem humana.

É comumente utilizada para Análise de Sentimentos, consistindo em um tipo de processamento para identificar se determinado texto é positivo, negativo ou neutro.

Para este caso, o processo consiste em etapas que de modo geral são definidas em tokenização, stopwords, lemmatização, e processamento.

  • Tokenização: remoção de espaços, números, caracteres especiais etc.
  • Stopwords: remoção de palavras irrelevantes, como por exemplo pronomes e artigos. A biblioteca NLTK dispõe de uma base de dados com stop_words em diferentes idiomas.
  • Lematização: gramática para encontrar palavras, especialmente verbos, no infinitivo. Ex: transforma "correndo", "correu", "corrida" em apenas "correr". O NLTK também dispõe de um módulo pronto para lematizizar palavras.
  • Processamento: pode-se utilizar aqui um modelo já treinado como o SentimentIntensityAnalyzer do NLTK ou treinar um modelo novo específico para um cenário ou caso de uso.

Código-fonte

from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from nltk.sentiment import SentimentIntensityAnalyzer
from googletrans import Translator
import nltk

# downloads necessários
nltk.download('stopwords', quiet=True)
nltk.download('punkt', quiet=True)
nltk.download('wordnet', quiet=True)
nltk.download('vader_lexicon', quiet=True)

# stopwords em português (vai usar apenas para filtrar palavras irrelevantes)
stop_words = set(stopwords.words('english'))

# lematizador e analisador VADER
lemmatizer = WordNetLemmatizer()
sia = SentimentIntensityAnalyzer()

translator = Translator()

def process(texto):
    # tradução para inglês
    texto_en = translator.translate(texto, src='pt', dest='en').text
    # pré-processamento simples
    tokens = texto_en.lower().split()
    tokens = [t for t in tokens if t.isalpha()]  # remove pontuação
    tokens = [t for t in tokens if t not in stop_words]  # remove stopwords
    tokens = [lemmatizer.lemmatize(t) for t in tokens]  # lematiza em inglês
    texto_processado = ' '.join(tokens)
    # análise de sentimento em inglês
    sentimento = sia.polarity_scores(texto_processado)
    print(f"\nFrase original: {texto}")
    print(f"Frase processada (inglês): {texto_processado}")
    print(f"Análise de sentimentos: {sentimento}")

# lista de frases (vírgulas corrigidas)
frases = [
    "Eu realmente amei o hamburger! É maravilhoso e saboroso.",
    "Eu odiei o hamburger. A entrega é lenta e não atendem o telefone.",
    "A pizza é boa, não tem nada de especial mas não é ruim."
]

# processar todas as frases
for f in frases:
    process(f)

Saída

Frase original: Eu realmente amei o hamburger! É maravilhoso e saboroso.
Frase processada (inglês): really loved wonderful
Análise de sentimentos: {'neg': 0.0, 'neu': 0.109, 'pos': 0.891, 'compound': 0.847}

Frase original: Eu odiei o hamburger. A entrega é lenta e não atendem o telefone.
Frase processada (inglês): hated slow answer
Análise de sentimentos: {'neg': 0.677, 'neu': 0.323, 'pos': 0.0, 'compound': -0.6369}

Frase original: A pizza é boa, não tem nada de especial mas não é ruim.
Frase processada (inglês): pizza nothing special
Análise de sentimentos: {'neg': 0.53, 'neu': 0.47, 'pos': 0.0, 'compound': -0.3089}

Como Iniciar

Crie o ambiente virtual:

python3 -m venv venv

Inicie o ambiente virtual:

  • Windows
.\venv\Scripts\activate
  • Linux
source venv/bin/activate

Instale as dependências e inicie o projeto:

pip install -r requirements.txt
python3 src/index.py

Autor

Otávio Silva

Linkedin Badge Gmail Badge

About

PLN para Análise de Sentimentos com Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages