Skip to content

Instantly share code, notes, and snippets.

@sabas1080
Created June 12, 2015 19:26
Show Gist options
  • Save sabas1080/05c70174a9ae055a455d to your computer and use it in GitHub Desktop.
Save sabas1080/05c70174a9ae055a455d to your computer and use it in GitHub Desktop.
Palabras mas frecuentes en busquedas de Twitter por @josech
#! /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