Reimporting GIT repository
This commit is contained in:
commit
6fe900b053
44 changed files with 195 additions and 0 deletions
BIN
Léame.odt
Normal file
BIN
Léame.odt
Normal file
Binary file not shown.
1
neg/resena01.txt
Normal file
1
neg/resena01.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La película sufre por el pobre desarrollo de la trama, en particular por su excesivo afán de desasociarse de la serie en que se basa. El resultado es un filme que traiciona a los fanáticos de la saga original, y deja a quienes no conocían la misma con un mal regusto.
|
1
neg/resena02.txt
Normal file
1
neg/resena02.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Aunque la película tiene buenos efectos especiales, la forma en que trataron la trama original y las ridículas actuaciones hace que el filme no pase a más.
|
1
neg/resena03.txt
Normal file
1
neg/resena03.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
A pesar de las buenas intenciones y un protagonista mundialmente amado, la ridícula trama y las pobres actuaciones no salvan a esta película.
|
1
neg/resena04.txt
Normal file
1
neg/resena04.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La trama es poco creíble, y el guión inconsistente como resultado. La dependencia de los efectos especiales hace a la película todavía más artificial.
|
1
neg/resena05.txt
Normal file
1
neg/resena05.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Esta película no pudo haber salido en un peor momento: poco antes de su salida, los dirigentes cuya historia es celebrada en este filme fueron arrestados. Como resultado, esta resulta ser una película hipócrita, y la pobre taquilla parece estar de acuerdo con esta opinión.
|
1
neg/resena06.txt
Normal file
1
neg/resena06.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Esta es una película que no se toma en serio, y está muy al tanto de su baja calidad y su escasa originalidad. Y siendo una sátira de una vasta cantidad de películas de acción, tiene que serlo.
|
1
neg/resena07.txt
Normal file
1
neg/resena07.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La secuela de una película con una premisa risible. Si la encarnación del caos y las bromas de mal gusto era un mal protagonista para la película original, en la secuela su hijo bebé hereda sus poderes, con resultados incluso más desastrosos.
|
1
neg/resena08.txt
Normal file
1
neg/resena08.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una película de clase B que por su abismalmente baja calidad se volvió un clásico de culto.
|
1
neg/resena09.txt
Normal file
1
neg/resena09.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una de esas gemas de culto del cine mexicano de luchadores. La trama es una excusa, la producción es pobre, los actores nada profesionales, la acción evidentemente falsa, pero hay quienes aman esta película precisamente por su sinceridad.
|
1
neg/resena10.txt
Normal file
1
neg/resena10.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Otro clásico de culto, repleto de violencia gratuita, mala producción y actores nada profesionales.
|
1
neg/resena11.txt
Normal file
1
neg/resena11.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La secuela a una película poco creíble, ahora con tintes de conspiración agregados sin razón aparente.
|
1
neg/resena12.txt
Normal file
1
neg/resena12.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La biografía liberalmente embellecida de Mariah Carey, mal recibida por la crítica por su guión autocelebratorio.
|
1
neg/resena13.txt
Normal file
1
neg/resena13.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una horrible película 3D, con una trama compuesta al parecer para promocionar a la mayor cantidad de marcas comerciales posibles, convirtiéndolas en personajes antropomórficos que viven en una dimensión paralela en un supermercado. Los actores de alto presupuesto no logran salvar a la película de su terrible guión.
|
1
neg/resena14.txt
Normal file
1
neg/resena14.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La película no triunfó debido a su tremendo parecido con otra película de Alfred Hitchcock, y al hecho de que no se compara ni cerca con la misma en la trama, a pesar de sus efectos especiales superiores.
|
1
neg/resena15.txt
Normal file
1
neg/resena15.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una película con pésima trama, cuyo éxito recayó totalmente en su protagonista, y fracasó estrepitosamente en ese respecto.
|
1
neg/resena16.txt
Normal file
1
neg/resena16.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Otra de tantas parodias de películas populares, esta vez basada en una saga para adolescentes popularmente odiada. El resultado puede ser peor o mejor que el original, dependiendo de a quién se le pregunte.
|
1
neg/resena17.txt
Normal file
1
neg/resena17.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Esta película trató de crear un deporte ficticio lo más violento y mediático posible, y nadie le compró la idea.
|
1
neg/resena18.txt
Normal file
1
neg/resena18.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una película intencionalmente ofensiva, acerca de una mujer cuyo excesivo sobrepeso es tomado como base para la comedia negra.
|
1
neg/resena19.txt
Normal file
1
neg/resena19.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Otra película con una trama ridícula, en que para luchar contra un tiburón gigante destructor de ciudades, el gobierno construye una copia mecánica con igual o peor potencial de destrucción masiva.
|
1
neg/resena20.txt
Normal file
1
neg/resena20.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una película forzada, basada en una popular colección de juguetes intencionalmente malolientes, y que resulta ser tan desagradable como su fuente original.
|
1
pos/resena01.txt
Normal file
1
pos/resena01.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La película trata sobre la vida de John Nash, un matemático que a pesar de sus problemas mentales logró desarrollar importantes logros en el área de la economía, por las cuales obtuvo el premio Nobel. El guión logra capturar las vicisitudes de Nash, sin ridiculizarlo.
|
1
pos/resena02.txt
Normal file
1
pos/resena02.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una buena película, con un actor flexible en el papel de un robot que se acerca poco a poco a la condición de la humanidad. La trama hace cuestionarse el concepto de ser humano, del amor y de la fidelidad.
|
1
pos/resena03.txt
Normal file
1
pos/resena03.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una saga de películas que ilustra con gran detalle la vida de una familia de miembros de la mafia, detallando la forma en que manejan sus negocios ilícitos y cómo los combinan con sus relaciones de familia.
|
1
pos/resena04.txt
Normal file
1
pos/resena04.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una película que muestra sin tapujos, pero con tacto, el desastre y las consecuencias del holocausto.
|
1
pos/resena05.txt
Normal file
1
pos/resena05.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
El clásico por excelencia del cine de vaqueros, con grandes dosis de acción, intriga, y un trío de personajes principales que deben colaborar entre sí mientras desconfían de las intenciones de cada uno.
|
1
pos/resena06.txt
Normal file
1
pos/resena06.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La épica saga de ciencia-ficción espacial, con una gran cantidad de personajes memorables, acción, intriga, y giros de trama inesperados.
|
1
pos/resena07.txt
Normal file
1
pos/resena07.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
A pesar de su longitud, esta serie de películas ilustra en forma muy fiel los libros en que se basa. Una larga aventura de fantasía, donde una lucha entre el bien y el mal en un mundo con dragones, magos y elfos recae en las manos de un humilde bando de enanos.
|
1
pos/resena08.txt
Normal file
1
pos/resena08.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Pocas películas manejan con tacto a los personajes con problemas mentales. Esta película no solamente logra tener uno como personaje principal y hacerlo un personaje empatizable sin ser forzado, sino que también lo meten en varias situaciones interesantes, algunas hermosas, muchas dolorosas, pero en las cuales siempre sale a relucir su inocencia.
|
1
pos/resena09.txt
Normal file
1
pos/resena09.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La película más notoria de la época en que Hollywood estaba obsesionado con la realidad virtual. La primera de la serie fue aclamada por la crítica, tanto por su concepto como por sus efectos especiales, pero sus secuelas fueron recibidas con mucho menos entusiasmo.
|
1
pos/resena10.txt
Normal file
1
pos/resena10.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La famosa historia de siete guerreros que salvan a una villa de los bandidos que la mantienen en la pobreza, fue eventualmente adaptada de una película de samuráis a una película de vaqueros.
|
1
pos/resena11.txt
Normal file
1
pos/resena11.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Este filme fue particularmente innovador debido a su villano principal, casi un personaje principal, refinado pero despiadado, capaz de despellejar a una persona y luego devorarla con vino fino y música clásica. La relación de amor-odio que desarrollaba en los espectadores fue imitada pero nunca igualada por varios otros filmes.
|
1
pos/resena12.txt
Normal file
1
pos/resena12.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Esta película destaca por su realismo y sinceridad. En ella se expone la violencia de Río de Janeiro desde la perspectiva de sus habitantes, al punto en que sus actores principales son nativos de dicha ciudad sin experiencia previa en actuación.
|
1
pos/resena13.txt
Normal file
1
pos/resena13.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Muchas películas han expuesto los eventos del holocausto, pocas han tratado de visualizarla desde los ojos de los niños. La historia de un niño y sus padres judíos, que tratan en la medida de lo posible de evitar que perciba los horrores a su alrededor.
|
1
pos/resena14.txt
Normal file
1
pos/resena14.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Esta película de la segunda guerra mundial ha sido aclamada por la crítica por el extremo realismo de sus escenas.
|
1
pos/resena15.txt
Normal file
1
pos/resena15.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Esta saga de películas tiene uno de los protagonistas más icónicos e inesperados de su época, un arqueólogo aventurero que viaja por el mundo buscando tesoros y arriesgándose ante el peligro.
|
1
pos/resena16.txt
Normal file
1
pos/resena16.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Nadie esperaba que el cómico Charles Chaplin pudiera hacer una crítica del sistema nazi, pero lo hizo, y nada menos que en su primera película hablada. Como amo de la comedia, por supuesto, la película está basada plenamente en la sátira, y el discurso final que realiza su personaje, a quien habían confundido con el líder de cierto país ficticio que es clara parodia de Alemania, es uno de los más memorables de la historia del cine.
|
1
pos/resena17.txt
Normal file
1
pos/resena17.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Es sorprendente que una película de Disney haya logrado dar un mensaje tan contundente respecto a la cultura del consumismo, pero lo logró. El personaje principal, un robot compactador que se comunica principalmente a través de ruidos, es bastante reminiscente del cine mudo.
|
1
pos/resena18.txt
Normal file
1
pos/resena18.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Una película que hace cuestionarnos el significado de ser humano, con robots humanoides que son perseguidos por ser demasiado humanos.
|
1
pos/resena19.txt
Normal file
1
pos/resena19.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Cuando la gente habla de giros inesperados en las películas, este es uno de los principales ejemplos. Un psicólogo se dedica a tratar a un niño que proclama ver a los muertos, solamente para enterarse de que él mismo había fallecido desde el principio de la película.
|
1
pos/resena20.txt
Normal file
1
pos/resena20.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
La primera película en 3D que caló en la cultura popular. Una gran apuesta técnica para su tiempo, el filme trata sobre la vida secreta de los juguetes cuando los humanos no los están viendo.
|
88
sentiment.py
Normal file
88
sentiment.py
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
'''
|
||||||
|
Dependencies: Python 3, NLTK, Flask. The last two can be installed from Python's PIP.
|
||||||
|
|
||||||
|
Bibliography:
|
||||||
|
[1] Perkins, Jacob. Text Classification for Sentiment Analysis – Naive Bayes Classifier, 2010. Retrieved June 30, 2015 from http://streamhacker.com/2010/05/10/text-classification-sentiment-analysis-naive-bayes-classifier/ .
|
||||||
|
[2] Perkins, Jacob. Python 3 Text Processing with NLTK 3 Cookbook, 2nd edition. Packt Publishing, Birmingham, UK, 2014.
|
||||||
|
[3] NLTK Project nltk.tokenize package, 2015 Retrieved June 30, 2015 from http://www.nltk.org/api/nltk.tokenize.html .
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Assorted imports required below.
|
||||||
|
from nltk.corpus.reader import CategorizedPlaintextCorpusReader as corpusreader
|
||||||
|
from nltk.classify import util, NaiveBayesClassifier
|
||||||
|
from nltk.tokenize import RegexpTokenizer as tokenizer
|
||||||
|
from math import floor
|
||||||
|
from flask import Flask, request, url_for, render_template
|
||||||
|
|
||||||
|
# def sentimentprepare():
|
||||||
|
# The "definition" below runs once when the program starts, and defines the corpus and the classifier.
|
||||||
|
# trainingpercentage = 80 # % - Set at will here.
|
||||||
|
# Files are in the format ./pos/file.txt or ./neg/file.txt
|
||||||
|
# The categorized corpus reader imports the files and assigns them to categories, depending on their original folder.
|
||||||
|
sentimentcorpus = corpusreader('.', r'(pos|neg)/.*\.txt', cat_pattern=r'(pos|neg)')
|
||||||
|
# The list of files corresponding to each category is saved in the variables below.
|
||||||
|
posids = sentimentcorpus.fileids('pos')
|
||||||
|
negids = sentimentcorpus.fileids('neg')
|
||||||
|
# Features are based in a bag-of-words model, the contents of all files of each category are imported into a dictionary each. All items are lower-cased for normalization.
|
||||||
|
posfeatures = [ ( dict( [(word.lower(), True) for word in (sentimentcorpus.words( fileids=[i] )) ] ), 'pos' ) for i in posids]
|
||||||
|
negfeatures = [ ( dict( [(word.lower(), True) for word in (sentimentcorpus.words( fileids=[i] )) ] ), 'neg' ) for i in negids]
|
||||||
|
# This is what the training percentage is for: the first N% of elements are taken for training the classifier, the last 100-N% are taken for testing the accuracy.
|
||||||
|
# trainingfeatures = negfeatures[:floor( len(negfeatures)*trainingpercentage/100 )] + posfeatures[:floor( len(posfeatures)*trainingpercentage/100 )]
|
||||||
|
trainingfeatures = negfeatures + posfeatures
|
||||||
|
# testingfeatures = negfeatures[ floor( len(negfeatures)*trainingpercentage/100):] + posfeatures[ floor( len(posfeatures)*trainingpercentage/100):]
|
||||||
|
# Take the classifier, and train it with the training subset.
|
||||||
|
classifier = NaiveBayesClassifier.train(trainingfeatures)
|
||||||
|
# Take the classifier, and verify it against the testing subset.
|
||||||
|
# accuracy = util.accuracy(classifier, testingfeatures)
|
||||||
|
|
||||||
|
def sentimentverify(input):
|
||||||
|
# The code below allows to convert a plain-text review into the format used by the NLTK corpus reader.
|
||||||
|
tokenizer('\w+|\$[\d\.]+|\S+').tokenize(input.lower())
|
||||||
|
# Create a bag-of-words dictionary for the particular review.
|
||||||
|
wordict = dict( [(word, True) for word in input ] )
|
||||||
|
# This does the heavy lifting of checking if the review is positive or negative.
|
||||||
|
classification = classifier.classify(wordict)
|
||||||
|
# Return the probability of the review of being positive or negative.
|
||||||
|
posprob = classifier.prob_classify(wordict).prob('pos')
|
||||||
|
negprob = classifier.prob_classify(wordict).prob('neg')
|
||||||
|
# Return the formatted scores through the webapp.
|
||||||
|
reviewtext = None
|
||||||
|
reviewscore = None
|
||||||
|
# reviewaccuracy = ( "{0:.2f}%".format(accuracy*100) )
|
||||||
|
if classification == 'pos':
|
||||||
|
reviewtext = "positiva"
|
||||||
|
reviewscore = ( "{0:.2f}%".format(posprob*100) )
|
||||||
|
else:
|
||||||
|
reviewtext = "negativa"
|
||||||
|
reviewscore = ( "{0:.2f}%".format(negprob*100) )
|
||||||
|
# return reviewtext, reviewscore, reviewaccuracy
|
||||||
|
return reviewtext, reviewscore
|
||||||
|
|
||||||
|
# Kickstart the Flask webapp.
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
# The home page will be index.html, so references to root will be redirected there.
|
||||||
|
@app.route('/', methods=['POST', 'GET'])
|
||||||
|
@app.route('/index.html', methods=['POST', 'GET'])
|
||||||
|
def index():
|
||||||
|
# This will add support for a static stylesheet.
|
||||||
|
url_for('static', filename='style.css')
|
||||||
|
# Several required definitions.
|
||||||
|
error = None
|
||||||
|
reviewtext = None
|
||||||
|
reviewscore = None
|
||||||
|
# reviewaccuracy = None
|
||||||
|
# If the user sent data through the form, pass it through the sentiment analysis engine and return the score.
|
||||||
|
if request.method == 'POST':
|
||||||
|
if request.form['text']:
|
||||||
|
# reviewtext, reviewscore, reviewaccuracy = sentimentverify(request.form['text'])
|
||||||
|
reviewtext, reviewscore = sentimentverify(request.form['text'])
|
||||||
|
else:
|
||||||
|
error = 'Se requiere una reseña.'
|
||||||
|
# Render the returned data, replacing the review text in the specified places.
|
||||||
|
# return render_template('/index.html', reviewtext=reviewtext, reviewscore=reviewscore, reviewaccuracy=reviewaccuracy, error=error)
|
||||||
|
return render_template('/index.html', reviewtext=reviewtext, reviewscore=reviewscore, error=error)
|
||||||
|
|
||||||
|
# Run the webapp in localhost (typically http://localhost:5050 )
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(host='0.0.0.0', debug=True)
|
22
static/style.css
Normal file
22
static/style.css
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
body {
|
||||||
|
background-color: #DDDDDD;
|
||||||
|
}
|
||||||
|
header, footer {
|
||||||
|
background-color: #AAAAAA;
|
||||||
|
color: #DDDDDD;
|
||||||
|
text-shadow: 2px 2px #BBBBBB;
|
||||||
|
border-top: 1px solid #BBBBBB;
|
||||||
|
border-bottom: 1px solid #BBBBBB;
|
||||||
|
}
|
||||||
|
header {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
footer {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
.reviewtext, .reviewscore, .reviewaccuracy {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
45
templates/index.html
Normal file
45
templates/index.html
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Sentiment Analysis</title>
|
||||||
|
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" media="screen">
|
||||||
|
<link href="static/style.css" rel="stylesheet" media="screen">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header class="row">
|
||||||
|
<div class="col-xs-12 col-sm-6 col-sm-offset-3">
|
||||||
|
<h1 class="text-center">Sentiment Analysis</h1>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-6 col-sm-offset-3">
|
||||||
|
<p class="request">Inserte su consulta abajo:</p>
|
||||||
|
<form name="results" action="index.html" method="post">
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="input-block-level form-control" name="text" rows="3" placeholder="Inserte su reseña aquí."></textarea>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-large btn-block btn-primary">Enviar</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-6 col-sm-offset-3">
|
||||||
|
{% if error %}
|
||||||
|
<h2>Error:</h2>
|
||||||
|
<p>{{ error }}</p>
|
||||||
|
{% endif %}
|
||||||
|
{% if reviewtext %}
|
||||||
|
<h2>Resultados:</h2>
|
||||||
|
<p class="result">La reseña es <span class="reviewtext">{{reviewtext}}</span> con una probabilidad de <span class="reviewscore">{{reviewscore}}</span></p>
|
||||||
|
<!--<p class="result">La precisión del sistema es de <span class="reviewaccuracy">{{reviewaccuracy}}</span></p>-->
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer class="row">
|
||||||
|
<div class="col-xs-12 col-sm-6 col-sm-offset-3">
|
||||||
|
<p class="small">Basado en NLTK, Flask y Bootstrap.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Add table
Reference in a new issue