📜  使用Python进行 Facebook 情绪分析

📅  最后修改于: 2022-05-13 01:54:57.716000             🧑  作者: Mango

使用Python进行 Facebook 情绪分析

本文是使用 Vader 进行的 Facebook 情绪分析,如今许多政府机构和公司都需要了解其客户在 Facebook 等社交媒体上的反馈和评论。

什么是情绪分析?

情感分析是机器学习最好的现代分支之一,主要用于分析数据以了解自己的想法,现在很多公司都使用它来获取客户的反馈。

为什么要使用情绪分析?

  • 无价的营销:
    使用情感分析公司和产品所有者可以使用情感分析通过客户的评论和反馈来了解他们产品的需求和供应。
  • 识别关键的情绪触发因素:
    在心理学和其他医疗机构中,情绪分析可以用来检测个体的情绪是正常还是异常,并根据数据记录来判断人的健康状况。
  • 政治:
    在政治领域,候选人可以通过情绪分析来预测他们的政治地位,衡量人们的接受程度。它还可用于预测选举委员会的选举结果。
  • 教育:
    大学和其他高等院校如学院可以使用情绪分析来了解学生的反馈和评论,因此他们可以考虑修改或改进他们的教育课程。

Anaconda 中的安装

  • NLTK:用于理解人类自然语言。
    使用 conda 命令安装。
conda install -c anaconda nltk
  • 使用 pip 安装。
pip install nltk
  • NumPy:是一个Python包,用于Python中的科学和计算方法。
    使用 conda 安装。
conda install -c conda-forge numpy
  • 使用点子。
pip install numpy
  • Pandas:是一个用于数据预处理和分析的Python模块。
    使用 conda 安装
conda install -c anaconda pandas
  • 使用 pip 安装。
pip install pandas
  • Matplotlib:是一个Python模块,用于数据可视化和 2D 绘图以表示数据。
    使用 conda 安装。
conda install -c conda-forge matplotlib
  • 使用 pip 安装。
pip install matplotlib 

验证

获取 Facebook 评论的方法有很多:

  • Facebook 图形 API
  • 从 Facebook 直接下载
  • 从另一个数据集提供者站点下载

在上述方法中,我们使用了从最好的数据集提供商 Kaggle 网站下载 Facebook 评论数据集。对于我们已经使用 kindle.txt 分析 kindle amazon facebook 评论的代码,您可以使用您自己的 Facebook 评论使用此代码来分析您自己的评论或创建一个文本格式的文件并尝试简化。
下面是实现。

Python3
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import nltk
import io
import unicodedata
import numpy as np
import re
import string
from numpy import linalg
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.tokenize import PunktSentenceTokenizer
from nltk.tokenize import PunktSentenceTokenizer
from nltk.corpus import webtext
from nltk.stem.porter import PorterStemmer
from nltk.stem.wordnet import WordNetLemmatizer
 
 
with open('kindle.txt', encoding ='ISO-8859-2') as f:
    text = f.read()
     
sent_tokenizer = PunktSentenceTokenizer(text)
sents = sent_tokenizer.tokenize(text)
 
print(word_tokenize(text))
print(sent_tokenize(text))
 
porter_stemmer = PorterStemmer()
 
nltk_tokens = nltk.word_tokenize(text)
 
for w in nltk_tokens:
    print ("Actual: % s Stem: % s" % (w, porter_stemmer.stem(w)))
     
 
wordnet_lemmatizer = WordNetLemmatizer()
nltk_tokens = nltk.word_tokenize(text)
 
for w in nltk_tokens:
    print ("Actual: % s Lemma: % s" % (w, wordnet_lemmatizer.lemmatize(w)))
     
text = nltk.word_tokenize(text)
print(nltk.pos_tag(text))
 
sid = SentimentIntensityAnalyzer()
tokenizer = nltk.data.load('tokenizers / punkt / english.pickle')
 
with open('kindle.txt', encoding ='ISO-8859-2') as f:
    for text in f.read().split('\n'):
        print(text)
        scores = sid.polarity_scores(text)
        for key in sorted(scores):
            print('{0}: {1}, '.format(key, scores[key]), end ='')
              
    print()


输出:

here is the  sample output of the code:
['i', 'love', 'my', 'kindle']
['i love my kindle']
Actual: i Stem: i
Actual: love Stem: love
Actual: my Stem: my
Actual: kindle Stem: kindl
Actual: i Lemma: i
Actual: love Lemma: love
Actual: my Lemma: my
Actual: kindle Lemma: kindle
[('i', 'NN'), ('love', 'VBP'), ('my', 'PRP$'), ('kindle', 'NN')]
i love my kindle
compound: 0.6369, neg: 0.0, neu: 0.323, pos: 0.677,

我们在我们的计划中遵循以下主要步骤:

  • 从 Kaggle 网站下载(获取)facebook 评论并将其保存为文本格式。
  • 通过 SkLearn 和 nltk 库对数据进行预处理。我们首先对数据进行标记,然后在标记后进行词干化和词形还原。
  • 使用 Vader library 解析注释。将每条评论分类为正面、负面或中性。

现在,让我们试着理解上面的代码:

  • 首先,我们打开一个名为 kindle 的文件,该文件是从 Kaggle 网站下载并保存在本地磁盘中的。
  • 打开文件后,我们通过标记化、词干化和词形还原对文本进行预处理:
    • 标记文本,即从文本中拆分单词。
  • 对文本进行词干化和词形还原以对文本进行规范化:
    1) 对于词干化,我们使用 PorterStemmer()函数:
  • 2) 对于词形还原,我们使用 WordNetLemmatizer()函数:
  • POS(词性)标记标记并仅选择重要的特征/标记,如形容词、副词和动词等。
text = nltk.word_tokenize(text)
print(nltk.pos_tag(text)) 
  • 将令牌传递给情绪强度分析器,该分析器将 Facebook 评论分类为正面、负面或中性。

以下是 vader 情绪分析器的工作原理:

  • VADER 使用一个情感词典的组合,它是一个词汇特征(例如,单词)的列表,这些特征通常根据它们的语义方向标记为正面或负面。
  • 情绪分析器不仅可以告诉我们积极性和消极性得分,还可以告诉我们情绪的积极或消极程度。
  • 然后,我们使用 polar_scores() 方法获取给定句子的极性索引。
    然后,我们将评论强度和极性构建为:
  • 让我们了解一下情感代码是什么以及 VADER 如何在上述代码的输出上执行:
i love my kindle
compound: 0.6369, neg: 0.0, neu: 0.323, pos: 0.677 
  • Positive(pos)、Negative(neg) 和 Neutral(neu) 分数表示属于这些类别的文本的比例。这意味着我们的句子被评为 67% 正面、32% 中性和 0% 负面。因此,所有这些应该加起来为 1。
  • 复合分数是一个度量标准,它计算所有已在 -1(极端负面)和 +1(极端正面)之间归一化的词典评级的总和。
  • 最后,返回评论的情感分数。