Вы находитесь на странице: 1из 17

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL

CUSCO

FACULTAD DE CIENCIAS QUIMICAS FISICAS Y MATEMTICAS

CARRERA PROFESIONAL DE INGENIERIA


INFORMATICA Y DE SISTEMAS

Anlisis de Sentimientos

ASIGNATURA : Lenguajes Formales.


DOCENTE : Mg. JULIO CARBAJAL LUNA

INTEGRANTES :

Semestre Acadmico 2014- I

Introduccin

En esta ocasin nos interesar la parte de anlisis de sentimientos, tambin


conocido como opinion mining, que no es otra cosa que la interpretacin de
la actitud u opinin de un usuario hacia una marca y su implicacin con la
misma. Es un indicador KPI (Key Performance Indicator) principalmente
importante para los medios sociales, ya que permite analizar la respuesta
emocional de los usuarios que han interactuado con una marca.

Los usuarios hoy en da cuentan con un mayor nmero de opciones para


dejar sus opiniones, sus dudas, felicitaciones o preocupaciones, la cules
para bien o para mal, dejan constancia en el ciberespacio. Para las
empresas estas acciones son de vital importancia porque as pueden medir
su impacto en los medios sociales, pues si se analiza correctamente esta
mtrica, la informacin relevante indicar qu le gusta o qu no le gusta al
usuario sobre la marca.

La disponibilidad de toda esta informacin permite que mediante los medios


adecuados de monitoreo y anlisis pueda aprovecharse para impactar de
alguna manera en una gran variedad de mbitos (sociales, econmicos,
laborales, financieros, etc.). A esta tendencia se le conoce como minera de
opinin, por ejemplo, conocer las opiniones y expectativas de los usuarios
puede ayudar a mejorar la toma de decisiones.

El anlisis de sentimientos implica la clasificacin de opiniones en el texto


en categoras como "positivo" o "negativo", a menudo con una categora
implcita de "neutral". Una aplicacin clsica de sentimiento sera el
seguimiento de lo que los bloggers estn diciendo acerca de una marca
como por ejemplo Toyota. El anlisis de sentimientos tambin se llama
minera de opiniones o voz del cliente. Existen variedad de nuevas
empresas en esta rea y conferencias.
Planteamiento del problema

Existen diversidad de aplicaciones para realizar el Anlisis de


Sentimientos. Asimismo se cuenta con gran variedad de libreras de
distintas empresas, las cuales a travs de su uso nos facilitaran la tarea de
analizar los sentimientos y obtener medidas de estas.

En esta oportunidad se utilizara la librera denominada LingPipe,


especficificamente las clases pertenecientes a Classify, Classified y
DynamicLMCClassifier.

El problema reside en la ejecucin de la clase principal PolarityBasic, esta


misma es la que hace uso de las dems clases antes mencionadas
pertenecientes a la librera Lingpipe

Utilizaremos el lenguaje jGRASP para la ejecucin de la clase PolarityBasic.


Diseo y funcionamiento de la solucin (Descripcin de la
abstraccin del problema y su solucin, apoyndose de diagramas y
figuras en un lenguaje claro)

Diseo

Utilizamos la clase PolarityBasic, desarrollada por LingPipe, la modificacin


de esta clase nos permitir su ejecucin desde jGRASP.

Solucin

Uno de los requisitos necesarios para el funcionamiento de la librera


LingPipe es la instalacin de la aplicacin Ant. Esta aplicacin ser
descargada e instalada, posteriormente ser configurada para su uso
correspondiente. Esta configuracin ser realizada a travs del Intrprete de
Comandos (Cmd).
Luego de configurar la aplicacin Ant, podremos ejecutar la versin demo de
Sentiment, que viene a ser el anlisis de sentimientos. Para esto, tal como
indica el tutorial descargamos el corpus de entrenamiento, el corpus a
utilizar ser Polarity v2.0, el cual consta de 1000 revisiones negativas, 1000
revisiones positivas de texto de cine. Este corpus se ha extraido de IMDB.
Luego de descargar el corpus, este tiene que ser descomprimido, una vez
hecho esto ha de ser posible su uso.

Ahora realizamos la ejecucin del demo, que tambin incluye LingPipe, la


ejecucin se realiza desde el Interprete de Comandos, a continuacin se
muestra como:

La solucin, es bsicamente la modificacin de una pequea parte del


cdigo:
Para poder utilizar la librera LingPipe en el lenguaje jGRASP es necesario
especificar la ruta donde se encuentra dicho archivo, de esta manera se
podr utilizarla.
Implementacin de la solucin (Segn la solucin diseada como se
implement en el lenguaje de programacin)

import com.aliasi.util.Files;

import com.aliasi.classify.Classification;
import com.aliasi.classify.Classified;
import com.aliasi.classify.DynamicLMClassifier;

import com.aliasi.lm.NGramProcessLM;

import java.io.File;
import java.io.IOException;

public class PolarityBasic {

File mPolarityDir;
String[] mCategories;
DynamicLMClassifier<NGramProcessLM> mClassifier;

PolarityBasic(String[] args) {
System.out.println("\nBASIC POLARITY DEMO");
mPolarityDir = new File(args[0],"txt_sentoken");
System.out.println("\nData Directory=" +
mPolarityDir);
mCategories = mPolarityDir.list();
int nGram = 8;
mClassifier
= DynamicLMClassifier
.createNGramProcess(mCategories,nGram);
}

void run() throws ClassNotFoundException, IOException {


train();
evaluate();
}

boolean isTrainingFile(File file) {


return file.getName().charAt(2) != '9'; // test on
fold 9
}

void train() throws IOException {


int numTrainingCases = 0;
int numTrainingChars = 0;
System.out.println("\nTraining.");
for (int i = 0; i < mCategories.length; ++i) {
String category = mCategories[i];
Classification classification
= new Classification(category);
File file = new
File(mPolarityDir,mCategories[i]);
File[] trainFiles = file.listFiles();
for (int j = 0; j < trainFiles.length; ++j) {
File trainFile = trainFiles[j];
if (isTrainingFile(trainFile)) {
++numTrainingCases;
String review =
Files.readFromFile(trainFile,"ISO-8859-1");
numTrainingChars += review.length();
Classified<CharSequence> classified
= new
Classified<CharSequence>(review,classification);
mClassifier.handle(classified);
}
}
}
System.out.println(" # Training Cases=" +
numTrainingCases);
System.out.println(" # Training Chars=" +
numTrainingChars);
}

void evaluate() throws IOException {


System.out.println("\nEvaluating.");
int numTests = 0;
int numCorrect = 0;
for (int i = 0; i < mCategories.length; ++i) {
String category = mCategories[i];
File file = new
File(mPolarityDir,mCategories[i]);
File[] trainFiles = file.listFiles();
for (int j = 0; j < trainFiles.length; ++j) {
File trainFile = trainFiles[j];
if (!isTrainingFile(trainFile)) {
String review =
Files.readFromFile(trainFile,"ISO-8859-1");
++numTests;
Classification classification
= mClassifier.classify(review);
if
(classification.bestCategory().equals(category))
++numCorrect;
}
}
}
System.out.println(" # Test Cases=" + numTests);
System.out.println(" # Correct=" + numCorrect);
System.out.println(" % Correct="
+ ((double)numCorrect)/
(double)numTests);
}

public static void main(String[] args) {


try {
String ruta="C:\\review_polarity\\";
String[] strruta = new String[] {ruta};
new PolarityBasic(strruta).run();
} catch (Throwable t) {
System.out.println("Thrown: " + t);
t.printStackTrace(System.out);
}
}

}
Funcionamiento (Verificacin de la solucin, pruebas y resultados
de salida *Pantallazos)

Funcionamiento desde el Interprete de Comandos.

Funcionamiento desde NetBeans.


Funcionamiento desde jGRASP.
Errores detectados (Si existe algn error detectado, el cul no fue
posible resolver o se desconoce el motivo y solo ocurre con ciertas
condiciones es necesario describirlo)

Inicialmente se tenan errores tales como la inexistencia de la librera,


problema que fue solucionado. Posteriormente se tenan problemas con
respecto al cdigo, al momento de pasar como parmetro la ruta de
ubicacin del archivo relacionado al corpus de entrenamiento que tambin
fue solucionado.
Posibles mejoras (Describir posibles disminuciones de cdigo en la
implementacin u otras posibles soluciones)

Conclusiones (Por cada integrante del equipo)

Edwar Monge Rivero: El presente trabajo, me permiti conocer el


funcionamiento de las libreras de LingPipe, asimismo conocer mayores
aspectos relacionados al lenguaje de Java. Adquirir conocimientos sobre
jGRASP con relacin al manejo de libreras. A travs de este trabajo tambin
me di cuenta cun importante es leer minuciosamente cada detalle acerca
de las indicaciones y procedimientos necesarios para lograr el
funcionamiento de una aplicacin.

Anexo (Cdigos fuente *con colores e instrucciones de compilacin)

Instrucciones

Sera necesario contar con el corpus de entrenamiento, previamente


descargado y descomprimido en la razi del directorio C.

Codigo fuente.

import com.aliasi.util.Files;

import com.aliasi.classify.Classification;
import com.aliasi.classify.Classified;
import com.aliasi.classify.DynamicLMClassifier;

import com.aliasi.lm.NGramProcessLM;

import java.io.File;
import java.io.IOException;

public class PolarityBasic {

File mPolarityDir;
String[] mCategories;
DynamicLMClassifier<NGramProcessLM> mClassifier;
PolarityBasic(String[] args) {
System.out.println("\nBASIC POLARITY DEMO");
mPolarityDir = new File(args[0],"txt_sentoken");
System.out.println("\nData Directory=" +
mPolarityDir);
mCategories = mPolarityDir.list();
int nGram = 8;
mClassifier
= DynamicLMClassifier
.createNGramProcess(mCategories,nGram);
}

void run() throws ClassNotFoundException, IOException {


train();
evaluate();
}

boolean isTrainingFile(File file) {


return file.getName().charAt(2) != '9'; // test on
fold 9
}

void train() throws IOException {


int numTrainingCases = 0;
int numTrainingChars = 0;
System.out.println("\nTraining.");
for (int i = 0; i < mCategories.length; ++i) {
String category = mCategories[i];
Classification classification
= new Classification(category);
File file = new
File(mPolarityDir,mCategories[i]);
File[] trainFiles = file.listFiles();
for (int j = 0; j < trainFiles.length; ++j) {
File trainFile = trainFiles[j];
if (isTrainingFile(trainFile)) {
++numTrainingCases;
String review =
Files.readFromFile(trainFile,"ISO-8859-1");
numTrainingChars += review.length();
Classified<CharSequence> classified
= new
Classified<CharSequence>(review,classification);
mClassifier.handle(classified);
}
}
}
System.out.println(" # Training Cases=" +
numTrainingCases);
System.out.println(" # Training Chars=" +
numTrainingChars);
}

void evaluate() throws IOException {


System.out.println("\nEvaluating.");
int numTests = 0;
int numCorrect = 0;
for (int i = 0; i < mCategories.length; ++i) {
String category = mCategories[i];
File file = new
File(mPolarityDir,mCategories[i]);
File[] trainFiles = file.listFiles();
for (int j = 0; j < trainFiles.length; ++j) {
File trainFile = trainFiles[j];
if (!isTrainingFile(trainFile)) {
String review =
Files.readFromFile(trainFile,"ISO-8859-1");
++numTests;
Classification classification
= mClassifier.classify(review);
if
(classification.bestCategory().equals(category))
++numCorrect;
}
}
}
System.out.println(" # Test Cases=" + numTests);
System.out.println(" # Correct=" + numCorrect);
System.out.println(" % Correct="
+ ((double)numCorrect)/
(double)numTests);
}

public static void main(String[] args) {


try {
String ruta="C:\\review_polarity\\";
String[] strruta = new String[] {ruta};
new PolarityBasic(strruta).run();
} catch (Throwable t) {
System.out.println("Thrown: " + t);
t.printStackTrace(System.out);
}
}

Bibliografa (En formato IEEE)


Bibliografa

[1 P. DOSHI, Paras Doshi Blog, Febrero 2013. [En lnea]. Available:


] http://parasdoshi.com/2013/02/22/sentiment-analysis-using-lingpipe-on-
windows-7/.

[2 LingPipe, alias-i, 2011. [En lnea]. Available: http://alias-


] i.com/lingpipe/demos/tutorial/sentiment/read-me.html.

[3 T. A. S. Foundation, The Apache Ant Project, 2014. [En lnea]. Available:


] http://ant.apache.org/.

[4 Infotec, SemanticWebBuilder, 2014. [En lnea]. Available:


] http://www.semanticwebbuilder.org.mx/es_mx/swb/Analisis_de_sentimient
os_en_los_medios_sociales.

[5 C. o. C. a. I. Science, Northeastern University, 2014. [En lnea].


] Available:
http://www.ccs.neu.edu/javalib/SetupGuides/JGrasp/HowToJGrasp.html.

[6 S. Overflow, Stack Overflow, 2014. [En lnea]. Available:


] http://stackoverflow.com/questions/3413586/string-to-string-array-
conversion-in-java.

Вам также может понравиться