blaff
(usa Debian)
Enviado em 02/07/2015 - 13:43h
Pessoal, preciso da ajuda de vocês. Tenho que entregar um trabalho amanhã a noite de korn shell ( linguagem anterior a shell script ) e faltam alguns detalhes que eu não consigo colocar no programa.
Eu preciso extrair de um dataset a quantidade de alguns emoticons, analisar linha por linha e dar uma polaridade a ela, a quantidade de endereços e-mail que tem dentro dela e a quantidade de tags ( #qualquercoisa).
Cada emoticon expressa um sentimento, que vamos chamar de negativo ou positivo, dependendo da quantidade ( ou inexistência ) deles, daremos uma polaridade para a linha analisada, sendo negativa, positiva ou neutra. Quando a linha contém apenas emoticons positivos ou apenas negativos, daremos a sentença o valor de positiva ou negativa, caso não exista nenhum emoticon, será neutra, e caso haja uma mistura de polaridades, pra sentença ser negativa ou positiva, a quantidade predominante tem que ser 2,5x maior que a outra.
Enfim, resumindo tudo isso:
Quantidade de cada tipo de emoticon;
polaridade de cada linha;
quantidade de hashtags;
quantidade de endereços eletrônicos.
Eu estou usando dois arquivos, um contém apenas os códigos para converter os emoticons e o outro é para calcular, o cálculo das sentenças eu já consegui fazer, agora preciso calcular quantos emoticons tem de cada, os e-mails e as hashtags. Segue os códigos abaixo:
[spoiler]
esse é o programaexec.ksh
pos_score () {
line=$*
score=$(echo $line | sed -e 's/ /\n/g' | grep POSITIVE | wc -l)
echo $score
}
neg_score () {
line=$*
score=$(echo $line | sed -e 's/ /\n/g' | grep NEGATIVE | wc -l)
echo $score
}
email_score() {
line=$*
score=$(echo $line | sed -e 's/*@*.com/ _EMAIL_ /g')
echo $line
}
pos_replace () {
line=$*
line=$(echo $line | sed -e 's/:)/ _POSITIVE_/g')
echo $line
line=$*
line=$(echo $line | sed -e 's/:D/ _POSITIVE_/g')
echo $line
line=$*
line=$(echo $line | sed -e 's/<3/ _POSITIVE_/g')
echo $line
line=$*
line=$(echo $line | sed -e 's/;)/ _POSITIVE_/g')
echo $line
}
neg_replace () {
line=$*
line=$(echo $line | sed -e 's/:(/ _NEGATIVE_/g')
echo $line
line=$*
line=$(echo $line | sed -e 's/D:/ _NEGATIVE_/g')
echo $line
line=$*
line=$(echo $line | sed -e 's/>:/ _NEGATIVE_/g')
echo $line
line=$*
line=$(echo $line | sed -e 's/:p/ _NEGATIVE_/g')
echo $line
}
email_replace () {
line=$*
line=$(echo $line | sed -e 's/*@*.com/ _EMAIL_ /g')
echo $line
}
[/spoiler]
[spoiler]
#!/bin/ksh
#aqui é onde eu chamo o primeiro script
. ./programaexec.ksh
#aqui é onde eu chamo o data set
file="$1"
# while loop
while read line
do
line_or=$line
line=$(pos_replace $line)
line=$(neg_replace $line)
line=$(email_replace $line)
pos_sc=$(pos_score $line)
neg_sc=$(neg_score $line)
email_sc=$(email_score $line)
echo "----------------------------------------------"
echo $line_or
echo "--SCORE POSITIVO = $pos_sc"
echo "--SCORE NEGATIVO = $neg_sc"
# echo "-- SCORE EMAIL = $email_sc"
let mul_pos=$(($pos_sc * 2,5))
let mul_neg=$(($neg_sc * 2,5))
if [ $pos_sc -gt $mul_neg ]; then
echo 'A frase e positiva.'
qpos=$(($qpos + 1))
fi
if [ $mul_pos -eq $mul_neg ]; then
echo 'A frase e neutra.'
qneu=$(($qneu + 1))
fi
if [ $mul_neg -gt $pos_sc ]; then
echo 'A frase e negativa.'
qneg=$(($qneg + 1))
fi
echo "-------------------------------------------------"
echo "-------------------------------------------------"
done<"$file"
arq=$@
echo '-----------------------------------------------------------'
echo '-----------------------------------------------------------'
echo "O arquivo: $arq contem:"
if [ $mul_neg -le $mul_pos ]; then
qpos=$((qpos + 1))
qneg=$((qneg + 1))
qneu=$((qneu + 1))
echo "$qpos linhas positivas"
echo "$qneg linhas negativas."
echo "$qneu linhas neutras."
echo "$email_sc e-mails."
echo '-----------------------------------------------------------'
echo '-----------------------------------------------------------'
echo '-----------------------------------------------------------'
fi
[/spoiler]