Underc0de

Programación Scripting => Python => Mensaje iniciado por: remiotore en Mayo 15, 2018, 11:12:48 AM

Título: Contador de Palabras
Publicado por: remiotore en Mayo 15, 2018, 11:12:48 AM
El otro día me encontraba en un concierto "político" al que me invitaron. Estando allí vi que la gente se animaba cada vez que decían la palabra X o la palabra Y, y en cada canción las repetían como 2 o 3 veces. Yo ya llegué a pensar "¡Pero si este grupito está haciendo negocio porque les siguen por decir justo lo que quieren escuchar!".
Decidí entonces descargarme todas sus letras, meterlas en un fichero de texto y empezar a filtrar palabra por palabra sus canciones.

El resultado fue bastante curioso. Aquí tienen el código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from collections import defaultdict
import urllib, re, operator
try:
from termcolor import colored
except:
print "Instala TERMCOLOR!\n\tpip install termcolor"

d = defaultdict(int)
aa = []
ae = []
ai = []
ao = []
au = []
aa2 = []
ae2 = []
ai2 = []
ao2 = []
au2 = []

LONGITUD = int(raw_input("Caracteres mínimos de la palabra? "))
MIN = int(raw_input("Minimo repeticiones: "))
MAX = int(raw_input("Maximo repeticiones: "))

BANNED = ("a","ante","bajo","cabe","con","contra","de","desde","en","entre","hacia","hasta","para","por","segun","sin","so","sobre","tras","durante","mediante","excepto","salvo","incluso","mas","menos","cerca","lado","alrededor","antes","arreglo","debajo","dentro","detras","encima","cuanto","enfrente","fuera","gracias","lejos")
REPLACEMENT = {"á":"a","é":"e","í":"i","ó":"o","ú":"u","ñ":"nn",".":"",",":"","?":"","¿":"","!":"","¡":"","(":"",")":"","`":"",":":"",";":"","'":""}

with open("", 'r') as file:
for line in file:
for w in line.split():
w = w.lower()
for key, value in REPLACEMENT.items():
w = w.replace(key, value)
if w not in BANNED:
if len(w) >= LONGITUD:
d[w] += 1

o = sorted(d.items(), key=operator.itemgetter(1))

print colored("Listado por Número de Repeticiones","red")


while(MIN <= MAX):
print "###########################"
for i in o:
if( i[1] == MIN ):
fila = "#\t" + i[0] + " " + str(i[1])
print fila + " " * (20 - len(fila)) + "#"
MIN += 1

for i in o:
word = i[0]
if(word[-1] in ("a","e","i","o","u")):
if(word[-1] == "a"):
aa.append(word)
elif(word[-1] == "e"):
ae.append(word)
elif(word[-1] == "i"):
ai.append(word)
elif(word[-1] == "o"):
ao.append(word)
elif(word[-1] == "u"):
au.append(word)
else:
if(word[-2] in ("a","e","i","o","u")):
if(word[-2] == "a"):
aa2.append(word)
elif(word[-2] == "e"):
ae2.append(word)
elif(word[-2] == "i"):
ai2.append(word)
elif(word[-2] == "o"):
ao2.append(word)
elif(word[-2] == "u"):
au2.append(word)


print colored("#" + "A" + "#","green")

print colored("\tPrincipales  con A","red")
for i in sorted(aa):
print i,
print ""
print colored("\tRimadas con  A","red")
for i in sorted(aa2):
print i,
print ""


print colored("#" + "E" + "#","green")

print colored("\tPrincipales  con E","red")
for i in sorted(ae):
print i,
print ""
print colored("\tRimadas con  E","red")
for i in sorted(ae2):
print i,
print ""


print colored("#" + "I" + "#","green")

print colored("\tPrincipales  con I","red")
for i in sorted(ai):
print i,
print ""
print colored("\tRimadas con  I","red")
for i in sorted(ai2):
print i,
print ""


print colored("#" + "O" + "#","green")

print colored("\tPrincipales  con O","red")
for i in sorted(ao):
print i,
print ""
print colored("\tRimadas con  O","red")
for i in sorted(ao2):
print i,
print ""


print colored("#" + "U" + "#","green")

print colored("\tPrincipales  con U","red")
for i in sorted(au):
print i,
print ""
print colored("\tRimadas con  U","red")
for i in sorted(au2):
print i,
print ""


Como podéis ver, eliminamos todas las preposiciones, tildes y otros signos como puntos y comas.
Tras eso, el programa comienza a buscar las palabras que tienen una longitud mayor o igual a la que hemos introducido.
Luego muestra las palabras ordenadas según el número de repeticiones entre el mínimo y el máximo que especificamos.
Más tarde muestra las filtra por la vocal y muestra las que terminan en una determinada vocal o las que riman con esa vocal.
(https://image.ibb.co/eSOwad/1.png)
(https://preview.ibb.co/kmz8oy/2.png)

¿Qué podemos hacer con esto? ¡NUESTRO PROPIO GRUPO DE RAP O DE LO QUE SEAAA! ¡WUUUUHHH!  ;D

Título: Re:Contador de Palabras
Publicado por: sadfud en Mayo 15, 2018, 06:05:45 PM
Buenas

El experimento es curioso, igualmente para el ejemplo comparar sons of aguirre con division 250 no creo que sea lo mas correcto, como me imagino sabras (y mencionas) el primero es un grupo de coña. Podrias haber cogido directamente temas de  hasel o valtonyc entre otros desechos sociales que estan mas en la linea de division 250 en cuanto a barbaridades por minuto.

Título: Re:Contador de Palabras
Publicado por: remiotore en Mayo 18, 2018, 05:44:00 AM
Ya sé que no son comparables pero era por comentar grupos más o menos conocidos para aquellas personas que tienen cierto interés en política jeje Aunque al decir esto no digo que no sean conocidos Hasel y demás, simplemente no me vinieron a la cabeza a la hora de realizar la prueba.
De todas formas, todo esto me pareció algo curioso xD
Desde mi punto de vista, donde esté un libro clásico de política que se quiten todos estos vendedores de humo, o mejor vendedores de ideas ;D