Created
June 12, 2015 19:26
-
-
Save sabas1080/05c70174a9ae055a455d to your computer and use it in GitHub Desktop.
Palabras mas frecuentes en busquedas de Twitter por @josech
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/python | |
# -*- coding: utf-8 -*- | |
'''Módulo que permite hacer búsquedas mediante el API de twitter y realiza un análisis de las palabras más frecuentes.''' | |
#Elaborado por José Luis Chiquete y disponible bajo los términso de la licencia MIT | |
from twython import Twython | |
from matplotlib import pyplot as plt | |
import nltk | |
import numpy as np | |
# Credenciales necesarias para el uso de la API de Twitter | |
APP_KEY = "" | |
APP_KEY_SECRET = "" | |
ACCESS_TOKEN = "" | |
ACCESS_SECRET = "" | |
# Lista de palabras que serán descartadas | |
lista_negra = ['', 'http', 'rt', 'con', "t", "co", "y", "a", "el", "la", "los", "las", "de", "gt", "en", "del", "que"] | |
def buscador(termino, maximo): | |
'''Realiza la búsqueda en Twitter de un término específico y captura el texto del número determinado de los tweets más recientes''' | |
t = Twython(app_key=APP_KEY, app_secret=APP_KEY_SECRET, oauth_token=ACCESS_TOKEN, oauth_token_secret=ACCESS_SECRET) | |
busqueda = t.search(q=termino, count=maximo) | |
tweets = busqueda["statuses"] | |
texto = "" | |
for tweet in tweets: | |
texto = texto + tweet["text"].lower() | |
texto = texto.encode("utf-8", "ignore").decode("utf-8", "ignore") | |
return texto | |
def limpiar(texto): | |
'''Realiza la limpieza de signos de puntuación y hace un listado de palabras aprovechando el módulo nltk''' | |
tokenizer = nltk.RegexpTokenizer(r'\w+') | |
limpio = tokenizer.tokenize(texto) | |
return limpio | |
def palabras_frec(lista, cantidad=1, termino=""): | |
"""Identifica las palabras más frecuentes a partir de una lista""" | |
# Filtra las palabras y realiza el conteo de frecuencia | |
palabras = {} | |
for palabra in lista: | |
if palabra not in lista_negra + termino.lower().split(): | |
if palabra not in palabras: | |
palabras[palabra] = 1 | |
else: | |
palabras[palabra] += 1 | |
# Enlista la cantidad especificada de las palabras con mayor frecuencia en orden ascendente | |
if len(palabras) < cantidad: | |
cantidad = len(palabras) | |
pares = [["" for n in range(0, cantidad)], [0 for n in range(0, cantidad)]] | |
for palabra in palabras.iterkeys(): | |
for n in range(0, cantidad): | |
if palabras[palabra] >= pares[1][n]: | |
if n > 0: | |
pares[0][n - 1] = pares[0][n] | |
pares[1][n - 1] = pares[1][n] | |
pares[0][n] = palabra | |
pares[1][n] = palabras[palabra] | |
# Dibuja el gráfico de barras | |
x = np.arange(len(pares[0])) | |
plt.bar(x, pares[1]) | |
plt.xticks(x + 0.5, pares[0], rotation=90) | |
return pares | |
def inicio(num_tweets=100, numero_palabras=30): | |
'''Pide un término de búsqueda y realiza la depuración y el análisis''' | |
termino = raw_input("Ingresa el texto a buscar: ") | |
texto = buscador(termino, num_tweets) | |
datos = limpiar(texto) | |
palabras_frec(datos, numero_palabras, termino) | |
if __name__ == "__main__": | |
inicio() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment