Analise de sentimento flume no twitter-Exibição no Hive

Analise de sentimento flume no twitter-Exibição no Hive

Este é um tutorial explicando a construção do script pyspark

Para a análise foi utilizado o spark, uma tecnologia de computação distribuída em cluster, extremamente rápida. existem muitos métodos e abordagens diferentes para a análise de sentimentos. para simplificar, nós utilizaremos uma abordagem mais básica.

No entanto, nada impede que você adote uma abordagem mais sofisticada usando pnl e outras ferramentas o diagrama a seguir ilustra a abordagem adotada neste tutorial.

análise de sentimento

O resultado será uma medida aproximada de quão positivos ou negativos os tweets são sobre o assunto. os retweets são considerados como “tendo o mesmo sentimento” – obviamente, isso pode não ser verdade, mas simplifica a maneira como os tweets são processados.a presença do assunto irá “assumir” o sentimento do tweet. isso significa que, se o samsung s7 é mencionado no tweet, o sentimento do tweet é atribuído ao “samsung s7”.obviamente, para sermos mais precisos, precisaríamos fazer resolução de nome de entidade, análise de sentença e análise de sentimento baseada em aspectos. inflexões de sarcasmo e palavra não são levadas em conta e podem levar a uma pontuação incorreta de sentimento.

arquivos usados pelo script pyspark

 

  • afinn (finn årup nielsen) – uma lista de palavras em inglês classificadas por valor numérico inteiro entre menos cinco (negativo) e mais cinco (positivo). o arquivo foi adaptado para o português para realização desse experimento

 

  • deve color no caminho a seguir.

candidate mapping.txt

para simplificar como determinamos se um tweet deve ser atribuído a um candidato / assunto é fazendo referência ao manipulador candidato / assunto.

 

por exemplo:  
tweet #1
@cirogomes concedeu a uma entrevista…  
tweet #2
@cirogomes trava grande luta….  
tweet #3
@joãodoria diz que são paulo é…  

no exemplo acima, o sentimento pelos tweets #1 e #2 será atribuído a ciro gomes, enquanto o tweet #3 será atribuído a joão doria.

passos da análise

 

etapa 1: cria um mapeamento simples para rotular o nome do tweet. como candidatos diferentes serão referenciados no tweet de maneira diferente, é preciso mapear cada nome de candidato para os diferentes nomes pelos quais eles são referidos.

etapa 2: cria um dicionário de palavras de sentimento e suas pontuações associadas. isso será usado para calcular a pontuação geral do sentimento do tweet.

passo 3: para cada tweet, calcula a pontuação do sentimento e soma a pontuação de cada candidato.

 

a computação principal ocorre nos trechos de código mostrados a seguir:

sentimenttuple = tweets.rdd.map(lambda r: [r.id, r.text, r.name]) \

.map(lambda r: [sentiment(r[1]),r[2]]) \

.flatmapvalues(lambda x: x) \

.map(lambda y: (y[1],y[0])) \

.reducebykey(lambda x, y: x+y) \

.sortbykey(ascending=true)

scoredf = sentimenttuple.join(candidates) \

.map(lambda (x, y): (y[1],y[0])) \

.reducebykey(lambda a, b: a + b) \

.todf()

 

Destrinchando: 

 

sentimenttuple = tweets.rdd.map(lambda r: [r.id, r.text, r.name])

 

o conjunto de resultados da consulta de tweets é referenciado como um conjunto de dados resiliente (.rdd) e, em seguida, a função lambda é aplicada a todas as linhas no rdd usando o método map.com a lista de 3-tuplas, novamente aplicamos a função lambda em cada linha (agora uma 3-tupla) que chama a função sentiment anteriormente definida e retorna um 2-tuple com o sentiment score e r.text (r [2])

 

o resultado de:

.map(lambda r: [sentiment(r[1]),r[2]]) \

[1.0012610959381487, [u’jaime soares’]], [-13.599376521158035], [u’jair bolsonaro’]], [-0.47868277536822768], [u’jairo jorge’, u’janaina paschoal’]] …

com o conjunto de dados de 2-tuplas, aplicamos uma função flatmapvalues() para nivelar a estrutura dentro de r [2].

isso facilitará o processamento nas etapas subsequentes então o resultado de .flatmapvalues(lambda x: x) \ é: (1.0012610959381487, u’jaime soares‘) (-13.599376521158035, u’jair bolsonaro’) (-0.47868277536822768, u’jairo jorge’) (-0.47868277536822768, u’janaina paschoal’) …

esta é uma etapa simples para trocar os campos para que a primeira coluna seja o nome e a segunda seja a pontuação de sentimento então o resultado de .map(lambda y: (y[1],y[0])) \ é:

 

(u’jaime soares‘, 1.0012610959381487)

(u’jair bolsonaro’, -13.599376521158035)

(u’jairo jorge’, -0.47868277536822768)

(u’janaina paschoal’, -0.47868277536822768)

o reducebykey() é uma função onde os valores das 2-tuplas são somados.

por padrão, a primeira coluna no conjunto de dados será a chave, portanto, essa instrução adicionará todos os y [0] com o mesmo valor de chave em y [1].

o resultado é a soma de cada nome encontrado em todo o conjunto de tweets, como mostrado abaixo.

o reducebykey()  resulta em:

(u’#1deabril #diadolula’, -0.10222859593214292)

(u’#bolsonaropresidente\u0001f1e7\u0001f1f7′, -0.71155785495028201)

(u’#givanildo \u0001f1e7\u0001f1f7′, -1.0878299881551272)

(u’#lulaliderdopt’, -0.42560277789377526)

(u’#somostodosmoro’, 0.26211121699831136)

(u’#votoimpresso #direita #bolsonaro’, 0.43759497449368367)

finalmente, o método sortbykey() classificará o rdd de 2-tuplas em ordem crescente por nome. último passo, faz um left join com o dataframe do candidato row(_1=u’cirogomes’,_2=1.3068750447223945) row(_1=u’álvaro dias’, _2=0.20299071319474044)

row(_1=u’ jairbolsonaro’, _2=-13.599376521158035)

para que o spark enxergue as tabelas hive, digite o comando:

rm -r /etc/spark/conf/hive.xml

pode ser que não encontre, não tem problema.

agora rode o comando:

sudo ln -s /etc/hive/conf/hive-site.xml /etc/spark/conf/hive-site.xml

baixe o script pyspark em:

link para download do script sentimentanalysis.py

agora entre na pasta onde o arquivo se encontra e digite:

spark-submit sentimentanalysis.py

após isso vai começar a fazer o processamento spark map reduce de acordo com o que foi estabelecido.

  • script pyspark py, preenche a tabela candidate_score. entre no hive e faça uma consulta a tabela e veja o resultado:

select * from candidate_score;

após isso devemos acessar a tabela candidate_score através do hive

Depois e só verificar os dados sendo gerados e realizar as análises na tabela candidate_score,

referência link: http://www.codigofluente.com.br/analise-de-sentimento-flume-twitter-03/

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.